From 6cf8ca167879fc16c02595f8092cf7837d961213 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Thu, 2 Apr 2026 21:05:19 +0200 Subject: [PATCH 001/477] make pastel transfers extensible --- .../de/dafuqs/spectrum/SpectrumCommon.java | 2 + .../dafuqs/spectrum/api/energy/InkAmount.java | 22 ++++ .../dafuqs/spectrum/api/energy/InkCost.java | 22 ---- .../spectrum/api/energy/InkPowered.java | 16 +-- .../InkPoweredStatusEffectInstance.java | 14 +- .../api/item/InkPoweredPotionFillable.java | 8 +- .../enchanter/EnchanterBlockEntity.java | 4 +- .../pastel_network/network/PastelPayload.java | 124 ++++++++++++++++++ .../network/PastelTransmission.java | 40 ++---- .../network/PastelTransmissionLogic.java | 11 +- .../network/ServerPastelNetwork.java | 6 +- .../network/ServerPastelNetworkManager.java | 24 ++-- .../modonomicon/pages/BookHintPage.java | 4 +- .../spectrum/items/ConcealingOilsItem.java | 3 +- .../magic_items/CelestialPocketWatchItem.java | 3 +- .../items/magic_items/NaturesStaffItem.java | 2 +- .../items/magic_items/RadianceStaffItem.java | 2 +- .../magic_items/StaffOfRemembranceItem.java | 6 +- .../spectrum/items/tools/DreamflayerItem.java | 2 +- .../items/tools/FerociousBidentItem.java | 2 +- .../items/tools/FractalBidentItem.java | 2 +- .../items/tools/GlassCrestCrossbowItem.java | 2 +- .../items/tools/GlassCrestGreatswordItem.java | 2 +- .../items/tools/GlassCrestWorkstaffItem.java | 2 +- .../items/tools/NightfallsBladeItem.java | 8 +- .../items/tools/OmniAcceleratorItem.java | 2 +- .../spectrum/items/tools/WorkstaffItem.java | 4 +- .../items/trinkets/GlowVisionGogglesItem.java | 5 +- .../FillPotionFillableLootFunction.java | 2 +- .../PastelTransmissionPayload.java | 9 +- .../particle/SpectrumParticleFactories.java | 2 +- .../client/PastelTransmissionParticle.java | 12 +- .../PastelTransmissionParticleEffect.java | 13 +- .../potion_workshop/PotionRecipeEffect.java | 2 +- .../registries/SpectrumRegistries.java | 3 + .../registries/SpectrumRegistryKeys.java | 4 + 36 files changed, 251 insertions(+), 140 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/api/energy/InkAmount.java delete mode 100644 src/main/java/de/dafuqs/spectrum/api/energy/InkCost.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelPayload.java diff --git a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java index 8b5b95a09e..891f4ca87f 100644 --- a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java +++ b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java @@ -4,6 +4,7 @@ import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.attachment_types.*; import de.dafuqs.spectrum.blocks.pastel_network.*; +import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.capabilities.*; import de.dafuqs.spectrum.compat.*; import de.dafuqs.spectrum.config.*; @@ -121,6 +122,7 @@ public SpectrumCommon(ModContainer container, IEventBus modBus) { SpectrumItemGroups.register(modBus); logInfo("Registering Block Entities..."); SpectrumBlockEntities.register(modBus); + PastelPayload.register(modBus); modBus.addListener(SpectrumBlockEntities::addBlockEntityTypeBlocks); SpectrumPastelUpgradeSignatures.register(modBus); diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/InkAmount.java b/src/main/java/de/dafuqs/spectrum/api/energy/InkAmount.java new file mode 100644 index 0000000000..0561d627ca --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/api/energy/InkAmount.java @@ -0,0 +1,22 @@ +package de.dafuqs.spectrum.api.energy; + +import com.mojang.serialization.*; +import com.mojang.serialization.codecs.*; +import de.dafuqs.spectrum.api.energy.color.*; +import io.netty.buffer.*; +import net.minecraft.network.codec.*; + +public record InkAmount(InkColor color, long amount) { + + public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group( + InkColor.CODEC.fieldOf("color").forGetter(InkAmount::color), + Codec.LONG.fieldOf("amount").forGetter(InkAmount::amount) + ).apply(i, InkAmount::new)); + + public static final StreamCodec PACKET_CODEC = StreamCodec.composite( + InkColor.PACKET_CODEC, InkAmount::color, + ByteBufCodecs.VAR_LONG, InkAmount::amount, + InkAmount::new + ); + +} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/InkCost.java b/src/main/java/de/dafuqs/spectrum/api/energy/InkCost.java deleted file mode 100644 index b0a6ea2cf7..0000000000 --- a/src/main/java/de/dafuqs/spectrum/api/energy/InkCost.java +++ /dev/null @@ -1,22 +0,0 @@ -package de.dafuqs.spectrum.api.energy; - -import com.mojang.serialization.*; -import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.color.*; -import io.netty.buffer.*; -import net.minecraft.network.codec.*; - -public record InkCost(InkColor color, long cost) { - - public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group( - InkColor.CODEC.fieldOf("color").forGetter(InkCost::color), - Codec.LONG.fieldOf("cost").forGetter(InkCost::cost) - ).apply(i, InkCost::new)); - - public static final StreamCodec PACKET_CODEC = StreamCodec.composite( - InkColor.PACKET_CODEC, InkCost::color, - ByteBufCodecs.VAR_LONG, InkCost::cost, - InkCost::new - ); - -} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/InkPowered.java b/src/main/java/de/dafuqs/spectrum/api/energy/InkPowered.java index fbfe0c69ad..894ba09d9c 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/InkPowered.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/InkPowered.java @@ -114,12 +114,12 @@ static boolean tryDrainEnergy(@NotNull Container inventory, InkColor color, long return false; } - static boolean tryDrainEnergy(@NotNull Player player, @NotNull InkCost inkCost) { - return tryDrainEnergy(player, inkCost.color(), inkCost.cost()); + static boolean tryDrainEnergy(@NotNull Player player, @NotNull InkAmount inkAmount) { + return tryDrainEnergy(player, inkAmount.color(), inkAmount.amount()); } - static boolean tryDrainEnergy(@NotNull Player player, @NotNull InkCost inkCost, float costModifier) { - return tryDrainEnergy(player, inkCost.color(), Support.getIntFromDecimalWithChance(inkCost.cost() * costModifier, player.getRandom())); + static boolean tryDrainEnergy(@NotNull Player player, @NotNull InkAmount inkAmount, float costModifier) { + return tryDrainEnergy(player, inkAmount.color(), Support.getIntFromDecimalWithChance(inkAmount.amount() * costModifier, player.getRandom())); } /** @@ -176,8 +176,8 @@ static boolean tryDrainEnergy(@NotNull Player player, @NotNull InkColor color, l return false; } - static boolean hasAvailableInk(Player player, InkCost inkCost) { - return hasAvailableInk(player, inkCost.color(), inkCost.cost()); + static boolean hasAvailableInk(Player player, InkAmount inkAmount) { + return hasAvailableInk(player, inkAmount.color(), inkAmount.amount()); } static boolean hasAvailableInk(Player player, InkColor color, long amount) { @@ -258,10 +258,10 @@ static long getAvailableInk(@NotNull Player player, InkColor color) { return available; } - default boolean payForUse(Player player, ItemStack stack, @NotNull InkCost inkCost, @Nullable Ingredient itemCost) { + default boolean payForUse(Player player, ItemStack stack, @NotNull InkAmount inkAmount, @Nullable Ingredient itemCost) { boolean paid = player.isCreative(); // free for creative players if (!paid) { // try pay with ink - paid = InkPowered.tryDrainEnergy(player, inkCost, getInkCostMod(player.level().registryAccess(), stack)); + paid = InkPowered.tryDrainEnergy(player, inkAmount, getInkCostMod(player.level().registryAccess(), stack)); } if (!paid && itemCost != null && player.getInventory().contains(itemCost)) { // try pay with item int efficiencyLevel = SpectrumEnchantmentHelper.getLevel(player.level().registryAccess(), Enchantments.EFFICIENCY, stack); diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/InkPoweredStatusEffectInstance.java b/src/main/java/de/dafuqs/spectrum/api/energy/InkPoweredStatusEffectInstance.java index 6174bb8602..55bfa94a53 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/InkPoweredStatusEffectInstance.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/InkPoweredStatusEffectInstance.java @@ -23,25 +23,25 @@ public class InkPoweredStatusEffectInstance { public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group( MobEffectInstance.CODEC.fieldOf("effect").forGetter(c -> c.statusEffectInstance), - InkCost.CODEC.fieldOf("ink_cost").forGetter(c -> c.cost), + InkAmount.CODEC.fieldOf("ink_cost").forGetter(c -> c.cost), Codec.INT.optionalFieldOf("custom_color", -1).forGetter(c -> c.customColor), Codec.BOOL.optionalFieldOf("unidentifiable", false).forGetter(c -> c.unidentifiable) ).apply(i, InkPoweredStatusEffectInstance::new)); public static final StreamCodec PACKET_CODEC = StreamCodec.composite( MobEffectInstance.STREAM_CODEC, c -> c.statusEffectInstance, - InkCost.PACKET_CODEC, c -> c.cost, + InkAmount.PACKET_CODEC, c -> c.cost, ByteBufCodecs.VAR_INT, c -> c.customColor, ByteBufCodecs.BOOL, c -> c.unidentifiable, InkPoweredStatusEffectInstance::new ); private final MobEffectInstance statusEffectInstance; - private final InkCost cost; + private final InkAmount cost; private final int customColor; // -1: use effect default private final boolean unidentifiable; - public InkPoweredStatusEffectInstance(MobEffectInstance statusEffectInstance, InkCost cost, int customColor, boolean unidentifiable) { + public InkPoweredStatusEffectInstance(MobEffectInstance statusEffectInstance, InkAmount cost, int customColor, boolean unidentifiable) { this.statusEffectInstance = statusEffectInstance; this.cost = cost; this.customColor = customColor; @@ -52,7 +52,7 @@ public MobEffectInstance getStatusEffectInstance() { return statusEffectInstance; } - public InkCost getInkCost() { + public InkAmount getInkCost() { return cost; } @@ -78,7 +78,7 @@ public static void buildTooltip(List tooltip, List 0) { @@ -88,7 +88,7 @@ public static void buildTooltip(List tooltip, List diff --git a/src/main/java/de/dafuqs/spectrum/api/item/InkPoweredPotionFillable.java b/src/main/java/de/dafuqs/spectrum/api/item/InkPoweredPotionFillable.java index 1010bdd3fc..bd0da8a8a5 100644 --- a/src/main/java/de/dafuqs/spectrum/api/item/InkPoweredPotionFillable.java +++ b/src/main/java/de/dafuqs/spectrum/api/item/InkPoweredPotionFillable.java @@ -13,11 +13,11 @@ public interface InkPoweredPotionFillable { int maxEffectCount(); int maxEffectAmplifier(); - // used for calculating the items cost to apply a certain effect + // used for calculating the items amount to apply a certain effect // calculated once and then stored in the items nbt for quick lookup and nicer modifiability // via commands or special loot (so ones found in dungeon chests can be cheaper!) default long adjustFinalCostFor(@NotNull InkPoweredStatusEffectInstance instance) { - return (long) Math.pow(instance.getInkCost().cost(), 1 + instance.getStatusEffectInstance().getAmplifier()); + return (long) Math.pow(instance.getInkCost().amount(), 1 + instance.getStatusEffectInstance().getAmplifier()); } // saving @@ -36,8 +36,8 @@ default void addOrUpgradeEffects(ItemStack potionFillableStack, List CODEC = SpectrumRegistries.PASTEL_PAYLOAD_TYPE.byNameCodec().dispatch(PastelPayload::codec, codec -> codec); + StreamCodec STREAM_CODEC = ByteBufCodecs.fromCodecWithRegistries(CODEC); + + DeferredRegister> REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, SpectrumCommon.MOD_ID); + + static void register(IEventBus modBus) { + REGISTRAR.register("item", () -> ItemPastelPayload.CODEC); + + REGISTRAR.register(modBus); + } + + MapCodec codec(); + StreamCodec streamCodec(); + + /** + * + * @param level the level + * @param destination the position of the node to arrive at + * @param destinationNode the pastel node. Can be null if it was broken while the transmission was underway + */ + void arriveAtDestination(Level level, BlockPos destination, PastelNodeBlockEntity destinationNode); + + void render(PastelTransmissionParticle pastelTransmissionParticle, Level level, PoseStack poseStack, MultiBufferSource vertexConsumers, int light); + + // void spawnTravelParticles(Level level); // TODO + + class ItemPastelPayload implements PastelPayload { + + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( + ItemStack.CODEC.fieldOf("stack").forGetter(ItemPastelPayload::getItemStack) + ).apply(i, ItemPastelPayload::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ItemStack.STREAM_CODEC, ItemPastelPayload::getItemStack, + ItemPastelPayload::new + ); + + private final ItemStack itemStack; + + public ItemPastelPayload(ItemStack itemStack) { + this.itemStack = itemStack; + } + + public ItemStack getItemStack() { + return itemStack; + } + + public void arriveAtDestination(Level level, BlockPos destination, @Nullable PastelNodeBlockEntity destinationNode) { + int inserted = 0; + int count = itemStack.getCount(); + if (destinationNode != null) { + IItemHandler destinationStorage = destinationNode.getConnectedStorage(); + if (destinationStorage != null) { + inserted = count; + inserted -= ItemHandlerHelper.insertItemStacked(destinationStorage, itemStack.copyWithCount(count), false).getCount(); + destinationNode.addItemCountUnderway(-count); + } + } + + int amount = itemStack.getCount(); + if (inserted != amount) { + long diff = amount - inserted; + InWorldInteractionHelper.scatter(level, destination.getX() + 0.5, destination.getY() + 0.5, destination.getZ() + 0.5, itemStack, diff); + if (destinationNode != null) { + destinationNode.addItemCountUnderway(-diff); + } + } + } + + public void render(PastelTransmissionParticle particle, Level level, PoseStack poseStack, final MultiBufferSource vertexConsumers, int light) { + particle.itemRenderer.renderStatic(this.itemStack, ItemDisplayContext.GROUND, light, OverlayTexture.NO_OVERLAY, poseStack, vertexConsumers, level, 0); + } + + public MapCodec codec() { + return CODEC; + } + + public StreamCodec streamCodec() { + return STREAM_CODEC; + } + } + + /*class FluidPastelPayload implements PastelPayload { + private FluidStack fluidStack; + public FluidPastelPayload(FluidStack fluidStack) { + this.fluidStack = fluidStack; + } + } + + class InkPastelPayload implements PastelPayload { + private InkAmount inkAmount; + public InkPastelPayload(InkAmount inkAmount) { + this.inkAmount = inkAmount; + } + }*/ + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmission.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmission.java index f6141f67c0..cd7c5a5897 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmission.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmission.java @@ -8,9 +8,7 @@ import net.minecraft.network.*; import net.minecraft.network.codec.*; import net.minecraft.server.level.*; -import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import net.neoforged.neoforge.items.*; import org.jetbrains.annotations.*; import java.util.*; @@ -19,25 +17,25 @@ public class PastelTransmission implements SchedulerMap.Callback { public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group( BlockPos.CODEC.listOf().fieldOf("node_positions").forGetter(PastelTransmission::getNodePositions), - ItemStack.CODEC.fieldOf("stack").forGetter(PastelTransmission::getVariant), + PastelPayload.CODEC.fieldOf("payload").forGetter(PastelTransmission::getPayload), Codec.INT.fieldOf("vertex_time").forGetter(PastelTransmission::getVertexTime) ).apply(i, PastelTransmission::new)); - public static final StreamCodec PACKET_CODEC = StreamCodec.composite( + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( BlockPos.STREAM_CODEC.apply(ByteBufCodecs.list()), PastelTransmission::getNodePositions, - ItemStack.STREAM_CODEC, PastelTransmission::getVariant, + PastelPayload.STREAM_CODEC, PastelTransmission::getPayload, ByteBufCodecs.VAR_INT, PastelTransmission::getVertexTime, PastelTransmission::new ); private @Nullable ServerPastelNetwork network; private final List nodePositions; - private final ItemStack stack; + private final PastelPayload payload; private final int vertexTime; - public PastelTransmission(List nodePositions, ItemStack stack, int vertexTime) { + public PastelTransmission(List nodePositions, PastelPayload payload, int vertexTime) { this.nodePositions = nodePositions; - this.stack = stack; + this.payload = payload; this.vertexTime = vertexTime; } @@ -61,8 +59,8 @@ public int getTransmissionDuration() { return vertexTime * (nodePositions.size() - 1); } - public ItemStack getVariant() { - return this.stack; + public PastelPayload getPayload() { + return this.payload; } public BlockPos getStartPos() { @@ -81,27 +79,9 @@ private void arriveAtDestination() { @NotNull BlockPos destinationPos = nodePositions.get(nodePositions.size() - 1); @Nullable PastelNodeBlockEntity destinationNode = this.network.getLoadedNodeAt(destinationPos); - Level world = this.network.getLevel(); + Level level = this.network.getLevel(); - int inserted = 0; - int count = stack.getCount(); - if (destinationNode != null) { - IItemHandler destinationStorage = destinationNode.getConnectedStorage(); - if (destinationStorage != null) { - inserted = count; - inserted -= ItemHandlerHelper.insertItemStacked(destinationStorage, stack.copyWithCount(count), false).getCount(); - destinationNode.addItemCountUnderway(-count); - } - } - - int amount = stack.getCount(); - if (inserted != amount) { - long diff = amount - inserted; - InWorldInteractionHelper.scatter(world, destinationPos.getX() + 0.5, destinationPos.getY() + 0.5, destinationPos.getZ() + 0.5, stack, diff); - if (destinationNode != null) { - destinationNode.addItemCountUnderway(-diff); - } - } + payload.arriveAtDestination(level, destinationPos, destinationNode); } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index e496d56d20..83c42c3729 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -1,5 +1,7 @@ package de.dafuqs.spectrum.blocks.pastel_network.network; +import com.mojang.serialization.*; +import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; @@ -135,6 +137,7 @@ private boolean transferBetween(PastelNodeBlockEntity sourceNode, IItemHandler s proposals.put(stack, proposals.getOrDefault(stack, 0L) + stack.getCount()); } + // TODO: this is jank. Improve for (ItemStack stack : proposals.keySet()) { long proposedAmount = Math.min(Math.min(proposals.get(stack), sourceNode.getMaxTransferredAmount()), totalAvailableStorage); if (proposedAmount == 0) @@ -147,7 +150,7 @@ private boolean transferBetween(PastelNodeBlockEntity sourceNode, IItemHandler s if (matchingStacks.getA() == 0) continue; - Optional transmission = createTransmissionOnValidPath(sourceNode, destinationNode, proposedStack.copyWithCount(simulatedAmount), sourceNode.getTransferTime()); + Optional transmission = createTransmissionOnValidPath(sourceNode, destinationNode, new PastelPayload.ItemPastelPayload(proposedStack.copyWithCount(simulatedAmount)), sourceNode.getTransferTime()); if (transmission.isPresent()) { int toRemove = simulatedAmount; while (toRemove > 0) { @@ -158,7 +161,7 @@ private boolean transferBetween(PastelNodeBlockEntity sourceNode, IItemHandler s } } - Optional optionalTransmission = createTransmissionOnValidPath(sourceNode, destinationNode, proposedStack.copyWithCount(simulatedAmount), sourceNode.getTransferTime()); + Optional optionalTransmission = createTransmissionOnValidPath(sourceNode, destinationNode, new PastelPayload.ItemPastelPayload(proposedStack.copyWithCount(simulatedAmount)), sourceNode.getTransferTime()); if (optionalTransmission.isPresent()) { PastelTransmission trans = optionalTransmission.get(); int travelTime = trans.getTransmissionDuration(); @@ -176,11 +179,11 @@ private boolean transferBetween(PastelNodeBlockEntity sourceNode, IItemHandler s return false; } - public Optional createTransmissionOnValidPath(PastelNodeBlockEntity source, PastelNodeBlockEntity destination, ItemStack stack, int vertexTime) { + public Optional createTransmissionOnValidPath(PastelNodeBlockEntity source, PastelNodeBlockEntity destination, PastelPayload payload, int vertexTime) { GraphPath graphPath = getPath(this.network.getGraph(), source, destination); if (graphPath != null) { PastelNodeStatusUpdatePayload.sendPastelNodeStatusUpdate(List.of(source), true); - return Optional.of(new PastelTransmission(graphPath.getVertexList(), stack, vertexTime)); + return Optional.of(new PastelTransmission(graphPath.getVertexList(), payload, vertexTime)); } return Optional.empty(); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java index 565aa70c02..2770298c58 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java @@ -385,9 +385,9 @@ private void tickNodeEffects() { for (Map.Entry transPair : transmissions) { - var transmission = transPair.getKey(); - var remainingTravelTime = transPair.getValue(); - var nodes = transmission.getNodePositions(); + PastelTransmission transmission = transPair.getKey(); + int remainingTravelTime = transPair.getValue(); + List nodes = transmission.getNodePositions(); if (nodes.isEmpty()) continue; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java index eadbd24363..5ec34fa4b1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java @@ -60,7 +60,7 @@ public CompoundTag save(CompoundTag nbt, HolderLookup.Provider registryLookup) { if (opt.isPresent()) { var wrapper = new CompoundTag(); wrapper.put("network", opt.get()); - wrapper.put("scheduler", transgender(network.getTransmissions())); + wrapper.put("scheduler", toTag(network.getTransmissions())); wrapper.put("graph", network.graphToNbt()); networkList.add(wrapper); } @@ -79,7 +79,7 @@ public static ServerPastelNetworkManager fromNbt(CompoundTag nbt) { Optional network = CodecHelper.fromNbt(ServerPastelNetwork.CODEC, netNbt); if (network.isPresent()) { - network.get().getTransmissions().putAll(transDecode(schedulerNbt, network.get())); + network.get().getTransmissions().putAll(fromTag(schedulerNbt, network.get())); network.get().setGraph(ServerPastelNetwork.graphFromNbt(graphNbt)); manager.networks.add(network.get()); } @@ -87,9 +87,9 @@ public static ServerPastelNetworkManager fromNbt(CompoundTag nbt) { return manager; } - private static @NotNull HashMap transDecode(CompoundTag schedulerNbt, ServerPastelNetwork network) { - var transmissions = schedulerNbt.getList("transmissions", Tag.TAG_COMPOUND); - var timers = schedulerNbt.getIntArray("timers"); + private static @NotNull HashMap fromTag(CompoundTag tag, ServerPastelNetwork network) { + var transmissions = tag.getList("transmissions", Tag.TAG_COMPOUND); + var timers = tag.getIntArray("timers"); var map = new HashMap(); for (int i = 0; i < transmissions.size(); i++) { @@ -117,19 +117,19 @@ public void tick() { } } - private static CompoundTag transgender(Map trans) { + private static CompoundTag toTag(Map transmissions) { var transNbt = new CompoundTag(); - var transmissions = new ListTag(); - var timers = new int[trans.size()]; - for (Map.Entry transmissionEntry : trans.entrySet()) { + var list = new ListTag(); + var timers = new int[transmissions.size()]; + for (Map.Entry transmissionEntry : transmissions.entrySet()) { var result = PastelTransmission.CODEC.encodeStart(NbtOps.INSTANCE, transmissionEntry.getKey()).result(); if (result.isPresent()) { - transmissions.add(result.get()); - timers[transmissions.size() - 1] = transmissionEntry.getValue(); + list.add(result.get()); + timers[list.size() - 1] = transmissionEntry.getValue(); } } - transNbt.put("transmissions", transmissions); + transNbt.put("transmissions", list); transNbt.putIntArray("timers", timers); return transNbt; } diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/pages/BookHintPage.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/pages/BookHintPage.java index 062ba8a7ab..676f85bff1 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/pages/BookHintPage.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/pages/BookHintPage.java @@ -35,8 +35,8 @@ public static BookHintPage fromJson(ResourceLocation entryId, JsonObject json, H : new BookNoneCondition(); var completionAdvancement = ResourceLocation.tryParse(GsonHelper.getAsString(json, "completion_advancement")); IngredientStack cost = IngredientStack.EMPTY; - if (json.has("cost")) { - var ingredient = GsonHelper.getAsJsonObject(json, "cost"); + if (json.has("amount")) { + var ingredient = GsonHelper.getAsJsonObject(json, "amount"); cost = IngredientStack.CODEC.parse(provider.createSerializationContext(JsonOps.INSTANCE), ingredient).result().orElse(cost); } return new BookHintPage(title, text, useMarkdownInTitle, showTitleSeparator, anchor, condition, completionAdvancement, cost); diff --git a/src/main/java/de/dafuqs/spectrum/items/ConcealingOilsItem.java b/src/main/java/de/dafuqs/spectrum/items/ConcealingOilsItem.java index cd29fad234..4d9cacb815 100644 --- a/src/main/java/de/dafuqs/spectrum/items/ConcealingOilsItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ConcealingOilsItem.java @@ -14,7 +14,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.alchemy.*; import net.minecraft.world.item.component.*; -import org.spongepowered.asm.mixin.*; import java.util.*; import java.util.function.*; @@ -60,7 +59,7 @@ public boolean overrideStackedOnOther(ItemStack oilsStack, Slot slot, ClickActio } InkPoweredStatusEffectInstance effect = InkPoweredPotionFillable.getEffects(oilsStack).getFirst(); - if (InkPowered.tryDrainEnergy(player, effect.getInkCost().color(), effect.getInkCost().cost())) { + if (InkPowered.tryDrainEnergy(player, effect.getInkCost().color(), effect.getInkCost().amount())) { stackToApplyTo.set(SpectrumDataComponentTypes.CONCEALED_EFFECT, effect.getStatusEffectInstance()); stackToApplyTo.set(SpectrumDataComponentTypes.CONCEALED_EFFECT_PROFILE, new ResolvableProfile(player.getGameProfile())); diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/CelestialPocketWatchItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/CelestialPocketWatchItem.java index 18e095433c..572dacc8cb 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/CelestialPocketWatchItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/CelestialPocketWatchItem.java @@ -5,7 +5,6 @@ import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; -import net.minecraft.client.*; import net.minecraft.network.chat.*; import net.minecraft.server.level.*; import net.minecraft.sounds.*; @@ -22,7 +21,7 @@ public class CelestialPocketWatchItem extends Item implements InkPowered { // Since the watch can be triggered from an item frame, too // and item frames can turn items in 8 directions this fits real fine public static final int TIME_STEP_TICKS = 24000 / 8; - public static final InkCost COST = new InkCost(InkColors.MAGENTA, 1000); + public static final InkAmount COST = new InkAmount(InkColors.MAGENTA, 1000); enum TimeToggleResult { SUCCESS, diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/NaturesStaffItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/NaturesStaffItem.java index 3cb09bff01..a710918ae4 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/NaturesStaffItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/NaturesStaffItem.java @@ -35,7 +35,7 @@ public class NaturesStaffItem extends Item implements InkPowered { public static final Ingredient ITEM_COST = Ingredient.of(SpectrumItemTags.NATURES_STAFF_CONSUMABLE); - public static final InkCost INK_COST = new InkCost(InkColors.LIME, 20); + public static final InkAmount INK_COST = new InkAmount(InkColors.LIME, 20); public NaturesStaffItem(Properties settings) { super(settings); diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/RadianceStaffItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/RadianceStaffItem.java index 6b182816ee..3a525c2055 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/RadianceStaffItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/RadianceStaffItem.java @@ -38,7 +38,7 @@ public class RadianceStaffItem extends Item implements InkPowered { public static final int PLACEMENT_TRIES_PER_STEP = 4; public static final int MIN_LIGHT_LEVEL = 10; - public static final InkCost INK_COST = new InkCost(InkColors.YELLOW, 10); + public static final InkAmount INK_COST = new InkAmount(InkColors.YELLOW, 10); public static final Ingredient COST = Ingredient.of(SpectrumItemTags.RADIANCE_STAFF_CONSUMABLE); public RadianceStaffItem(Properties settings) { diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/StaffOfRemembranceItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/StaffOfRemembranceItem.java index 80463f661b..f628927de9 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/StaffOfRemembranceItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/StaffOfRemembranceItem.java @@ -26,9 +26,9 @@ public class StaffOfRemembranceItem extends Item implements InkPowered, PrioritizedEntityInteraction { public static final InkColor USED_COLOR = InkColors.LIGHT_GRAY; - public static final InkCost TURN_NEUTRAL_TO_MEMORY_COST = new InkCost(USED_COLOR, 1000); - public static final InkCost TURN_HOSTILE_TO_MEMORY_COST = new InkCost(USED_COLOR, 5000); - public static final InkCost CREATE_PLAYER_MEMORY_COST = new InkCost(USED_COLOR, 5000); + public static final InkAmount TURN_NEUTRAL_TO_MEMORY_COST = new InkAmount(USED_COLOR, 1000); + public static final InkAmount TURN_HOSTILE_TO_MEMORY_COST = new InkAmount(USED_COLOR, 5000); + public static final InkAmount CREATE_PLAYER_MEMORY_COST = new InkAmount(USED_COLOR, 5000); public StaffOfRemembranceItem(Properties settings) { super(settings); diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/DreamflayerItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/DreamflayerItem.java index 07c78c016b..b6fb80a16a 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/DreamflayerItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/DreamflayerItem.java @@ -178,7 +178,7 @@ public SlotEffect backgroundType(@Nullable Player player, ItemStack stack) { if (ActivatableItem.isActivated(stack)) return SlotEffect.FULL_PACKAGE; - var usable = InkPowered.hasAvailableInk(player, new InkCost(InkColors.RED, INK_COST_FOR_ACTIVATION)); + var usable = InkPowered.hasAvailableInk(player, new InkAmount(InkColors.RED, INK_COST_FOR_ACTIVATION)); return usable ? SlotEffect.BORDER_FADE : SlotEffect.NONE; } diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/FerociousBidentItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/FerociousBidentItem.java index 320f81ced4..aecd21458c 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/FerociousBidentItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/FerociousBidentItem.java @@ -21,7 +21,7 @@ // riptide w/o weather requirement; damages enemies on touch; iframes? public class FerociousBidentItem extends MalachiteBidentItem implements SlotBackgroundEffectProvider, InkPowered, ActivatableItem { - public static final InkCost RIPTIDE_COST = new InkCost(InkColors.WHITE, 10); + public static final InkAmount RIPTIDE_COST = new InkAmount(InkColors.WHITE, 10); public static final int BUILTIN_RIPTIDE_LEVEL = 1; public FerociousBidentItem(Item.Properties settings, double attackSpeed, double damage, float armorPierce, float protPierce) { diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/FractalBidentItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/FractalBidentItem.java index e0967264fe..a684f13bea 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/FractalBidentItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/FractalBidentItem.java @@ -19,7 +19,7 @@ // gets thrown as copy instead of getting removed from the player's inv public class FractalBidentItem extends MalachiteBidentItem implements SlotBackgroundEffectProvider, InkPowered, ActivatableItem { - public static final InkCost MIRROR_IMAGE_COST = new InkCost(InkColors.WHITE, 25); + public static final InkAmount MIRROR_IMAGE_COST = new InkAmount(InkColors.WHITE, 25); public FractalBidentItem(Item.Properties settings, double attackSpeed, double damage, float armorPierce, float protPierce) { super(settings, attackSpeed, damage, armorPierce, protPierce, true); diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestCrossbowItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestCrossbowItem.java index 9ba7b25dfd..c390702548 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestCrossbowItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestCrossbowItem.java @@ -25,7 +25,7 @@ // right click ability: able to overload an already loaded arrow public class GlassCrestCrossbowItem extends MalachiteCrossbowItem implements ExtendedItemBarProvider, SlotBackgroundEffectProvider, InkPowered { - private static final InkCost OVERCHARGE_COST = new InkCost(InkColors.WHITE, 1000); + private static final InkAmount OVERCHARGE_COST = new InkAmount(InkColors.WHITE, 1000); private static final int OVERCHARGE_DURATION_MAX_TICKS = 20 * 6; // 6 seconds public GlassCrestCrossbowItem(Properties settings) { diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestGreatswordItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestGreatswordItem.java index e7424026be..e6cfe5e871 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestGreatswordItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestGreatswordItem.java @@ -31,7 +31,7 @@ public class GlassCrestGreatswordItem extends GreatswordItem implements SplitDamageItem, ExtendedItemBarProvider, SlotBackgroundEffectProvider, InkPowered { - private static final InkCost GROUND_SLAM_COST = new InkCost(InkColors.WHITE, 25); + private static final InkAmount GROUND_SLAM_COST = new InkAmount(InkColors.WHITE, 25); public static final float MAGIC_DAMAGE_SHARE = 0.25F; public final int GROUND_SLAM_CHARGE_TICKS = 32; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestWorkstaffItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestWorkstaffItem.java index 312bee78a2..3da1348a03 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestWorkstaffItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestWorkstaffItem.java @@ -23,7 +23,7 @@ public class GlassCrestWorkstaffItem extends WorkstaffItem implements SlotBackgroundEffectProvider { public static final int COOLDOWN_DURATION_TICKS = 10; - public static final InkCost PROJECTILE_COST = new InkCost(InkColors.WHITE, 50); // TODO: make pricier once ink networking is in + public static final InkAmount PROJECTILE_COST = new InkAmount(InkColors.WHITE, 50); // TODO: make pricier once ink networking is in public GlassCrestWorkstaffItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/NightfallsBladeItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/NightfallsBladeItem.java index c0c667acb1..62ee7691c8 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/NightfallsBladeItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/NightfallsBladeItem.java @@ -52,7 +52,7 @@ public boolean isWeapon() { @Override public long adjustFinalCostFor(@NotNull InkPoweredStatusEffectInstance instance) { - return Math.round(Math.pow(instance.getInkCost().cost(), 1.75 + instance.getStatusEffectInstance().getAmplifier())); + return Math.round(Math.pow(instance.getInkCost().amount(), 1.75 + instance.getStatusEffectInstance().getAmplifier())); } @Override @@ -61,7 +61,7 @@ public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity atta if (AdvancementHelper.hasAdvancement(player, UNLOCK_IDENTIFIER)) { List effects = InkPoweredPotionFillable.getEffects(stack); for (InkPoweredStatusEffectInstance instance : effects) { - if (InkPowered.tryDrainEnergy(player, instance.getInkCost().color(), instance.getInkCost().cost())) { + if (InkPowered.tryDrainEnergy(player, instance.getInkCost().color(), instance.getInkCost().amount())) { Level world = attacker.level(); if (world.isClientSide) { world.addParticle(new DynamicParticleEffect(ParticleTypes.EFFECT, 0.1F, SpectrumColorHelper.colorIntToVec(instance.getStatusEffectInstance().getEffect().value().getColor()), 0.5F, 120, true, true), @@ -97,7 +97,7 @@ public SlotBackgroundEffectProvider.SlotEffect backgroundType(@Nullable Player p } var effect = effects.getFirst(); - var usable = InkPowered.hasAvailableInk(player, new InkCost(effect.getInkCost().color(), adjustFinalCostFor(effect))); + var usable = InkPowered.hasAvailableInk(player, new InkAmount(effect.getInkCost().color(), adjustFinalCostFor(effect))); return usable ? SlotBackgroundEffectProvider.SlotEffect.BORDER_FADE : SlotEffect.BORDER; } @@ -117,7 +117,7 @@ public float getEffectOpacity(@Nullable Player player, ItemStack stack, float ti return 0F; var effect = effects.getFirst(); - if (InkPowered.hasAvailableInk(player, new InkCost(effect.getInkCost().color(), adjustFinalCostFor(effect)))) + if (InkPowered.hasAvailableInk(player, new InkAmount(effect.getInkCost().color(), adjustFinalCostFor(effect)))) return 1F; if (player == null) diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/OmniAcceleratorItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/OmniAcceleratorItem.java index 2bd6ea133e..a217eaadab 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/OmniAcceleratorItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/OmniAcceleratorItem.java @@ -28,7 +28,7 @@ public class OmniAcceleratorItem extends BundleItem implements InkPowered, ExtendedItemBarProvider, SlotBackgroundEffectProvider { - protected static final InkCost COST = new InkCost(InkColors.YELLOW, 20); + protected static final InkAmount COST = new InkAmount(InkColors.YELLOW, 20); protected static final int CHARGE_TIME = 10; public OmniAcceleratorItem(Properties settings) { diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/WorkstaffItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/WorkstaffItem.java index c471b01ce4..035bbf520c 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/WorkstaffItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/WorkstaffItem.java @@ -24,7 +24,7 @@ public class WorkstaffItem extends MultiToolItem implements AoEBreakingTool, Preenchanted { - protected static final InkCost BASE_COST_PER_AOE_MINING_RANGE_INCREMENT = new InkCost(InkColors.WHITE, 3); // TODO: make pricier once ink networking is in + protected static final InkAmount BASE_COST_PER_AOE_MINING_RANGE_INCREMENT = new InkAmount(InkColors.WHITE, 3); // TODO: make pricier once ink networking is in public enum GUIToggle { SELECT_SILK_TOUCH("item.spectrum.workstaff.message.silk_touch"), @@ -94,7 +94,7 @@ public boolean canUseAoE(Player player, ItemStack stack) { return false; } - int costForRange = (int) Math.pow(BASE_COST_PER_AOE_MINING_RANGE_INCREMENT.cost(), range); + int costForRange = (int) Math.pow(BASE_COST_PER_AOE_MINING_RANGE_INCREMENT.amount(), range); return InkPowered.tryDrainEnergy(player, BASE_COST_PER_AOE_MINING_RANGE_INCREMENT.color(), costForRange); } diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/GlowVisionGogglesItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/GlowVisionGogglesItem.java index 7c8fd7410a..c85a505f1c 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/GlowVisionGogglesItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/GlowVisionGogglesItem.java @@ -1,12 +1,9 @@ package de.dafuqs.spectrum.items.trinkets; -import com.kwpugh.gobber2.items.staffs.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.energy.*; import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.config.*; -import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.items.magic_items.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.network.chat.*; import net.minecraft.server.level.*; @@ -21,7 +18,7 @@ public class GlowVisionGogglesItem extends SpectrumCurioItem implements InkPowered { - public static final InkCost INK_COST = new InkCost(InkColors.LIGHT_BLUE, 20); + public static final InkAmount INK_COST = new InkAmount(InkColors.LIGHT_BLUE, 20); public static final Ingredient ITEM_COST = Ingredient.of(SpectrumItemTags.GLOW_VISION_GOGGLES_CONSUMABLE); public GlowVisionGogglesItem(Properties settings) { diff --git a/src/main/java/de/dafuqs/spectrum/loot/functions/FillPotionFillableLootFunction.java b/src/main/java/de/dafuqs/spectrum/loot/functions/FillPotionFillableLootFunction.java index 4e341bce41..ef0bc0c1c6 100644 --- a/src/main/java/de/dafuqs/spectrum/loot/functions/FillPotionFillableLootFunction.java +++ b/src/main/java/de/dafuqs/spectrum/loot/functions/FillPotionFillableLootFunction.java @@ -48,7 +48,7 @@ public InkPoweredStatusEffectInstance get(LootContext context) { MobEffectInstance statusEffectInstance = new MobEffectInstance(statusEffect, this.duration.getInt(context), this.amplifier.getInt(context), ambient, showParticles, true); InkColor inkColor = this.inkColors.get(context.getRandom().nextInt(this.inkColors.size())); int cost = this.inkCost.getInt(context); - return new InkPoweredStatusEffectInstance(statusEffectInstance, new InkCost(inkColor, cost), this.color, this.unidentifiable); + return new InkPoweredStatusEffectInstance(statusEffectInstance, new InkAmount(inkColor, cost), this.color, this.unidentifiable); } } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelTransmissionPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelTransmissionPayload.java index 51d6e58fe1..79ee916fb9 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelTransmissionPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelTransmissionPayload.java @@ -16,18 +16,16 @@ import java.util.*; -public record PastelTransmissionPayload(int networkColor, int travelTime, PastelTransmission transmission) - implements CustomPacketPayload { +public record PastelTransmissionPayload(int networkColor, int travelTime, PastelTransmission transmission) implements CustomPacketPayload { public static final Type ID = SpectrumC2SPackets.makeId("pastel_transmission"); public static final StreamCodec CODEC = StreamCodec.composite( ByteBufCodecs.INT, PastelTransmissionPayload::networkColor, ByteBufCodecs.INT, PastelTransmissionPayload::travelTime, - PastelTransmission.PACKET_CODEC, PastelTransmissionPayload::transmission, + PastelTransmission.STREAM_CODEC, PastelTransmissionPayload::transmission, PastelTransmissionPayload::new ); - // TODO: we should probably also send the transmission to players that track the destination pos public static void sendPastelTransmissionParticle(ServerPastelNetwork network, int travelTime, @NotNull PastelTransmission transmission) { Packet packet = new ClientboundCustomPayloadPacket(new PastelTransmissionPayload(network.getColor(), travelTime, transmission)); Set targetPlayers = new HashSet(); @@ -45,11 +43,12 @@ public static void execute(PastelTransmissionPayload payload, IPayloadContext co int travelTime = payload.travelTime(); PastelTransmission transmission = payload.transmission; BlockPos spawnPos = transmission.getStartPos(); - context.player().level().addParticle(new PastelTransmissionParticleEffect(transmission.getNodePositions(), transmission.getVariant(), travelTime, color), spawnPos.getX() + 0.5, spawnPos.getY() + 0.5, spawnPos.getZ() + 0.5, 0, 0, 0); + context.player().level().addParticle(new PastelTransmissionParticleEffect(transmission.getNodePositions(), transmission.getPayload(), travelTime, color), spawnPos.getX() + 0.5, spawnPos.getY() + 0.5, spawnPos.getZ() + 0.5, 0, 0, 0); } @Override public @NotNull Type type() { return ID; } + } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/particle/SpectrumParticleFactories.java b/src/main/java/de/dafuqs/spectrum/particle/SpectrumParticleFactories.java index 7ff6ccbde6..c4c03d0efb 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/SpectrumParticleFactories.java +++ b/src/main/java/de/dafuqs/spectrum/particle/SpectrumParticleFactories.java @@ -54,7 +54,7 @@ public static void register(RegisterParticleProvidersEvent event) { }); event.registerSpriteSet(SpectrumParticleTypes.PASTEL_TRANSMISSION, provider -> (pastelTransmissionParticleEffect, world, x, y, z, velocityX, velocityY, velocityZ) -> { - PastelTransmissionParticle particle = new PastelTransmissionParticle(Minecraft.getInstance().getItemRenderer(), world, x, y, z, pastelTransmissionParticleEffect.nodePositions(), pastelTransmissionParticleEffect.stack(), pastelTransmissionParticleEffect.travelTime(), pastelTransmissionParticleEffect.color()); + PastelTransmissionParticle particle = new PastelTransmissionParticle(Minecraft.getInstance().getItemRenderer(), world, x, y, z, pastelTransmissionParticleEffect.nodePositions(), pastelTransmissionParticleEffect.payload(), pastelTransmissionParticleEffect.travelTime(), pastelTransmissionParticleEffect.color()); particle.pickSprite(provider); float[] color = PastelRenderHelper.unpackNormalizedColor(pastelTransmissionParticleEffect.color()); particle.setColor(color[1], color[2], color[3]); diff --git a/src/main/java/de/dafuqs/spectrum/particle/client/PastelTransmissionParticle.java b/src/main/java/de/dafuqs/spectrum/particle/client/PastelTransmissionParticle.java index 037a03f063..287a421aa7 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/client/PastelTransmissionParticle.java +++ b/src/main/java/de/dafuqs/spectrum/particle/client/PastelTransmissionParticle.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.particle.client; import com.mojang.blaze3d.vertex.*; -import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.render.*; @@ -23,16 +23,16 @@ public class PastelTransmissionParticle extends TransmissionParticle implements EarlyRenderingParticle { - private final ItemRenderer itemRenderer; + public final ItemRenderer itemRenderer; private final List travelPositions; - private final ItemStack itemStack; + private final PastelPayload payload; private final ParticleOptions particleEffect; - public PastelTransmissionParticle(ItemRenderer itemRenderer, ClientLevel world, double x, double y, double z, List travelPositions, ItemStack stack, int travelTime, int networkColor) { + public PastelTransmissionParticle(ItemRenderer itemRenderer, ClientLevel world, double x, double y, double z, List travelPositions, PastelPayload payload, int travelTime, int networkColor) { super(world, x, y, z, new BlockPositionSource(travelPositions.get(travelPositions.size() - 1)), travelTime); this.itemRenderer = itemRenderer; - this.itemStack = stack; + this.payload = payload; this.quadSize = 0.25F; this.particleEffect = new DustParticleOptions(SpectrumColorHelper.colorIntToVec(networkColor), 0.8F); @@ -94,7 +94,7 @@ public void renderAsEntity(final PoseStack poseStack, final MultiBufferSource ve poseStack.mulPose(camera.rotation()); poseStack.scale(0.65F, 0.65F, 0.65F); poseStack.translate(0, -0.15, 0); - itemRenderer.renderStatic(itemStack, ItemDisplayContext.GROUND, light, OverlayTexture.NO_OVERLAY, poseStack, vertexConsumers, level, 0); + payload.render(this, level, poseStack, vertexConsumers, light); poseStack.popPose(); } diff --git a/src/main/java/de/dafuqs/spectrum/particle/effect/PastelTransmissionParticleEffect.java b/src/main/java/de/dafuqs/spectrum/particle/effect/PastelTransmissionParticleEffect.java index 259c6cad8d..b328db3e49 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/effect/PastelTransmissionParticleEffect.java +++ b/src/main/java/de/dafuqs/spectrum/particle/effect/PastelTransmissionParticleEffect.java @@ -2,40 +2,41 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; +import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.particle.*; import net.minecraft.core.*; import net.minecraft.core.particles.*; import net.minecraft.core.registries.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; -import net.minecraft.world.item.*; +import org.jetbrains.annotations.*; import java.util.*; -public record PastelTransmissionParticleEffect(List nodePositions, ItemStack stack, int travelTime, int color) implements ParticleOptions { +public record PastelTransmissionParticleEffect(List nodePositions, PastelPayload payload, int travelTime, int color) implements ParticleOptions { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( BlockPos.CODEC.listOf().fieldOf("positions").forGetter((particleEffect) -> particleEffect.nodePositions), - ItemStack.CODEC.fieldOf("stack").forGetter((effect) -> effect.stack), + PastelPayload.CODEC.fieldOf("payload").forGetter((effect) -> effect.payload), Codec.INT.fieldOf("travel_time").forGetter((particleEffect) -> particleEffect.travelTime), Codec.INT.fieldOf("color").forGetter((particleEffect) -> particleEffect.color) ).apply(i, PastelTransmissionParticleEffect::new)); public static final StreamCodec PACKET_CODEC = StreamCodec.composite( BlockPos.STREAM_CODEC.apply(ByteBufCodecs.list()), c -> c.nodePositions, - ItemStack.STREAM_CODEC, c -> c.stack, + PastelPayload.STREAM_CODEC, c -> c.payload, ByteBufCodecs.VAR_INT, c -> c.travelTime, ByteBufCodecs.VAR_INT, c -> c.color, PastelTransmissionParticleEffect::new ); @Override - public ParticleType getType() { + public @NotNull ParticleType getType() { return SpectrumParticleTypes.PASTEL_TRANSMISSION; } @Override - public String toString() { + public @NotNull String toString() { int nodeCount = this.nodePositions.size(); BlockPos source = this.nodePositions.getFirst(); BlockPos destination = this.nodePositions.getLast(); diff --git a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionRecipeEffect.java b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionRecipeEffect.java index a5131aed18..65f14ed7f4 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionRecipeEffect.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionRecipeEffect.java @@ -110,7 +110,7 @@ public static PotionRecipeEffect read(RegistryFriendlyByteBuf buf) { if (potency >= 0 && durationTicks > 0) { int effectColor = potionMod.getColor(random); - return new InkPoweredStatusEffectInstance(new MobEffectInstance(statusEffect, durationTicks, (int) potency, !potionMod.flags().noParticles(), !potionMod.flags().noParticles()), new InkCost(inkColor(), inkCost()), effectColor, potionMod.flags().unidentifiable()); + return new InkPoweredStatusEffectInstance(new MobEffectInstance(statusEffect, durationTicks, (int) potency, !potionMod.flags().noParticles(), !potionMod.flags().noParticles()), new InkAmount(inkColor(), inkCost()), effectColor, potionMod.flags().unidentifiable()); } else { // the effect is so borked that the effect would be too weak return null; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java index 0c7bc94e79..d47ca13111 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java @@ -6,6 +6,7 @@ import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.pastel_network.*; import de.dafuqs.spectrum.api.recipe.*; +import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.entity.variants.*; import de.dafuqs.spectrum.items.tools.*; import de.dafuqs.spectrum.recipe.*; @@ -26,6 +27,7 @@ public class SpectrumRegistries { public static final Registry PASTEL_UPGRADE = register(SpectrumRegistryKeys.PASTEL_UPGRADE, false); public static final Registry RECIPE_SCALING = register(SpectrumRegistryKeys.RECIPE_SCALING, true); public static final Registry> RESONANCE_PROCESSOR_TYPE = register(SpectrumRegistryKeys.RESONANCE_PROCESSOR_TYPE, false); + public static final Registry> PASTEL_PAYLOAD_TYPE = register(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, false); // TODO: sync? private static Registry register(ResourceKey> key, boolean synced) { return new RegistryBuilder<>(key).sync(synced).create(); @@ -39,6 +41,7 @@ public static void registerBuiltInRegistries(NewRegistryEvent event) { event.register(PASTEL_UPGRADE); event.register(RECIPE_SCALING); event.register(RESONANCE_PROCESSOR_TYPE); + event.register(PASTEL_PAYLOAD_TYPE); } public static void registerDynamicRegistries(DataPackRegistryEvent.NewRegistry event) { diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java index 4ff762e89d..6e604271b1 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java @@ -7,10 +7,13 @@ import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.pastel_network.*; import de.dafuqs.spectrum.api.recipe.*; +import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.entity.variants.*; import de.dafuqs.spectrum.items.tools.*; import de.dafuqs.spectrum.recipe.*; import net.minecraft.core.*; +import net.minecraft.network.*; +import net.minecraft.network.codec.*; import net.minecraft.resources.*; public class SpectrumRegistryKeys { @@ -26,6 +29,7 @@ public class SpectrumRegistryKeys { public static final ResourceKey> RECIPE_SCALING = of("recipe_scaling"); public static final ResourceKey>> RESONANCE_PROCESSOR_TYPE = of("resonance_processor_type"); public static final ResourceKey> RESONANCE_PROCESSOR = of("resonance_processor"); + public static final ResourceKey>> PASTEL_PAYLOAD_TYPE = of("pastel_payload_type"); private static ResourceKey> of(String name) { return ResourceKey.createRegistryKey(SpectrumCommon.locate(name)); From ccd036e60461b2ac0f4ec882d2cbe44c64f2ae93 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 3 Apr 2026 12:00:18 +0200 Subject: [PATCH 002/477] improved inventory handling in many places. Resolves #852 --- gradle.properties | 2 +- .../api/block/ImplementedInventory.java | 2 +- .../blocks/InWorldInteractionBlockEntity.java | 11 +++--- .../chests/BlackHoleChestBlockEntity.java | 2 +- .../chests/HeartboundChestBlockEntity.java | 2 +- .../crystallarieum/CrystallarieumBlock.java | 3 -- .../blocks/enchanter/EnchanterBlock.java | 8 +--- .../enchanter/EnchanterBlockEntity.java | 12 ++---- .../network/PastelTransmissionLogic.java | 39 ++++++++----------- .../capabilities/SpectrumCapabilities.java | 4 +- 10 files changed, 34 insertions(+), 51 deletions(-) diff --git a/gradle.properties b/gradle.properties index 06eccf49fc..0e0893699e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ org.gradle.caching=true minecraft_version=1.21.1 parchment_minecraft_version=1.21.1 parchment_mappings_version=2024.11.17 -neoforge_version=21.1.219 +neoforge_version=21.1.222 neoforge_version_range=[21.1.186,) # Mod Properties diff --git a/src/main/java/de/dafuqs/spectrum/api/block/ImplementedInventory.java b/src/main/java/de/dafuqs/spectrum/api/block/ImplementedInventory.java index 81f9fd8f43..f1ebdde454 100644 --- a/src/main/java/de/dafuqs/spectrum/api/block/ImplementedInventory.java +++ b/src/main/java/de/dafuqs/spectrum/api/block/ImplementedInventory.java @@ -123,7 +123,7 @@ default void setItem(int slot, @NotNull ItemStack stack) { @Override default void clearContent() { getItems().clear(); - inventoryChanged(); + setChanged(); } /** diff --git a/src/main/java/de/dafuqs/spectrum/blocks/InWorldInteractionBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/InWorldInteractionBlockEntity.java index 86ab7c581d..90976f4358 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/InWorldInteractionBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/InWorldInteractionBlockEntity.java @@ -10,6 +10,7 @@ import net.minecraft.world.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; +import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.storage.loot.*; @@ -29,8 +30,9 @@ public InWorldInteractionBlockEntity(BlockEntityType type, BlockPos pos, Bloc // interaction methods public void updateInClientWorld() { - if (level instanceof ServerLevel serverWorld) - serverWorld.getChunkSource().blockChanged(worldPosition); + if (level != null) { + level.sendBlockUpdated(worldPosition, level.getBlockState(worldPosition), level.getBlockState(worldPosition), Block.UPDATE_INVISIBLE); + } } // Called when the chunk is first loaded to initialize this be @@ -65,7 +67,6 @@ public void unpackLootTable(@Nullable Player player) { lootTableSeed = level.getRandom().nextLong(); } RandomizableContainer.super.unpackLootTable(player); - this.setChanged(); } @Nullable @@ -88,8 +89,8 @@ public void inventoryChanged() { @Override public void setChanged() { super.setChanged(); - if(this.level != null && !this.level.isClientSide()) { - updateInClientWorld(); + if (level instanceof ServerLevel serverWorld) { + serverWorld.getChunkSource().blockChanged(worldPosition); } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlockEntity.java index aad65b3548..217905bc13 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlockEntity.java @@ -361,7 +361,7 @@ public boolean hasExperienceStorageItem() { @Override public int @NotNull [] getSlotsForFace(Direction direction) { if(direction == Direction.UP) { - return new int[EXPERIENCE_STORAGE_PROVIDER_ITEM_SLOT]; + return new int[]{EXPERIENCE_STORAGE_PROVIDER_ITEM_SLOT}; } return IntStream.rangeClosed(0, EXPERIENCE_STORAGE_PROVIDER_ITEM_SLOT - 1).toArray(); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/HeartboundChestBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/HeartboundChestBlockEntity.java index 2192983caf..9c1212bbf1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/HeartboundChestBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/HeartboundChestBlockEntity.java @@ -161,7 +161,7 @@ public boolean wasRecentlyTriedToOpenByNonOwner() { } @Override - public int[] getSlotsForFace(Direction side) { + public int @NotNull [] getSlotsForFace(@NotNull Direction side) { return new int[0]; } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlock.java index 44f2fc309b..0f69be5d2c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlock.java @@ -82,7 +82,6 @@ public ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level if (player.isShiftKeyDown() || stack.isEmpty()) { // sneaking or empty hand: remove items if (retrieveStack(world, pos, player, hand, stack, crystallarieumBlockEntity, 1) || retrieveStack(world, pos, player, hand, stack, crystallarieumBlockEntity, 0)) { - crystallarieumBlockEntity.inventoryChanged(); crystallarieumBlockEntity.setOwner(player); } return ItemInteractionResult.CONSUME; @@ -96,12 +95,10 @@ public ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level // hand is full and inventory already contains item: exchange them else if (stack.getItem() instanceof InkStorageItem inkStorageItem) { if (inkStorageItem.getDrainability().canDrain(false) && exchangeStack(world, pos, player, hand, stack, crystallarieumBlockEntity, CrystallarieumBlockEntity.INK_STORAGE_STACK_SLOT_ID)) { - crystallarieumBlockEntity.inventoryChanged(); crystallarieumBlockEntity.setOwner(player); } } else { if (exchangeStack(world, pos, player, hand, stack, crystallarieumBlockEntity, CrystallarieumBlockEntity.CATALYST_SLOT_ID)) { - crystallarieumBlockEntity.inventoryChanged(); crystallarieumBlockEntity.setOwner(player); } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlock.java index 1462bcaca7..2de18251d0 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlock.java @@ -62,10 +62,8 @@ public static boolean verifyStructure(Level world, BlockPos blockPos, @Nullable if (serverPlayerEntity != null) { SpectrumAdvancementCriteria.COMPLETED_MULTIBLOCK.trigger(serverPlayerEntity, multiblock); } - } else { - if (world.isClientSide) { - ModonomiconHelper.renderMultiblock(SpectrumMultiblocks.get(SpectrumMultiblocks.ENCHANTER), SpectrumMultiblocks.ENCHANTER_TEXT, blockPos.below(4), Rotation.NONE); - } + } else if (world.isClientSide) { + ModonomiconHelper.renderMultiblock(SpectrumMultiblocks.get(SpectrumMultiblocks.ENCHANTER), SpectrumMultiblocks.ENCHANTER_TEXT, blockPos.below(4), Rotation.NONE); } return valid; @@ -108,7 +106,6 @@ public ItemInteractionResult useItemOn(ItemStack handStack, BlockState state, Le if (retrieveStack(world, pos, player, hand, handStack, enchanterBlockEntity, i)) { enchanterBlockEntity.setItemFacingDirection(player.getDirection()); enchanterBlockEntity.setOwner(player); - enchanterBlockEntity.inventoryChanged(); break; } } @@ -120,7 +117,6 @@ public ItemInteractionResult useItemOn(ItemStack handStack, BlockState state, Le if (exchangeStack(world, pos, player, hand, handStack, enchanterBlockEntity, inputInventorySlotIndex)) { enchanterBlockEntity.setItemFacingDirection(player.getDirection()); enchanterBlockEntity.setOwner(player); - enchanterBlockEntity.inventoryChanged(); } } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlockEntity.java index effc33f68f..cbb331939a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlockEntity.java @@ -21,6 +21,8 @@ import net.minecraft.core.*; import net.minecraft.core.component.*; import net.minecraft.nbt.*; +import net.minecraft.network.protocol.*; +import net.minecraft.network.protocol.game.*; import net.minecraft.server.level.*; import net.minecraft.sounds.*; import net.minecraft.stats.*; @@ -699,7 +701,7 @@ protected void stopCraftingMusic() { @Override public void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { - super.saveAdditional(nbt, registryLookup); + super.saveAdditional(nbt, registryLookup); nbt.putInt("crafting_time", this.craftingTime); nbt.putInt("crafting_time_total", this.craftingTimeTotal); nbt.putInt("current_item_processing_time", this.currentItemProcessingTime); @@ -721,12 +723,6 @@ public void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup } } - @Override - public void updateInClientWorld() { - if (level != null) - level.sendBlockUpdated(worldPosition, level.getBlockState(worldPosition), level.getBlockState(worldPosition), Block.UPDATE_INVISIBLE); - } - public Direction getItemFacingDirection() { // if placed via pipe or other sources return Objects.requireNonNullElse(this.itemFacing, Direction.NORTH); @@ -844,7 +840,7 @@ public UpgradeHolder getUpgradeHolder() { @Override public int @NotNull [] getSlotsForFace(Direction direction) { - return direction == Direction.UP ? new int[1] : new int[0]; + return direction == Direction.UP ? new int[]{1} : new int[]{0}; } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index 83c42c3729..602d25fdea 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -1,7 +1,5 @@ package de.dafuqs.spectrum.blocks.pastel_network.network; -import com.mojang.serialization.*; -import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; @@ -137,7 +135,6 @@ private boolean transferBetween(PastelNodeBlockEntity sourceNode, IItemHandler s proposals.put(stack, proposals.getOrDefault(stack, 0L) + stack.getCount()); } - // TODO: this is jank. Improve for (ItemStack stack : proposals.keySet()) { long proposedAmount = Math.min(Math.min(proposals.get(stack), sourceNode.getMaxTransferredAmount()), totalAvailableStorage); if (proposedAmount == 0) @@ -152,28 +149,24 @@ private boolean transferBetween(PastelNodeBlockEntity sourceNode, IItemHandler s Optional transmission = createTransmissionOnValidPath(sourceNode, destinationNode, new PastelPayload.ItemPastelPayload(proposedStack.copyWithCount(simulatedAmount)), sourceNode.getTransferTime()); if (transmission.isPresent()) { - int toRemove = simulatedAmount; - while (toRemove > 0) { - for (ItemStack matchingStack : matchingStacks.getB()) { - int amountToShrink = Math.min(toRemove, matchingStack.getCount()); - matchingStack.shrink(amountToShrink); - toRemove -= amountToShrink; - } + int extracted = 0; + for (int i = 0; i < sourceStorage.getSlots(); i++) { + if (ItemStack.isSameItemSameComponents(proposedStack, sourceStorage.getStackInSlot(i))) + extracted += sourceStorage.extractItem(i, simulatedAmount - extracted, false).getCount(); + if (extracted == simulatedAmount) + break; } - Optional optionalTransmission = createTransmissionOnValidPath(sourceNode, destinationNode, new PastelPayload.ItemPastelPayload(proposedStack.copyWithCount(simulatedAmount)), sourceNode.getTransferTime()); - if (optionalTransmission.isPresent()) { - PastelTransmission trans = optionalTransmission.get(); - int travelTime = trans.getTransmissionDuration(); - this.network.addTransmission(trans, travelTime); - PastelTransmissionPayload.sendPastelTransmissionParticle(this.network, trans.getTransmissionDuration(), transmission.get()); - - destinationNode.markTransferred(transferMode != TransferMode.PUSH); - sourceNode.markTransferred(transferMode != TransferMode.PULL); - - destinationNode.addItemCountUnderway(simulatedAmount); - return true; - } + PastelTransmission trans = transmission.get(); + int travelTime = trans.getTransmissionDuration(); + this.network.addTransmission(trans, travelTime); + PastelTransmissionPayload.sendPastelTransmissionParticle(this.network, trans.getTransmissionDuration(), transmission.get()); + + destinationNode.markTransferred(transferMode != TransferMode.PUSH); + sourceNode.markTransferred(transferMode != TransferMode.PULL); + + destinationNode.addItemCountUnderway(simulatedAmount); + return true; } } return false; diff --git a/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java b/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java index 55eb3f85eb..d47fa3e46c 100644 --- a/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java +++ b/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java @@ -25,9 +25,9 @@ public class SpectrumCapabilities { public static void register(RegisterCapabilitiesEvent event) { // ItemHandler.BLOCK event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, SpectrumBlockEntities.FUSION_SHRINE.get(), (@NotNull FusionShrineBlockEntity blockEntity, Direction direction) -> new InvWrapper(blockEntity));; - event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, SpectrumBlockEntities.PEDESTAL.get(), (@NotNull PedestalBlockEntity blockEntity, Direction direction) -> new InvWrapper(blockEntity)); + event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, SpectrumBlockEntities.PEDESTAL.get(), (@NotNull PedestalBlockEntity blockEntity, Direction direction) -> new SidedInvWrapper(blockEntity, direction)); event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, SpectrumBlockEntities.SPIRIT_INSTILLER.get(), (@NotNull SpiritInstillerBlockEntity blockEntity, Direction direction) -> new InvWrapper(blockEntity)); - event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, SpectrumBlockEntities.ENCHANTER.get(), (@NotNull EnchanterBlockEntity blockEntity, Direction direction) -> new InvWrapper(blockEntity)); + event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, SpectrumBlockEntities.ENCHANTER.get(), (@NotNull EnchanterBlockEntity blockEntity, Direction direction) -> new SidedInvWrapper(blockEntity, direction)); event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, SpectrumBlockEntities.CINDERHEARTH.get(), (@NotNull CinderhearthBlockEntity blockEntity, Direction direction) -> new SidedInvWrapper(blockEntity, direction)); event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, SpectrumBlockEntities.CRYSTALLARIEUM.get(), (@NotNull CrystallarieumBlockEntity blockEntity, Direction direction) -> new InvWrapper(blockEntity)); event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, SpectrumBlockEntities.TITRATION_BARREL.get(), (titrationBarrel, direction) -> { From da7c9a0e0bd0f0b53fc3bd9ea0d049594e4748a8 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 3 Apr 2026 17:28:56 +0200 Subject: [PATCH 003/477] more pastel abstraction --- .../de/dafuqs/spectrum/SpectrumCommon.java | 2 +- .../pastel_network/network/PastelPayload.java | 124 ------------------ .../network/PastelTransmission.java | 1 + .../network/PastelTransmissionLogic.java | 1 + .../pastel_network/nodes/PastelNodeBlock.java | 12 +- .../payloads/ItemPastelPayload.java | 75 +++++++++++ .../payloads/PastelPayload.java | 63 +++++++++ .../client/PastelTransmissionParticle.java | 4 +- .../PastelTransmissionParticleEffect.java | 2 +- .../spectrum/registries/SpectrumBlocks.java | 4 +- .../registries/SpectrumRegistries.java | 4 +- .../registries/SpectrumRegistryKeys.java | 4 +- 12 files changed, 157 insertions(+), 139 deletions(-) delete mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelPayload.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java diff --git a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java index 891f4ca87f..7e0d768f3f 100644 --- a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java +++ b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java @@ -4,7 +4,7 @@ import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.attachment_types.*; import de.dafuqs.spectrum.blocks.pastel_network.*; -import de.dafuqs.spectrum.blocks.pastel_network.network.*; +import de.dafuqs.spectrum.blocks.pastel_network.payloads.PastelPayload; import de.dafuqs.spectrum.capabilities.*; import de.dafuqs.spectrum.compat.*; import de.dafuqs.spectrum.config.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelPayload.java deleted file mode 100644 index d6b0677fa7..0000000000 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelPayload.java +++ /dev/null @@ -1,124 +0,0 @@ -package de.dafuqs.spectrum.blocks.pastel_network.network; - -import com.mojang.blaze3d.vertex.*; -import com.mojang.serialization.*; -import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; -import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.particle.client.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.client.renderer.*; -import net.minecraft.client.renderer.texture.*; -import net.minecraft.core.*; -import net.minecraft.network.*; -import net.minecraft.network.codec.*; -import net.minecraft.resources.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.*; -import net.neoforged.bus.api.*; -import net.neoforged.neoforge.items.*; -import net.neoforged.neoforge.registries.*; -import org.jetbrains.annotations.*; - -import java.util.function.*; - -public interface PastelPayload { - - Codec CODEC = SpectrumRegistries.PASTEL_PAYLOAD_TYPE.byNameCodec().dispatch(PastelPayload::codec, codec -> codec); - StreamCodec STREAM_CODEC = ByteBufCodecs.fromCodecWithRegistries(CODEC); - - DeferredRegister> REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, SpectrumCommon.MOD_ID); - - static void register(IEventBus modBus) { - REGISTRAR.register("item", () -> ItemPastelPayload.CODEC); - - REGISTRAR.register(modBus); - } - - MapCodec codec(); - StreamCodec streamCodec(); - - /** - * - * @param level the level - * @param destination the position of the node to arrive at - * @param destinationNode the pastel node. Can be null if it was broken while the transmission was underway - */ - void arriveAtDestination(Level level, BlockPos destination, PastelNodeBlockEntity destinationNode); - - void render(PastelTransmissionParticle pastelTransmissionParticle, Level level, PoseStack poseStack, MultiBufferSource vertexConsumers, int light); - - // void spawnTravelParticles(Level level); // TODO - - class ItemPastelPayload implements PastelPayload { - - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( - ItemStack.CODEC.fieldOf("stack").forGetter(ItemPastelPayload::getItemStack) - ).apply(i, ItemPastelPayload::new)); - - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ItemStack.STREAM_CODEC, ItemPastelPayload::getItemStack, - ItemPastelPayload::new - ); - - private final ItemStack itemStack; - - public ItemPastelPayload(ItemStack itemStack) { - this.itemStack = itemStack; - } - - public ItemStack getItemStack() { - return itemStack; - } - - public void arriveAtDestination(Level level, BlockPos destination, @Nullable PastelNodeBlockEntity destinationNode) { - int inserted = 0; - int count = itemStack.getCount(); - if (destinationNode != null) { - IItemHandler destinationStorage = destinationNode.getConnectedStorage(); - if (destinationStorage != null) { - inserted = count; - inserted -= ItemHandlerHelper.insertItemStacked(destinationStorage, itemStack.copyWithCount(count), false).getCount(); - destinationNode.addItemCountUnderway(-count); - } - } - - int amount = itemStack.getCount(); - if (inserted != amount) { - long diff = amount - inserted; - InWorldInteractionHelper.scatter(level, destination.getX() + 0.5, destination.getY() + 0.5, destination.getZ() + 0.5, itemStack, diff); - if (destinationNode != null) { - destinationNode.addItemCountUnderway(-diff); - } - } - } - - public void render(PastelTransmissionParticle particle, Level level, PoseStack poseStack, final MultiBufferSource vertexConsumers, int light) { - particle.itemRenderer.renderStatic(this.itemStack, ItemDisplayContext.GROUND, light, OverlayTexture.NO_OVERLAY, poseStack, vertexConsumers, level, 0); - } - - public MapCodec codec() { - return CODEC; - } - - public StreamCodec streamCodec() { - return STREAM_CODEC; - } - } - - /*class FluidPastelPayload implements PastelPayload { - private FluidStack fluidStack; - public FluidPastelPayload(FluidStack fluidStack) { - this.fluidStack = fluidStack; - } - } - - class InkPastelPayload implements PastelPayload { - private InkAmount inkAmount; - public InkPastelPayload(InkAmount inkAmount) { - this.inkAmount = inkAmount; - } - }*/ - -} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmission.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmission.java index cd7c5a5897..39a1672d9c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmission.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmission.java @@ -3,6 +3,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import de.dafuqs.spectrum.blocks.pastel_network.payloads.PastelPayload; import de.dafuqs.spectrum.helpers.*; import net.minecraft.core.*; import net.minecraft.network.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index 602d25fdea..3a715e772e 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -1,6 +1,7 @@ package de.dafuqs.spectrum.blocks.pastel_network.network; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import net.minecraft.core.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java index 39d45ed1db..4b271d8201 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java @@ -7,6 +7,7 @@ import de.dafuqs.spectrum.blocks.decoration.*; import de.dafuqs.spectrum.blocks.pastel_network.*; import de.dafuqs.spectrum.blocks.pastel_network.network.*; +import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; import de.dafuqs.spectrum.progression.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; @@ -33,10 +34,10 @@ public class PastelNodeBlock extends SpectrumFacingBlock implements EntityBlock, ColorableBlock { - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( + /*public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( propertiesCodec(), StringRepresentable.fromEnum(PastelNodeType::values).fieldOf("node_type").forGetter(b -> b.pastelNodeType) - ).apply(i, PastelNodeBlock::new)); + ).apply(i, PastelNodeBlock::new));*/ public static final BooleanProperty LIT = BlockStateProperties.LIT; public static final BooleanProperty REDSTONE_EMITTING = BlockStateProperties.POWERED; @@ -51,16 +52,19 @@ public class PastelNodeBlock extends SpectrumFacingBlock implements EntityBlock, }}; protected final PastelNodeType pastelNodeType; + protected final Set> supportedPayloads; - public PastelNodeBlock(Properties settings, PastelNodeType pastelNodeType) { + public PastelNodeBlock(Properties settings, PastelNodeType pastelNodeType, Set> supportedPayloads) { super(settings.lightLevel(s -> s.getValue(LIT) ? 13 : 0)); this.pastelNodeType = pastelNodeType; + this.supportedPayloads = supportedPayloads; registerDefaultState(defaultBlockState().setValue(LIT, false).setValue(REDSTONE_EMITTING, false)); } @Override public MapCodec codec() { - return CODEC; + // TODO: make the CODEC + return null; } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java new file mode 100644 index 0000000000..df11be710d --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java @@ -0,0 +1,75 @@ +package de.dafuqs.spectrum.blocks.pastel_network.payloads; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.PastelNodeBlockEntity; +import de.dafuqs.spectrum.helpers.InWorldInteractionHelper; +import de.dafuqs.spectrum.particle.client.PastelTransmissionParticle; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.core.BlockPos; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.neoforged.neoforge.items.IItemHandler; +import net.neoforged.neoforge.items.ItemHandlerHelper; +import org.jetbrains.annotations.Nullable; + +public class ItemPastelPayload implements PastelPayload { + + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( + ItemStack.CODEC.fieldOf("stack").forGetter(de.dafuqs.spectrum.blocks.pastel_network.payloads.ItemPastelPayload::getItemStack) + ).apply(i, de.dafuqs.spectrum.blocks.pastel_network.payloads.ItemPastelPayload::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ItemStack.STREAM_CODEC, de.dafuqs.spectrum.blocks.pastel_network.payloads.ItemPastelPayload::getItemStack, + de.dafuqs.spectrum.blocks.pastel_network.payloads.ItemPastelPayload::new + ); + + private final ItemStack itemStack; + + public ItemPastelPayload(ItemStack itemStack) { + this.itemStack = itemStack; + } + + public ItemStack getItemStack() { + return itemStack; + } + + public void arriveAtDestination(Level level, BlockPos destination, @Nullable PastelNodeBlockEntity destinationNode) { + int inserted = 0; + int count = itemStack.getCount(); + if (destinationNode != null) { + IItemHandler destinationStorage = destinationNode.getConnectedStorage(); + if (destinationStorage != null) { + inserted = count; + inserted -= ItemHandlerHelper.insertItemStacked(destinationStorage, itemStack.copyWithCount(count), false).getCount(); + destinationNode.addItemCountUnderway(-count); + } + } + + int amount = itemStack.getCount(); + if (inserted != amount) { + long diff = amount - inserted; + InWorldInteractionHelper.scatter(level, destination.getX() + 0.5, destination.getY() + 0.5, destination.getZ() + 0.5, itemStack, diff); + if (destinationNode != null) { + destinationNode.addItemCountUnderway(-diff); + } + } + } + + public void render(PastelTransmissionParticle particle, Level level, PoseStack poseStack, final MultiBufferSource vertexConsumers, int light) { + particle.itemRenderer.renderStatic(this.itemStack, ItemDisplayContext.GROUND, light, OverlayTexture.NO_OVERLAY, poseStack, vertexConsumers, level, 0); + } + + public MapCodec codec() { + return CODEC; + } + + public StreamCodec streamCodec() { + return STREAM_CODEC; + } +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java new file mode 100644 index 0000000000..5a9555086e --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java @@ -0,0 +1,63 @@ +package de.dafuqs.spectrum.blocks.pastel_network.payloads; + +import com.mojang.blaze3d.vertex.*; +import com.mojang.serialization.*; +import com.sammy.malum.registry.common.worldgen.*; +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import de.dafuqs.spectrum.particle.client.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.client.renderer.*; +import net.minecraft.core.*; +import net.minecraft.network.*; +import net.minecraft.network.codec.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.levelgen.feature.*; +import net.neoforged.bus.api.*; +import net.neoforged.neoforge.registries.*; + +public interface PastelPayload { + + Codec CODEC = SpectrumRegistries.PASTEL_PAYLOAD_TYPE.byNameCodec().dispatch(PastelPayload::codec, codec -> codec); + StreamCodec STREAM_CODEC = ByteBufCodecs.fromCodecWithRegistries(CODEC); + + DeferredRegister> REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, SpectrumCommon.MOD_ID); + + DeferredHolder, MapCodec> ITEM = REGISTRAR.register("item", () -> ItemPastelPayload.CODEC); + DeferredHolder, MapCodec> FLUID = REGISTRAR.register("fluid", () -> FluidPastelPayload.CODEC); + DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); + + static void register(IEventBus modBus) { + REGISTRAR.register(modBus); + } + + MapCodec codec(); + StreamCodec streamCodec(); + + /** + * + * @param level the level + * @param destination the position of the node to arrive at + * @param destinationNode the pastel node. Can be null if it was broken while the transmission was underway + */ + void arriveAtDestination(Level level, BlockPos destination, PastelNodeBlockEntity destinationNode); + + void render(PastelTransmissionParticle pastelTransmissionParticle, Level level, PoseStack poseStack, MultiBufferSource vertexConsumers, int light); + + // void spawnTravelParticles(Level level); // TODO + + /*class FluidPastelPayload implements PastelPayload { + private FluidStack fluidStack; + public FluidPastelPayload(FluidStack fluidStack) { + this.fluidStack = fluidStack; + } + } + + class InkPastelPayload implements PastelPayload { + private InkAmount inkAmount; + public InkPastelPayload(InkAmount inkAmount) { + this.inkAmount = inkAmount; + } + }*/ + +} diff --git a/src/main/java/de/dafuqs/spectrum/particle/client/PastelTransmissionParticle.java b/src/main/java/de/dafuqs/spectrum/particle/client/PastelTransmissionParticle.java index 287a421aa7..aa26719dbd 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/client/PastelTransmissionParticle.java +++ b/src/main/java/de/dafuqs/spectrum/particle/client/PastelTransmissionParticle.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.particle.client; import com.mojang.blaze3d.vertex.*; -import de.dafuqs.spectrum.blocks.pastel_network.network.*; +import de.dafuqs.spectrum.blocks.pastel_network.payloads.PastelPayload; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.render.*; @@ -9,12 +9,10 @@ import net.minecraft.client.multiplayer.*; import net.minecraft.client.renderer.*; import net.minecraft.client.renderer.entity.*; -import net.minecraft.client.renderer.texture.*; import net.minecraft.core.*; import net.minecraft.core.particles.*; import net.minecraft.sounds.*; import net.minecraft.util.*; -import net.minecraft.world.item.*; import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; diff --git a/src/main/java/de/dafuqs/spectrum/particle/effect/PastelTransmissionParticleEffect.java b/src/main/java/de/dafuqs/spectrum/particle/effect/PastelTransmissionParticleEffect.java index b328db3e49..450385679e 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/effect/PastelTransmissionParticleEffect.java +++ b/src/main/java/de/dafuqs/spectrum/particle/effect/PastelTransmissionParticleEffect.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.blocks.pastel_network.network.*; +import de.dafuqs.spectrum.blocks.pastel_network.payloads.PastelPayload; import de.dafuqs.spectrum.particle.*; import net.minecraft.core.*; import net.minecraft.core.particles.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index 7ca3726f58..a08c13ddd7 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -39,6 +39,7 @@ import de.dafuqs.spectrum.blocks.mob_head.*; import de.dafuqs.spectrum.blocks.particle_spawner.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; import de.dafuqs.spectrum.blocks.pedestal.*; import de.dafuqs.spectrum.blocks.potion_workshop.*; import de.dafuqs.spectrum.blocks.present.*; @@ -567,7 +568,8 @@ private static BlockBehaviour.Properties pastelNode(SoundType soundGroup) { } public static final DeferredBlock CONNECTION_NODE = register(blockWithItem("connection_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.CONNECTION), () -> IS.of(), InkColors.LIGHT_GRAY).withPredefinedItemModel()); - public static final DeferredBlock PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); + + public static final DeferredBlock PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(PastelPayload.ITEM.get())), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); public static final DeferredBlock STORAGE_NODE = register(blockWithItem("storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); public static final DeferredBlock SENDER_NODE = register(blockWithItem("sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); public static final DeferredBlock GATHER_NODE = register(blockWithItem("gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java index d47ca13111..25b0e287f2 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java @@ -6,7 +6,7 @@ import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.pastel_network.*; import de.dafuqs.spectrum.api.recipe.*; -import de.dafuqs.spectrum.blocks.pastel_network.network.*; +import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; import de.dafuqs.spectrum.entity.variants.*; import de.dafuqs.spectrum.items.tools.*; import de.dafuqs.spectrum.recipe.*; @@ -27,7 +27,7 @@ public class SpectrumRegistries { public static final Registry PASTEL_UPGRADE = register(SpectrumRegistryKeys.PASTEL_UPGRADE, false); public static final Registry RECIPE_SCALING = register(SpectrumRegistryKeys.RECIPE_SCALING, true); public static final Registry> RESONANCE_PROCESSOR_TYPE = register(SpectrumRegistryKeys.RESONANCE_PROCESSOR_TYPE, false); - public static final Registry> PASTEL_PAYLOAD_TYPE = register(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, false); // TODO: sync? + public static final Registry> PASTEL_PAYLOAD_TYPE = register(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, false); private static Registry register(ResourceKey> key, boolean synced) { return new RegistryBuilder<>(key).sync(synced).create(); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java index 6e604271b1..0534d3a08c 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java @@ -7,13 +7,11 @@ import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.pastel_network.*; import de.dafuqs.spectrum.api.recipe.*; -import de.dafuqs.spectrum.blocks.pastel_network.network.*; +import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; import de.dafuqs.spectrum.entity.variants.*; import de.dafuqs.spectrum.items.tools.*; import de.dafuqs.spectrum.recipe.*; import net.minecraft.core.*; -import net.minecraft.network.*; -import net.minecraft.network.codec.*; import net.minecraft.resources.*; public class SpectrumRegistryKeys { From 0900504852b79a759dc6ebf7b27de001176eafd6 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 3 Apr 2026 18:27:56 +0200 Subject: [PATCH 004/477] =?UTF-8?q?w=C3=B6rk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../de/dafuqs/spectrum/SpectrumCommon.java | 3 +- .../network/PastelTransmissionLogic.java | 106 ++-------------- .../pastel_network/nodes/PastelNodeBlock.java | 4 +- .../nodes/PastelNodeBlockEntity.java | 10 +- .../payloads/ItemPastelPayload.java | 42 +++--- .../payloads/ItemPastelPayloadType.java | 120 ++++++++++++++++++ .../payloads/PastelPayload.java | 17 ++- .../payloads/PastelPayloadType.java | 33 +++++ .../spectrum/registries/SpectrumBlocks.java | 10 +- .../SpectrumPastelUpgradeSignatures.java | 1 - .../registries/SpectrumRegistries.java | 4 +- .../registries/SpectrumRegistryKeys.java | 3 +- 12 files changed, 215 insertions(+), 138 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java diff --git a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java index 7e0d768f3f..a7a29ed424 100644 --- a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java +++ b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java @@ -4,7 +4,7 @@ import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.attachment_types.*; import de.dafuqs.spectrum.blocks.pastel_network.*; -import de.dafuqs.spectrum.blocks.pastel_network.payloads.PastelPayload; +import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; import de.dafuqs.spectrum.capabilities.*; import de.dafuqs.spectrum.compat.*; import de.dafuqs.spectrum.config.*; @@ -123,6 +123,7 @@ public SpectrumCommon(ModContainer container, IEventBus modBus) { logInfo("Registering Block Entities..."); SpectrumBlockEntities.register(modBus); PastelPayload.register(modBus); + PastelPayloadType.register(modBus); modBus.addListener(SpectrumBlockEntities::addBlockEntityTypeBlocks); SpectrumPastelUpgradeSignatures.register(modBus); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index 3a715e772e..e450b722a5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -1,5 +1,6 @@ package de.dafuqs.spectrum.blocks.pastel_network.network; +import com.mojang.serialization.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; import de.dafuqs.spectrum.helpers.*; @@ -21,7 +22,7 @@ @SuppressWarnings("UnstableApiUsage") public class PastelTransmissionLogic { - private enum TransferMode { + public enum TransferMode { PUSH, PULL, PUSH_PULL @@ -44,7 +45,11 @@ public void invalidateCache() { this.pathCache = new HashMap<>(); } - public @Nullable GraphPath getPath(Graph graph, PastelNodeBlockEntity source, PastelNodeBlockEntity destination) { + public @Nullable GraphPath getPath(PastelNodeBlockEntity source, PastelNodeBlockEntity destination) { + return this.getPath(this.network.getGraph(), source, destination); + } + + protected @Nullable GraphPath getPath(Graph graph, PastelNodeBlockEntity source, PastelNodeBlockEntity destination) { if (this.dijkstra == null) { this.dijkstra = new DijkstraShortestPath<>(graph); } @@ -84,102 +89,19 @@ private void transferBetween(PastelNodeType sourceType, PastelNodeType destinati continue; } - IItemHandler sourceStorage = sourceNode.getConnectedStorage(); - if (sourceStorage != null) { - tryTransferToType(sourceNode, sourceStorage, destinationType, transferMode); - } - } - } - - private void tryTransferToType(PastelNodeBlockEntity sourceNode, IItemHandler sourceStorage, PastelNodeType type, TransferMode transferMode) { - for (PastelNodeBlockEntity destinationNode : this.network.getLoadedNodes(type, PastelNetwork.NodePriority.GENERIC)) { - if (!destinationNode.canTransfer()) { - continue; - } - - IItemHandler destinationStorage = destinationNode.getConnectedStorage(); - if (destinationStorage != null) { - boolean success = transferBetween(sourceNode, sourceStorage, destinationNode, destinationStorage, transferMode); - if (success && transferMode != TransferMode.PULL) { - return; - } + for(PastelPayloadType payloadType : sourceNode.getSupportedPayloads()) { + payloadType.tryTransferToType(this, sourceNode, destinationType, transferMode); } } } - private boolean transferBetween(PastelNodeBlockEntity sourceNode, IItemHandler sourceStorage, PastelNodeBlockEntity destinationNode, IItemHandler destinationStorage, TransferMode transferMode) { - // check how much room is in the target inventory - long totalAvailableStorage = -destinationNode.getItemCountUnderway(); - for (int d = 0; d < destinationStorage.getSlots(); d++) { - ItemStack stack = destinationStorage.getStackInSlot(d); - - if (stack.isEmpty()) { - totalAvailableStorage += destinationStorage.getSlotLimit(d); - } else { - totalAvailableStorage += Math.min(destinationStorage.getSlotLimit(d), stack.getMaxStackSize()) - stack.getCount(); - } - } - - if (totalAvailableStorage <= 0) - return false; - - Predicate filter = sourceNode.getTransferFilterTo(destinationNode); - Map proposals = new HashMap<>(); - for (int s = 0; s < sourceStorage.getSlots(); s++) { - ItemStack stack = sourceStorage.extractItem(s, DEFAULT_MAX_TRANSFER_AMOUNT, true); - - if (stack.isEmpty()) - continue; - if (!filter.test(stack)) - continue; - - proposals.put(stack, proposals.getOrDefault(stack, 0L) + stack.getCount()); - } - - for (ItemStack stack : proposals.keySet()) { - long proposedAmount = Math.min(Math.min(proposals.get(stack), sourceNode.getMaxTransferredAmount()), totalAvailableStorage); - if (proposedAmount == 0) - continue; - - ItemStack proposedStack = stack.copyWithCount((int) proposedAmount); - int simulatedAmount = (int) (proposedAmount - ItemHandlerHelper.insertItemStacked(destinationStorage, proposedStack, true).getCount()); - Tuple> matchingStacks = InventoryHelper.getStackCountInInventory(proposedStack, sourceStorage, simulatedAmount); - - if (matchingStacks.getA() == 0) - continue; - - Optional transmission = createTransmissionOnValidPath(sourceNode, destinationNode, new PastelPayload.ItemPastelPayload(proposedStack.copyWithCount(simulatedAmount)), sourceNode.getTransferTime()); - if (transmission.isPresent()) { - int extracted = 0; - for (int i = 0; i < sourceStorage.getSlots(); i++) { - if (ItemStack.isSameItemSameComponents(proposedStack, sourceStorage.getStackInSlot(i))) - extracted += sourceStorage.extractItem(i, simulatedAmount - extracted, false).getCount(); - if (extracted == simulatedAmount) - break; - } - - PastelTransmission trans = transmission.get(); - int travelTime = trans.getTransmissionDuration(); - this.network.addTransmission(trans, travelTime); - PastelTransmissionPayload.sendPastelTransmissionParticle(this.network, trans.getTransmissionDuration(), transmission.get()); - - destinationNode.markTransferred(transferMode != TransferMode.PUSH); - sourceNode.markTransferred(transferMode != TransferMode.PULL); - - destinationNode.addItemCountUnderway(simulatedAmount); - return true; - } - } - return false; + public Set getLoadedNodes(PastelNodeType type) { + return this.network.getLoadedNodes(type, PastelNetwork.NodePriority.GENERIC); } - public Optional createTransmissionOnValidPath(PastelNodeBlockEntity source, PastelNodeBlockEntity destination, PastelPayload payload, int vertexTime) { - GraphPath graphPath = getPath(this.network.getGraph(), source, destination); - if (graphPath != null) { - PastelNodeStatusUpdatePayload.sendPastelNodeStatusUpdate(List.of(source), true); - return Optional.of(new PastelTransmission(graphPath.getVertexList(), payload, vertexTime)); - } - return Optional.empty(); + public void addTransmission(PastelTransmission transmission) { + network.addTransmission(transmission, transmission.getTransmissionDuration()); + PastelTransmissionPayload.sendPastelTransmissionParticle(network, transmission.getTransmissionDuration(), transmission); } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java index 4b271d8201..e9c79be7b0 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java @@ -52,9 +52,9 @@ public class PastelNodeBlock extends SpectrumFacingBlock implements EntityBlock, }}; protected final PastelNodeType pastelNodeType; - protected final Set> supportedPayloads; + protected final Set supportedPayloads; - public PastelNodeBlock(Properties settings, PastelNodeType pastelNodeType, Set> supportedPayloads) { + public PastelNodeBlock(Properties settings, PastelNodeType pastelNodeType, Set supportedPayloads) { super(settings.lightLevel(s -> s.getValue(LIT) ? 13 : 0)); this.pastelNodeType = pastelNodeType; this.supportedPayloads = supportedPayloads; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java index 4c3d23b953..68247e51b4 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java @@ -1,11 +1,13 @@ package de.dafuqs.spectrum.blocks.pastel_network.nodes; import com.google.common.base.*; +import com.mojang.serialization.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.pastel_network.*; import de.dafuqs.spectrum.blocks.pastel_network.*; import de.dafuqs.spectrum.blocks.pastel_network.network.*; +import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.inventories.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; @@ -60,7 +62,6 @@ public class PastelNodeBlockEntity extends BlockEntity implements FilterConfigur protected PastelNetwork.NodePriority priority = PastelNetwork.NodePriority.GENERIC; protected long itemCountUnderway = 0; - // upgrade impl stuff protected boolean lit, triggerTransfer, triggered, waiting, lamp, sensor, updated; protected int transferCount = PastelTransmissionLogic.DEFAULT_MAX_TRANSFER_AMOUNT; @@ -415,6 +416,13 @@ public PastelNodeType getNodeType() { return PastelNodeType.CONNECTION; } + public Set getSupportedPayloads() { + if (this.getBlockState().getBlock() instanceof PastelNodeBlock pastelNodeBlock) { + return pastelNodeBlock.supportedPayloads; + } + return Set.of(); + } + public void setNetworkUUID(@Nullable UUID uuid) { this.networkUUID = Optional.ofNullable(uuid); if (this.getLevel() != null && !this.getLevel().isClientSide()) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java index df11be710d..e5e740af08 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java @@ -3,8 +3,8 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import de.dafuqs.spectrum.blocks.pastel_network.nodes.PastelNodeBlockEntity; -import de.dafuqs.spectrum.helpers.InWorldInteractionHelper; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.client.PastelTransmissionParticle; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -18,27 +18,30 @@ import net.neoforged.neoforge.items.ItemHandlerHelper; import org.jetbrains.annotations.Nullable; -public class ItemPastelPayload implements PastelPayload { +public record ItemPastelPayload(ItemStack itemStack) implements PastelPayload { - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( - ItemStack.CODEC.fieldOf("stack").forGetter(de.dafuqs.spectrum.blocks.pastel_network.payloads.ItemPastelPayload::getItemStack) - ).apply(i, de.dafuqs.spectrum.blocks.pastel_network.payloads.ItemPastelPayload::new)); + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( + ItemStack.CODEC.fieldOf("stack").forGetter(ItemPastelPayload::itemStack) + ).apply(i, ItemPastelPayload::new)); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ItemStack.STREAM_CODEC, de.dafuqs.spectrum.blocks.pastel_network.payloads.ItemPastelPayload::getItemStack, - de.dafuqs.spectrum.blocks.pastel_network.payloads.ItemPastelPayload::new + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ItemStack.STREAM_CODEC, ItemPastelPayload::itemStack, + ItemPastelPayload::new ); - private final ItemStack itemStack; + public void render(PastelTransmissionParticle particle, Level level, PoseStack poseStack, final MultiBufferSource vertexConsumers, int light) { + particle.itemRenderer.renderStatic(this.itemStack, ItemDisplayContext.GROUND, light, OverlayTexture.NO_OVERLAY, poseStack, vertexConsumers, level, 0); + } - public ItemPastelPayload(ItemStack itemStack) { - this.itemStack = itemStack; + public MapCodec codec() { + return CODEC; } - public ItemStack getItemStack() { - return itemStack; + public StreamCodec streamCodec() { + return STREAM_CODEC; } + @Override public void arriveAtDestination(Level level, BlockPos destination, @Nullable PastelNodeBlockEntity destinationNode) { int inserted = 0; int count = itemStack.getCount(); @@ -61,15 +64,4 @@ public void arriveAtDestination(Level level, BlockPos destination, @Nullable Pas } } - public void render(PastelTransmissionParticle particle, Level level, PoseStack poseStack, final MultiBufferSource vertexConsumers, int light) { - particle.itemRenderer.renderStatic(this.itemStack, ItemDisplayContext.GROUND, light, OverlayTexture.NO_OVERLAY, poseStack, vertexConsumers, level, 0); - } - - public MapCodec codec() { - return CODEC; - } - - public StreamCodec streamCodec() { - return STREAM_CODEC; - } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java new file mode 100644 index 0000000000..bcdb89afed --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java @@ -0,0 +1,120 @@ +package de.dafuqs.spectrum.blocks.pastel_network.payloads; + +import de.dafuqs.spectrum.SpectrumCommon; +import de.dafuqs.spectrum.blocks.pastel_network.network.PastelTransmission; +import de.dafuqs.spectrum.blocks.pastel_network.network.PastelTransmissionLogic; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.PastelNodeBlockEntity; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.PastelNodeType; +import de.dafuqs.spectrum.helpers.InventoryHelper; +import de.dafuqs.spectrum.networking.s2c_payloads.PastelNodeStatusUpdatePayload; +import net.minecraft.core.BlockPos; +import net.minecraft.util.Tuple; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.items.IItemHandler; +import net.neoforged.neoforge.items.ItemHandlerHelper; +import org.jgrapht.GraphPath; +import org.jgrapht.graph.DefaultEdge; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Predicate; + +public class ItemPastelPayloadType extends PastelPayloadType { + + public ItemPastelPayloadType() { + super(SpectrumCommon.locate("item"), PastelPayload.ITEM.get()); + } + + @Override + public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode) { + IItemHandler sourceStorage = sourceNode.getConnectedStorage(); + if (sourceStorage == null) { + return; + } + + for (PastelNodeBlockEntity destinationNode : logic.getLoadedNodes(type)) { + if (!destinationNode.canTransfer()) { + continue; + } + + IItemHandler destinationStorage = destinationNode.getConnectedStorage(); + if (destinationStorage != null) { + boolean success = transferBetween(logic, sourceNode, sourceStorage, destinationNode, destinationStorage, transferMode); + if (success && transferMode != PastelTransmissionLogic.TransferMode.PULL) { + return; + } + } + } + } + + private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, IItemHandler sourceStorage, PastelNodeBlockEntity destinationNode, IItemHandler destinationStorage, PastelTransmissionLogic.TransferMode transferMode) { + // check how much room is in the target inventory + long totalAvailableStorage = -destinationNode.getItemCountUnderway(); + for (int d = 0; d < destinationStorage.getSlots(); d++) { + ItemStack stack = destinationStorage.getStackInSlot(d); + + if (stack.isEmpty()) { + totalAvailableStorage += destinationStorage.getSlotLimit(d); + } else { + totalAvailableStorage += Math.min(destinationStorage.getSlotLimit(d), stack.getMaxStackSize()) - stack.getCount(); + } + } + + if (totalAvailableStorage <= 0) + return false; + + Predicate filter = sourceNode.getTransferFilterTo(destinationNode); + Map proposals = new HashMap<>(); + for (int s = 0; s < sourceStorage.getSlots(); s++) { + ItemStack stack = sourceStorage.extractItem(s, PastelTransmissionLogic.DEFAULT_MAX_TRANSFER_AMOUNT, true); + + if (stack.isEmpty()) + continue; + if (!filter.test(stack)) + continue; + + proposals.put(stack, proposals.getOrDefault(stack, 0L) + stack.getCount()); + } + + for (ItemStack stack : proposals.keySet()) { + long proposedAmount = Math.min(Math.min(proposals.get(stack), sourceNode.getMaxTransferredAmount()), totalAvailableStorage); + if (proposedAmount == 0) + continue; + + ItemStack proposedStack = stack.copyWithCount((int) proposedAmount); + int simulatedAmount = (int) (proposedAmount - ItemHandlerHelper.insertItemStacked(destinationStorage, proposedStack, true).getCount()); + Tuple> matchingStacks = InventoryHelper.getStackCountInInventory(proposedStack, sourceStorage, simulatedAmount); + + if (matchingStacks.getA() == 0) + continue; + + PastelPayload payload = new ItemPastelPayload(proposedStack.copyWithCount(simulatedAmount)); + int vertexTime = sourceNode.getTransferTime(); + GraphPath graphPath = logic.getPath(sourceNode, destinationNode); + if (graphPath == null) { + return false; + } + + PastelNodeStatusUpdatePayload.sendPastelNodeStatusUpdate(List.of(sourceNode), true); + PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), payload, vertexTime); + int extracted = 0; + for (int i = 0; i < sourceStorage.getSlots(); i++) { + if (ItemStack.isSameItemSameComponents(proposedStack, sourceStorage.getStackInSlot(i))) + extracted += sourceStorage.extractItem(i, simulatedAmount - extracted, false).getCount(); + if (extracted == simulatedAmount) + break; + } + + logic.addTransmission(transmission); + + destinationNode.markTransferred(transferMode != PastelTransmissionLogic.TransferMode.PUSH); + sourceNode.markTransferred(transferMode != PastelTransmissionLogic.TransferMode.PULL); + + destinationNode.addItemCountUnderway(simulatedAmount); + return true; + } + return false; + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java index 5a9555086e..6b4d9940c9 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java @@ -2,8 +2,8 @@ import com.mojang.blaze3d.vertex.*; import com.mojang.serialization.*; -import com.sammy.malum.registry.common.worldgen.*; import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.particle.client.*; import de.dafuqs.spectrum.registries.*; @@ -11,21 +11,20 @@ import net.minecraft.core.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; +import net.minecraft.resources.*; import net.minecraft.world.level.*; -import net.minecraft.world.level.levelgen.feature.*; import net.neoforged.bus.api.*; import net.neoforged.neoforge.registries.*; public interface PastelPayload { - Codec CODEC = SpectrumRegistries.PASTEL_PAYLOAD_TYPE.byNameCodec().dispatch(PastelPayload::codec, codec -> codec); - StreamCodec STREAM_CODEC = ByteBufCodecs.fromCodecWithRegistries(CODEC); - - DeferredRegister> REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, SpectrumCommon.MOD_ID); - + DeferredRegister> REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_PAYLOAD, SpectrumCommon.MOD_ID); DeferredHolder, MapCodec> ITEM = REGISTRAR.register("item", () -> ItemPastelPayload.CODEC); - DeferredHolder, MapCodec> FLUID = REGISTRAR.register("fluid", () -> FluidPastelPayload.CODEC); - DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); + //DeferredHolder, MapCodec> FLUID = REGISTRAR.register("fluid", () -> FluidPastelPayload.CODEC); + //DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); + + Codec CODEC = SpectrumRegistries.PASTEL_PAYLOAD.byNameCodec().dispatch(PastelPayload::codec, codec -> codec); + StreamCodec STREAM_CODEC = ByteBufCodecs.fromCodecWithRegistries(CODEC); static void register(IEventBus modBus) { REGISTRAR.register(modBus); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java new file mode 100644 index 0000000000..ffc1c54d48 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java @@ -0,0 +1,33 @@ +package de.dafuqs.spectrum.blocks.pastel_network.payloads; + +import com.mojang.serialization.*; +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.blocks.pastel_network.network.*; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.resources.*; +import net.neoforged.bus.api.*; +import net.neoforged.neoforge.registries.*; + +public abstract class PastelPayloadType { + + public static final DeferredRegister REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, SpectrumCommon.MOD_ID); + public static final DeferredHolder ITEM = REGISTRAR.register("item", ItemPastelPayloadType::new); + //DeferredHolder, MapCodec> FLUID = REGISTRAR.register("fluid", () -> FluidPastelPayload.CODEC); + //DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); + + public static void register(IEventBus modBus) { + REGISTRAR.register(modBus); + } + + protected final ResourceLocation id; + protected final MapCodec codec; + + public PastelPayloadType(ResourceLocation id, MapCodec codec) { + this.id = id; + this.codec = codec; + } + + public abstract void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode); + +} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index a08c13ddd7..40d53da6b3 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -567,12 +567,12 @@ private static BlockBehaviour.Properties pastelNode(SoundType soundGroup) { return settings(MapColor.NONE, soundGroup, 1.0F).pushReaction(PushReaction.DESTROY).noOcclusion(); } - public static final DeferredBlock CONNECTION_NODE = register(blockWithItem("connection_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.CONNECTION), () -> IS.of(), InkColors.LIGHT_GRAY).withPredefinedItemModel()); + public static final DeferredBlock CONNECTION_NODE = register(blockWithItem("connection_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.CONNECTION, Set.of()), () -> IS.of(), InkColors.LIGHT_GRAY).withPredefinedItemModel()); - public static final DeferredBlock PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(PastelPayload.ITEM.get())), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); - public static final DeferredBlock STORAGE_NODE = register(blockWithItem("storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); - public static final DeferredBlock SENDER_NODE = register(blockWithItem("sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); - public static final DeferredBlock GATHER_NODE = register(blockWithItem("gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); + public static final DeferredBlock PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(PastelPayloadType.ITEM.get())), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); + public static final DeferredBlock STORAGE_NODE = register(blockWithItem("storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(PastelPayloadType.ITEM.get())), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); + public static final DeferredBlock SENDER_NODE = register(blockWithItem("sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(PastelPayloadType.ITEM.get())), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); + public static final DeferredBlock GATHER_NODE = register(blockWithItem("gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(PastelPayloadType.ITEM.get())), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); // COLORED BLOCK FAMILIES diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java index de187297bc..26516143f4 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java @@ -22,7 +22,6 @@ public class SpectrumPastelUpgradeSignatures { public static final PastelUpgradeSignature.Category REDSTONE = PastelUpgradeSignature.Category.redstone(); public static void register(IEventBus eventBus) { - DeferredHolder WEAK_STACK = register( "weak_stack", () -> PastelUpgradeSignature.builder(SpectrumItems.RAW_BLOODSTONE.get(), STACK, NAMESPACE) .named("weak_stack").stackMod(3).stackMult(2).build() diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java index 25b0e287f2..bd393633b1 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java @@ -27,7 +27,8 @@ public class SpectrumRegistries { public static final Registry PASTEL_UPGRADE = register(SpectrumRegistryKeys.PASTEL_UPGRADE, false); public static final Registry RECIPE_SCALING = register(SpectrumRegistryKeys.RECIPE_SCALING, true); public static final Registry> RESONANCE_PROCESSOR_TYPE = register(SpectrumRegistryKeys.RESONANCE_PROCESSOR_TYPE, false); - public static final Registry> PASTEL_PAYLOAD_TYPE = register(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, false); + public static final Registry PASTEL_PAYLOAD_TYPE = register(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, false); + public static final Registry> PASTEL_PAYLOAD = register(SpectrumRegistryKeys.PASTEL_PAYLOAD, false); private static Registry register(ResourceKey> key, boolean synced) { return new RegistryBuilder<>(key).sync(synced).create(); @@ -42,6 +43,7 @@ public static void registerBuiltInRegistries(NewRegistryEvent event) { event.register(RECIPE_SCALING); event.register(RESONANCE_PROCESSOR_TYPE); event.register(PASTEL_PAYLOAD_TYPE); + event.register(PASTEL_PAYLOAD); } public static void registerDynamicRegistries(DataPackRegistryEvent.NewRegistry event) { diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java index 0534d3a08c..3078a1a2fa 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java @@ -27,7 +27,8 @@ public class SpectrumRegistryKeys { public static final ResourceKey> RECIPE_SCALING = of("recipe_scaling"); public static final ResourceKey>> RESONANCE_PROCESSOR_TYPE = of("resonance_processor_type"); public static final ResourceKey> RESONANCE_PROCESSOR = of("resonance_processor"); - public static final ResourceKey>> PASTEL_PAYLOAD_TYPE = of("pastel_payload_type"); + public static final ResourceKey> PASTEL_PAYLOAD_TYPE = of("pastel_payload_type"); + public static final ResourceKey>> PASTEL_PAYLOAD = of("pastel_payload"); private static ResourceKey> of(String name) { return ResourceKey.createRegistryKey(SpectrumCommon.locate(name)); From 33ada20939b6040a38cd07df98906c00459a736a Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 5 Apr 2026 22:28:47 +0200 Subject: [PATCH 005/477] SpectrumFluidTank --- .../spectrum/api/fluid/SpectrumFluidTank.java | 29 ++++++++++++++++ .../crystallarieum/CrystallarieumBlock.java | 2 +- .../CrystallarieumBlockEntity.java | 25 +++++++++----- .../CrystallarieumBlockEntityRenderer.java | 4 +-- .../FusionShrineBlockEntity.java | 12 +++++-- .../TitrationBarrelBlock.java | 14 ++++---- .../TitrationBarrelBlockEntity.java | 33 +++++++++++-------- .../capabilities/SpectrumCapabilities.java | 6 ++-- 8 files changed, 86 insertions(+), 39 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/api/fluid/SpectrumFluidTank.java diff --git a/src/main/java/de/dafuqs/spectrum/api/fluid/SpectrumFluidTank.java b/src/main/java/de/dafuqs/spectrum/api/fluid/SpectrumFluidTank.java new file mode 100644 index 0000000000..da8455875d --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/api/fluid/SpectrumFluidTank.java @@ -0,0 +1,29 @@ +package de.dafuqs.spectrum.api.fluid; + +import net.neoforged.neoforge.fluids.*; +import net.neoforged.neoforge.fluids.capability.templates.*; +import org.jetbrains.annotations.*; + +public class SpectrumFluidTank extends FluidTank { + private final Callback updateCallback; + + public SpectrumFluidTank(int capacity, Callback updateCallback) { + super(capacity); + this.updateCallback = updateCallback; + } + + protected void onContentsChanged() { + super.onContentsChanged(); + this.updateCallback.onFluidContentsChanged(); + } + + public void setFluid(@NotNull FluidStack stack) { + super.setFluid(stack); + this.updateCallback.onFluidContentsChanged(); + } + + public interface Callback { + FluidTank getFluidTank(); + void onFluidContentsChanged(); + } +} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlock.java index 0f69be5d2c..4d2edd19d7 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlock.java @@ -86,7 +86,7 @@ public ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level } return ItemInteractionResult.CONSUME; } else { - if (FluidUtil.interactWithFluidHandler(player, hand, crystallarieumBlockEntity.fluidStorage)) { + if (FluidUtil.interactWithFluidHandler(player, hand, crystallarieumBlockEntity.tank)) { crystallarieumBlockEntity.updateInClientWorld(); return ItemInteractionResult.CONSUME; } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java index e29c16fa5a..fd18c75e38 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java @@ -3,6 +3,7 @@ import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.energy.*; import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.api.fluid.*; import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.helpers.*; @@ -27,7 +28,7 @@ import java.util.*; -public class CrystallarieumBlockEntity extends InWorldInteractionBlockEntity implements PlayerOwned, InkStorageBlockEntity { +public class CrystallarieumBlockEntity extends InWorldInteractionBlockEntity implements PlayerOwned, InkStorageBlockEntity, SpectrumFluidTank.Callback { private final static FlowAnimator.Factory FACTORY; @@ -46,7 +47,7 @@ public class CrystallarieumBlockEntity extends InWorldInteractionBlockEntity imp @Nullable protected RecipeHolder currentRecipe; protected CrystallarieumCatalyst currentCatalyst = CrystallarieumCatalyst.EMPTY; - protected FluidTank fluidStorage = new FluidTank(1000); + protected FluidTank tank = new SpectrumFluidTank(1000, this); // for performance reasons, the crystallarieum only processes recipe logic every 20 ticks public static final int SECOND = 20; @@ -90,7 +91,7 @@ public void updateAnimator() { if (currentRecipe == null) { animator.swapState(FlowStates.INACTIVE); } else { - if (currentRecipe.value().getFluidIngredient().test(fluidStorage.getFluid()) && inkStorage.getEnergy(currentRecipe.value().getInkColor()) > 0) { + if (currentRecipe.value().getFluidIngredient().test(tank.getFluid()) && inkStorage.getEnergy(currentRecipe.value().getInkColor()) > 0) { animator.swapState(FlowStates.ACTIVE); } else { animator.swapState(FlowStates.IDLE); @@ -125,7 +126,7 @@ private static void tickRecipe(@NotNull Level world, BlockPos blockPos, Crystall return; } - if (crystallarieum.canWork && (!recipe.value().getFluidIngredient().test(crystallarieum.fluidStorage.getFluid()) || crystallarieum.inkStorage.getEnergy(recipe.value().getInkColor()) == 0)) { + if (crystallarieum.canWork && (!recipe.value().getFluidIngredient().test(crystallarieum.tank.getFluid()) || crystallarieum.inkStorage.getEnergy(recipe.value().getInkColor()) == 0)) { crystallarieum.canWork = false; return; } @@ -209,7 +210,7 @@ public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup this.tickLooper = TickLooper.readNbt(nbt.getCompound("Looper")); } - this.fluidStorage.readFromNBT(registryLookup, nbt); + this.tank.readFromNBT(registryLookup, nbt); this.canWork = nbt.getBoolean("CanWork"); this.ownerUUID = PlayerOwnedWithName.readOwnerUUID(nbt); this.currentCatalyst = CrystallarieumCatalyst.EMPTY; @@ -227,7 +228,7 @@ public void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup CodecHelper.writeNbt(nbt, "InkStorage", InkStorageComponent.CODEC, new InkStorageComponent(this.inkStorage)); nbt.put("Looper", this.tickLooper.toNbt()); - this.fluidStorage.writeToNBT(registryLookup, nbt); + this.tank.writeToNBT(registryLookup, nbt); nbt.putBoolean("CanWork", this.canWork); nbt.putInt("CurrentGrowthStageDuration", this.currentGrowthStageTicks); PlayerOwned.writeOwnerUUID(nbt, this.ownerUUID); @@ -248,7 +249,7 @@ public void setOwner(Player playerEntity) { } /** - * Searches recipes for a valid one using itemStack and plants the first block of that recipe on top + * Searches recipes for a valid one using fluidStack and plants the first block of that recipe on top * * @param itemStack stack that is tried to plant on top, if a valid recipe */ @@ -303,8 +304,8 @@ public void acceptStack(ItemStack itemStack, boolean creative, @Nullable UUID pl } } - public FluidTank getFluidStorage() { - return fluidStorage; + public FluidTank getFluidTank() { + return tank; } /** @@ -394,4 +395,10 @@ public boolean canPlaceItem(int slot, ItemStack stack) { FACTORY = builder.build(); } + + @Override + public void onFluidContentsChanged() { + this.inventoryChanged(); + } + } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntityRenderer.java index a2a63290a5..b5f392b589 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntityRenderer.java @@ -54,7 +54,7 @@ public void render(CrystallarieumBlockEntity crystal, float tickDelta, @NotNull renderHalo(crystal, tickDelta, matrices, vertexConsumers, light, overlay, vertices); - FluidStack fluid = crystal.fluidStorage.getFluid(); + FluidStack fluid = crystal.tank.getFluid(); if (!fluid.isEmpty()) { matrices.pushPose(); @@ -66,7 +66,7 @@ public void render(CrystallarieumBlockEntity crystal, float tickDelta, @NotNull int skylight = crystal.getLevel().getBrightness(LightLayer.BLOCK, pos); int glow = LightTexture.pack(Math.max(luminance, skylight), crystal.getLevel().getBrightness(LightLayer.SKY, pos)); - boolean full = crystal.fluidStorage.getFluidAmount() == crystal.fluidStorage.getCapacity(); + boolean full = crystal.tank.getFluidAmount() == crystal.tank.getCapacity(); float y = full ? 0.975F : 0.94F; int rim = full ? 1 : 2; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlockEntity.java index c72e16c6be..d1d5b123c6 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlockEntity.java @@ -3,6 +3,7 @@ import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.color.*; import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.fluid.*; import de.dafuqs.spectrum.api.recipe.*; import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.blocks.upgrade.*; @@ -32,7 +33,7 @@ import java.util.*; -public class FusionShrineBlockEntity extends InWorldInteractionBlockEntity implements PlayerOwned, Upgradeable { +public class FusionShrineBlockEntity extends InWorldInteractionBlockEntity implements PlayerOwned, Upgradeable, SpectrumFluidTank.Callback { protected static final int INVENTORY_SIZE = 7; @@ -44,7 +45,7 @@ public class FusionShrineBlockEntity extends InWorldInteractionBlockEntity imple private boolean inventoryChanged = true; - public final FluidTank tank = new FluidTank(1000); + public final FluidTank tank = new SpectrumFluidTank(1000, this); public FusionShrineBlockEntity(BlockPos pos, BlockState state) { super(SpectrumBlockEntities.FUSION_SHRINE.get(), pos, state, INVENTORY_SIZE); @@ -302,8 +303,13 @@ public void inventoryChanged() { this.craftingTime = 0; } - public FluidTank getFluidStorage() { + public FluidTank getFluidTank() { return tank; } + @Override + public void onFluidContentsChanged() { + this.inventoryChanged(); + } + } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlock.java index c0097ac4b7..4697b26ae7 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlock.java @@ -97,7 +97,7 @@ public ItemInteractionResult useItemOn(ItemStack handStack, BlockState state, Le // or seal it with a piece of colored wood if (handStack.isEmpty()) { int itemCount = InventoryHelper.countItemsInInventory(barrelEntity.items); - FluidStack fluid = barrelEntity.fluidStorage.getFluid(); + FluidStack fluid = barrelEntity.tank.getFluid(); if (fluid.isEmpty()) { if (itemCount == TitrationBarrelBlockEntity.MAX_ITEM_COUNT) { player.displayClientMessage(Component.translatable("block.spectrum.titration_barrel.content_count_without_fluid_full", itemCount), true); @@ -125,9 +125,9 @@ public ItemInteractionResult useItemOn(ItemStack handStack, BlockState state, Le return ItemInteractionResult.CONSUME; } - if (FluidUtil.interactWithFluidHandler(player, hand, barrelEntity.fluidStorage)) { - if (!barrelEntity.fluidStorage.isEmpty()) { - if (state.getValue(BARREL_STATE) == TitrationBarrelBlock.BarrelState.FILLED && barrelEntity.fluidStorage.isEmpty()) { + if (FluidUtil.interactWithFluidHandler(player, hand, barrelEntity.tank)) { + if (!barrelEntity.tank.isEmpty()) { + if (state.getValue(BARREL_STATE) == TitrationBarrelBlock.BarrelState.FILLED && barrelEntity.tank.isEmpty()) { world.setBlockAndUpdate(pos, state.setValue(BARREL_STATE, TitrationBarrelBlock.BarrelState.EMPTY)); } } else { @@ -208,7 +208,7 @@ private void tryExtractLastStack(BlockState state, Level world, BlockPos pos, Pl if (stack.isPresent()) { player.getInventory().placeItemBackInInventory(stack.get()); barrelEntity.setChanged(); - if (barrelEntity.items.isEmpty() && barrelEntity.fluidStorage.isEmpty()) { + if (barrelEntity.items.isEmpty() && barrelEntity.tank.isEmpty()) { world.setBlockAndUpdate(pos, state.setValue(BARREL_STATE, BarrelState.EMPTY)); } else { // They'll get updated if the block state changes anyway @@ -280,8 +280,8 @@ public int getAnalogOutputSignal(BlockState state, Level world, BlockPos pos) { float icurr = InventoryHelper.countItemsInInventory(blockEntity); float imax = TitrationBarrelBlockEntity.MAX_ITEM_COUNT; - float fcurr = blockEntity.fluidStorage.getFluidAmount(); - float fmax = blockEntity.fluidStorage.getCapacity(); + float fcurr = blockEntity.tank.getFluidAmount(); + float fmax = blockEntity.tank.getCapacity(); return Mth.floor(((icurr / imax) + (fcurr / fmax)) / 2.0f * 14.0f) + isNotEmpty; } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlockEntity.java index 6a867ed404..23230bcaec 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlockEntity.java @@ -1,6 +1,7 @@ package de.dafuqs.spectrum.blocks.titration_barrel; import de.dafuqs.spectrum.api.block.*; +import de.dafuqs.spectrum.api.fluid.*; import de.dafuqs.spectrum.api.recipe.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.mixin.accessors.*; @@ -28,20 +29,20 @@ import static de.dafuqs.spectrum.blocks.titration_barrel.TitrationBarrelBlock.*; -public class TitrationBarrelBlockEntity extends BlockEntity implements ImplementedInventory { +public class TitrationBarrelBlockEntity extends BlockEntity implements ImplementedInventory, SpectrumFluidTank.Callback { protected static final int INVENTORY_SIZE = 5; public static final int MAX_ITEM_COUNT = 64; protected NonNullList items; - protected FluidTank fluidStorage = new FluidTank(1000); + protected FluidTank tank = new SpectrumFluidTank(1000, this); @Override public NonNullList getItems() { return this.items; } - public FluidTank getFluidStorage() { - return this.fluidStorage; + public FluidTank getFluidTank() { + return this.tank; } // Times in milliseconds using the Date class @@ -76,7 +77,7 @@ public void inventoryChanged() { protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { super.saveAdditional(nbt, registryLookup); ContainerHelper.saveAllItems(nbt, items, registryLookup); - fluidStorage.writeToNBT(registryLookup, nbt); + tank.writeToNBT(registryLookup, nbt); nbt.putLong("SealTime", this.sealTime); nbt.putLong("TapTime", this.tapTime); nbt.putInt("ExtractedBottles", this.extractedBottles); @@ -88,7 +89,7 @@ public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup this.items = NonNullList.withSize(INVENTORY_SIZE, ItemStack.EMPTY); ContainerHelper.loadAllItems(nbt, items, registryLookup); - this.fluidStorage.readFromNBT(registryLookup, nbt); + this.tank.readFromNBT(registryLookup, nbt); this.sealTime = nbt.contains("SealTime", Tag.TAG_LONG) ? nbt.getLong("SealTime") : -1; this.tapTime = nbt.contains("TapTime", Tag.TAG_LONG) ? nbt.getLong("TapTime") : -1; this.extractedBottles = nbt.contains("ExtractedBottles", Tag.TAG_ANY_NUMERIC) ? nbt.getInt("ExtractedBottles") : 0; @@ -107,7 +108,7 @@ public void tap() { public void reset(Level world, BlockPos blockPos, BlockState state) { this.sealTime = -1; this.tapTime = -1; - this.fluidStorage.setFluid(FluidStack.EMPTY); + this.tank.setFluid(FluidStack.EMPTY); this.extractedBottles = 0; this.getItems().clear(); @@ -143,7 +144,7 @@ public String getSealRealDays() { } private boolean isEmpty(float temperature, int extractedBottles, ITitrationBarrelRecipe recipe) { - if (level == null || !recipe.getFluidInput().test(getFluidStorage().getFluid())) { + if (level == null || !recipe.getFluidInput().test(getFluidTank().getFluid())) { return true; } return extractedBottles >= recipe.getOutputCountAfterAngelsShare(this.level, temperature, getSealSeconds()); @@ -166,7 +167,7 @@ public ItemStack tryHarvest(Level world, BlockPos blockPos, BlockState blockStat Optional> optionalRecipe = getRecipeForInventory(world); if (optionalRecipe.isEmpty()) { - if (getItems().isEmpty() && fluidStorage.isEmpty()) { + if (getItems().isEmpty() && tank.isEmpty()) { message = Component.translatable("block.spectrum.titration_barrel.empty_when_tapping"); } else { message = Component.translatable("block.spectrum.titration_barrel.invalid_recipe_when_tapping"); @@ -175,7 +176,7 @@ public ItemStack tryHarvest(Level world, BlockPos blockPos, BlockState blockStat } else { ITitrationBarrelRecipe recipe = optionalRecipe.get().value(); - if (recipe.getFluidInput().test(this.fluidStorage.getFluid())) { + if (recipe.getFluidInput().test(this.tank.getFluid())) { if (recipe.canPlayerCraft(player)) { boolean canTap = true; Item tappingItem = recipe.getTappingItem(); @@ -199,7 +200,7 @@ public ItemStack tryHarvest(Level world, BlockPos blockPos, BlockState blockStat message = Component.translatable("block.spectrum.titration_barrel.recipe_not_unlocked"); } } else { - if (fluidStorage.isEmpty()) { + if (tank.isEmpty()) { message = Component.translatable("block.spectrum.titration_barrel.missing_liquid_when_tapping"); } else { message = Component.translatable("block.spectrum.titration_barrel.invalid_recipe_when_tapping"); @@ -229,7 +230,7 @@ public Optional> getRecipeForInventory(Leve } public FluidRecipeInput getRecipeInput() { - return new FluidRecipeInput<>(items, fluidStorage); + return new FluidRecipeInput<>(items, tank); } public void giveRecipeRemainders(@Nullable Player player) { @@ -248,7 +249,7 @@ public void giveRecipeRemainders(@Nullable Player player) { public boolean canBeSealed(@Nullable Player player) { int itemCount = InventoryHelper.countItemsInInventory(getItems()); - if (itemCount == 0 && fluidStorage.isEmpty()) { + if (itemCount == 0 && tank.isEmpty()) { return true; // tap empty barrel advancement } @@ -256,7 +257,7 @@ public boolean canBeSealed(@Nullable Player player) { Optional> optionalRecipe = getRecipeForInventory(level); return optionalRecipe.isPresent() && (player == null || optionalRecipe.get().value().canPlayerCraft(player)) - && optionalRecipe.get().value().getFluidInput().test(fluidStorage.getFluid()); + && optionalRecipe.get().value().getFluidInput().test(tank.getFluid()); } return false; @@ -280,4 +281,8 @@ public boolean isInteractionAllowed() { return false; } + @Override + public void onFluidContentsChanged() { + this.inventoryChanged(); + } } diff --git a/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java b/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java index d47fa3e46c..bd4e8f5fc8 100644 --- a/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java +++ b/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java @@ -48,9 +48,9 @@ public static void register(RegisterCapabilitiesEvent event) { event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, SpectrumBlockEntities.AMPHORA.get(), (@NotNull AmphoraBlockEntity blockEntity, Direction direction) -> new InvWrapper(blockEntity)); // FluidHandler.BLOCK - event.registerBlockEntity(Capabilities.FluidHandler.BLOCK, SpectrumBlockEntities.FUSION_SHRINE.get(), (blockEntity, context) -> blockEntity.getFluidStorage()); - event.registerBlockEntity(Capabilities.FluidHandler.BLOCK, SpectrumBlockEntities.CRYSTALLARIEUM.get(), (blockEntity, context) -> blockEntity.getFluidStorage()); - event.registerBlockEntity(Capabilities.FluidHandler.BLOCK, SpectrumBlockEntities.TITRATION_BARREL.get(), (blockEntity, context) -> blockEntity.getFluidStorage()); + event.registerBlockEntity(Capabilities.FluidHandler.BLOCK, SpectrumBlockEntities.FUSION_SHRINE.get(), (blockEntity, context) -> blockEntity.getFluidTank()); + event.registerBlockEntity(Capabilities.FluidHandler.BLOCK, SpectrumBlockEntities.CRYSTALLARIEUM.get(), (blockEntity, context) -> blockEntity.getFluidTank()); + event.registerBlockEntity(Capabilities.FluidHandler.BLOCK, SpectrumBlockEntities.TITRATION_BARREL.get(), (blockEntity, context) -> blockEntity.getFluidTank()); // ItemHandler.ITEM event.registerItem(Capabilities.ItemHandler.ITEM, (stack, ctx) -> BottomlessItemCapability.get(stack), SpectrumBlocks.BOTTOMLESS_BUNDLE.asItem()); From 1608db0729997b0147db564ee96bfd650284236b Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 5 Apr 2026 22:29:38 +0200 Subject: [PATCH 006/477] tidy up code --- .../registries/SpectrumMobEffectTags.java | 2 +- .../SpectrumPastelUpgradeSignatures.java | 30 ++++++++-------- .../registries/SpectrumTreeGrowers.java | 36 +++++++++---------- 3 files changed, 33 insertions(+), 35 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumMobEffectTags.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumMobEffectTags.java index 9fac4a13f4..bab153251f 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumMobEffectTags.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumMobEffectTags.java @@ -11,7 +11,7 @@ public class SpectrumMobEffectTags { public static TagKey BYPASSES_WHISPY_CIRCLET = of("bypasses_whispy_circlet"); public static TagKey BYPASSES_NECTAR_GLOVES = of("bypasses_nectar_gloves"); public static TagKey BYPASSES_IMMUNITY = of("bypasses_immunity"); - public static TagKey NO_DURATION_EXTENSION = of("no_duration_extension"); // TODO + public static TagKey NO_DURATION_EXTENSION = of("no_duration_extension"); public static TagKey SOPORIFIC = of("soporific"); public static TagKey NIGHT_ALCHEMY = of("night_alchemy"); public static TagKey STACKING = of("stacking"); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java index 26516143f4..fe796333bd 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java @@ -13,8 +13,6 @@ public class SpectrumPastelUpgradeSignatures { private static final DeferredRegister REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_UPGRADE, SpectrumCommon.MOD_ID); - private static final String NAMESPACE = SpectrumCommon.MOD_ID; - public static final PastelUpgradeSignature.Category NON_COMPOUNDING = PastelUpgradeSignature.Category.nonCompounding(); public static final PastelUpgradeSignature.Category STACK = PastelUpgradeSignature.Category.simple(); public static final PastelUpgradeSignature.Category SPEED = PastelUpgradeSignature.Category.simple(); @@ -23,59 +21,59 @@ public class SpectrumPastelUpgradeSignatures { public static void register(IEventBus eventBus) { DeferredHolder WEAK_STACK = register( - "weak_stack", () -> PastelUpgradeSignature.builder(SpectrumItems.RAW_BLOODSTONE.get(), STACK, NAMESPACE) + "weak_stack", () -> PastelUpgradeSignature.builder(SpectrumItems.RAW_BLOODSTONE.get(), STACK, SpectrumCommon.MOD_ID) .named("weak_stack").stackMod(3).stackMult(2).build() ); DeferredHolder STRONG_STACK = register( - "strong_stack", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_BLOODSTONE.get(), STACK, NAMESPACE) + "strong_stack", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_BLOODSTONE.get(), STACK, SpectrumCommon.MOD_ID) .named("strong_stack").stackMod(15).stackMult(4).build() ); DeferredHolder WEAK_SPEED = register( - "weak_speed", () -> PastelUpgradeSignature.builder(SpectrumItems.RAW_MALACHITE.get(), SPEED, NAMESPACE) + "weak_speed", () -> PastelUpgradeSignature.builder(SpectrumItems.RAW_MALACHITE.get(), SPEED, SpectrumCommon.MOD_ID) .named("weak_speed").speedMod(-5).speedMult(0.8F).build() ); DeferredHolder STRONG_SPEED = register( - "strong_speed", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_MALACHITE.get(), SPEED, NAMESPACE) + "strong_speed", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_MALACHITE.get(), SPEED, SpectrumCommon.MOD_ID) .named("strong_speed").speedMod(-10).speedMult(0.5F).build() ); DeferredHolder WEAK_FILTER = register( - "weak_filter", () -> PastelUpgradeSignature.builder(SpectrumItems.RAW_AZURITE.get(), FILTER, NAMESPACE) + "weak_filter", () -> PastelUpgradeSignature.builder(SpectrumItems.RAW_AZURITE.get(), FILTER, SpectrumCommon.MOD_ID) .named("weak_filter").slotRowMod(1).build() ); DeferredHolder STRONG_FILTER = register( - "strong_filter", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_AZURITE.get(), FILTER, NAMESPACE) + "strong_filter", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_AZURITE.get(), FILTER, SpectrumCommon.MOD_ID) .named("strong_filter").slotRowMod(2).build() ); DeferredHolder RATE = register( - "rate", () -> PastelUpgradeSignature.builder(SpectrumItems.RESONANCE_SHARD.get(), NON_COMPOUNDING, NAMESPACE) + "rate", () -> PastelUpgradeSignature.builder(SpectrumItems.RESONANCE_SHARD.get(), NON_COMPOUNDING, SpectrumCommon.MOD_ID) .named("rate").priority(true).build() ); DeferredHolder LIGHT = register( - "light", () -> PastelUpgradeSignature.builder(SpectrumItems.SHIMMERSTONE_GEM.get(), NON_COMPOUNDING, NAMESPACE) + "light", () -> PastelUpgradeSignature.builder(SpectrumItems.SHIMMERSTONE_GEM.get(), NON_COMPOUNDING, SpectrumCommon.MOD_ID) .named("light").light(true).build() ); DeferredHolder ALWAYS_ACTIVE = register( - "always_active", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_REDSTONE.get(), REDSTONE, NAMESPACE) + "always_active", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_REDSTONE.get(), REDSTONE, SpectrumCommon.MOD_ID) .redstone("always_active").redstonePreProcess(context -> InteractionResult.SUCCESS).buildRedstone() ); DeferredHolder ALWAYS_INACTIVE = register( - "always_inactive", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_LAPIS.get(), REDSTONE, NAMESPACE) + "always_inactive", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_LAPIS.get(), REDSTONE, SpectrumCommon.MOD_ID) .redstone("always_inactive").redstonePreProcess(context -> InteractionResult.FAIL).buildRedstone() ); DeferredHolder INVERTED = register( - "inverted", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_COAL.get(), REDSTONE, NAMESPACE) + "inverted", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_COAL.get(), REDSTONE, SpectrumCommon.MOD_ID) .redstone("inverted").redstonePostProcess(context -> context.active() ? InteractionResult.FAIL : InteractionResult.SUCCESS).buildRedstone() ); DeferredHolder SENSOR = register( - "sensor", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_ECHO.get(), REDSTONE, NAMESPACE) + "sensor", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_ECHO.get(), REDSTONE, SpectrumCommon.MOD_ID) .redstone("sensor").sensor(true).buildRedstone() ); DeferredHolder TRIGGER = register( - "trigger", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_QUARTZ.get(), REDSTONE, NAMESPACE) + "trigger", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_QUARTZ.get(), REDSTONE, SpectrumCommon.MOD_ID) .redstone("trigger").triggerTransfer(true).buildRedstone() ); DeferredHolder LAMP = register( - "lamp", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_GLOWSTONE.get(), REDSTONE, NAMESPACE) + "lamp", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_GLOWSTONE.get(), REDSTONE, SpectrumCommon.MOD_ID) .redstone("lamp").lamp(true).buildRedstone() ); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumTreeGrowers.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumTreeGrowers.java index 3839d57e4f..5e9fed85ce 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumTreeGrowers.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumTreeGrowers.java @@ -10,26 +10,26 @@ @SuppressWarnings("unused") public class SpectrumTreeGrowers { - public static final TreeGrower WHITE_COLORED_SAPLING_GENERATOR = registerRegular(SpectrumCommon.locate("colored_trees/white")); - public static final TreeGrower ORANGE_COLORED_SAPLING_GENERATOR = registerRegular(SpectrumCommon.locate("colored_trees/orange")); - public static final TreeGrower MAGENTA_COLORED_SAPLING_GENERATOR = registerRegular(SpectrumCommon.locate("colored_trees/magenta")); - public static final TreeGrower LIGHT_BLUE_COLORED_SAPLING_GENERATOR = registerRegular(SpectrumCommon.locate("colored_trees/light_blue")); - public static final TreeGrower YELLOW_COLORED_SAPLING_GENERATOR = registerRegular(SpectrumCommon.locate("colored_trees/yellow")); - public static final TreeGrower LIME_COLORED_SAPLING_GENERATOR = registerRegular(SpectrumCommon.locate("colored_trees/lime")); - public static final TreeGrower PINK_COLORED_SAPLING_GENERATOR = registerRegular(SpectrumCommon.locate("colored_trees/pink")); - public static final TreeGrower GRAY_COLORED_SAPLING_GENERATOR = registerRegular(SpectrumCommon.locate("colored_trees/gray")); - public static final TreeGrower LIGHT_GRAY_COLORED_SAPLING_GENERATOR = registerRegular(SpectrumCommon.locate("colored_trees/light_gray")); - public static final TreeGrower CYAN_COLORED_SAPLING_GENERATOR = registerRegular(SpectrumCommon.locate("colored_trees/cyan")); - public static final TreeGrower PURPLE_COLORED_SAPLING_GENERATOR = registerRegular(SpectrumCommon.locate("colored_trees/purple")); - public static final TreeGrower BLUE_COLORED_SAPLING_GENERATOR = registerRegular(SpectrumCommon.locate("colored_trees/blue")); - public static final TreeGrower BROWN_COLORED_SAPLING_GENERATOR = registerRegular(SpectrumCommon.locate("colored_trees/brown")); - public static final TreeGrower GREEN_COLORED_SAPLING_GENERATOR = registerRegular(SpectrumCommon.locate("colored_trees/green")); - public static final TreeGrower RED_COLORED_SAPLING_GENERATOR = registerRegular(SpectrumCommon.locate("colored_trees/red")); - public static final TreeGrower BLACK_COLORED_SAPLING_GENERATOR = registerRegular(SpectrumCommon.locate("colored_trees/black")); + public static final TreeGrower WHITE_COLORED_SAPLING_GENERATOR = regular(SpectrumCommon.locate("colored_trees/white")); + public static final TreeGrower ORANGE_COLORED_SAPLING_GENERATOR = regular(SpectrumCommon.locate("colored_trees/orange")); + public static final TreeGrower MAGENTA_COLORED_SAPLING_GENERATOR = regular(SpectrumCommon.locate("colored_trees/magenta")); + public static final TreeGrower LIGHT_BLUE_COLORED_SAPLING_GENERATOR = regular(SpectrumCommon.locate("colored_trees/light_blue")); + public static final TreeGrower YELLOW_COLORED_SAPLING_GENERATOR = regular(SpectrumCommon.locate("colored_trees/yellow")); + public static final TreeGrower LIME_COLORED_SAPLING_GENERATOR = regular(SpectrumCommon.locate("colored_trees/lime")); + public static final TreeGrower PINK_COLORED_SAPLING_GENERATOR = regular(SpectrumCommon.locate("colored_trees/pink")); + public static final TreeGrower GRAY_COLORED_SAPLING_GENERATOR = regular(SpectrumCommon.locate("colored_trees/gray")); + public static final TreeGrower LIGHT_GRAY_COLORED_SAPLING_GENERATOR = regular(SpectrumCommon.locate("colored_trees/light_gray")); + public static final TreeGrower CYAN_COLORED_SAPLING_GENERATOR = regular(SpectrumCommon.locate("colored_trees/cyan")); + public static final TreeGrower PURPLE_COLORED_SAPLING_GENERATOR = regular(SpectrumCommon.locate("colored_trees/purple")); + public static final TreeGrower BLUE_COLORED_SAPLING_GENERATOR = regular(SpectrumCommon.locate("colored_trees/blue")); + public static final TreeGrower BROWN_COLORED_SAPLING_GENERATOR = regular(SpectrumCommon.locate("colored_trees/brown")); + public static final TreeGrower GREEN_COLORED_SAPLING_GENERATOR = regular(SpectrumCommon.locate("colored_trees/green")); + public static final TreeGrower RED_COLORED_SAPLING_GENERATOR = regular(SpectrumCommon.locate("colored_trees/red")); + public static final TreeGrower BLACK_COLORED_SAPLING_GENERATOR = regular(SpectrumCommon.locate("colored_trees/black")); - public static final TreeGrower WEEPING_GALA_SAPLING_GENERATOR = registerRegular(SpectrumCommon.locate("weeping_gala")); + public static final TreeGrower WEEPING_GALA_SAPLING_GENERATOR = regular(SpectrumCommon.locate("weeping_gala")); - public static TreeGrower registerRegular(ResourceLocation id) { + public static TreeGrower regular(ResourceLocation id) { return new TreeGrower(id.getPath(), Optional.empty(), Optional.of(ResourceKey.create(Registries.CONFIGURED_FEATURE, id)), Optional.empty()); } From 5dca054af94b84a171bdcc7b560f2092caf2e678 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 5 Apr 2026 22:29:50 +0200 Subject: [PATCH 007/477] wip fluid pastel nodes (working!) --- .../de/dafuqs/spectrum/SpectrumCommon.java | 5 +- .../network/PastelTransmissionLogic.java | 10 +- .../pastel_network/nodes/PastelNodeBlock.java | 5 +- .../nodes/PastelNodeBlockEntity.java | 14 +-- .../payloads/FluidPastelPayload.java | 55 +++++++++++ .../payloads/FluidPastelPayloadType.java | 92 +++++++++++++++++++ .../payloads/ItemPastelPayload.java | 2 +- .../payloads/ItemPastelPayloadType.java | 41 +++++---- .../payloads/PastelPayload.java | 23 ----- .../payloads/PastelPayloadType.java | 13 --- .../payloads/SpectrumPastelPayloadTypes.java | 20 ++++ .../payloads/SpectrumPastelPayloads.java | 21 +++++ .../progression/UnlockToastManager.java | 2 +- .../registries/SpectrumBlockEntities.java | 6 +- .../spectrum/registries/SpectrumBlocks.java | 22 +++-- .../registries/SpectrumItemGroups.java | 12 ++- 16 files changed, 254 insertions(+), 89 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloadTypes.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloads.java diff --git a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java index a7a29ed424..840c505bab 100644 --- a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java +++ b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java @@ -122,8 +122,8 @@ public SpectrumCommon(ModContainer container, IEventBus modBus) { SpectrumItemGroups.register(modBus); logInfo("Registering Block Entities..."); SpectrumBlockEntities.register(modBus); - PastelPayload.register(modBus); - PastelPayloadType.register(modBus); + SpectrumPastelPayloadTypes.register(modBus); + SpectrumPastelPayloads.register(modBus); modBus.addListener(SpectrumBlockEntities::addBlockEntityTypeBlocks); SpectrumPastelUpgradeSignatures.register(modBus); @@ -167,7 +167,6 @@ public SpectrumCommon(ModContainer container, IEventBus modBus) { logInfo("Registering Omni Accelerator Projectiles & Behaviors..."); SpectrumOmniAcceleratorProjectiles.register(); SpectrumItemProjectileBehaviors.register(); - SpectrumEntityColorProcessors.register(); logInfo("Registering Commands..."); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index e450b722a5..b86995c1c0 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -89,8 +89,8 @@ private void transferBetween(PastelNodeType sourceType, PastelNodeType destinati continue; } - for(PastelPayloadType payloadType : sourceNode.getSupportedPayloads()) { - payloadType.tryTransferToType(this, sourceNode, destinationType, transferMode); + for(Supplier payloadType : sourceNode.getSupportedPayloads()) { + payloadType.get().tryTransferToType(this, sourceNode, destinationType, transferMode); } } } @@ -99,7 +99,11 @@ public Set getLoadedNodes(PastelNodeType type) { return this.network.getLoadedNodes(type, PastelNetwork.NodePriority.GENERIC); } - public void addTransmission(PastelTransmission transmission) { + public void addTransmission(PastelNodeBlockEntity sourceNode, PastelNodeBlockEntity destinationNode, PastelTransmissionLogic.TransferMode transferMode, PastelTransmission transmission) { + PastelNodeStatusUpdatePayload.sendPastelNodeStatusUpdate(List.of(sourceNode), true); + destinationNode.markTransferred(transferMode != PastelTransmissionLogic.TransferMode.PUSH); + sourceNode.markTransferred(transferMode != PastelTransmissionLogic.TransferMode.PULL); + network.addTransmission(transmission, transmission.getTransmissionDuration()); PastelTransmissionPayload.sendPastelTransmissionParticle(network, transmission.getTransmissionDuration(), transmission); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java index e9c79be7b0..ce29212631 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java @@ -31,6 +31,7 @@ import org.jetbrains.annotations.*; import java.util.*; +import java.util.function.*; public class PastelNodeBlock extends SpectrumFacingBlock implements EntityBlock, ColorableBlock { @@ -52,9 +53,9 @@ public class PastelNodeBlock extends SpectrumFacingBlock implements EntityBlock, }}; protected final PastelNodeType pastelNodeType; - protected final Set supportedPayloads; + protected final Set> supportedPayloads; - public PastelNodeBlock(Properties settings, PastelNodeType pastelNodeType, Set supportedPayloads) { + public PastelNodeBlock(Properties settings, PastelNodeType pastelNodeType, Set> supportedPayloads) { super(settings.lightLevel(s -> s.getValue(LIT) ? 13 : 0)); this.pastelNodeType = pastelNodeType; this.supportedPayloads = supportedPayloads; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java index 68247e51b4..6a3d6f5bbc 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java @@ -41,6 +41,7 @@ import java.util.*; import java.util.Optional; import java.util.function.Predicate; +import java.util.function.Supplier; public class PastelNodeBlockEntity extends BlockEntity implements FilterConfigurable, MenuProvider, PastelUpgradeable { @@ -87,15 +88,6 @@ public PastelNodeBlockEntity(BlockPos blockPos, BlockState blockState) { this.redstoneRing = Optional.empty(); } - public @Nullable IItemHandler getConnectedStorage() { - BlockState state = this.getBlockState(); - if (!(state.getBlock() instanceof PastelNodeBlock)) { - return null; - } - Direction direction = state.getValue(PastelNodeBlock.FACING); - return level.getCapability(Capabilities.ItemHandler.BLOCK, this.getBlockPos().relative(direction.getOpposite()), direction); - } - public static void tick(@NotNull Level world, BlockPos pos, BlockState state, PastelNodeBlockEntity node) { if (!node.isInitialized && !world.isClientSide()) { // kinda onLoad()? node.getServerNetwork().ifPresent(network -> network.initializeNode(node)); @@ -268,7 +260,7 @@ public void notifySensor() { } } - public long getMaxTransferredAmount() { + public int getMaxTransferredAmount() { return transferCount; } @@ -416,7 +408,7 @@ public PastelNodeType getNodeType() { return PastelNodeType.CONNECTION; } - public Set getSupportedPayloads() { + public Set> getSupportedPayloads() { if (this.getBlockState().getBlock() instanceof PastelNodeBlock pastelNodeBlock) { return pastelNodeBlock.supportedPayloads; } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java new file mode 100644 index 0000000000..5fb7ffb96f --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java @@ -0,0 +1,55 @@ +package de.dafuqs.spectrum.blocks.pastel_network.payloads; + +import com.mojang.blaze3d.vertex.*; +import com.mojang.serialization.*; +import com.mojang.serialization.codecs.*; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.particle.client.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.texture.*; +import net.minecraft.core.*; +import net.minecraft.network.*; +import net.minecraft.network.codec.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; +import net.neoforged.neoforge.capabilities.*; +import net.neoforged.neoforge.fluids.*; +import net.neoforged.neoforge.fluids.capability.*; +import net.neoforged.neoforge.items.*; +import org.jetbrains.annotations.*; + +public record FluidPastelPayload(FluidStack fluidStack) implements PastelPayload { + + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( + FluidStack.CODEC.fieldOf("stack").forGetter(FluidPastelPayload::fluidStack) + ).apply(i, FluidPastelPayload::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + FluidStack.STREAM_CODEC, FluidPastelPayload::fluidStack, + FluidPastelPayload::new + ); + + public void render(PastelTransmissionParticle particle, Level level, PoseStack poseStack, final MultiBufferSource vertexConsumers, int light) { + particle.itemRenderer.renderStatic(this.fluidStack.getFluid().getBucket().getDefaultInstance(), ItemDisplayContext.GROUND, light, OverlayTexture.NO_OVERLAY, poseStack, vertexConsumers, level, 0); + } + + public MapCodec codec() { + return CODEC; + } + + public StreamCodec streamCodec() { + return STREAM_CODEC; + } + + @Override + public void arriveAtDestination(Level level, BlockPos destination, @Nullable PastelNodeBlockEntity destinationNode) { + if (destinationNode != null) { + @Nullable IFluidHandler destinationHandler = FluidPastelPayloadType.getConnectedFluidStorage(destinationNode); + if (destinationHandler != null) { + destinationHandler.fill(fluidStack, IFluidHandler.FluidAction.EXECUTE); + } + } + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java new file mode 100644 index 0000000000..cf27b3e5df --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java @@ -0,0 +1,92 @@ +package de.dafuqs.spectrum.blocks.pastel_network.payloads; + +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.blocks.pastel_network.network.*; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import de.dafuqs.spectrum.networking.s2c_payloads.*; +import net.minecraft.core.*; +import net.minecraft.world.level.block.state.*; +import net.neoforged.neoforge.capabilities.*; +import net.neoforged.neoforge.fluids.*; +import net.neoforged.neoforge.fluids.capability.*; +import org.jetbrains.annotations.*; +import org.jgrapht.*; +import org.jgrapht.graph.*; + +import java.util.*; + +public class FluidPastelPayloadType extends PastelPayloadType { + + public FluidPastelPayloadType() { + super(SpectrumCommon.locate("fluid"), SpectrumPastelPayloads.FLUID.get()); + } + + public static @Nullable IFluidHandler getConnectedFluidStorage(PastelNodeBlockEntity pastelNodeBlockEntity) { + BlockState state = pastelNodeBlockEntity.getBlockState(); + if (!(state.getBlock() instanceof PastelNodeBlock)) { + return null; + } + Direction direction = state.getValue(PastelNodeBlock.FACING); + return pastelNodeBlockEntity.getLevel().getCapability(Capabilities.FluidHandler.BLOCK, pastelNodeBlockEntity.getBlockPos().relative(direction.getOpposite()), direction); + } + + + @Override + public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode) { + IFluidHandler sourceHandler = getConnectedFluidStorage(sourceNode); + if (sourceHandler == null) { + return; + } + + for (PastelNodeBlockEntity destinationNode : logic.getLoadedNodes(type)) { + if (!destinationNode.canTransfer()) { + continue; + } + + IFluidHandler destinationHandler = getConnectedFluidStorage(destinationNode); + if (destinationHandler != null) { + boolean success = transferBetween(logic, sourceNode, sourceHandler, destinationNode, destinationHandler, transferMode); + if (success && transferMode != PastelTransmissionLogic.TransferMode.PULL) { + return; + } + } + } + } + + private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, IFluidHandler sourceHandler, PastelNodeBlockEntity destinationNode, IFluidHandler destinationHandler, PastelTransmissionLogic.TransferMode transferMode) { + for(int sourceTankId = 0; sourceTankId < sourceHandler.getTanks(); sourceTankId++) { + FluidStack sourceFluid = sourceHandler.getFluidInTank(sourceTankId); + if (sourceFluid.isEmpty()) { + continue; + } + + for(int destinationTankId = 0; destinationTankId < destinationHandler.getTanks(); destinationTankId++) { + FluidStack destinationFluid = destinationHandler.getFluidInTank(destinationTankId); + if (!destinationFluid.isEmpty() && !destinationFluid.is(sourceFluid.getFluid())) { + continue; + } + + GraphPath graphPath = logic.getPath(sourceNode, destinationNode); + if (graphPath == null) { + continue; + } + + int roomAtDestination = destinationHandler.getTankCapacity(destinationTankId) - destinationFluid.getAmount(); + int transmittedAmount = Math.min(Math.min(sourceFluid.getAmount(), roomAtDestination), sourceNode.getMaxTransferredAmount() * 20); + FluidStack drainedStack = sourceHandler.drain(sourceFluid.copyWithAmount(transmittedAmount), IFluidHandler.FluidAction.EXECUTE); + if(drainedStack.isEmpty()) { + continue; + } + + PastelPayload payload = new FluidPastelPayload(drainedStack); + PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), payload, sourceNode.getTransferTime()); + logic.addTransmission(sourceNode, destinationNode, transferMode, transmission); + + return true; + } + } + + return false; + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java index e5e740af08..d2cf4f6c42 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java @@ -46,7 +46,7 @@ public void arriveAtDestination(Level level, BlockPos destination, @Nullable Pas int inserted = 0; int count = itemStack.getCount(); if (destinationNode != null) { - IItemHandler destinationStorage = destinationNode.getConnectedStorage(); + IItemHandler destinationStorage = ItemPastelPayloadType.getConnectedItemStorage(destinationNode); if (destinationStorage != null) { inserted = count; inserted -= ItemHandlerHelper.insertItemStacked(destinationStorage, itemStack.copyWithCount(count), false).getCount(); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java index bcdb89afed..e9ce3cec3a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java @@ -3,15 +3,17 @@ import de.dafuqs.spectrum.SpectrumCommon; import de.dafuqs.spectrum.blocks.pastel_network.network.PastelTransmission; import de.dafuqs.spectrum.blocks.pastel_network.network.PastelTransmissionLogic; -import de.dafuqs.spectrum.blocks.pastel_network.nodes.PastelNodeBlockEntity; -import de.dafuqs.spectrum.blocks.pastel_network.nodes.PastelNodeType; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.helpers.InventoryHelper; import de.dafuqs.spectrum.networking.s2c_payloads.PastelNodeStatusUpdatePayload; -import net.minecraft.core.BlockPos; +import net.minecraft.core.*; import net.minecraft.util.Tuple; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.state.*; +import net.neoforged.neoforge.capabilities.*; import net.neoforged.neoforge.items.IItemHandler; import net.neoforged.neoforge.items.ItemHandlerHelper; +import org.jetbrains.annotations.*; import org.jgrapht.GraphPath; import org.jgrapht.graph.DefaultEdge; @@ -23,13 +25,22 @@ public class ItemPastelPayloadType extends PastelPayloadType { public ItemPastelPayloadType() { - super(SpectrumCommon.locate("item"), PastelPayload.ITEM.get()); + super(SpectrumCommon.locate("item"), SpectrumPastelPayloads.ITEM.get()); + } + + public static @Nullable IItemHandler getConnectedItemStorage(PastelNodeBlockEntity pastelNodeBlockEntity) { + BlockState state = pastelNodeBlockEntity.getBlockState(); + if (!(state.getBlock() instanceof PastelNodeBlock)) { + return null; + } + Direction direction = state.getValue(PastelNodeBlock.FACING); + return pastelNodeBlockEntity.getLevel().getCapability(Capabilities.ItemHandler.BLOCK, pastelNodeBlockEntity.getBlockPos().relative(direction.getOpposite()), direction); } @Override public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode) { - IItemHandler sourceStorage = sourceNode.getConnectedStorage(); - if (sourceStorage == null) { + IItemHandler sourceHandler = getConnectedItemStorage(sourceNode); + if (sourceHandler == null) { return; } @@ -38,9 +49,9 @@ public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEnti continue; } - IItemHandler destinationStorage = destinationNode.getConnectedStorage(); - if (destinationStorage != null) { - boolean success = transferBetween(logic, sourceNode, sourceStorage, destinationNode, destinationStorage, transferMode); + IItemHandler destinationHandler = getConnectedItemStorage(destinationNode); + if (destinationHandler != null) { + boolean success = transferBetween(logic, sourceNode, sourceHandler, destinationNode, destinationHandler, transferMode); if (success && transferMode != PastelTransmissionLogic.TransferMode.PULL) { return; } @@ -89,15 +100,13 @@ private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEn if (matchingStacks.getA() == 0) continue; - PastelPayload payload = new ItemPastelPayload(proposedStack.copyWithCount(simulatedAmount)); - int vertexTime = sourceNode.getTransferTime(); GraphPath graphPath = logic.getPath(sourceNode, destinationNode); if (graphPath == null) { return false; } - PastelNodeStatusUpdatePayload.sendPastelNodeStatusUpdate(List.of(sourceNode), true); - PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), payload, vertexTime); + PastelPayload payload = new ItemPastelPayload(proposedStack.copyWithCount(simulatedAmount)); + PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), payload, sourceNode.getTransferTime()); int extracted = 0; for (int i = 0; i < sourceStorage.getSlots(); i++) { if (ItemStack.isSameItemSameComponents(proposedStack, sourceStorage.getStackInSlot(i))) @@ -106,11 +115,7 @@ private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEn break; } - logic.addTransmission(transmission); - - destinationNode.markTransferred(transferMode != PastelTransmissionLogic.TransferMode.PUSH); - sourceNode.markTransferred(transferMode != PastelTransmissionLogic.TransferMode.PULL); - + logic.addTransmission(sourceNode, destinationNode, transferMode, transmission); destinationNode.addItemCountUnderway(simulatedAmount); return true; } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java index 6b4d9940c9..58a9754aa4 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java @@ -18,18 +18,9 @@ public interface PastelPayload { - DeferredRegister> REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_PAYLOAD, SpectrumCommon.MOD_ID); - DeferredHolder, MapCodec> ITEM = REGISTRAR.register("item", () -> ItemPastelPayload.CODEC); - //DeferredHolder, MapCodec> FLUID = REGISTRAR.register("fluid", () -> FluidPastelPayload.CODEC); - //DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); - Codec CODEC = SpectrumRegistries.PASTEL_PAYLOAD.byNameCodec().dispatch(PastelPayload::codec, codec -> codec); StreamCodec STREAM_CODEC = ByteBufCodecs.fromCodecWithRegistries(CODEC); - static void register(IEventBus modBus) { - REGISTRAR.register(modBus); - } - MapCodec codec(); StreamCodec streamCodec(); @@ -45,18 +36,4 @@ static void register(IEventBus modBus) { // void spawnTravelParticles(Level level); // TODO - /*class FluidPastelPayload implements PastelPayload { - private FluidStack fluidStack; - public FluidPastelPayload(FluidStack fluidStack) { - this.fluidStack = fluidStack; - } - } - - class InkPastelPayload implements PastelPayload { - private InkAmount inkAmount; - public InkPastelPayload(InkAmount inkAmount) { - this.inkAmount = inkAmount; - } - }*/ - } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java index ffc1c54d48..8b967c4bf7 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java @@ -1,25 +1,12 @@ package de.dafuqs.spectrum.blocks.pastel_network.payloads; import com.mojang.serialization.*; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; -import de.dafuqs.spectrum.registries.*; import net.minecraft.resources.*; -import net.neoforged.bus.api.*; -import net.neoforged.neoforge.registries.*; public abstract class PastelPayloadType { - public static final DeferredRegister REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, SpectrumCommon.MOD_ID); - public static final DeferredHolder ITEM = REGISTRAR.register("item", ItemPastelPayloadType::new); - //DeferredHolder, MapCodec> FLUID = REGISTRAR.register("fluid", () -> FluidPastelPayload.CODEC); - //DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); - - public static void register(IEventBus modBus) { - REGISTRAR.register(modBus); - } - protected final ResourceLocation id; protected final MapCodec codec; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloadTypes.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloadTypes.java new file mode 100644 index 0000000000..350fea46dd --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloadTypes.java @@ -0,0 +1,20 @@ +package de.dafuqs.spectrum.blocks.pastel_network.payloads; + +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.registries.*; +import net.neoforged.bus.api.*; +import net.neoforged.neoforge.registries.*; + +public class SpectrumPastelPayloadTypes { + + public static final DeferredRegister REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, SpectrumCommon.MOD_ID); + + public static final DeferredHolder ITEM = REGISTRAR.register("item", ItemPastelPayloadType::new); + public static final DeferredHolder FLUID = REGISTRAR.register("fluid", FluidPastelPayloadType::new); + //public static final DeferredHolder INK = REGISTRAR.register("ink", InkPastelPayload.CODEC); + + public static void register(IEventBus modBus) { + REGISTRAR.register(modBus); + } + +} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloads.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloads.java new file mode 100644 index 0000000000..f3fd98499c --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloads.java @@ -0,0 +1,21 @@ +package de.dafuqs.spectrum.blocks.pastel_network.payloads; + +import com.mojang.serialization.*; +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.registries.*; +import net.neoforged.bus.api.*; +import net.neoforged.neoforge.registries.*; + +public class SpectrumPastelPayloads { + + public static final DeferredRegister> REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_PAYLOAD, SpectrumCommon.MOD_ID); + + public static final DeferredHolder, MapCodec> ITEM = REGISTRAR.register("item", () -> ItemPastelPayload.CODEC); + public static final DeferredHolder, MapCodec> FLUID = REGISTRAR.register("fluid", () -> FluidPastelPayload.CODEC); + //DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); + + public static void register(IEventBus modBus) { + REGISTRAR.register(modBus); + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/progression/UnlockToastManager.java b/src/main/java/de/dafuqs/spectrum/progression/UnlockToastManager.java index a3a767fb51..8bbec51791 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/UnlockToastManager.java +++ b/src/main/java/de/dafuqs/spectrum/progression/UnlockToastManager.java @@ -36,7 +36,7 @@ public class UnlockToastManager { put(SpectrumAdvancements.VIVISECT_KINDLING, new Tuple<>(() -> SpectrumItems.DIVINATION_HEART.get().getDefaultInstance(), "vivisect_kindling")); put(SpectrumAdvancements.PAINTBRUSH_COLORING, new Tuple<>(() -> SpectrumItems.PAINTBRUSH.get().getDefaultInstance(), "block_coloring_unlocked")); put(SpectrumAdvancements.PAINTBRUSH_INK_SLINGING, new Tuple<>(() -> SpectrumItems.PAINTBRUSH.get().getDefaultInstance(), "ink_slinging_unlocked")); - put(SpectrumAdvancements.PASTEL_NODE_COLORING, new Tuple<>(() -> SpectrumBlocks.SENDER_NODE.asItem().getDefaultInstance(), "pastel_node_coloring")); + put(SpectrumAdvancements.PASTEL_NODE_COLORING, new Tuple<>(() -> SpectrumBlocks.ITEM_SENDER_NODE.asItem().getDefaultInstance(), "pastel_node_coloring")); }}; public static void clear() { diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java index 88c27ecddc..f1ff51ec29 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java @@ -39,7 +39,6 @@ import net.neoforged.fml.event.lifecycle.*; import net.neoforged.neoforge.event.*; import net.neoforged.neoforge.registries.*; -import org.jetbrains.annotations.*; import java.util.*; import java.util.function.*; @@ -92,7 +91,10 @@ public class SpectrumBlockEntities { public static DeferredHolder, BlockEntityType> JADE_VINE_ROOTS = register("jade_vine_roots", JadeVineRootsBlockEntity::new, SpectrumBlocks.JADE_VINE_ROOTS); public static DeferredHolder, BlockEntityType> PRESENT = register("present", PresentBlockEntity::new, SpectrumBlocks.PRESENT); public static DeferredHolder, BlockEntityType> TITRATION_BARREL = register("titration_barrel", TitrationBarrelBlockEntity::new, SpectrumBlocks.TITRATION_BARREL); - public static DeferredHolder, BlockEntityType> PASTEL_NODE = register("pastel_node", PastelNodeBlockEntity::new, SpectrumBlocks.CONNECTION_NODE, SpectrumBlocks.PROVIDER_NODE, SpectrumBlocks.STORAGE_NODE, SpectrumBlocks.SENDER_NODE, SpectrumBlocks.GATHER_NODE); + public static DeferredHolder, BlockEntityType> PASTEL_NODE = register("pastel_node", PastelNodeBlockEntity::new, + SpectrumBlocks.CONNECTION_NODE, + SpectrumBlocks.ITEM_PROVIDER_NODE, SpectrumBlocks.ITEM_STORAGE_NODE, SpectrumBlocks.ITEM_SENDER_NODE, SpectrumBlocks.ITEM_GATHER_NODE, + SpectrumBlocks.FLUID_PROVIDER_NODE, SpectrumBlocks.FLUID_STORAGE_NODE, SpectrumBlocks.FLUID_SENDER_NODE, SpectrumBlocks.FLUID_GATHER_NODE); public static DeferredHolder, BlockEntityType> HUMMINGSTONE = register("hummingstone", HummingstoneBlockEntity::new, SpectrumBlocks.HUMMINGSTONE); public static DeferredHolder, BlockEntityType> PLACED_ITEM = register("placed_item", PlacedItemBlockEntity::new, SpectrumBlocks.INCANDESCENT_AMALGAM, SpectrumBlocks.THREAT_CONFLUX, SpectrumBlocks.PARAMETRIC_MINING_DEVICE, SpectrumBlocks.COLORFUL_SHOOTING_STAR, SpectrumBlocks.FIERY_SHOOTING_STAR, SpectrumBlocks.GEMSTONE_SHOOTING_STAR, SpectrumBlocks.GLISTERING_SHOOTING_STAR, SpectrumBlocks.PRISTINE_SHOOTING_STAR); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index 40d53da6b3..18239f33f8 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -569,10 +569,16 @@ private static BlockBehaviour.Properties pastelNode(SoundType soundGroup) { public static final DeferredBlock CONNECTION_NODE = register(blockWithItem("connection_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.CONNECTION, Set.of()), () -> IS.of(), InkColors.LIGHT_GRAY).withPredefinedItemModel()); - public static final DeferredBlock PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(PastelPayloadType.ITEM.get())), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); - public static final DeferredBlock STORAGE_NODE = register(blockWithItem("storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(PastelPayloadType.ITEM.get())), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); - public static final DeferredBlock SENDER_NODE = register(blockWithItem("sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(PastelPayloadType.ITEM.get())), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); - public static final DeferredBlock GATHER_NODE = register(blockWithItem("gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(PastelPayloadType.ITEM.get())), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); + // TODO: rename ids to "item_*" with next major update + public static final DeferredBlock ITEM_PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.ITEM)), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); + public static final DeferredBlock ITEM_STORAGE_NODE = register(blockWithItem("storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.ITEM)), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); + public static final DeferredBlock ITEM_SENDER_NODE = register(blockWithItem("sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.ITEM)), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); + public static final DeferredBlock ITEM_GATHER_NODE = register(blockWithItem("gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(SpectrumPastelPayloadTypes.ITEM)), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); + + public static final DeferredBlock FLUID_PROVIDER_NODE = register(blockWithItem("fluid_provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.FLUID)), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); + public static final DeferredBlock FLUID_STORAGE_NODE = register(blockWithItem("fluid_storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.FLUID)), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); + public static final DeferredBlock FLUID_SENDER_NODE = register(blockWithItem("fluid_sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.FLUID)), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); + public static final DeferredBlock FLUID_GATHER_NODE = register(blockWithItem("fluid_gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(SpectrumPastelPayloadTypes.FLUID)), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); // COLORED BLOCK FAMILIES @@ -2328,10 +2334,10 @@ public static void registerClient(FMLClientSetupEvent event) { ItemBlockRenderTypes.setRenderLayer(PRESENT.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(BOTTOMLESS_BUNDLE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(CONNECTION_NODE.get(), RenderType.cutout()); - ItemBlockRenderTypes.setRenderLayer(PROVIDER_NODE.get(), RenderType.cutout()); - ItemBlockRenderTypes.setRenderLayer(STORAGE_NODE.get(), RenderType.cutout()); - ItemBlockRenderTypes.setRenderLayer(SENDER_NODE.get(), RenderType.cutout()); - ItemBlockRenderTypes.setRenderLayer(GATHER_NODE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(ITEM_PROVIDER_NODE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(ITEM_STORAGE_NODE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(ITEM_SENDER_NODE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(ITEM_GATHER_NODE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(VARIA_SPROUT.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(SLATE_NOXSHROOM.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(EBONY_NOXSHROOM.get(), RenderType.cutout()); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java index 22f91f4f2f..a7269ea7a0 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java @@ -242,10 +242,14 @@ public static void registerSubTabs() { entries.accept(SpectrumBlocks.UPGRADE_EXPERIENCE2); entries.accept(SpectrumBlocks.CONNECTION_NODE); - entries.accept(SpectrumBlocks.PROVIDER_NODE); - entries.accept(SpectrumBlocks.SENDER_NODE); - entries.accept(SpectrumBlocks.STORAGE_NODE); - entries.accept(SpectrumBlocks.GATHER_NODE); + entries.accept(SpectrumBlocks.ITEM_PROVIDER_NODE); + entries.accept(SpectrumBlocks.ITEM_SENDER_NODE); + entries.accept(SpectrumBlocks.ITEM_STORAGE_NODE); + entries.accept(SpectrumBlocks.ITEM_GATHER_NODE); + entries.accept(SpectrumBlocks.FLUID_PROVIDER_NODE); + entries.accept(SpectrumBlocks.FLUID_SENDER_NODE); + entries.accept(SpectrumBlocks.FLUID_STORAGE_NODE); + entries.accept(SpectrumBlocks.FLUID_GATHER_NODE); entries.accept(SpectrumBlocks.LIGHT_LEVEL_DETECTOR); entries.accept(SpectrumBlocks.WEATHER_DETECTOR); From 92644a1a3b635eb619aa5edcd370da9f6aed6dd3 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 6 Apr 2026 09:00:45 +0200 Subject: [PATCH 008/477] very wip ink transfer without equalization yet --- .../dafuqs/spectrum/api/energy/InkAmount.java | 2 +- .../InkPoweredStatusEffectInstance.java | 2 +- .../CrystallarieumBlockEntity.java | 2 +- .../network/PastelTransmissionLogic.java | 19 +--- .../payloads/InkPastelPayload.java | 60 ++++++++++ .../payloads/InkPastelPayloadType.java | 105 ++++++++++++++++++ .../payloads/PastelPayloadType.java | 23 +++- .../payloads/SpectrumPastelPayloadTypes.java | 2 +- .../payloads/SpectrumPastelPayloads.java | 2 +- .../TravelersBackpackCompat.java | 8 +- .../registries/SpectrumBlockEntities.java | 2 +- .../spectrum/registries/SpectrumBlocks.java | 2 + .../registries/SpectrumItemGroups.java | 1 + 13 files changed, 204 insertions(+), 26 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/InkAmount.java b/src/main/java/de/dafuqs/spectrum/api/energy/InkAmount.java index 0561d627ca..06725682ed 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/InkAmount.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/InkAmount.java @@ -13,7 +13,7 @@ public record InkAmount(InkColor color, long amount) { Codec.LONG.fieldOf("amount").forGetter(InkAmount::amount) ).apply(i, InkAmount::new)); - public static final StreamCodec PACKET_CODEC = StreamCodec.composite( + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( InkColor.PACKET_CODEC, InkAmount::color, ByteBufCodecs.VAR_LONG, InkAmount::amount, InkAmount::new diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/InkPoweredStatusEffectInstance.java b/src/main/java/de/dafuqs/spectrum/api/energy/InkPoweredStatusEffectInstance.java index 55bfa94a53..b862e59fe9 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/InkPoweredStatusEffectInstance.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/InkPoweredStatusEffectInstance.java @@ -30,7 +30,7 @@ public class InkPoweredStatusEffectInstance { public static final StreamCodec PACKET_CODEC = StreamCodec.composite( MobEffectInstance.STREAM_CODEC, c -> c.statusEffectInstance, - InkAmount.PACKET_CODEC, c -> c.cost, + InkAmount.STREAM_CODEC, c -> c.cost, ByteBufCodecs.VAR_INT, c -> c.customColor, ByteBufCodecs.BOOL, c -> c.unidentifiable, InkPoweredStatusEffectInstance::new diff --git a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java index fd18c75e38..36b6ca7459 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java @@ -249,7 +249,7 @@ public void setOwner(Player playerEntity) { } /** - * Searches recipes for a valid one using fluidStack and plants the first block of that recipe on top + * Searches recipes for a valid one using inkAmount and plants the first block of that recipe on top * * @param itemStack stack that is tried to plant on top, if a valid recipe */ diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index b86995c1c0..56a411be7c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -5,7 +5,9 @@ import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; +import net.minecraft.resources.*; import net.minecraft.util.*; import net.minecraft.world.item.*; import net.neoforged.neoforge.items.*; @@ -77,21 +79,8 @@ public void invalidateCache() { } public void tick(PastelNetwork.NodePriority priority) { - transferBetween(PastelNodeType.SENDER, PastelNodeType.GATHER, TransferMode.PUSH_PULL, priority); - transferBetween(PastelNodeType.PROVIDER, PastelNodeType.GATHER, TransferMode.PULL, priority); - transferBetween(PastelNodeType.STORAGE, PastelNodeType.GATHER, TransferMode.PULL, priority); - transferBetween(PastelNodeType.SENDER, PastelNodeType.STORAGE, TransferMode.PUSH, priority); - } - - private void transferBetween(PastelNodeType sourceType, PastelNodeType destinationType, TransferMode transferMode, PastelNetwork.NodePriority priority) { - for (PastelNodeBlockEntity sourceNode : this.network.getLoadedNodes(sourceType, priority)) { - if (!sourceNode.canTransfer()) { - continue; - } - - for(Supplier payloadType : sourceNode.getSupportedPayloads()) { - payloadType.get().tryTransferToType(this, sourceNode, destinationType, transferMode); - } + for(Map.Entry, PastelPayloadType> payloadType : SpectrumRegistries.PASTEL_PAYLOAD_TYPE.entrySet()) { + payloadType.getValue().tick(this); } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java new file mode 100644 index 0000000000..169c11aaef --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java @@ -0,0 +1,60 @@ +package de.dafuqs.spectrum.blocks.pastel_network.payloads; + +import com.mojang.blaze3d.vertex.*; +import com.mojang.serialization.*; +import com.mojang.serialization.codecs.*; +import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import de.dafuqs.spectrum.items.*; +import de.dafuqs.spectrum.particle.client.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.texture.*; +import net.minecraft.core.*; +import net.minecraft.network.*; +import net.minecraft.network.codec.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; +import net.neoforged.neoforge.fluids.*; +import net.neoforged.neoforge.fluids.capability.*; +import org.jetbrains.annotations.*; + +import java.util.*; + +public record InkPastelPayload(List inkAmount) implements PastelPayload { + + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( + InkAmount.CODEC.listOf().fieldOf("stack").forGetter(InkPastelPayload::inkAmount) + ).apply(i, InkPastelPayload::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + InkAmount.STREAM_CODEC.apply(ByteBufCodecs.list()), InkPastelPayload::inkAmount, + InkPastelPayload::new + ); + + public void render(PastelTransmissionParticle particle, Level level, PoseStack poseStack, final MultiBufferSource vertexConsumers, int light) { + particle.itemRenderer.renderStatic(PigmentItem.byColor(this.inkAmount.get(0).color()).getDefaultInstance(), ItemDisplayContext.GROUND, light, OverlayTexture.NO_OVERLAY, poseStack, vertexConsumers, level, 0); + } + + public MapCodec codec() { + return CODEC; + } + + public StreamCodec streamCodec() { + return STREAM_CODEC; + } + + @Override + public void arriveAtDestination(Level level, BlockPos destination, @Nullable PastelNodeBlockEntity destinationNode) { + if (destinationNode != null) { + @Nullable InkStorageBlockEntity destinationHandler = InkPastelPayloadType.getConnectedInkStorage(destinationNode); + if (destinationHandler != null) { + InkStorage destinationStorage = destinationHandler.getEnergyStorage(); + for(InkAmount ic : inkAmount) { + destinationStorage.addEnergy(ic.color(), ic.amount()); + destinationHandler.setInkDirty(); + } + } + } + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java new file mode 100644 index 0000000000..04520b2b98 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java @@ -0,0 +1,105 @@ +package de.dafuqs.spectrum.blocks.pastel_network.payloads; + +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.blocks.pastel_network.network.*; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import net.minecraft.core.*; +import net.minecraft.world.level.block.entity.*; +import net.minecraft.world.level.block.state.*; +import net.neoforged.neoforge.capabilities.*; +import net.neoforged.neoforge.fluids.*; +import net.neoforged.neoforge.fluids.capability.*; +import org.jetbrains.annotations.*; +import org.jgrapht.*; +import org.jgrapht.graph.*; + +import java.util.*; +import java.util.function.*; + +public class InkPastelPayloadType extends PastelPayloadType { + + public InkPastelPayloadType() { + super(SpectrumCommon.locate("ink"), SpectrumPastelPayloads.INK.get()); + } + + public static @Nullable InkStorageBlockEntity getConnectedInkStorage(PastelNodeBlockEntity pastelNodeBlockEntity) { + BlockState state = pastelNodeBlockEntity.getBlockState(); + if (!(state.getBlock() instanceof PastelNodeBlock)) { + return null; + } + Direction direction = state.getValue(PastelNodeBlock.FACING); + BlockEntity be = pastelNodeBlockEntity.getLevel().getBlockEntity(pastelNodeBlockEntity.getBlockPos().relative(direction.getOpposite())); + if(be instanceof InkStorageBlockEntity inkStorageBlockEntity) { + return inkStorageBlockEntity; + } + return null; + } + + @Override + public void tick(PastelTransmissionLogic logic) { + for (PastelNodeBlockEntity sourceNode : logic.getLoadedNodes(PastelNodeType.SENDER)) { + for(Supplier payloadType : sourceNode.getSupportedPayloads()) { + if(payloadType.get() != this) { + continue; + } + payloadType.get().tryTransferToType(logic, sourceNode, PastelNodeType.SENDER, PastelTransmissionLogic.TransferMode.PUSH); + } + } + } + + @Override + public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode) { + @Nullable InkStorageBlockEntity sourceHandler = getConnectedInkStorage(sourceNode); + if (sourceHandler == null) { + return; + } + + for (PastelNodeBlockEntity destinationNode : logic.getLoadedNodes(type)) { + if (!destinationNode.canTransfer()) { + continue; + } + + @Nullable InkStorageBlockEntity destinationHandler = getConnectedInkStorage(destinationNode); + if (destinationHandler != null) { + boolean success = transferBetween(logic, sourceNode, sourceHandler, destinationNode, destinationHandler, transferMode); + if (success && transferMode != PastelTransmissionLogic.TransferMode.PULL) { + return; + } + } + } + } + + private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, InkStorageBlockEntity sourceHandler, PastelNodeBlockEntity destinationNode, InkStorageBlockEntity destinationHandler, PastelTransmissionLogic.TransferMode transferMode) { + InkStorage sourceStorage = sourceHandler.getEnergyStorage(); + InkStorage destinationStorage = destinationHandler.getEnergyStorage(); + for(Map.Entry sourceEntry : sourceStorage.getEnergy().entrySet()) { + GraphPath graphPath = logic.getPath(sourceNode, destinationNode); + if (graphPath == null) { + continue; + } + + InkColor sourceColor = sourceEntry.getKey(); + + long roomAtDestination = destinationStorage.getRoom(sourceColor); + List transmittedAmounts = new ArrayList<>(); + if(roomAtDestination > 0) { + long transmittedAmount = Math.min(Math.min(sourceEntry.getValue(), roomAtDestination), sourceNode.getMaxTransferredAmount() * 20L); + if(transmittedAmount > 0) { + sourceStorage.addEnergy(sourceEntry.getKey(), -transmittedAmount); + transmittedAmounts.add(new InkAmount(sourceColor, transmittedAmount)); + return true; + } + } + + if(!transmittedAmounts.isEmpty()) { + PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), new InkPastelPayload(transmittedAmounts), sourceNode.getTransferTime()); + logic.addTransmission(sourceNode, destinationNode, transferMode, transmission); + sourceHandler.setInkDirty(); + } + } + return false; + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java index 8b967c4bf7..5977ba785b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java @@ -5,6 +5,8 @@ import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import net.minecraft.resources.*; +import java.util.function.*; + public abstract class PastelPayloadType { protected final ResourceLocation id; @@ -15,6 +17,25 @@ public PastelPayloadType(ResourceLocation id, MapCodec this.codec = codec; } - public abstract void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode); + public void tick(PastelTransmissionLogic logic) { + transferBetween(logic, PastelNodeType.SENDER, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PUSH_PULL); + transferBetween(logic, PastelNodeType.PROVIDER, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PULL); + transferBetween(logic, PastelNodeType.STORAGE, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PULL); + transferBetween(logic, PastelNodeType.SENDER, PastelNodeType.STORAGE, PastelTransmissionLogic.TransferMode.PUSH); + } + + protected void transferBetween(PastelTransmissionLogic logic, PastelNodeType sourceType, PastelNodeType destinationType, PastelTransmissionLogic.TransferMode transferMode) { + for (PastelNodeBlockEntity sourceNode : logic.getLoadedNodes(sourceType)) { + if (!sourceNode.canTransfer()) { + continue; + } + + for(Supplier payloadType : sourceNode.getSupportedPayloads()) { + payloadType.get().tryTransferToType(logic, sourceNode, destinationType, transferMode); + } + } + } + + protected abstract void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode); } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloadTypes.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloadTypes.java index 350fea46dd..003f4ac6a4 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloadTypes.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloadTypes.java @@ -11,7 +11,7 @@ public class SpectrumPastelPayloadTypes { public static final DeferredHolder ITEM = REGISTRAR.register("item", ItemPastelPayloadType::new); public static final DeferredHolder FLUID = REGISTRAR.register("fluid", FluidPastelPayloadType::new); - //public static final DeferredHolder INK = REGISTRAR.register("ink", InkPastelPayload.CODEC); + public static final DeferredHolder INK = REGISTRAR.register("ink", InkPastelPayloadType::new); public static void register(IEventBus modBus) { REGISTRAR.register(modBus); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloads.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloads.java index f3fd98499c..e6873625c1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloads.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloads.java @@ -12,7 +12,7 @@ public class SpectrumPastelPayloads { public static final DeferredHolder, MapCodec> ITEM = REGISTRAR.register("item", () -> ItemPastelPayload.CODEC); public static final DeferredHolder, MapCodec> FLUID = REGISTRAR.register("fluid", () -> FluidPastelPayload.CODEC); - //DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); + public static final DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); public static void register(IEventBus modBus) { REGISTRAR.register(modBus); diff --git a/src/main/java/de/dafuqs/spectrum/compat/travelersbackpack/TravelersBackpackCompat.java b/src/main/java/de/dafuqs/spectrum/compat/travelersbackpack/TravelersBackpackCompat.java index 5ceb9038ab..836fef54f2 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/travelersbackpack/TravelersBackpackCompat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/travelersbackpack/TravelersBackpackCompat.java @@ -38,7 +38,7 @@ public void register() { /* EffectFluidRegistry.registerFluidEffect(new SpectrumEffectFluid("spectrum:sludge", SpectrumFluids.SLUDGE.get().getSource()) { @Override - public void affectDrinker(FluidStack fluidStack, Level world, Entity entity) { + public void affectDrinker(FluidStack inkAmount, Level world, Entity entity) { if (entity instanceof LivingEntity livingEntity) { livingEntity.addEffect(new MobEffectInstance(MobEffects.CONFUSION, 200)); livingEntity.addEffect(new MobEffectInstance(MobEffects.DAMAGE_RESISTANCE, 400, 2)); @@ -49,7 +49,7 @@ public void affectDrinker(FluidStack fluidStack, Level world, Entity entity) { EffectFluidRegistry.registerFluidEffect(new SpectrumEffectFluid("spectrum:liquid_crystal", SpectrumFluids.LIQUID_CRYSTAL.get().getSource()) { @Override - public void affectDrinker(FluidStack fluidStack, Level world, Entity entity) { + public void affectDrinker(FluidStack inkAmount, Level world, Entity entity) { if (entity instanceof Player player) { player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, 400, 1)); } @@ -58,7 +58,7 @@ public void affectDrinker(FluidStack fluidStack, Level world, Entity entity) { EffectFluidRegistry.registerFluidEffect(new SpectrumEffectFluid("spectrum:midnight_solution", SpectrumFluids.MIDNIGHT_SOLUTION.get().getSource()) { @Override - public void affectDrinker(FluidStack fluidStack, Level world, Entity entity) { + public void affectDrinker(FluidStack inkAmount, Level world, Entity entity) { if (entity instanceof Player player) { player.giveExperiencePoints(-20); @@ -81,7 +81,7 @@ public void affectDrinker(FluidStack fluidStack, Level world, Entity entity) { EffectFluidRegistry.registerFluidEffect(new SpectrumEffectFluid("spectrum:dragonrot", SpectrumFluids.DRAGONROT.get().getSource()) { @Override - public void affectDrinker(FluidStack fluidStack, Level world, Entity entity) { + public void affectDrinker(FluidStack inkAmount, Level world, Entity entity) { if (entity instanceof LivingEntity livingEntity) { livingEntity.addEffect(new MobEffectInstance(SpectrumStatusEffects.LIFE_DRAIN, 600, 3)); livingEntity.hurt(SpectrumDamageTypes.dragonrot(world), 1000); // 💀 diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java index f1ff51ec29..9f8580d4fb 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java @@ -92,7 +92,7 @@ public class SpectrumBlockEntities { public static DeferredHolder, BlockEntityType> PRESENT = register("present", PresentBlockEntity::new, SpectrumBlocks.PRESENT); public static DeferredHolder, BlockEntityType> TITRATION_BARREL = register("titration_barrel", TitrationBarrelBlockEntity::new, SpectrumBlocks.TITRATION_BARREL); public static DeferredHolder, BlockEntityType> PASTEL_NODE = register("pastel_node", PastelNodeBlockEntity::new, - SpectrumBlocks.CONNECTION_NODE, + SpectrumBlocks.CONNECTION_NODE, SpectrumBlocks.INK_NODE, SpectrumBlocks.ITEM_PROVIDER_NODE, SpectrumBlocks.ITEM_STORAGE_NODE, SpectrumBlocks.ITEM_SENDER_NODE, SpectrumBlocks.ITEM_GATHER_NODE, SpectrumBlocks.FLUID_PROVIDER_NODE, SpectrumBlocks.FLUID_STORAGE_NODE, SpectrumBlocks.FLUID_SENDER_NODE, SpectrumBlocks.FLUID_GATHER_NODE); public static DeferredHolder, BlockEntityType> HUMMINGSTONE = register("hummingstone", HummingstoneBlockEntity::new, SpectrumBlocks.HUMMINGSTONE); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index 18239f33f8..52c8e2d150 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -569,6 +569,8 @@ private static BlockBehaviour.Properties pastelNode(SoundType soundGroup) { public static final DeferredBlock CONNECTION_NODE = register(blockWithItem("connection_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.CONNECTION, Set.of()), () -> IS.of(), InkColors.LIGHT_GRAY).withPredefinedItemModel()); + public static final DeferredBlock INK_NODE = register(blockWithItem("ink_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.INK)), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); + // TODO: rename ids to "item_*" with next major update public static final DeferredBlock ITEM_PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.ITEM)), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); public static final DeferredBlock ITEM_STORAGE_NODE = register(blockWithItem("storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.ITEM)), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java index a7269ea7a0..b2ec909a3c 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java @@ -242,6 +242,7 @@ public static void registerSubTabs() { entries.accept(SpectrumBlocks.UPGRADE_EXPERIENCE2); entries.accept(SpectrumBlocks.CONNECTION_NODE); + entries.accept(SpectrumBlocks.INK_NODE); entries.accept(SpectrumBlocks.ITEM_PROVIDER_NODE); entries.accept(SpectrumBlocks.ITEM_SENDER_NODE); entries.accept(SpectrumBlocks.ITEM_STORAGE_NODE); From 86911cffc36e7816d20ac8fc9afa2c3cf708a3c4 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Wed, 8 Apr 2026 19:10:39 +0200 Subject: [PATCH 009/477] simplify ink storage code. Methods to equalize ink between multiple storages --- .../spectrum/api/energy/InkStorage.java | 134 ++++++++++-------- .../energy/storage/CreativeInkStorage.java | 5 - .../storage/IndividualCappedInkStorage.java | 12 -- .../api/energy/storage/SingleInkStorage.java | 10 -- .../TotalCappedElementalMixingInkStorage.java | 39 ----- .../energy/storage/TotalCappedInkStorage.java | 12 -- 6 files changed, 71 insertions(+), 141 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/InkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/InkStorage.java index 5129503601..b1540526f7 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/InkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/InkStorage.java @@ -1,12 +1,9 @@ package de.dafuqs.spectrum.api.energy; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; -import net.minecraft.nbt.*; import net.minecraft.network.chat.*; -import net.minecraft.util.*; import net.minecraft.world.*; import org.jetbrains.annotations.*; @@ -71,35 +68,83 @@ static long transferInk(@NotNull InkStorage source, @NotNull InkStorage destinat } /** - * Transfer Ink from one storage to another - * Transfers a fixed amount of energy - * => Use the pressure like system without fixed amount, where possible - * - * @param source The ink storage that is getting drawn from - * @param destination The ink storage receiving energy - * @param color The ink type to transfer - * @param amount The fixed amount of ink to transfer - * @return the amount of energy that could be transferred + * Transfers Ink from storages with lots of Ink + * to storages with less. + * When called repeatedly (like every tick) the values of all storages will equalize, + * limited by their max storage. + * Don't forget to mark your stuff dirty, like with InkStorageBlockEntity.setInkDirty()! + * @param inkStorages The storages to run an equalization tick on */ - @Deprecated - static long transferInk(@NotNull InkStorage source, @NotNull InkStorage destination, @NotNull InkColor color, long amount) { - if (!destination.accepts(color)) { - return 0; + static void equalizeInk(List inkStorages) { + SpectrumRegistries.INK_COLOR.stream() + .forEach(inkColor -> equalizeInk(inkStorages, inkColor)); + } + + private static void equalizeInk(List storages, InkColor color) { + long total = 0; + + // collect storages that accept this color + List accepting = new ArrayList<>(storages.size()); + for (InkStorage s : storages) { + if (s.accepts(color)) { + accepting.add(s); + total += s.getEnergy(color); + } } - long sourceAmount = source.getEnergy(color); - if (sourceAmount > 0) { - long destinationRoom = destination.getRoom(color); - if (destinationRoom > 0) { - long transferAmount = Math.min(amount, Math.min(sourceAmount, destinationRoom)); - if (transferAmount > 0) { - destination.addEnergy(color, transferAmount); - source.drainEnergy(color, transferAmount); - return transferAmount; + if (accepting.isEmpty() || total == 0) return; + + long idealTarget = total / accepting.size(); + + // drain storages above target value + long pooled = 0; + for (InkStorage s : accepting) { + long current = s.getEnergy(color); + long delta = idealTarget - current; + long step = delta / 32; + if (step == 0 && delta != 0) { + step = delta > 0 ? 1 : -1; + } + + long smoothedTarget = current + step; + + if (current > smoothedTarget) { + long excess = current - smoothedTarget; + pooled += s.drainEnergy(color, excess); + } + } + + if (pooled <= 0) return; + + // refill storages below target + for (InkStorage s : accepting) { + long current = s.getEnergy(color); + long delta = idealTarget - current; + long step = delta / 32; + if (step == 0 && delta != 0) { + step = delta > 0 ? 1 : -1; + } + long smoothedTarget = current + step; + + if (current < smoothedTarget && pooled > 0) { + long needed = smoothedTarget - current; + long added = needed - s.addEnergy(color, needed); + pooled -= added; + } + } + + // If leftover pooled energy exists (due to capacity limits), + // redistribute with pressure flow + if (pooled > 0) { + for (InkStorage s : accepting) { + long room = s.getRoom(color); + if (room > 0) { + long added = room - s.addEnergy(color, room); + pooled -= added; } + if (pooled <= 0) break; } } - return 0; } // if the storage is able to store this kind of color @@ -112,10 +157,6 @@ static long transferInk(@NotNull InkStorage source, @NotNull InkStorage destinat // In contrast to requestEnergy this drains the energy up until 0, even if not requestedAmount of energy is stored long drainEnergy(InkColor color, long requestedAmount); - // returns true if the energy could be drained successfully - // if not enough energy is stored, the amount of stored energy remains unchanged - boolean requestEnergy(InkColor color, long requestedAmount); - // gets the amount of stored energy of that type long getEnergy(InkColor color); @@ -150,43 +191,10 @@ static long transferInk(@NotNull InkStorage source, @NotNull InkStorage destinat // completely empty the storage void clearContent(); - // Returns how full the storage is, as a float - default float getFillPercent(InkColor color) { - return Mth.clamp((float) getEnergy(color) / getMaxPerColor(), 0, 1); - } - - // Same as above, but in total. - default float getTotalFillPercent() { - return Mth.clamp((float) getCurrentTotal() / getMaxTotal(), 0, 1); - } - void addTooltip(List tooltip); long getRoom(InkColor color); - static @NotNull Map readEnergy(CompoundTag compound) { - Map energy = new HashMap<>(); - if (compound != null) { - for (String key : compound.getAllKeys()) { - InkColor inkColor = SpectrumRegistries.INK_COLOR.get(SpectrumCommon.locate(key)); - if (inkColor == null) { // TODO: needed? Fallback to a default color? - continue; - } - long amount = compound.getLong(key); - energy.put(inkColor, amount); - } - } - return energy; - } - - static @NotNull CompoundTag writeEnergy(Map storedEnergy) { - CompoundTag energy = new CompoundTag(); - for (Map.Entry color : storedEnergy.entrySet()) { - energy.putLong(color.getKey().getID().toString(), color.getValue()); - } - return energy; - } - static void addInkStoreBulletTooltip(List tooltip, InkColor color, long amount) { MutableComponent inkName = color.getColoredInkName(); tooltip.add(Component.translatable("spectrum.tooltip.ink_powered.bullet_amount", Component.literal(getShortenedNumberString(amount)).withStyle(ChatFormatting.WHITE), inkName).setStyle(inkName.getStyle())); diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/CreativeInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/storage/CreativeInkStorage.java index 4c5bd6f795..8d7e43e153 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/CreativeInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/storage/CreativeInkStorage.java @@ -33,11 +33,6 @@ public long drainEnergy(InkColor color, long requestedAmount) { return requestedAmount; } - @Override - public boolean requestEnergy(InkColor color, long requestedAmount) { - return true; - } - @Override public long getEnergy(InkColor color) { return Long.MAX_VALUE; diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/IndividualCappedInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/storage/IndividualCappedInkStorage.java index 1d4942133e..4c8bc441f5 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/IndividualCappedInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/storage/IndividualCappedInkStorage.java @@ -61,18 +61,6 @@ public long addEnergy(InkColor color, long amount) { } } - @Override - public boolean requestEnergy(InkColor color, long amount) { - long storedAmount = this.storedEnergy.getOrDefault(color, 0L); - if (storedAmount < amount) { - return false; - } else { - this.currentTotal -= amount; - this.storedEnergy.put(color, storedAmount - amount); - return true; - } - } - @Override public long drainEnergy(InkColor color, long amount) { long storedAmount = this.storedEnergy.getOrDefault(color, 0L); diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/SingleInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/storage/SingleInkStorage.java index 3f0605c057..b0cb9ec6de 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/SingleInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/storage/SingleInkStorage.java @@ -57,16 +57,6 @@ public long addEnergy(InkColor color, long amount) { return amount; } - @Override - public boolean requestEnergy(InkColor color, long amount) { - if (color == this.storedColor && amount >= this.storedEnergy) { - this.storedEnergy -= amount; - return true; - } else { - return false; - } - } - @Override public long drainEnergy(InkColor color, long amount) { if (color == this.storedColor) { diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedElementalMixingInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedElementalMixingInkStorage.java index 2ef54d8c89..bcee0f491b 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedElementalMixingInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedElementalMixingInkStorage.java @@ -18,45 +18,6 @@ public boolean accepts(InkColor color) { return color.isIn(InkColorTags.ELEMENTAL_COLORS); } - @Override - public boolean requestEnergy(InkColor color, long amount) { - if (color.isIn(InkColorTags.ELEMENTAL_COLORS)) { - // can be output directly - long storedAmount = this.storedEnergy.get(color); - if (storedAmount < amount) { - return false; - } else { - this.currentTotal -= amount; - this.storedEnergy.put(color, storedAmount - amount); - return true; - } - } - - // mix! - Optional> requiredElementals = InkColorMixes.getColorsToMix(color); - if (requiredElementals.isEmpty()) { - return false; - } - - // check if we have enough - for (Map.Entry entry : requiredElementals.get().entrySet()) { - long storedAmount = this.storedEnergy.get(entry.getKey()); - long requiredAmount = (int) Math.ceil(entry.getValue() * amount); - if (storedAmount < requiredAmount) { - return false; - } - } - - // yes, we got stored enough. Drain - for (Map.Entry entry : requiredElementals.get().entrySet()) { - long storedAmount = this.storedEnergy.get(entry.getKey()); - long requiredAmount = (int) Math.ceil(entry.getValue() * amount); - this.currentTotal -= requiredAmount; - this.storedEnergy.put(entry.getKey(), storedAmount - requiredAmount); - } - return true; - } - @Override public long drainEnergy(InkColor color, long amount) { if (color.isIn(InkColorTags.ELEMENTAL_COLORS)) { diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedInkStorage.java index 8c3ff67899..81667ea5dd 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedInkStorage.java @@ -40,18 +40,6 @@ public long addEnergy(InkColor color, long amount) { return overflow; } - @Override - public boolean requestEnergy(InkColor color, long amount) { - long storedAmount = this.storedEnergy.getOrDefault(color, 0L); - if (storedAmount < amount) { - return false; - } else { - this.currentTotal -= amount; - this.storedEnergy.put(color, storedAmount - amount); - return true; - } - } - @Override public long drainEnergy(InkColor color, long amount) { long storedAmount = this.storedEnergy.getOrDefault(color, 0L); From 6d2a0149fde9c4c13844f7a85de644e340e3b63d Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Wed, 8 Apr 2026 19:11:09 +0200 Subject: [PATCH 010/477] ink pastel node logic: fin~ --- .../network/PastelTransmissionLogic.java | 9 +-- .../payloads/InkPastelPayloadType.java | 80 ++++--------------- .../payloads/PastelPayloadType.java | 6 +- 3 files changed, 20 insertions(+), 75 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index 56a411be7c..bfd430def3 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -1,25 +1,18 @@ package de.dafuqs.spectrum.blocks.pastel_network.network; -import com.mojang.serialization.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.resources.*; -import net.minecraft.util.*; -import net.minecraft.world.item.*; -import net.neoforged.neoforge.items.*; import org.jetbrains.annotations.*; import org.jgrapht.*; -import org.jgrapht.Graph; import org.jgrapht.alg.interfaces.*; import org.jgrapht.alg.shortestpath.*; import org.jgrapht.graph.*; import java.util.*; -import java.util.function.*; @SuppressWarnings("UnstableApiUsage") public class PastelTransmissionLogic { @@ -80,7 +73,7 @@ public void invalidateCache() { public void tick(PastelNetwork.NodePriority priority) { for(Map.Entry, PastelPayloadType> payloadType : SpectrumRegistries.PASTEL_PAYLOAD_TYPE.entrySet()) { - payloadType.getValue().tick(this); + payloadType.getValue().tick(this, priority); } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java index 04520b2b98..26fd13c8f5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java @@ -2,21 +2,14 @@ import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import net.minecraft.core.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import net.neoforged.neoforge.capabilities.*; -import net.neoforged.neoforge.fluids.*; -import net.neoforged.neoforge.fluids.capability.*; import org.jetbrains.annotations.*; -import org.jgrapht.*; -import org.jgrapht.graph.*; import java.util.*; -import java.util.function.*; public class InkPastelPayloadType extends PastelPayloadType { @@ -38,68 +31,25 @@ public InkPastelPayloadType() { } @Override - public void tick(PastelTransmissionLogic logic) { - for (PastelNodeBlockEntity sourceNode : logic.getLoadedNodes(PastelNodeType.SENDER)) { - for(Supplier payloadType : sourceNode.getSupportedPayloads()) { - if(payloadType.get() != this) { - continue; - } - payloadType.get().tryTransferToType(logic, sourceNode, PastelNodeType.SENDER, PastelTransmissionLogic.TransferMode.PUSH); - } - } - } - - @Override - public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode) { - @Nullable InkStorageBlockEntity sourceHandler = getConnectedInkStorage(sourceNode); - if (sourceHandler == null) { - return; - } + public void tick(PastelTransmissionLogic logic, PastelNetwork.NodePriority priority) { + Set nodes = logic.getLoadedNodes(PastelNodeType.SENDER); + if (nodes.isEmpty()) return; - for (PastelNodeBlockEntity destinationNode : logic.getLoadedNodes(type)) { - if (!destinationNode.canTransfer()) { - continue; - } - - @Nullable InkStorageBlockEntity destinationHandler = getConnectedInkStorage(destinationNode); - if (destinationHandler != null) { - boolean success = transferBetween(logic, sourceNode, sourceHandler, destinationNode, destinationHandler, transferMode); - if (success && transferMode != PastelTransmissionLogic.TransferMode.PULL) { - return; - } + List> blockEntities = new ArrayList<>(nodes.size()); + List inkStorages = new ArrayList<>(nodes.size()); + for (PastelNodeBlockEntity node : nodes) { + InkStorageBlockEntity storage = getConnectedInkStorage(node); + if (storage != null) { + blockEntities.add(storage); + inkStorages.add(storage.getEnergyStorage()); } } - } - - private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, InkStorageBlockEntity sourceHandler, PastelNodeBlockEntity destinationNode, InkStorageBlockEntity destinationHandler, PastelTransmissionLogic.TransferMode transferMode) { - InkStorage sourceStorage = sourceHandler.getEnergyStorage(); - InkStorage destinationStorage = destinationHandler.getEnergyStorage(); - for(Map.Entry sourceEntry : sourceStorage.getEnergy().entrySet()) { - GraphPath graphPath = logic.getPath(sourceNode, destinationNode); - if (graphPath == null) { - continue; - } - - InkColor sourceColor = sourceEntry.getKey(); - - long roomAtDestination = destinationStorage.getRoom(sourceColor); - List transmittedAmounts = new ArrayList<>(); - if(roomAtDestination > 0) { - long transmittedAmount = Math.min(Math.min(sourceEntry.getValue(), roomAtDestination), sourceNode.getMaxTransferredAmount() * 20L); - if(transmittedAmount > 0) { - sourceStorage.addEnergy(sourceEntry.getKey(), -transmittedAmount); - transmittedAmounts.add(new InkAmount(sourceColor, transmittedAmount)); - return true; - } - } - - if(!transmittedAmounts.isEmpty()) { - PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), new InkPastelPayload(transmittedAmounts), sourceNode.getTransferTime()); - logic.addTransmission(sourceNode, destinationNode, transferMode, transmission); - sourceHandler.setInkDirty(); - } + if (blockEntities.isEmpty()) return; + + InkStorage.equalizeInk(inkStorages); + for(InkStorageBlockEntity s : blockEntities) { + s.setInkDirty(); } - return false; } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java index 5977ba785b..914b6ffa56 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java @@ -17,7 +17,7 @@ public PastelPayloadType(ResourceLocation id, MapCodec this.codec = codec; } - public void tick(PastelTransmissionLogic logic) { + public void tick(PastelTransmissionLogic logic, PastelNetwork.NodePriority priority) { transferBetween(logic, PastelNodeType.SENDER, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PUSH_PULL); transferBetween(logic, PastelNodeType.PROVIDER, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PULL); transferBetween(logic, PastelNodeType.STORAGE, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PULL); @@ -36,6 +36,8 @@ protected void transferBetween(PastelTransmissionLogic logic, PastelNodeType sou } } - protected abstract void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode); + protected void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode){ + + } } \ No newline at end of file From c37ba2169d5feef6734e3a862f5313564b9687e2 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Wed, 8 Apr 2026 20:15:13 +0200 Subject: [PATCH 011/477] tags --- .../spectrum/blocks/deeper_down/flora/TriStateVineBlock.java | 3 +-- .../data/minecraft/tags/block/dead_bush_may_place_on.json | 5 +++++ .../resources/data/minecraft/tags/block/mineable/axe.json | 2 +- .../resources/data/minecraft/tags/block/sword_efficient.json | 2 ++ 4 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/data/minecraft/tags/block/dead_bush_may_place_on.json diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/TriStateVineBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/TriStateVineBlock.java index 3b5f071577..2cb7a057e9 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/TriStateVineBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/TriStateVineBlock.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.blocks.deeper_down.flora; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.server.level.*; @@ -83,7 +82,7 @@ public BlockState getStateForPlacement(BlockPlaceContext ctx) { BlockState roof = world.getBlockState(pos.above()); if (roof.is(this)) { state = defaultBlockState().setValue(LIFE_STAGE, roof.getValue(LIFE_STAGE)); - world.setBlock(pos, roof.setValue(LIFE_STAGE, LifeStage.STALK), 3); + world.setBlockAndUpdate(pos, roof.setValue(LIFE_STAGE, LifeStage.STALK)); } return state; diff --git a/src/main/resources/data/minecraft/tags/block/dead_bush_may_place_on.json b/src/main/resources/data/minecraft/tags/block/dead_bush_may_place_on.json new file mode 100644 index 0000000000..47a4faec4a --- /dev/null +++ b/src/main/resources/data/minecraft/tags/block/dead_bush_may_place_on.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#spectrum:groundcover" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/block/mineable/axe.json b/src/main/resources/data/minecraft/tags/block/mineable/axe.json index 2e4ccea43c..b0f0926440 100644 --- a/src/main/resources/data/minecraft/tags/block/mineable/axe.json +++ b/src/main/resources/data/minecraft/tags/block/mineable/axe.json @@ -6,7 +6,7 @@ "#spectrum:noxwood", "#spectrum:jadeite", "#spectrum:nephrite", - "#spectrum:woody_plants", + "#spectrum:woody_plants",s "spectrum:fading", "spectrum:heartbound_chest", diff --git a/src/main/resources/data/minecraft/tags/block/sword_efficient.json b/src/main/resources/data/minecraft/tags/block/sword_efficient.json index 7eac2e546b..f5039f6cac 100644 --- a/src/main/resources/data/minecraft/tags/block/sword_efficient.json +++ b/src/main/resources/data/minecraft/tags/block/sword_efficient.json @@ -1,5 +1,7 @@ { "values": [ + "#spectrum:noxshrooms", + "spectrum:nephrite_blossom_stem", "spectrum:jadeite_lotus_stem", "spectrum:jadeite_lotus_flower", From 08e5a51237cd20b7fe2a6a60efe55ff96fd60125 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Wed, 8 Apr 2026 20:32:03 +0200 Subject: [PATCH 012/477] fix https://github.com/Mrbysco/GeOre/issues/23 --- .../spectrum/registries/SpectrumEventListeners.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index b84fb65cfd..652583d45e 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -18,18 +18,17 @@ import de.dafuqs.spectrum.items.tools.*; import de.dafuqs.spectrum.items.trinkets.*; import de.dafuqs.spectrum.mixin.accessors.*; +import de.dafuqs.spectrum.mob_effect.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.particle.*; import de.dafuqs.spectrum.particle.effect.*; import de.dafuqs.spectrum.progression.*; import de.dafuqs.spectrum.registries.client.*; -import de.dafuqs.spectrum.mob_effect.*; import net.minecraft.advancements.*; import net.minecraft.client.resources.model.*; import net.minecraft.core.*; import net.minecraft.core.component.*; import net.minecraft.core.particles.*; -import net.minecraft.resources.*; import net.minecraft.server.*; import net.minecraft.server.level.*; import net.minecraft.server.packs.resources.*; @@ -63,9 +62,7 @@ import net.neoforged.neoforge.event.entity.*; import net.neoforged.neoforge.event.entity.living.*; import net.neoforged.neoforge.event.entity.player.*; -import net.neoforged.neoforge.event.entity.player.PlayerEvent; import net.neoforged.neoforge.event.level.*; -import net.neoforged.neoforge.event.level.BlockEvent; import net.neoforged.neoforge.event.server.*; import net.neoforged.neoforge.event.tick.*; import org.jetbrains.annotations.*; @@ -778,9 +775,9 @@ private static void onBlockBreak(BlockEvent.BreakEvent event) { } @SubscribeEvent - private static void onBlockPlace(BlockEvent.EntityPlaceEvent event) { + private static void onNeighborNotify(BlockEvent.NeighborNotifyEvent event) { if(!event.isCanceled()) { - event.getLevel().gameEvent(SpectrumGameEvents.BLOCK_CHANGED, event.getPos(), GameEvent.Context.of(event.getPlacedBlock())); + event.getLevel().gameEvent(SpectrumGameEvents.BLOCK_CHANGED, event.getPos(), GameEvent.Context.of(event.getLevel().getBlockState(event.getPos()))); } } From bba8eb2352dfcc5cde663cdf0072cc0c4b2f75f7 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Wed, 8 Apr 2026 20:32:11 +0200 Subject: [PATCH 013/477] oh --- src/main/resources/data/minecraft/tags/block/mineable/axe.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/data/minecraft/tags/block/mineable/axe.json b/src/main/resources/data/minecraft/tags/block/mineable/axe.json index b0f0926440..2e4ccea43c 100644 --- a/src/main/resources/data/minecraft/tags/block/mineable/axe.json +++ b/src/main/resources/data/minecraft/tags/block/mineable/axe.json @@ -6,7 +6,7 @@ "#spectrum:noxwood", "#spectrum:jadeite", "#spectrum:nephrite", - "#spectrum:woody_plants",s + "#spectrum:woody_plants", "spectrum:fading", "spectrum:heartbound_chest", From cec38345ebba21b19ca4b836511c47bc46b2f9fa Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Wed, 8 Apr 2026 21:33:33 +0200 Subject: [PATCH 014/477] geore compat --- .../geore/allthemodium.json | 23 +++++++++++++++++++ .../geore/aluminum.json | 23 +++++++++++++++++++ .../geore/ancient_debris.json | 23 +++++++++++++++++++ .../geore/black_quartz.json | 23 +++++++++++++++++++ .../geore/coal.json | 23 +++++++++++++++++++ .../geore/copper.json | 23 +++++++++++++++++++ .../geore/diamond.json | 23 +++++++++++++++++++ .../geore/emerald.json | 23 +++++++++++++++++++ .../geore/gold.json | 23 +++++++++++++++++++ .../geore/iron.json | 23 +++++++++++++++++++ .../geore/lapis.json | 23 +++++++++++++++++++ .../geore/lead.json | 23 +++++++++++++++++++ .../geore/monazite.json | 23 +++++++++++++++++++ .../geore/nickel.json | 23 +++++++++++++++++++ .../geore/osmium.json | 23 +++++++++++++++++++ .../geore/platinum.json | 23 +++++++++++++++++++ .../geore/quartz.json | 23 +++++++++++++++++++ .../geore/redstone.json | 23 +++++++++++++++++++ .../geore/ruby.json | 23 +++++++++++++++++++ .../geore/sapphire.json | 23 +++++++++++++++++++ .../geore/silver.json | 23 +++++++++++++++++++ .../geore/tin.json | 23 +++++++++++++++++++ .../geore/topaz.json | 23 +++++++++++++++++++ .../geore/tungsten.json | 23 +++++++++++++++++++ .../geore/unobtainium.json | 23 +++++++++++++++++++ .../geore/uraninite.json | 23 +++++++++++++++++++ .../geore/uranium.json | 23 +++++++++++++++++++ .../geore/vibranium.json | 23 +++++++++++++++++++ .../geore/zinc.json | 23 +++++++++++++++++++ 29 files changed, 667 insertions(+) create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/allthemodium.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/aluminum.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/ancient_debris.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/black_quartz.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/coal.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/copper.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/diamond.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/emerald.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/gold.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/iron.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/lapis.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/lead.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/monazite.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/nickel.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/osmium.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/platinum.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/quartz.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/redstone.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/ruby.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/sapphire.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/silver.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/tin.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/topaz.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/tungsten.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/unobtainium.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/uraninite.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/uranium.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/vibranium.json create mode 100644 src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/zinc.json diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/allthemodium.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/allthemodium.json new file mode 100644 index 0000000000..047b691717 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/allthemodium.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_allthemodium_bud", + "geore:medium_allthemodium_bud", + "geore:large_allthemodium_bud", + "geore:allthemodium_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:allthemodium_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/aluminum.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/aluminum.json new file mode 100644 index 0000000000..ebd8b41935 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/aluminum.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_aluminum_bud", + "geore:medium_aluminum_bud", + "geore:large_aluminum_bud", + "geore:aluminum_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:aluminum_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/ancient_debris.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/ancient_debris.json new file mode 100644 index 0000000000..fdbab8dcc7 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/ancient_debris.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_ancient_debris_bud", + "geore:medium_ancient_debris_bud", + "geore:large_ancient_debris_bud", + "geore:ancient_debris_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:ancient_debris_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/black_quartz.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/black_quartz.json new file mode 100644 index 0000000000..2ce5d77475 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/black_quartz.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_black_quartz_bud", + "geore:medium_black_quartz_bud", + "geore:large_black_quartz_bud", + "geore:black_quartz_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:black_quartz_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/coal.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/coal.json new file mode 100644 index 0000000000..0abd2b9ff5 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/coal.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_coal_bud", + "geore:medium_coal_bud", + "geore:large_coal_bud", + "geore:coal_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:coal_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/copper.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/copper.json new file mode 100644 index 0000000000..d795122958 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/copper.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_copper_bud", + "geore:medium_copper_bud", + "geore:large_copper_bud", + "geore:copper_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:copper_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/diamond.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/diamond.json new file mode 100644 index 0000000000..f507afe686 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/diamond.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_diamond_bud", + "geore:medium_diamond_bud", + "geore:large_diamond_bud", + "geore:diamond_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:diamond_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/emerald.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/emerald.json new file mode 100644 index 0000000000..96d08b5ace --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/emerald.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_emerald_bud", + "geore:medium_emerald_bud", + "geore:large_emerald_bud", + "geore:emerald_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:emerald_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/gold.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/gold.json new file mode 100644 index 0000000000..d42b3871e3 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/gold.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_gold_bud", + "geore:medium_gold_bud", + "geore:large_gold_bud", + "geore:gold_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:gold_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/iron.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/iron.json new file mode 100644 index 0000000000..41da72e9b8 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/iron.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_iron_bud", + "geore:medium_iron_bud", + "geore:large_iron_bud", + "geore:iron_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:iron_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/lapis.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/lapis.json new file mode 100644 index 0000000000..9c20174a8d --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/lapis.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_lapis_bud", + "geore:medium_lapis_bud", + "geore:large_lapis_bud", + "geore:lapis_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:lapis_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/lead.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/lead.json new file mode 100644 index 0000000000..3774aedbbf --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/lead.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_lead_bud", + "geore:medium_lead_bud", + "geore:large_lead_bud", + "geore:lead_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:lead_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/monazite.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/monazite.json new file mode 100644 index 0000000000..18a6593480 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/monazite.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_monazite_bud", + "geore:medium_monazite_bud", + "geore:large_monazite_bud", + "geore:monazite_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:monazite_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/nickel.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/nickel.json new file mode 100644 index 0000000000..ef65eb2663 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/nickel.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_nickel_bud", + "geore:medium_nickel_bud", + "geore:large_nickel_bud", + "geore:nickel_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:nickel_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/osmium.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/osmium.json new file mode 100644 index 0000000000..5855fbb42b --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/osmium.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_osmium_bud", + "geore:medium_osmium_bud", + "geore:large_osmium_bud", + "geore:osmium_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:osmium_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/platinum.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/platinum.json new file mode 100644 index 0000000000..c6a93110eb --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/platinum.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_platinum_bud", + "geore:medium_platinum_bud", + "geore:large_platinum_bud", + "geore:platinum_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:platinum_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/quartz.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/quartz.json new file mode 100644 index 0000000000..7a2bdbbb09 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/quartz.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_quartz_bud", + "geore:medium_quartz_bud", + "geore:large_quartz_bud", + "geore:quartz_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:quartz_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/redstone.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/redstone.json new file mode 100644 index 0000000000..96227dacc1 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/redstone.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_redstone_bud", + "geore:medium_redstone_bud", + "geore:large_redstone_bud", + "geore:redstone_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:redstone_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/ruby.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/ruby.json new file mode 100644 index 0000000000..5508f9dc16 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/ruby.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_ruby_bud", + "geore:medium_ruby_bud", + "geore:large_ruby_bud", + "geore:ruby_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:ruby_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/sapphire.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/sapphire.json new file mode 100644 index 0000000000..ca7c0bfb71 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/sapphire.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_sapphire_bud", + "geore:medium_sapphire_bud", + "geore:large_sapphire_bud", + "geore:sapphire_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:sapphire_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/silver.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/silver.json new file mode 100644 index 0000000000..6047531a83 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/silver.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_silver_bud", + "geore:medium_silver_bud", + "geore:large_silver_bud", + "geore:silver_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:silver_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/tin.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/tin.json new file mode 100644 index 0000000000..ed35913734 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/tin.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_tin_bud", + "geore:medium_tin_bud", + "geore:large_tin_bud", + "geore:tin_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:tin_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/topaz.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/topaz.json new file mode 100644 index 0000000000..06129fbb45 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/topaz.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_topaz_bud", + "geore:medium_topaz_bud", + "geore:large_topaz_bud", + "geore:topaz_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:topaz_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/tungsten.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/tungsten.json new file mode 100644 index 0000000000..d3f902a571 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/tungsten.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_tungsten_bud", + "geore:medium_tungsten_bud", + "geore:large_tungsten_bud", + "geore:tungsten_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:tungsten_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/unobtainium.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/unobtainium.json new file mode 100644 index 0000000000..6b765eb375 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/unobtainium.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_unobtainium_bud", + "geore:medium_unobtainium_bud", + "geore:large_unobtainium_bud", + "geore:unobtainium_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:unobtainium_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/uraninite.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/uraninite.json new file mode 100644 index 0000000000..780774dec0 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/uraninite.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_uraninite_bud", + "geore:medium_uraninite_bud", + "geore:large_uraninite_bud", + "geore:uraninite_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:uraninite_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/uranium.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/uranium.json new file mode 100644 index 0000000000..2be75d4714 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/uranium.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_uranium_bud", + "geore:medium_uranium_bud", + "geore:large_uranium_bud", + "geore:uranium_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:uranium_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/vibranium.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/vibranium.json new file mode 100644 index 0000000000..530a0050d7 --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/vibranium.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_vibranium_bud", + "geore:medium_vibranium_bud", + "geore:large_vibranium_bud", + "geore:vibranium_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:vibranium_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/zinc.json b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/zinc.json new file mode 100644 index 0000000000..b1d1149d0d --- /dev/null +++ b/src/main/resources/data/spectrum/crystal_apothecary_simulation/geore/zinc.json @@ -0,0 +1,23 @@ +{ + "budding_block": "geore:budding_emerald", + "valid_neighbor_blocks": [ + "geore:small_zinc_bud", + "geore:medium_zinc_bud", + "geore:large_zinc_bud", + "geore:zinc_cluster", + "minecraft:air", + "minecraft:cave_air", + "minecraft:water" + ], + "ticks_for_compensation_loot_per_valid_neighbor": 20000, + "compensated_loot": { + "id": "geore:zinc_shard", + "count": 2 + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "geore" + } + ] +} \ No newline at end of file From a0186012bc72b4434034893ff25a47eb56af3169 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Wed, 8 Apr 2026 21:43:32 +0200 Subject: [PATCH 015/477] how did that happen --- .../spectrum/advancement/unlocks/items/heart_of_the_sea.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/data/spectrum/advancement/unlocks/items/heart_of_the_sea.json b/src/main/resources/data/spectrum/advancement/unlocks/items/heart_of_the_sea.json index 3cd2d32a9d..3717d40439 100644 --- a/src/main/resources/data/spectrum/advancement/unlocks/items/heart_of_the_sea.json +++ b/src/main/resources/data/spectrum/advancement/unlocks/items/heart_of_the_sea.json @@ -3,7 +3,7 @@ "harvested_moonstruck_nectar": { "trigger": "revelationary:advancement_gotten", "conditions": { - "advancement_identifier": "spectrum:midgame/harvest_moonstruck_nectar," + "advancement_identifier": "spectrum:midgame/harvest_moonstruck_nectar" } }, "collected_mermaids_gem": { From 868235f605180eda320341977e7ae67310a2fee6 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 13 Apr 2026 22:04:21 +0200 Subject: [PATCH 016/477] painting station wip --- .../blocks/energy/BaseInkTransferBlock.java | 89 ++++++++ .../energy/BaseInkTransferBlockEntity.java | 198 ++++++++++++++++++ .../blocks/energy/ColorPickerBlock.java | 73 +------ .../blocks/energy/ColorPickerBlockEntity.java | 172 +-------------- .../energy/CrystalApothecaryBlockEntity.java | 13 +- .../blocks/energy/PaintingStationBlock.java | 57 +++++ .../energy/PaintingStationBlockEntity.java | 101 +++++++++ .../registries/SpectrumBlockEntities.java | 1 + .../spectrum/registries/SpectrumBlocks.java | 3 +- 9 files changed, 456 insertions(+), 251 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlock.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlock.java new file mode 100644 index 0000000000..0ebe86a106 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlock.java @@ -0,0 +1,89 @@ +package de.dafuqs.spectrum.blocks.energy; + +import net.minecraft.core.*; +import net.minecraft.util.*; +import net.minecraft.world.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.item.*; +import net.minecraft.world.item.context.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.state.*; +import net.minecraft.world.level.pathfinder.*; +import net.minecraft.world.phys.*; +import net.minecraft.world.phys.shapes.*; + +public abstract class BaseInkTransferBlock extends HorizontalDirectionalBlock implements EntityBlock { + + protected static final VoxelShape SHAPE = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 13.0D, 15.0D); + + public BaseInkTransferBlock(Properties settings) { + super(settings); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public boolean isPathfindable(BlockState state, PathComputationType type) { + return false; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext ctx) { + return this.defaultBlockState().setValue(FACING, ctx.getHorizontalDirection().getOpposite()); + } + + @Override + public InteractionResult useWithoutItem(BlockState state, Level world, BlockPos pos, Player player, BlockHitResult hit) { + if (world.isClientSide) { + return InteractionResult.SUCCESS; + } else { + this.openScreen(world, pos, player); + return InteractionResult.CONSUME; + } + } + + protected abstract void openScreen(Level world, BlockPos pos, Player player); + + @Override + public boolean hasAnalogOutputSignal(BlockState state) { + return true; + } + + @Override + public int getAnalogOutputSignal(BlockState state, Level world, BlockPos pos) { + if (world.getBlockEntity(pos) instanceof ColorPickerBlockEntity blockEntity) { + int i = 0; + float f = 0.0f; + for (int j = 0; j < blockEntity.inventory.size(); ++j) { + ItemStack itemStack = blockEntity.inventory.get(j); + if (itemStack.isEmpty()) continue; + f += (float) itemStack.getCount() / (float) itemStack.getMaxStackSize(); + ++i; + } + return Mth.floor(f / (float) blockEntity.inventory.size() * 14.0f) + (i > 0 ? 1 : 0); + } + + return 0; + } + + @Override + public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean moved) { + Containers.dropContentsOnDestroy(state, newState, world, pos); + super.onRemove(state, world, pos, newState, moved); + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java new file mode 100644 index 0000000000..d36d51d7b3 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java @@ -0,0 +1,198 @@ +package de.dafuqs.spectrum.blocks.energy; + +import de.dafuqs.spectrum.api.block.*; +import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.progression.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.core.*; +import net.minecraft.nbt.*; +import net.minecraft.network.protocol.*; +import net.minecraft.network.protocol.game.*; +import net.minecraft.server.level.*; +import net.minecraft.world.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.entity.*; +import net.minecraft.world.level.block.state.*; +import org.jetbrains.annotations.*; + +import java.util.*; + +public abstract class BaseInkTransferBlockEntity extends RandomizableContainerBlockEntity implements PlayerOwned, InkStorageBlockEntity, MenuProvider { + + public static final int INVENTORY_SIZE = 2; // input & output slots + public static final int INPUT_SLOT_ID = 0; + public static final int OUTPUT_SLOT_ID = 1; + + public NonNullList inventory = NonNullList.withSize(INVENTORY_SIZE, ItemStack.EMPTY); + protected T inkStorage; + protected boolean paused; + protected boolean inkDirty; + protected Optional> selectedColor = Optional.empty(); + private UUID ownerUUID; + + public BaseInkTransferBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos, BlockState blockState, T inkStorage) { + super(blockEntityType, blockPos, blockState); + this.inkStorage = inkStorage; + } + + @Override + public T getEnergyStorage() { + return inkStorage; + } + + @Override + public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { + super.loadAdditional(nbt, registryLookup); + this.inventory = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); + if (!this.tryLoadLootTable(nbt)) { + ContainerHelper.loadAllItems(nbt, this.inventory, registryLookup); + } + this.ownerUUID = PlayerOwnedWithName.readOwnerUUID(nbt); + if (nbt.contains("SelectedColor", Tag.TAG_STRING)) { + this.selectedColor = Optional.of(SpectrumRegistries.INK_COLOR.wrapAsHolder(InkColor.ofIdString(nbt.getString("SelectedColor")).get())); + } else { + this.selectedColor = Optional.empty(); + } + } + + @Override + protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { + super.saveAdditional(nbt, registryLookup); + if (!this.trySaveLootTable(nbt)) { + ContainerHelper.saveAllItems(nbt, this.inventory, registryLookup); + } + PlayerOwned.writeOwnerUUID(nbt, this.ownerUUID); + this.selectedColor.ifPresent(color -> nbt.putString("SelectedColor", color.getRegisteredName())); + } + + @Override + public UUID getOwnerUUID() { + return this.ownerUUID; + } + + @Override + public void setOwner(Player playerEntity) { + this.ownerUUID = playerEntity.getUUID(); + setChanged(); + } + + @Override + public void setInkDirty() { + this.inkDirty = true; + } + + @Override + public boolean getInkDirty() { + return inkDirty; + } + + @Override + protected NonNullList getItems() { + return this.inventory; + } + + @Override + protected void setItems(NonNullList list) { + this.inventory = list; + this.paused = false; + updateInClientWorld(); + } + + @Override + public ItemStack removeItem(int slot, int amount) { + ItemStack itemStack = super.removeItem(slot, amount); + this.paused = false; + updateInClientWorld(); + return itemStack; + } + + @Override + public ItemStack removeItemNoUpdate(int slot) { + ItemStack itemStack = super.removeItemNoUpdate(slot); + this.paused = false; + updateInClientWorld(); + return itemStack; + } + + @Override + public void setItem(int slot, ItemStack stack) { + super.setItem(slot, stack); + this.paused = false; + updateInClientWorld(); + } + + @Override + public int getContainerSize() { + return INVENTORY_SIZE; + } + + public boolean tryFillInkContainer() { + long transferredAmount = 0; + + ItemStack stack = inventory.get(OUTPUT_SLOT_ID); + if (stack.getItem() instanceof InkStorageItem inkStorageItem) { + InkStorage itemStorage = inkStorageItem.getEnergyStorage(stack); + + ServerPlayer owner = null; + if (getOwnerIfOnline(this.getLevel()) instanceof ServerPlayer serverPlayerEntity) { + owner = serverPlayerEntity; + } + + if (this.selectedColor.isEmpty()) { + for (InkColor color : InkColors.all()) { + transferredAmount += tryTransferInk(owner, stack, itemStorage, color); + } + } else { + transferredAmount = tryTransferInk(owner, stack, itemStorage, this.selectedColor.get().value()); + } + + if (transferredAmount > 0) { + inkStorageItem.setEnergyStorage(stack, itemStorage); + } + } + + return transferredAmount > 0; + } + + private long tryTransferInk(ServerPlayer owner, ItemStack stack, InkStorage itemStorage, InkColor color) { + long amount = InkStorage.transferInk(getEnergyStorage(), itemStorage, color); + if (amount > 0 && owner != null) { + SpectrumAdvancementCriteria.INK_CONTAINER_INTERACTION.trigger(owner, stack, itemStorage, color, amount); + } + return amount; + } + + public void setSelectedColor(Optional> inkColor) { + this.selectedColor = inkColor; + this.paused = false; + this.setChanged(); + } + + public Optional> getSelectedColor() { + return this.selectedColor; + } + + // Called when the chunk is first loaded to initialize this be + @Override + public CompoundTag getUpdateTag(HolderLookup.Provider registryLookup) { + CompoundTag nbtCompound = new CompoundTag(); + this.saveAdditional(nbtCompound, registryLookup); + return nbtCompound; + } + + @Nullable + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + public void updateInClientWorld() { + if (level != null) { + level.sendBlockUpdated(worldPosition, level.getBlockState(worldPosition), level.getBlockState(worldPosition), Block.UPDATE_INVISIBLE); + } + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlock.java index b3924efe8a..13285419e0 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlock.java @@ -6,28 +6,19 @@ import net.minecraft.*; import net.minecraft.core.*; import net.minecraft.network.chat.*; -import net.minecraft.util.*; -import net.minecraft.world.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; -import net.minecraft.world.item.context.*; import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import net.minecraft.world.level.pathfinder.*; -import net.minecraft.world.phys.*; -import net.minecraft.world.phys.shapes.*; import org.jetbrains.annotations.*; import java.util.*; -public class ColorPickerBlock extends HorizontalDirectionalBlock implements EntityBlock { +public class ColorPickerBlock extends BaseInkTransferBlock { public static final MapCodec CODEC = simpleCodec(ColorPickerBlock::new); - protected static final VoxelShape SHAPE = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 13.0D, 15.0D); - public ColorPickerBlock(Properties settings) { super(settings); } @@ -37,42 +28,17 @@ public MapCodec codec() { return CODEC; } - @Override - public RenderShape getRenderShape(BlockState state) { - return RenderShape.MODEL; - } - @Override public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipFlag type) { super.appendHoverText(stack, context, tooltip, type); tooltip.add(Component.translatable("block.spectrum.color_picker.tooltip").withStyle(ChatFormatting.GRAY)); } - @Override - public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { - return SHAPE; - } - @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { return new ColorPickerBlockEntity(pos, state); } - @Override - public boolean isPathfindable(BlockState state, PathComputationType type) { - return false; - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(FACING); - } - - @Override - public BlockState getStateForPlacement(BlockPlaceContext ctx) { - return this.defaultBlockState().setValue(FACING, ctx.getHorizontalDirection().getOpposite()); - } - @Nullable @Override public BlockEntityTicker getTicker(Level world, BlockState state, BlockEntityType type) { @@ -80,15 +46,6 @@ public BlockEntityTicker getTicker(Level world, Block } @Override - public InteractionResult useWithoutItem(BlockState state, Level world, BlockPos pos, Player player, BlockHitResult hit) { - if (world.isClientSide) { - return InteractionResult.SUCCESS; - } else { - this.openScreen(world, pos, player); - return InteractionResult.CONSUME; - } - } - protected void openScreen(Level world, BlockPos pos, Player player) { BlockEntity blockEntity = world.getBlockEntity(pos); if (blockEntity instanceof ColorPickerBlockEntity colorPickerBlockEntity) { @@ -97,32 +54,4 @@ protected void openScreen(Level world, BlockPos pos, Player player) { } } - @Override - public boolean hasAnalogOutputSignal(BlockState state) { - return true; - } - - @Override - public int getAnalogOutputSignal(BlockState state, Level world, BlockPos pos) { - if (world.getBlockEntity(pos) instanceof ColorPickerBlockEntity blockEntity) { - int i = 0; - float f = 0.0f; - for (int j = 0; j < blockEntity.inventory.size(); ++j) { - ItemStack itemStack = blockEntity.inventory.get(j); - if (itemStack.isEmpty()) continue; - f += (float) itemStack.getCount() / (float) itemStack.getMaxStackSize(); - ++i; - } - return Mth.floor(f / (float) blockEntity.inventory.size() * 14.0f) + (i > 0 ? 1 : 0); - } - - return 0; - } - - @Override - public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean moved) { - Containers.dropContentsOnDestroy(state, newState, world, pos); - super.onRemove(state, world, pos, newState, moved); - } - } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java index e753e61ea3..9d0b47807a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.blocks.energy; -import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.energy.*; import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.api.energy.storage.*; @@ -10,15 +9,12 @@ import de.dafuqs.spectrum.inventories.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.particle.effect.*; -import de.dafuqs.spectrum.progression.*; import de.dafuqs.spectrum.recipe.color_picker.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.nbt.*; import net.minecraft.network.*; import net.minecraft.network.chat.*; -import net.minecraft.network.protocol.*; -import net.minecraft.network.protocol.game.*; import net.minecraft.server.level.*; import net.minecraft.sounds.*; import net.minecraft.world.*; @@ -27,35 +23,20 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; import org.jetbrains.annotations.*; import java.util.*; -public class ColorPickerBlockEntity extends RandomizableContainerBlockEntity implements PlayerOwned, InkStorageBlockEntity, MenuProvider { +public class ColorPickerBlockEntity extends BaseInkTransferBlockEntity implements MenuProvider { - public static final int INVENTORY_SIZE = 2; // input & output slots - public static final int INPUT_SLOT_ID = 0; - public static final int OUTPUT_SLOT_ID = 1; public static final long TICKS_PER_CONVERSION = 5; - public static final long STORAGE_AMOUNT = 64 * 64 * 64 * 100; - - public NonNullList inventory; - protected TotalCappedInkStorage inkStorage; - protected boolean paused; - protected boolean inkDirty; + public static final long STORAGE_AMOUNT = (long) Math.pow(2, 16); protected @Nullable InkConvertingRecipe cachedRecipe; - protected Optional> selectedColor = Optional.empty(); - private UUID ownerUUID; public ColorPickerBlockEntity(BlockPos blockPos, BlockState blockState) { - super(SpectrumBlockEntities.COLOR_PICKER.get(), blockPos, blockState); - - this.inventory = NonNullList.withSize(INVENTORY_SIZE, ItemStack.EMPTY); - this.inkStorage = new TotalCappedInkStorage(STORAGE_AMOUNT, Map.of()); + super(SpectrumBlockEntities.COLOR_PICKER.get(), blockPos, blockState, new TotalCappedInkStorage(STORAGE_AMOUNT, Map.of())); } @SuppressWarnings("unused") @@ -86,28 +67,13 @@ public static void tick(Level world, BlockPos pos, BlockState state, ColorPicker @Override public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { super.loadAdditional(nbt, registryLookup); - this.inventory = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); - if (!this.tryLoadLootTable(nbt)) { - ContainerHelper.loadAllItems(nbt, this.inventory, registryLookup); - } CodecHelper.fromNbt(InkStorageComponent.CODEC, nbt.get("InkStorage")).ifPresent(storage -> this.inkStorage = new TotalCappedInkStorage(storage.maxEnergyTotal(), storage.storedEnergy())); - this.ownerUUID = PlayerOwnedWithName.readOwnerUUID(nbt); - if (nbt.contains("SelectedColor", Tag.TAG_STRING)) { - this.selectedColor = Optional.of(SpectrumRegistries.INK_COLOR.wrapAsHolder(InkColor.ofIdString(nbt.getString("SelectedColor")).get())); - } else { - this.selectedColor = Optional.empty(); - } } @Override protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { super.saveAdditional(nbt, registryLookup); - if (!this.trySaveLootTable(nbt)) { - ContainerHelper.saveAllItems(nbt, this.inventory, registryLookup); - } CodecHelper.writeNbt(nbt, "InkStorage", InkStorageComponent.CODEC, new InkStorageComponent(this.inkStorage)); - PlayerOwned.writeOwnerUUID(nbt, this.ownerUUID); - this.selectedColor.ifPresent(color -> nbt.putString("SelectedColor", color.getRegisteredName())); } @Override @@ -125,72 +91,6 @@ public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByte ColorPickerScreenHandler.ScreenOpeningData.PACKET_CODEC.encode(buffer, new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); } - @Override - public UUID getOwnerUUID() { - return this.ownerUUID; - } - - @Override - public void setOwner(Player playerEntity) { - this.ownerUUID = playerEntity.getUUID(); - setChanged(); - } - - @Override - public TotalCappedInkStorage getEnergyStorage() { - return inkStorage; - } - - @Override - public void setInkDirty() { - this.inkDirty = true; - } - - @Override - public boolean getInkDirty() { - return inkDirty; - } - - @Override - protected NonNullList getItems() { - return this.inventory; - } - - @Override - protected void setItems(NonNullList list) { - this.inventory = list; - this.paused = false; - updateInClientWorld(); - } - - @Override - public ItemStack removeItem(int slot, int amount) { - ItemStack itemStack = super.removeItem(slot, amount); - this.paused = false; - updateInClientWorld(); - return itemStack; - } - - @Override - public ItemStack removeItemNoUpdate(int slot) { - ItemStack itemStack = super.removeItemNoUpdate(slot); - this.paused = false; - updateInClientWorld(); - return itemStack; - } - - @Override - public void setItem(int slot, ItemStack stack) { - super.setItem(slot, stack); - this.paused = false; - updateInClientWorld(); - } - - @Override - public int getContainerSize() { - return INVENTORY_SIZE; - } - protected boolean tryConvertPigmentToEnergy(ServerLevel world) { InkConvertingRecipe recipe = getInkConvertingRecipe(world); if (recipe != null) { @@ -243,72 +143,6 @@ protected boolean tryConvertPigmentToEnergy(ServerLevel world) { } } - protected boolean tryFillInkContainer() { - long transferredAmount = 0; - - ItemStack stack = inventory.get(OUTPUT_SLOT_ID); - if (stack.getItem() instanceof InkStorageItem inkStorageItem) { - InkStorage itemStorage = inkStorageItem.getEnergyStorage(stack); - - ServerPlayer owner = null; - if (getOwnerIfOnline(this.getLevel()) instanceof ServerPlayer serverPlayerEntity) { - owner = serverPlayerEntity; - } - - if (this.selectedColor.isEmpty()) { - for (InkColor color : InkColors.all()) { - transferredAmount += tryTransferInk(owner, stack, itemStorage, color); - } - } else { - transferredAmount = tryTransferInk(owner, stack, itemStorage, this.selectedColor.get().value()); - } - - if (transferredAmount > 0) { - inkStorageItem.setEnergyStorage(stack, itemStorage); - } - } - - return transferredAmount > 0; - } - - private long tryTransferInk(ServerPlayer owner, ItemStack stack, InkStorage itemStorage, InkColor color) { - long amount = InkStorage.transferInk(this.inkStorage, itemStorage, color); - if (amount > 0 && owner != null) { - SpectrumAdvancementCriteria.INK_CONTAINER_INTERACTION.trigger(owner, stack, itemStorage, color, amount); - } - return amount; - } - - public void setSelectedColor(Optional> inkColor) { - this.selectedColor = inkColor; - this.paused = false; - this.setChanged(); - } - - public Optional> getSelectedColor() { - return this.selectedColor; - } - - // Called when the chunk is first loaded to initialize this be - @Override - public CompoundTag getUpdateTag(HolderLookup.Provider registryLookup) { - CompoundTag nbtCompound = new CompoundTag(); - this.saveAdditional(nbtCompound, registryLookup); - return nbtCompound; - } - - @Nullable - @Override - public Packet getUpdatePacket() { - return ClientboundBlockEntityDataPacket.create(this); - } - - public void updateInClientWorld() { - if (level != null) { - level.sendBlockUpdated(worldPosition, level.getBlockState(worldPosition), level.getBlockState(worldPosition), Block.UPDATE_INVISIBLE); - } - } - @Override public boolean canPlaceItem(int slot, ItemStack stack) { if (slot == INPUT_SLOT_ID) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystalApothecaryBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystalApothecaryBlockEntity.java index 3224d2500b..c31ee3de1c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystalApothecaryBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystalApothecaryBlockEntity.java @@ -28,7 +28,6 @@ import org.jetbrains.annotations.*; import java.util.*; -import java.util.function.*; import java.util.stream.*; public class CrystalApothecaryBlockEntity extends RandomizableContainerBlockEntity implements PlayerOwnedWithName, BlockPosEventQueue.Callback { @@ -36,19 +35,15 @@ public class CrystalApothecaryBlockEntity extends RandomizableContainerBlockEnti private static final int RANGE = 12; private static final ItemStack HARVEST_ITEMSTACK = ItemStack.EMPTY; - private final BlockPosEventQueue blockPosEventTransferListener; - protected long compensationWorldTime; - private NonNullList inventory; - private boolean listenerPaused; + private final BlockPosEventQueue blockPosEventTransferListener = new BlockPosEventQueue(new BlockPositionSource(this.worldPosition), RANGE, this); + protected long compensationWorldTime = -1; + private NonNullList inventory = NonNullList.withSize(27, ItemStack.EMPTY); + private boolean listenerPaused = false; private UUID ownerUUID; private String ownerName; public CrystalApothecaryBlockEntity(BlockPos blockPos, BlockState blockState) { super(SpectrumBlockEntities.CRYSTAL_APOTHECARY.get(), blockPos, blockState); - this.blockPosEventTransferListener = new BlockPosEventQueue(new BlockPositionSource(this.worldPosition), RANGE, this); - this.inventory = NonNullList.withSize(27, ItemStack.EMPTY); - this.listenerPaused = false; - this.compensationWorldTime = -1; } @SuppressWarnings("unused") diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java new file mode 100644 index 0000000000..3322e2620a --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java @@ -0,0 +1,57 @@ +package de.dafuqs.spectrum.blocks.energy; + +import com.mojang.serialization.*; +import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.*; +import net.minecraft.core.*; +import net.minecraft.network.chat.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.entity.*; +import net.minecraft.world.level.block.state.*; +import org.jetbrains.annotations.*; + +import java.util.*; + +public class PaintingStationBlock extends BaseInkTransferBlock { + + public static final MapCodec CODEC = simpleCodec(PaintingStationBlock::new); + + public PaintingStationBlock(Properties settings) { + super(settings); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipFlag type) { + super.appendHoverText(stack, context, tooltip, type); + tooltip.add(Component.translatable("block.spectrum.painting_station.tooltip").withStyle(ChatFormatting.GRAY)); + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new ColorPickerBlockEntity(pos, state); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level world, BlockState state, BlockEntityType type) { + return world.isClientSide ? null : Support.checkType(type, SpectrumBlockEntities.COLOR_PICKER.get(), ColorPickerBlockEntity::tick); + } + + @Override + protected void openScreen(Level world, BlockPos pos, Player player) { + BlockEntity blockEntity = world.getBlockEntity(pos); + if (blockEntity instanceof ColorPickerBlockEntity colorPickerBlockEntity) { + colorPickerBlockEntity.setOwner(player); + player.openMenu(colorPickerBlockEntity); + } + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java new file mode 100644 index 0000000000..332cf69493 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java @@ -0,0 +1,101 @@ +package de.dafuqs.spectrum.blocks.energy; + +import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.components.*; +import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.inventories.*; +import de.dafuqs.spectrum.recipe.color_picker.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.core.*; +import net.minecraft.nbt.*; +import net.minecraft.network.*; +import net.minecraft.network.chat.*; +import net.minecraft.world.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.inventory.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.state.*; +import org.jetbrains.annotations.*; + +import java.util.*; + +public class PaintingStationBlockEntity extends BaseInkTransferBlockEntity implements MenuProvider { + + public static final long TICKS_PER_CONVERSION = 5; + public static final long ITEM_COLORING_COST = 10; + public static final long STORAGE_AMOUNT = (long) Math.pow(2, 64); + protected @Nullable InkConvertingRecipe cachedRecipe; + + public PaintingStationBlockEntity(BlockPos blockPos, BlockState blockState) { + super(SpectrumBlockEntities.PAINTING_STATION.get(), blockPos, blockState, new IndividualCappedInkStorage(STORAGE_AMOUNT, Map.of())); + } + + @SuppressWarnings("unused") + public static void tick(Level world, BlockPos pos, BlockState state, PaintingStationBlockEntity blockEntity) { + if (!world.isClientSide) { + blockEntity.inkDirty = false; + if (!blockEntity.paused) { + boolean convertedPigment = false; + boolean didSomething = true; + + Optional> selectedColor = blockEntity.getSelectedColor(); + InkStorage inkStorage = blockEntity.getEnergyStorage(); + + if (selectedColor.isPresent() && world.getGameTime() % TICKS_PER_CONVERSION == 0) { + if (inkStorage.getEnergy(selectedColor.get().value()) >= ITEM_COLORING_COST) { + didSomething = blockEntity.tryColorItem(selectedColor); + } + } else { + didSomething = blockEntity.tryFillInkContainer(); + } + + if (didSomething) { + blockEntity.updateInClientWorld(); + blockEntity.setInkDirty(); + blockEntity.setChanged(); + } else { + blockEntity.paused = true; + } + } + } + } + + @Override + public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { + super.loadAdditional(nbt, registryLookup); + CodecHelper.fromNbt(InkStorageComponent.CODEC, nbt.get("InkStorage")).ifPresent(storage -> this.inkStorage = new IndividualCappedInkStorage(storage.maxEnergyTotal(), storage.storedEnergy())); + } + + @Override + protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { + super.saveAdditional(nbt, registryLookup); + CodecHelper.writeNbt(nbt, "InkStorage", InkStorageComponent.CODEC, new InkStorageComponent(this.inkStorage)); + } + + @Override + protected Component getDefaultName() { + return Component.translatable("block.spectrum.painting_station"); + } + + @Override + protected AbstractContainerMenu createMenu(int syncId, Inventory playerInventory) { + return new ColorPickerScreenHandler(syncId, playerInventory, playerInventory.player.level().getBlockEntity(new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor).pos(), SpectrumBlockEntities.COLOR_PICKER.get()).orElseThrow(), new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor).inkColor()); + } + + @Override + public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { + ColorPickerScreenHandler.ScreenOpeningData.PACKET_CODEC.encode(buffer, new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); + } + + @Override + public boolean canPlaceItem(int slot, ItemStack stack) { + if (slot == OUTPUT_SLOT_ID) { + return stack.getItem() instanceof InkStorageItem; + } + return true; + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java index 9f8580d4fb..027a7c8413 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java @@ -70,6 +70,7 @@ public class SpectrumBlockEntities { public static DeferredHolder, BlockEntityType> CRYSTAL_APOTHECARY = register("crystal_apothecary", CrystalApothecaryBlockEntity::new, SpectrumBlocks.CRYSTAL_APOTHECARY); public static DeferredHolder, BlockEntityType> COLOR_PICKER = register("color_picker", ColorPickerBlockEntity::new, SpectrumBlocks.COLOR_PICKER); + public static DeferredHolder, BlockEntityType> PAINTING_STATION = register("painting_station", PaintingStationBlockEntity::new, SpectrumBlocks.PAINTING_STATION); public static DeferredHolder, BlockEntityType> COMPACTING_CHEST = register("compacting_chest", CompactingChestBlockEntity::new, SpectrumBlocks.COMPACTING_CHEST); public static DeferredHolder, BlockEntityType> FABRICATION_CHEST = register("fabrication_chest", FabricationChestBlockEntity::new, SpectrumBlocks.FABRICATION_CHEST); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index 52c8e2d150..9b5e1ddf28 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -4,7 +4,6 @@ import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.blocks.amphora.*; -import de.dafuqs.spectrum.blocks.flammable.*; import de.dafuqs.spectrum.blocks.block_flooder.*; import de.dafuqs.spectrum.blocks.boom.*; import de.dafuqs.spectrum.blocks.bottomless_bundle.*; @@ -26,6 +25,7 @@ import de.dafuqs.spectrum.blocks.ender.*; import de.dafuqs.spectrum.blocks.energy.*; import de.dafuqs.spectrum.blocks.farming.*; +import de.dafuqs.spectrum.blocks.flammable.*; import de.dafuqs.spectrum.blocks.fluid.*; import de.dafuqs.spectrum.blocks.fusion_shrine.*; import de.dafuqs.spectrum.blocks.gemstone.*; @@ -140,6 +140,7 @@ private static BlockBehaviour.Properties craftingBlock(MapColor mapColor, SoundT public static final DeferredBlock CINDERHEARTH = register(defaultNorthHorizontalFacing(blockWithItem("cinderhearth", () -> new CinderhearthBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of().fireResistant(), InkColors.ORANGE), ModelLocationUtils::getModelLocation)); public static final DeferredBlock COLOR_PICKER = register(defaultWestHorizontalFacing(blockWithItem("color_picker", () -> new ColorPickerBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock PAINTING_STATION = register(defaultWestHorizontalFacing(blockWithItem("painting_station", () -> new PaintingStationBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); public static final DeferredBlock CRYSTAL_APOTHECARY = register(singletonWithSoup(blockWithItem("crystal_apothecary", () -> new CrystalApothecaryBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); private static BlockBehaviour.Properties gemstone(MapColor mapColor, SoundType blockSoundGroup, int luminance) { From 8ab0203b710b3c8b0c7051ea955522446aa08004 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 3 Apr 2026 17:28:56 +0200 Subject: [PATCH 017/477] more pastel abstraction --- .../spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java | 4 +++- .../blocks/pastel_network/payloads/PastelPayload.java | 4 ++-- .../java/de/dafuqs/spectrum/registries/SpectrumBlocks.java | 3 ++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java index 617bee5f6b..4b271d8201 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java @@ -52,10 +52,12 @@ public class PastelNodeBlock extends SpectrumFacingBlock implements EntityBlock, }}; protected final PastelNodeType pastelNodeType; + protected final Set> supportedPayloads; - public PastelNodeBlock(Properties settings, PastelNodeType pastelNodeType) { + public PastelNodeBlock(Properties settings, PastelNodeType pastelNodeType, Set> supportedPayloads) { super(settings.lightLevel(s -> s.getValue(LIT) ? 13 : 0)); this.pastelNodeType = pastelNodeType; + this.supportedPayloads = supportedPayloads; registerDefaultState(defaultBlockState().setValue(LIT, false).setValue(REDSTONE_EMITTING, false)); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java index 70eb4835d7..5a9555086e 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java @@ -24,8 +24,8 @@ public interface PastelPayload { DeferredRegister> REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, SpectrumCommon.MOD_ID); DeferredHolder, MapCodec> ITEM = REGISTRAR.register("item", () -> ItemPastelPayload.CODEC); - //DeferredHolder, MapCodec> FLUID = REGISTRAR.register("fluid", () -> FluidPastelPayload.CODEC); - //DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); + DeferredHolder, MapCodec> FLUID = REGISTRAR.register("fluid", () -> FluidPastelPayload.CODEC); + DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); static void register(IEventBus modBus) { REGISTRAR.register(modBus); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index 9223cb30d2..f6cd9e1aec 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -568,7 +568,8 @@ private static BlockBehaviour.Properties pastelNode(SoundType soundGroup) { } public static final DeferredBlock CONNECTION_NODE = register(blockWithItem("connection_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.CONNECTION), () -> IS.of(), InkColors.LIGHT_GRAY).withPredefinedItemModel()); - public static final DeferredBlock PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); + + public static final DeferredBlock PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(PastelPayload.ITEM.get())), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); public static final DeferredBlock STORAGE_NODE = register(blockWithItem("storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); public static final DeferredBlock SENDER_NODE = register(blockWithItem("sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); public static final DeferredBlock GATHER_NODE = register(blockWithItem("gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); From 88d82bd35a44bd0273ac7fb5ebd8cffa664ce294 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 3 Apr 2026 18:27:56 +0200 Subject: [PATCH 018/477] =?UTF-8?q?w=C3=B6rk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../de/dafuqs/spectrum/SpectrumCommon.java | 3 +- .../network/PastelTransmissionLogic.java | 109 ++-------------- .../pastel_network/nodes/PastelNodeBlock.java | 4 +- .../nodes/PastelNodeBlockEntity.java | 10 +- .../payloads/ItemPastelPayload.java | 34 ++--- .../payloads/ItemPastelPayloadType.java | 120 ++++++++++++++++++ .../payloads/PastelPayload.java | 17 ++- .../payloads/PastelPayloadType.java | 33 +++++ .../spectrum/registries/SpectrumBlocks.java | 10 +- .../SpectrumPastelUpgradeSignatures.java | 1 - .../registries/SpectrumRegistries.java | 4 +- .../registries/SpectrumRegistryKeys.java | 3 +- 12 files changed, 211 insertions(+), 137 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java diff --git a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java index 7e0d768f3f..a7a29ed424 100644 --- a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java +++ b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java @@ -4,7 +4,7 @@ import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.attachment_types.*; import de.dafuqs.spectrum.blocks.pastel_network.*; -import de.dafuqs.spectrum.blocks.pastel_network.payloads.PastelPayload; +import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; import de.dafuqs.spectrum.capabilities.*; import de.dafuqs.spectrum.compat.*; import de.dafuqs.spectrum.config.*; @@ -123,6 +123,7 @@ public SpectrumCommon(ModContainer container, IEventBus modBus) { logInfo("Registering Block Entities..."); SpectrumBlockEntities.register(modBus); PastelPayload.register(modBus); + PastelPayloadType.register(modBus); modBus.addListener(SpectrumBlockEntities::addBlockEntityTypeBlocks); SpectrumPastelUpgradeSignatures.register(modBus); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index 6f96406b8b..e450b722a5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -1,5 +1,6 @@ package de.dafuqs.spectrum.blocks.pastel_network.network; +import com.mojang.serialization.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; import de.dafuqs.spectrum.helpers.*; @@ -21,7 +22,7 @@ @SuppressWarnings("UnstableApiUsage") public class PastelTransmissionLogic { - private enum TransferMode { + public enum TransferMode { PUSH, PULL, PUSH_PULL @@ -44,7 +45,11 @@ public void invalidateCache() { this.pathCache = new HashMap<>(); } - public @Nullable GraphPath getPath(Graph graph, PastelNodeBlockEntity source, PastelNodeBlockEntity destination) { + public @Nullable GraphPath getPath(PastelNodeBlockEntity source, PastelNodeBlockEntity destination) { + return this.getPath(this.network.getGraph(), source, destination); + } + + protected @Nullable GraphPath getPath(Graph graph, PastelNodeBlockEntity source, PastelNodeBlockEntity destination) { if (this.dijkstra == null) { this.dijkstra = new DijkstraShortestPath<>(graph); } @@ -84,105 +89,19 @@ private void transferBetween(PastelNodeType sourceType, PastelNodeType destinati continue; } - IItemHandler sourceStorage = sourceNode.getConnectedStorage(); - if (sourceStorage != null) { - tryTransferToType(sourceNode, sourceStorage, destinationType, transferMode); + for(PastelPayloadType payloadType : sourceNode.getSupportedPayloads()) { + payloadType.tryTransferToType(this, sourceNode, destinationType, transferMode); } } } - private void tryTransferToType(PastelNodeBlockEntity sourceNode, IItemHandler sourceStorage, PastelNodeType type, TransferMode transferMode) { - for (PastelNodeBlockEntity destinationNode : this.network.getLoadedNodes(type, PastelNetwork.NodePriority.GENERIC)) { - if (!destinationNode.canTransfer()) { - continue; - } - - IItemHandler destinationStorage = destinationNode.getConnectedStorage(); - if (destinationStorage != null) { - boolean success = transferBetween(sourceNode, sourceStorage, destinationNode, destinationStorage, transferMode); - if (success && transferMode != TransferMode.PULL) { - return; - } - } - } - } - - private boolean transferBetween(PastelNodeBlockEntity sourceNode, IItemHandler sourceStorage, PastelNodeBlockEntity destinationNode, IItemHandler destinationStorage, TransferMode transferMode) { - // check how much room is in the target inventory - long totalAvailableStorage = -destinationNode.getItemCountUnderway(); - for (int d = 0; d < destinationStorage.getSlots(); d++) { - ItemStack stack = destinationStorage.getStackInSlot(d); - - if (stack.isEmpty()) { - totalAvailableStorage += destinationStorage.getSlotLimit(d); - } else { - totalAvailableStorage += Math.min(destinationStorage.getSlotLimit(d), stack.getMaxStackSize()) - stack.getCount(); - } - } - - if (totalAvailableStorage <= 0) - return false; - - Predicate filter = sourceNode.getTransferFilterTo(destinationNode); - Map proposals = new HashMap<>(); - for (int s = 0; s < sourceStorage.getSlots(); s++) { - ItemStack stack = sourceStorage.extractItem(s, DEFAULT_MAX_TRANSFER_AMOUNT, true); - - if (stack.isEmpty()) - continue; - if (!filter.test(stack)) - continue; - - proposals.put(stack, proposals.getOrDefault(stack, 0L) + stack.getCount()); - } - - for (ItemStack stack : proposals.keySet()) { - long proposedAmount = Math.min(Math.min(proposals.get(stack), sourceNode.getMaxTransferredAmount()), totalAvailableStorage); - if (proposedAmount == 0) - continue; - - ItemStack proposedStack = stack.copyWithCount((int) proposedAmount); - int simulatedAmount = (int) (proposedAmount - ItemHandlerHelper.insertItemStacked(destinationStorage, proposedStack, true).getCount()); - if(simulatedAmount == 0) { - continue; - } - Tuple> matchingStacks = InventoryHelper.getStackCountInInventory(proposedStack, sourceStorage, simulatedAmount); - - if (matchingStacks.getA() == 0) - continue; - - Optional transmission = createTransmissionOnValidPath(sourceNode, destinationNode, new ItemPastelPayload(proposedStack.copyWithCount(simulatedAmount)), sourceNode.getTransferTime()); - if (transmission.isPresent()) { - int extracted = 0; - for (int i = 0; i < sourceStorage.getSlots(); i++) { - if (ItemStack.isSameItemSameComponents(proposedStack, sourceStorage.getStackInSlot(i))) - extracted += sourceStorage.extractItem(i, simulatedAmount - extracted, false).getCount(); - if (extracted == simulatedAmount) - break; - } - - PastelTransmission trans = transmission.get(); - int travelTime = trans.getTransmissionDuration(); - this.network.addTransmission(trans, travelTime); - PastelTransmissionPayload.sendPastelTransmissionParticle(this.network, trans.getTransmissionDuration(), transmission.get()); - - destinationNode.markTransferred(transferMode != TransferMode.PUSH); - sourceNode.markTransferred(transferMode != TransferMode.PULL); - - destinationNode.addItemCountUnderway(simulatedAmount); - return true; - } - } - return false; + public Set getLoadedNodes(PastelNodeType type) { + return this.network.getLoadedNodes(type, PastelNetwork.NodePriority.GENERIC); } - public Optional createTransmissionOnValidPath(PastelNodeBlockEntity source, PastelNodeBlockEntity destination, PastelPayload payload, int vertexTime) { - GraphPath graphPath = getPath(this.network.getGraph(), source, destination); - if (graphPath != null) { - PastelNodeStatusUpdatePayload.sendPastelNodeStatusUpdate(List.of(source), true); - return Optional.of(new PastelTransmission(graphPath.getVertexList(), payload, vertexTime)); - } - return Optional.empty(); + public void addTransmission(PastelTransmission transmission) { + network.addTransmission(transmission, transmission.getTransmissionDuration()); + PastelTransmissionPayload.sendPastelTransmissionParticle(network, transmission.getTransmissionDuration(), transmission); } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java index 4b271d8201..e9c79be7b0 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java @@ -52,9 +52,9 @@ public class PastelNodeBlock extends SpectrumFacingBlock implements EntityBlock, }}; protected final PastelNodeType pastelNodeType; - protected final Set> supportedPayloads; + protected final Set supportedPayloads; - public PastelNodeBlock(Properties settings, PastelNodeType pastelNodeType, Set> supportedPayloads) { + public PastelNodeBlock(Properties settings, PastelNodeType pastelNodeType, Set supportedPayloads) { super(settings.lightLevel(s -> s.getValue(LIT) ? 13 : 0)); this.pastelNodeType = pastelNodeType; this.supportedPayloads = supportedPayloads; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java index 4c3d23b953..68247e51b4 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java @@ -1,11 +1,13 @@ package de.dafuqs.spectrum.blocks.pastel_network.nodes; import com.google.common.base.*; +import com.mojang.serialization.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.pastel_network.*; import de.dafuqs.spectrum.blocks.pastel_network.*; import de.dafuqs.spectrum.blocks.pastel_network.network.*; +import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.inventories.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; @@ -60,7 +62,6 @@ public class PastelNodeBlockEntity extends BlockEntity implements FilterConfigur protected PastelNetwork.NodePriority priority = PastelNetwork.NodePriority.GENERIC; protected long itemCountUnderway = 0; - // upgrade impl stuff protected boolean lit, triggerTransfer, triggered, waiting, lamp, sensor, updated; protected int transferCount = PastelTransmissionLogic.DEFAULT_MAX_TRANSFER_AMOUNT; @@ -415,6 +416,13 @@ public PastelNodeType getNodeType() { return PastelNodeType.CONNECTION; } + public Set getSupportedPayloads() { + if (this.getBlockState().getBlock() instanceof PastelNodeBlock pastelNodeBlock) { + return pastelNodeBlock.supportedPayloads; + } + return Set.of(); + } + public void setNetworkUUID(@Nullable UUID uuid) { this.networkUUID = Optional.ofNullable(uuid); if (this.getLevel() != null && !this.getLevel().isClientSide()) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java index 7c977f1eeb..e5e740af08 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java @@ -3,8 +3,8 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import de.dafuqs.spectrum.blocks.pastel_network.nodes.PastelNodeBlockEntity; -import de.dafuqs.spectrum.helpers.InWorldInteractionHelper; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.client.PastelTransmissionParticle; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -18,27 +18,30 @@ import net.neoforged.neoforge.items.ItemHandlerHelper; import org.jetbrains.annotations.Nullable; -public class ItemPastelPayload implements PastelPayload { +public record ItemPastelPayload(ItemStack itemStack) implements PastelPayload { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( - ItemStack.CODEC.fieldOf("stack").forGetter(ItemPastelPayload::getItemStack) + ItemStack.CODEC.fieldOf("stack").forGetter(ItemPastelPayload::itemStack) ).apply(i, ItemPastelPayload::new)); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ItemStack.STREAM_CODEC, ItemPastelPayload::getItemStack, + ItemStack.STREAM_CODEC, ItemPastelPayload::itemStack, ItemPastelPayload::new ); - private final ItemStack itemStack; + public void render(PastelTransmissionParticle particle, Level level, PoseStack poseStack, final MultiBufferSource vertexConsumers, int light) { + particle.itemRenderer.renderStatic(this.itemStack, ItemDisplayContext.GROUND, light, OverlayTexture.NO_OVERLAY, poseStack, vertexConsumers, level, 0); + } - public ItemPastelPayload(ItemStack itemStack) { - this.itemStack = itemStack; + public MapCodec codec() { + return CODEC; } - public ItemStack getItemStack() { - return itemStack; + public StreamCodec streamCodec() { + return STREAM_CODEC; } + @Override public void arriveAtDestination(Level level, BlockPos destination, @Nullable PastelNodeBlockEntity destinationNode) { int inserted = 0; int count = itemStack.getCount(); @@ -61,15 +64,4 @@ public void arriveAtDestination(Level level, BlockPos destination, @Nullable Pas } } - public void render(PastelTransmissionParticle particle, Level level, PoseStack poseStack, final MultiBufferSource vertexConsumers, int light) { - particle.itemRenderer.renderStatic(this.itemStack, ItemDisplayContext.GROUND, light, OverlayTexture.NO_OVERLAY, poseStack, vertexConsumers, level, 0); - } - - public MapCodec codec() { - return CODEC; - } - - public StreamCodec streamCodec() { - return STREAM_CODEC; - } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java new file mode 100644 index 0000000000..bcdb89afed --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java @@ -0,0 +1,120 @@ +package de.dafuqs.spectrum.blocks.pastel_network.payloads; + +import de.dafuqs.spectrum.SpectrumCommon; +import de.dafuqs.spectrum.blocks.pastel_network.network.PastelTransmission; +import de.dafuqs.spectrum.blocks.pastel_network.network.PastelTransmissionLogic; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.PastelNodeBlockEntity; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.PastelNodeType; +import de.dafuqs.spectrum.helpers.InventoryHelper; +import de.dafuqs.spectrum.networking.s2c_payloads.PastelNodeStatusUpdatePayload; +import net.minecraft.core.BlockPos; +import net.minecraft.util.Tuple; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.items.IItemHandler; +import net.neoforged.neoforge.items.ItemHandlerHelper; +import org.jgrapht.GraphPath; +import org.jgrapht.graph.DefaultEdge; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Predicate; + +public class ItemPastelPayloadType extends PastelPayloadType { + + public ItemPastelPayloadType() { + super(SpectrumCommon.locate("item"), PastelPayload.ITEM.get()); + } + + @Override + public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode) { + IItemHandler sourceStorage = sourceNode.getConnectedStorage(); + if (sourceStorage == null) { + return; + } + + for (PastelNodeBlockEntity destinationNode : logic.getLoadedNodes(type)) { + if (!destinationNode.canTransfer()) { + continue; + } + + IItemHandler destinationStorage = destinationNode.getConnectedStorage(); + if (destinationStorage != null) { + boolean success = transferBetween(logic, sourceNode, sourceStorage, destinationNode, destinationStorage, transferMode); + if (success && transferMode != PastelTransmissionLogic.TransferMode.PULL) { + return; + } + } + } + } + + private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, IItemHandler sourceStorage, PastelNodeBlockEntity destinationNode, IItemHandler destinationStorage, PastelTransmissionLogic.TransferMode transferMode) { + // check how much room is in the target inventory + long totalAvailableStorage = -destinationNode.getItemCountUnderway(); + for (int d = 0; d < destinationStorage.getSlots(); d++) { + ItemStack stack = destinationStorage.getStackInSlot(d); + + if (stack.isEmpty()) { + totalAvailableStorage += destinationStorage.getSlotLimit(d); + } else { + totalAvailableStorage += Math.min(destinationStorage.getSlotLimit(d), stack.getMaxStackSize()) - stack.getCount(); + } + } + + if (totalAvailableStorage <= 0) + return false; + + Predicate filter = sourceNode.getTransferFilterTo(destinationNode); + Map proposals = new HashMap<>(); + for (int s = 0; s < sourceStorage.getSlots(); s++) { + ItemStack stack = sourceStorage.extractItem(s, PastelTransmissionLogic.DEFAULT_MAX_TRANSFER_AMOUNT, true); + + if (stack.isEmpty()) + continue; + if (!filter.test(stack)) + continue; + + proposals.put(stack, proposals.getOrDefault(stack, 0L) + stack.getCount()); + } + + for (ItemStack stack : proposals.keySet()) { + long proposedAmount = Math.min(Math.min(proposals.get(stack), sourceNode.getMaxTransferredAmount()), totalAvailableStorage); + if (proposedAmount == 0) + continue; + + ItemStack proposedStack = stack.copyWithCount((int) proposedAmount); + int simulatedAmount = (int) (proposedAmount - ItemHandlerHelper.insertItemStacked(destinationStorage, proposedStack, true).getCount()); + Tuple> matchingStacks = InventoryHelper.getStackCountInInventory(proposedStack, sourceStorage, simulatedAmount); + + if (matchingStacks.getA() == 0) + continue; + + PastelPayload payload = new ItemPastelPayload(proposedStack.copyWithCount(simulatedAmount)); + int vertexTime = sourceNode.getTransferTime(); + GraphPath graphPath = logic.getPath(sourceNode, destinationNode); + if (graphPath == null) { + return false; + } + + PastelNodeStatusUpdatePayload.sendPastelNodeStatusUpdate(List.of(sourceNode), true); + PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), payload, vertexTime); + int extracted = 0; + for (int i = 0; i < sourceStorage.getSlots(); i++) { + if (ItemStack.isSameItemSameComponents(proposedStack, sourceStorage.getStackInSlot(i))) + extracted += sourceStorage.extractItem(i, simulatedAmount - extracted, false).getCount(); + if (extracted == simulatedAmount) + break; + } + + logic.addTransmission(transmission); + + destinationNode.markTransferred(transferMode != PastelTransmissionLogic.TransferMode.PUSH); + sourceNode.markTransferred(transferMode != PastelTransmissionLogic.TransferMode.PULL); + + destinationNode.addItemCountUnderway(simulatedAmount); + return true; + } + return false; + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java index 5a9555086e..6b4d9940c9 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java @@ -2,8 +2,8 @@ import com.mojang.blaze3d.vertex.*; import com.mojang.serialization.*; -import com.sammy.malum.registry.common.worldgen.*; import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.particle.client.*; import de.dafuqs.spectrum.registries.*; @@ -11,21 +11,20 @@ import net.minecraft.core.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; +import net.minecraft.resources.*; import net.minecraft.world.level.*; -import net.minecraft.world.level.levelgen.feature.*; import net.neoforged.bus.api.*; import net.neoforged.neoforge.registries.*; public interface PastelPayload { - Codec CODEC = SpectrumRegistries.PASTEL_PAYLOAD_TYPE.byNameCodec().dispatch(PastelPayload::codec, codec -> codec); - StreamCodec STREAM_CODEC = ByteBufCodecs.fromCodecWithRegistries(CODEC); - - DeferredRegister> REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, SpectrumCommon.MOD_ID); - + DeferredRegister> REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_PAYLOAD, SpectrumCommon.MOD_ID); DeferredHolder, MapCodec> ITEM = REGISTRAR.register("item", () -> ItemPastelPayload.CODEC); - DeferredHolder, MapCodec> FLUID = REGISTRAR.register("fluid", () -> FluidPastelPayload.CODEC); - DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); + //DeferredHolder, MapCodec> FLUID = REGISTRAR.register("fluid", () -> FluidPastelPayload.CODEC); + //DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); + + Codec CODEC = SpectrumRegistries.PASTEL_PAYLOAD.byNameCodec().dispatch(PastelPayload::codec, codec -> codec); + StreamCodec STREAM_CODEC = ByteBufCodecs.fromCodecWithRegistries(CODEC); static void register(IEventBus modBus) { REGISTRAR.register(modBus); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java new file mode 100644 index 0000000000..ffc1c54d48 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java @@ -0,0 +1,33 @@ +package de.dafuqs.spectrum.blocks.pastel_network.payloads; + +import com.mojang.serialization.*; +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.blocks.pastel_network.network.*; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.resources.*; +import net.neoforged.bus.api.*; +import net.neoforged.neoforge.registries.*; + +public abstract class PastelPayloadType { + + public static final DeferredRegister REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, SpectrumCommon.MOD_ID); + public static final DeferredHolder ITEM = REGISTRAR.register("item", ItemPastelPayloadType::new); + //DeferredHolder, MapCodec> FLUID = REGISTRAR.register("fluid", () -> FluidPastelPayload.CODEC); + //DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); + + public static void register(IEventBus modBus) { + REGISTRAR.register(modBus); + } + + protected final ResourceLocation id; + protected final MapCodec codec; + + public PastelPayloadType(ResourceLocation id, MapCodec codec) { + this.id = id; + this.codec = codec; + } + + public abstract void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode); + +} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index f6cd9e1aec..92c1b01c20 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -567,12 +567,12 @@ private static BlockBehaviour.Properties pastelNode(SoundType soundGroup) { return settings(MapColor.NONE, soundGroup, 1.0F).pushReaction(PushReaction.DESTROY).noOcclusion(); } - public static final DeferredBlock CONNECTION_NODE = register(blockWithItem("connection_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.CONNECTION), () -> IS.of(), InkColors.LIGHT_GRAY).withPredefinedItemModel()); + public static final DeferredBlock CONNECTION_NODE = register(blockWithItem("connection_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.CONNECTION, Set.of()), () -> IS.of(), InkColors.LIGHT_GRAY).withPredefinedItemModel()); - public static final DeferredBlock PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(PastelPayload.ITEM.get())), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); - public static final DeferredBlock STORAGE_NODE = register(blockWithItem("storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); - public static final DeferredBlock SENDER_NODE = register(blockWithItem("sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); - public static final DeferredBlock GATHER_NODE = register(blockWithItem("gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); + public static final DeferredBlock PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(PastelPayloadType.ITEM.get())), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); + public static final DeferredBlock STORAGE_NODE = register(blockWithItem("storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(PastelPayloadType.ITEM.get())), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); + public static final DeferredBlock SENDER_NODE = register(blockWithItem("sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(PastelPayloadType.ITEM.get())), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); + public static final DeferredBlock GATHER_NODE = register(blockWithItem("gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(PastelPayloadType.ITEM.get())), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); // COLORED BLOCK FAMILIES diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java index ee2f2588e9..fe796333bd 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java @@ -20,7 +20,6 @@ public class SpectrumPastelUpgradeSignatures { public static final PastelUpgradeSignature.Category REDSTONE = PastelUpgradeSignature.Category.redstone(); public static void register(IEventBus eventBus) { - DeferredHolder WEAK_STACK = register( "weak_stack", () -> PastelUpgradeSignature.builder(SpectrumItems.RAW_BLOODSTONE.get(), STACK, SpectrumCommon.MOD_ID) .named("weak_stack").stackMod(3).stackMult(2).build() diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java index 25b0e287f2..bd393633b1 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java @@ -27,7 +27,8 @@ public class SpectrumRegistries { public static final Registry PASTEL_UPGRADE = register(SpectrumRegistryKeys.PASTEL_UPGRADE, false); public static final Registry RECIPE_SCALING = register(SpectrumRegistryKeys.RECIPE_SCALING, true); public static final Registry> RESONANCE_PROCESSOR_TYPE = register(SpectrumRegistryKeys.RESONANCE_PROCESSOR_TYPE, false); - public static final Registry> PASTEL_PAYLOAD_TYPE = register(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, false); + public static final Registry PASTEL_PAYLOAD_TYPE = register(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, false); + public static final Registry> PASTEL_PAYLOAD = register(SpectrumRegistryKeys.PASTEL_PAYLOAD, false); private static Registry register(ResourceKey> key, boolean synced) { return new RegistryBuilder<>(key).sync(synced).create(); @@ -42,6 +43,7 @@ public static void registerBuiltInRegistries(NewRegistryEvent event) { event.register(RECIPE_SCALING); event.register(RESONANCE_PROCESSOR_TYPE); event.register(PASTEL_PAYLOAD_TYPE); + event.register(PASTEL_PAYLOAD); } public static void registerDynamicRegistries(DataPackRegistryEvent.NewRegistry event) { diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java index 0534d3a08c..3078a1a2fa 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java @@ -27,7 +27,8 @@ public class SpectrumRegistryKeys { public static final ResourceKey> RECIPE_SCALING = of("recipe_scaling"); public static final ResourceKey>> RESONANCE_PROCESSOR_TYPE = of("resonance_processor_type"); public static final ResourceKey> RESONANCE_PROCESSOR = of("resonance_processor"); - public static final ResourceKey>> PASTEL_PAYLOAD_TYPE = of("pastel_payload_type"); + public static final ResourceKey> PASTEL_PAYLOAD_TYPE = of("pastel_payload_type"); + public static final ResourceKey>> PASTEL_PAYLOAD = of("pastel_payload"); private static ResourceKey> of(String name) { return ResourceKey.createRegistryKey(SpectrumCommon.locate(name)); From bfcb0febdc5006ee8ab751d531f4dfc610f590b0 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 5 Apr 2026 22:29:50 +0200 Subject: [PATCH 019/477] wip fluid pastel nodes (working!) --- .../de/dafuqs/spectrum/SpectrumCommon.java | 5 +- .../network/PastelTransmissionLogic.java | 10 +- .../pastel_network/nodes/PastelNodeBlock.java | 5 +- .../nodes/PastelNodeBlockEntity.java | 14 +-- .../payloads/FluidPastelPayload.java | 55 +++++++++++ .../payloads/FluidPastelPayloadType.java | 92 +++++++++++++++++++ .../payloads/ItemPastelPayload.java | 2 +- .../payloads/ItemPastelPayloadType.java | 41 +++++---- .../payloads/PastelPayload.java | 23 ----- .../payloads/PastelPayloadType.java | 13 --- .../payloads/SpectrumPastelPayloadTypes.java | 20 ++++ .../payloads/SpectrumPastelPayloads.java | 21 +++++ .../progression/UnlockToastManager.java | 2 +- .../registries/SpectrumBlockEntities.java | 6 +- .../spectrum/registries/SpectrumBlocks.java | 22 +++-- .../registries/SpectrumItemGroups.java | 12 ++- 16 files changed, 254 insertions(+), 89 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloadTypes.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloads.java diff --git a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java index a7a29ed424..840c505bab 100644 --- a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java +++ b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java @@ -122,8 +122,8 @@ public SpectrumCommon(ModContainer container, IEventBus modBus) { SpectrumItemGroups.register(modBus); logInfo("Registering Block Entities..."); SpectrumBlockEntities.register(modBus); - PastelPayload.register(modBus); - PastelPayloadType.register(modBus); + SpectrumPastelPayloadTypes.register(modBus); + SpectrumPastelPayloads.register(modBus); modBus.addListener(SpectrumBlockEntities::addBlockEntityTypeBlocks); SpectrumPastelUpgradeSignatures.register(modBus); @@ -167,7 +167,6 @@ public SpectrumCommon(ModContainer container, IEventBus modBus) { logInfo("Registering Omni Accelerator Projectiles & Behaviors..."); SpectrumOmniAcceleratorProjectiles.register(); SpectrumItemProjectileBehaviors.register(); - SpectrumEntityColorProcessors.register(); logInfo("Registering Commands..."); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index e450b722a5..b86995c1c0 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -89,8 +89,8 @@ private void transferBetween(PastelNodeType sourceType, PastelNodeType destinati continue; } - for(PastelPayloadType payloadType : sourceNode.getSupportedPayloads()) { - payloadType.tryTransferToType(this, sourceNode, destinationType, transferMode); + for(Supplier payloadType : sourceNode.getSupportedPayloads()) { + payloadType.get().tryTransferToType(this, sourceNode, destinationType, transferMode); } } } @@ -99,7 +99,11 @@ public Set getLoadedNodes(PastelNodeType type) { return this.network.getLoadedNodes(type, PastelNetwork.NodePriority.GENERIC); } - public void addTransmission(PastelTransmission transmission) { + public void addTransmission(PastelNodeBlockEntity sourceNode, PastelNodeBlockEntity destinationNode, PastelTransmissionLogic.TransferMode transferMode, PastelTransmission transmission) { + PastelNodeStatusUpdatePayload.sendPastelNodeStatusUpdate(List.of(sourceNode), true); + destinationNode.markTransferred(transferMode != PastelTransmissionLogic.TransferMode.PUSH); + sourceNode.markTransferred(transferMode != PastelTransmissionLogic.TransferMode.PULL); + network.addTransmission(transmission, transmission.getTransmissionDuration()); PastelTransmissionPayload.sendPastelTransmissionParticle(network, transmission.getTransmissionDuration(), transmission); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java index e9c79be7b0..ce29212631 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java @@ -31,6 +31,7 @@ import org.jetbrains.annotations.*; import java.util.*; +import java.util.function.*; public class PastelNodeBlock extends SpectrumFacingBlock implements EntityBlock, ColorableBlock { @@ -52,9 +53,9 @@ public class PastelNodeBlock extends SpectrumFacingBlock implements EntityBlock, }}; protected final PastelNodeType pastelNodeType; - protected final Set supportedPayloads; + protected final Set> supportedPayloads; - public PastelNodeBlock(Properties settings, PastelNodeType pastelNodeType, Set supportedPayloads) { + public PastelNodeBlock(Properties settings, PastelNodeType pastelNodeType, Set> supportedPayloads) { super(settings.lightLevel(s -> s.getValue(LIT) ? 13 : 0)); this.pastelNodeType = pastelNodeType; this.supportedPayloads = supportedPayloads; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java index 68247e51b4..6a3d6f5bbc 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java @@ -41,6 +41,7 @@ import java.util.*; import java.util.Optional; import java.util.function.Predicate; +import java.util.function.Supplier; public class PastelNodeBlockEntity extends BlockEntity implements FilterConfigurable, MenuProvider, PastelUpgradeable { @@ -87,15 +88,6 @@ public PastelNodeBlockEntity(BlockPos blockPos, BlockState blockState) { this.redstoneRing = Optional.empty(); } - public @Nullable IItemHandler getConnectedStorage() { - BlockState state = this.getBlockState(); - if (!(state.getBlock() instanceof PastelNodeBlock)) { - return null; - } - Direction direction = state.getValue(PastelNodeBlock.FACING); - return level.getCapability(Capabilities.ItemHandler.BLOCK, this.getBlockPos().relative(direction.getOpposite()), direction); - } - public static void tick(@NotNull Level world, BlockPos pos, BlockState state, PastelNodeBlockEntity node) { if (!node.isInitialized && !world.isClientSide()) { // kinda onLoad()? node.getServerNetwork().ifPresent(network -> network.initializeNode(node)); @@ -268,7 +260,7 @@ public void notifySensor() { } } - public long getMaxTransferredAmount() { + public int getMaxTransferredAmount() { return transferCount; } @@ -416,7 +408,7 @@ public PastelNodeType getNodeType() { return PastelNodeType.CONNECTION; } - public Set getSupportedPayloads() { + public Set> getSupportedPayloads() { if (this.getBlockState().getBlock() instanceof PastelNodeBlock pastelNodeBlock) { return pastelNodeBlock.supportedPayloads; } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java new file mode 100644 index 0000000000..5fb7ffb96f --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java @@ -0,0 +1,55 @@ +package de.dafuqs.spectrum.blocks.pastel_network.payloads; + +import com.mojang.blaze3d.vertex.*; +import com.mojang.serialization.*; +import com.mojang.serialization.codecs.*; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.particle.client.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.texture.*; +import net.minecraft.core.*; +import net.minecraft.network.*; +import net.minecraft.network.codec.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; +import net.neoforged.neoforge.capabilities.*; +import net.neoforged.neoforge.fluids.*; +import net.neoforged.neoforge.fluids.capability.*; +import net.neoforged.neoforge.items.*; +import org.jetbrains.annotations.*; + +public record FluidPastelPayload(FluidStack fluidStack) implements PastelPayload { + + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( + FluidStack.CODEC.fieldOf("stack").forGetter(FluidPastelPayload::fluidStack) + ).apply(i, FluidPastelPayload::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + FluidStack.STREAM_CODEC, FluidPastelPayload::fluidStack, + FluidPastelPayload::new + ); + + public void render(PastelTransmissionParticle particle, Level level, PoseStack poseStack, final MultiBufferSource vertexConsumers, int light) { + particle.itemRenderer.renderStatic(this.fluidStack.getFluid().getBucket().getDefaultInstance(), ItemDisplayContext.GROUND, light, OverlayTexture.NO_OVERLAY, poseStack, vertexConsumers, level, 0); + } + + public MapCodec codec() { + return CODEC; + } + + public StreamCodec streamCodec() { + return STREAM_CODEC; + } + + @Override + public void arriveAtDestination(Level level, BlockPos destination, @Nullable PastelNodeBlockEntity destinationNode) { + if (destinationNode != null) { + @Nullable IFluidHandler destinationHandler = FluidPastelPayloadType.getConnectedFluidStorage(destinationNode); + if (destinationHandler != null) { + destinationHandler.fill(fluidStack, IFluidHandler.FluidAction.EXECUTE); + } + } + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java new file mode 100644 index 0000000000..cf27b3e5df --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java @@ -0,0 +1,92 @@ +package de.dafuqs.spectrum.blocks.pastel_network.payloads; + +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.blocks.pastel_network.network.*; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import de.dafuqs.spectrum.networking.s2c_payloads.*; +import net.minecraft.core.*; +import net.minecraft.world.level.block.state.*; +import net.neoforged.neoforge.capabilities.*; +import net.neoforged.neoforge.fluids.*; +import net.neoforged.neoforge.fluids.capability.*; +import org.jetbrains.annotations.*; +import org.jgrapht.*; +import org.jgrapht.graph.*; + +import java.util.*; + +public class FluidPastelPayloadType extends PastelPayloadType { + + public FluidPastelPayloadType() { + super(SpectrumCommon.locate("fluid"), SpectrumPastelPayloads.FLUID.get()); + } + + public static @Nullable IFluidHandler getConnectedFluidStorage(PastelNodeBlockEntity pastelNodeBlockEntity) { + BlockState state = pastelNodeBlockEntity.getBlockState(); + if (!(state.getBlock() instanceof PastelNodeBlock)) { + return null; + } + Direction direction = state.getValue(PastelNodeBlock.FACING); + return pastelNodeBlockEntity.getLevel().getCapability(Capabilities.FluidHandler.BLOCK, pastelNodeBlockEntity.getBlockPos().relative(direction.getOpposite()), direction); + } + + + @Override + public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode) { + IFluidHandler sourceHandler = getConnectedFluidStorage(sourceNode); + if (sourceHandler == null) { + return; + } + + for (PastelNodeBlockEntity destinationNode : logic.getLoadedNodes(type)) { + if (!destinationNode.canTransfer()) { + continue; + } + + IFluidHandler destinationHandler = getConnectedFluidStorage(destinationNode); + if (destinationHandler != null) { + boolean success = transferBetween(logic, sourceNode, sourceHandler, destinationNode, destinationHandler, transferMode); + if (success && transferMode != PastelTransmissionLogic.TransferMode.PULL) { + return; + } + } + } + } + + private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, IFluidHandler sourceHandler, PastelNodeBlockEntity destinationNode, IFluidHandler destinationHandler, PastelTransmissionLogic.TransferMode transferMode) { + for(int sourceTankId = 0; sourceTankId < sourceHandler.getTanks(); sourceTankId++) { + FluidStack sourceFluid = sourceHandler.getFluidInTank(sourceTankId); + if (sourceFluid.isEmpty()) { + continue; + } + + for(int destinationTankId = 0; destinationTankId < destinationHandler.getTanks(); destinationTankId++) { + FluidStack destinationFluid = destinationHandler.getFluidInTank(destinationTankId); + if (!destinationFluid.isEmpty() && !destinationFluid.is(sourceFluid.getFluid())) { + continue; + } + + GraphPath graphPath = logic.getPath(sourceNode, destinationNode); + if (graphPath == null) { + continue; + } + + int roomAtDestination = destinationHandler.getTankCapacity(destinationTankId) - destinationFluid.getAmount(); + int transmittedAmount = Math.min(Math.min(sourceFluid.getAmount(), roomAtDestination), sourceNode.getMaxTransferredAmount() * 20); + FluidStack drainedStack = sourceHandler.drain(sourceFluid.copyWithAmount(transmittedAmount), IFluidHandler.FluidAction.EXECUTE); + if(drainedStack.isEmpty()) { + continue; + } + + PastelPayload payload = new FluidPastelPayload(drainedStack); + PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), payload, sourceNode.getTransferTime()); + logic.addTransmission(sourceNode, destinationNode, transferMode, transmission); + + return true; + } + } + + return false; + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java index e5e740af08..d2cf4f6c42 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java @@ -46,7 +46,7 @@ public void arriveAtDestination(Level level, BlockPos destination, @Nullable Pas int inserted = 0; int count = itemStack.getCount(); if (destinationNode != null) { - IItemHandler destinationStorage = destinationNode.getConnectedStorage(); + IItemHandler destinationStorage = ItemPastelPayloadType.getConnectedItemStorage(destinationNode); if (destinationStorage != null) { inserted = count; inserted -= ItemHandlerHelper.insertItemStacked(destinationStorage, itemStack.copyWithCount(count), false).getCount(); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java index bcdb89afed..e9ce3cec3a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java @@ -3,15 +3,17 @@ import de.dafuqs.spectrum.SpectrumCommon; import de.dafuqs.spectrum.blocks.pastel_network.network.PastelTransmission; import de.dafuqs.spectrum.blocks.pastel_network.network.PastelTransmissionLogic; -import de.dafuqs.spectrum.blocks.pastel_network.nodes.PastelNodeBlockEntity; -import de.dafuqs.spectrum.blocks.pastel_network.nodes.PastelNodeType; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.helpers.InventoryHelper; import de.dafuqs.spectrum.networking.s2c_payloads.PastelNodeStatusUpdatePayload; -import net.minecraft.core.BlockPos; +import net.minecraft.core.*; import net.minecraft.util.Tuple; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.state.*; +import net.neoforged.neoforge.capabilities.*; import net.neoforged.neoforge.items.IItemHandler; import net.neoforged.neoforge.items.ItemHandlerHelper; +import org.jetbrains.annotations.*; import org.jgrapht.GraphPath; import org.jgrapht.graph.DefaultEdge; @@ -23,13 +25,22 @@ public class ItemPastelPayloadType extends PastelPayloadType { public ItemPastelPayloadType() { - super(SpectrumCommon.locate("item"), PastelPayload.ITEM.get()); + super(SpectrumCommon.locate("item"), SpectrumPastelPayloads.ITEM.get()); + } + + public static @Nullable IItemHandler getConnectedItemStorage(PastelNodeBlockEntity pastelNodeBlockEntity) { + BlockState state = pastelNodeBlockEntity.getBlockState(); + if (!(state.getBlock() instanceof PastelNodeBlock)) { + return null; + } + Direction direction = state.getValue(PastelNodeBlock.FACING); + return pastelNodeBlockEntity.getLevel().getCapability(Capabilities.ItemHandler.BLOCK, pastelNodeBlockEntity.getBlockPos().relative(direction.getOpposite()), direction); } @Override public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode) { - IItemHandler sourceStorage = sourceNode.getConnectedStorage(); - if (sourceStorage == null) { + IItemHandler sourceHandler = getConnectedItemStorage(sourceNode); + if (sourceHandler == null) { return; } @@ -38,9 +49,9 @@ public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEnti continue; } - IItemHandler destinationStorage = destinationNode.getConnectedStorage(); - if (destinationStorage != null) { - boolean success = transferBetween(logic, sourceNode, sourceStorage, destinationNode, destinationStorage, transferMode); + IItemHandler destinationHandler = getConnectedItemStorage(destinationNode); + if (destinationHandler != null) { + boolean success = transferBetween(logic, sourceNode, sourceHandler, destinationNode, destinationHandler, transferMode); if (success && transferMode != PastelTransmissionLogic.TransferMode.PULL) { return; } @@ -89,15 +100,13 @@ private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEn if (matchingStacks.getA() == 0) continue; - PastelPayload payload = new ItemPastelPayload(proposedStack.copyWithCount(simulatedAmount)); - int vertexTime = sourceNode.getTransferTime(); GraphPath graphPath = logic.getPath(sourceNode, destinationNode); if (graphPath == null) { return false; } - PastelNodeStatusUpdatePayload.sendPastelNodeStatusUpdate(List.of(sourceNode), true); - PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), payload, vertexTime); + PastelPayload payload = new ItemPastelPayload(proposedStack.copyWithCount(simulatedAmount)); + PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), payload, sourceNode.getTransferTime()); int extracted = 0; for (int i = 0; i < sourceStorage.getSlots(); i++) { if (ItemStack.isSameItemSameComponents(proposedStack, sourceStorage.getStackInSlot(i))) @@ -106,11 +115,7 @@ private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEn break; } - logic.addTransmission(transmission); - - destinationNode.markTransferred(transferMode != PastelTransmissionLogic.TransferMode.PUSH); - sourceNode.markTransferred(transferMode != PastelTransmissionLogic.TransferMode.PULL); - + logic.addTransmission(sourceNode, destinationNode, transferMode, transmission); destinationNode.addItemCountUnderway(simulatedAmount); return true; } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java index 6b4d9940c9..58a9754aa4 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java @@ -18,18 +18,9 @@ public interface PastelPayload { - DeferredRegister> REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_PAYLOAD, SpectrumCommon.MOD_ID); - DeferredHolder, MapCodec> ITEM = REGISTRAR.register("item", () -> ItemPastelPayload.CODEC); - //DeferredHolder, MapCodec> FLUID = REGISTRAR.register("fluid", () -> FluidPastelPayload.CODEC); - //DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); - Codec CODEC = SpectrumRegistries.PASTEL_PAYLOAD.byNameCodec().dispatch(PastelPayload::codec, codec -> codec); StreamCodec STREAM_CODEC = ByteBufCodecs.fromCodecWithRegistries(CODEC); - static void register(IEventBus modBus) { - REGISTRAR.register(modBus); - } - MapCodec codec(); StreamCodec streamCodec(); @@ -45,18 +36,4 @@ static void register(IEventBus modBus) { // void spawnTravelParticles(Level level); // TODO - /*class FluidPastelPayload implements PastelPayload { - private FluidStack fluidStack; - public FluidPastelPayload(FluidStack fluidStack) { - this.fluidStack = fluidStack; - } - } - - class InkPastelPayload implements PastelPayload { - private InkAmount inkAmount; - public InkPastelPayload(InkAmount inkAmount) { - this.inkAmount = inkAmount; - } - }*/ - } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java index ffc1c54d48..8b967c4bf7 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java @@ -1,25 +1,12 @@ package de.dafuqs.spectrum.blocks.pastel_network.payloads; import com.mojang.serialization.*; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; -import de.dafuqs.spectrum.registries.*; import net.minecraft.resources.*; -import net.neoforged.bus.api.*; -import net.neoforged.neoforge.registries.*; public abstract class PastelPayloadType { - public static final DeferredRegister REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, SpectrumCommon.MOD_ID); - public static final DeferredHolder ITEM = REGISTRAR.register("item", ItemPastelPayloadType::new); - //DeferredHolder, MapCodec> FLUID = REGISTRAR.register("fluid", () -> FluidPastelPayload.CODEC); - //DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); - - public static void register(IEventBus modBus) { - REGISTRAR.register(modBus); - } - protected final ResourceLocation id; protected final MapCodec codec; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloadTypes.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloadTypes.java new file mode 100644 index 0000000000..350fea46dd --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloadTypes.java @@ -0,0 +1,20 @@ +package de.dafuqs.spectrum.blocks.pastel_network.payloads; + +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.registries.*; +import net.neoforged.bus.api.*; +import net.neoforged.neoforge.registries.*; + +public class SpectrumPastelPayloadTypes { + + public static final DeferredRegister REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, SpectrumCommon.MOD_ID); + + public static final DeferredHolder ITEM = REGISTRAR.register("item", ItemPastelPayloadType::new); + public static final DeferredHolder FLUID = REGISTRAR.register("fluid", FluidPastelPayloadType::new); + //public static final DeferredHolder INK = REGISTRAR.register("ink", InkPastelPayload.CODEC); + + public static void register(IEventBus modBus) { + REGISTRAR.register(modBus); + } + +} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloads.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloads.java new file mode 100644 index 0000000000..f3fd98499c --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloads.java @@ -0,0 +1,21 @@ +package de.dafuqs.spectrum.blocks.pastel_network.payloads; + +import com.mojang.serialization.*; +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.registries.*; +import net.neoforged.bus.api.*; +import net.neoforged.neoforge.registries.*; + +public class SpectrumPastelPayloads { + + public static final DeferredRegister> REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_PAYLOAD, SpectrumCommon.MOD_ID); + + public static final DeferredHolder, MapCodec> ITEM = REGISTRAR.register("item", () -> ItemPastelPayload.CODEC); + public static final DeferredHolder, MapCodec> FLUID = REGISTRAR.register("fluid", () -> FluidPastelPayload.CODEC); + //DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); + + public static void register(IEventBus modBus) { + REGISTRAR.register(modBus); + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/progression/UnlockToastManager.java b/src/main/java/de/dafuqs/spectrum/progression/UnlockToastManager.java index a3a767fb51..8bbec51791 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/UnlockToastManager.java +++ b/src/main/java/de/dafuqs/spectrum/progression/UnlockToastManager.java @@ -36,7 +36,7 @@ public class UnlockToastManager { put(SpectrumAdvancements.VIVISECT_KINDLING, new Tuple<>(() -> SpectrumItems.DIVINATION_HEART.get().getDefaultInstance(), "vivisect_kindling")); put(SpectrumAdvancements.PAINTBRUSH_COLORING, new Tuple<>(() -> SpectrumItems.PAINTBRUSH.get().getDefaultInstance(), "block_coloring_unlocked")); put(SpectrumAdvancements.PAINTBRUSH_INK_SLINGING, new Tuple<>(() -> SpectrumItems.PAINTBRUSH.get().getDefaultInstance(), "ink_slinging_unlocked")); - put(SpectrumAdvancements.PASTEL_NODE_COLORING, new Tuple<>(() -> SpectrumBlocks.SENDER_NODE.asItem().getDefaultInstance(), "pastel_node_coloring")); + put(SpectrumAdvancements.PASTEL_NODE_COLORING, new Tuple<>(() -> SpectrumBlocks.ITEM_SENDER_NODE.asItem().getDefaultInstance(), "pastel_node_coloring")); }}; public static void clear() { diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java index 88c27ecddc..f1ff51ec29 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java @@ -39,7 +39,6 @@ import net.neoforged.fml.event.lifecycle.*; import net.neoforged.neoforge.event.*; import net.neoforged.neoforge.registries.*; -import org.jetbrains.annotations.*; import java.util.*; import java.util.function.*; @@ -92,7 +91,10 @@ public class SpectrumBlockEntities { public static DeferredHolder, BlockEntityType> JADE_VINE_ROOTS = register("jade_vine_roots", JadeVineRootsBlockEntity::new, SpectrumBlocks.JADE_VINE_ROOTS); public static DeferredHolder, BlockEntityType> PRESENT = register("present", PresentBlockEntity::new, SpectrumBlocks.PRESENT); public static DeferredHolder, BlockEntityType> TITRATION_BARREL = register("titration_barrel", TitrationBarrelBlockEntity::new, SpectrumBlocks.TITRATION_BARREL); - public static DeferredHolder, BlockEntityType> PASTEL_NODE = register("pastel_node", PastelNodeBlockEntity::new, SpectrumBlocks.CONNECTION_NODE, SpectrumBlocks.PROVIDER_NODE, SpectrumBlocks.STORAGE_NODE, SpectrumBlocks.SENDER_NODE, SpectrumBlocks.GATHER_NODE); + public static DeferredHolder, BlockEntityType> PASTEL_NODE = register("pastel_node", PastelNodeBlockEntity::new, + SpectrumBlocks.CONNECTION_NODE, + SpectrumBlocks.ITEM_PROVIDER_NODE, SpectrumBlocks.ITEM_STORAGE_NODE, SpectrumBlocks.ITEM_SENDER_NODE, SpectrumBlocks.ITEM_GATHER_NODE, + SpectrumBlocks.FLUID_PROVIDER_NODE, SpectrumBlocks.FLUID_STORAGE_NODE, SpectrumBlocks.FLUID_SENDER_NODE, SpectrumBlocks.FLUID_GATHER_NODE); public static DeferredHolder, BlockEntityType> HUMMINGSTONE = register("hummingstone", HummingstoneBlockEntity::new, SpectrumBlocks.HUMMINGSTONE); public static DeferredHolder, BlockEntityType> PLACED_ITEM = register("placed_item", PlacedItemBlockEntity::new, SpectrumBlocks.INCANDESCENT_AMALGAM, SpectrumBlocks.THREAT_CONFLUX, SpectrumBlocks.PARAMETRIC_MINING_DEVICE, SpectrumBlocks.COLORFUL_SHOOTING_STAR, SpectrumBlocks.FIERY_SHOOTING_STAR, SpectrumBlocks.GEMSTONE_SHOOTING_STAR, SpectrumBlocks.GLISTERING_SHOOTING_STAR, SpectrumBlocks.PRISTINE_SHOOTING_STAR); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index 92c1b01c20..0295e9cefd 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -569,10 +569,16 @@ private static BlockBehaviour.Properties pastelNode(SoundType soundGroup) { public static final DeferredBlock CONNECTION_NODE = register(blockWithItem("connection_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.CONNECTION, Set.of()), () -> IS.of(), InkColors.LIGHT_GRAY).withPredefinedItemModel()); - public static final DeferredBlock PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(PastelPayloadType.ITEM.get())), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); - public static final DeferredBlock STORAGE_NODE = register(blockWithItem("storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(PastelPayloadType.ITEM.get())), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); - public static final DeferredBlock SENDER_NODE = register(blockWithItem("sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(PastelPayloadType.ITEM.get())), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); - public static final DeferredBlock GATHER_NODE = register(blockWithItem("gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(PastelPayloadType.ITEM.get())), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); + // TODO: rename ids to "item_*" with next major update + public static final DeferredBlock ITEM_PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.ITEM)), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); + public static final DeferredBlock ITEM_STORAGE_NODE = register(blockWithItem("storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.ITEM)), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); + public static final DeferredBlock ITEM_SENDER_NODE = register(blockWithItem("sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.ITEM)), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); + public static final DeferredBlock ITEM_GATHER_NODE = register(blockWithItem("gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(SpectrumPastelPayloadTypes.ITEM)), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); + + public static final DeferredBlock FLUID_PROVIDER_NODE = register(blockWithItem("fluid_provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.FLUID)), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); + public static final DeferredBlock FLUID_STORAGE_NODE = register(blockWithItem("fluid_storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.FLUID)), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); + public static final DeferredBlock FLUID_SENDER_NODE = register(blockWithItem("fluid_sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.FLUID)), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); + public static final DeferredBlock FLUID_GATHER_NODE = register(blockWithItem("fluid_gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(SpectrumPastelPayloadTypes.FLUID)), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); // COLORED BLOCK FAMILIES @@ -2329,10 +2335,10 @@ public static void registerClient(FMLClientSetupEvent event) { ItemBlockRenderTypes.setRenderLayer(PRESENT.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(BOTTOMLESS_BUNDLE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(CONNECTION_NODE.get(), RenderType.cutout()); - ItemBlockRenderTypes.setRenderLayer(PROVIDER_NODE.get(), RenderType.cutout()); - ItemBlockRenderTypes.setRenderLayer(STORAGE_NODE.get(), RenderType.cutout()); - ItemBlockRenderTypes.setRenderLayer(SENDER_NODE.get(), RenderType.cutout()); - ItemBlockRenderTypes.setRenderLayer(GATHER_NODE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(ITEM_PROVIDER_NODE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(ITEM_STORAGE_NODE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(ITEM_SENDER_NODE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(ITEM_GATHER_NODE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(VARIA_SPROUT.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(SLATE_NOXSHROOM.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(EBONY_NOXSHROOM.get(), RenderType.cutout()); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java index 22f91f4f2f..a7269ea7a0 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java @@ -242,10 +242,14 @@ public static void registerSubTabs() { entries.accept(SpectrumBlocks.UPGRADE_EXPERIENCE2); entries.accept(SpectrumBlocks.CONNECTION_NODE); - entries.accept(SpectrumBlocks.PROVIDER_NODE); - entries.accept(SpectrumBlocks.SENDER_NODE); - entries.accept(SpectrumBlocks.STORAGE_NODE); - entries.accept(SpectrumBlocks.GATHER_NODE); + entries.accept(SpectrumBlocks.ITEM_PROVIDER_NODE); + entries.accept(SpectrumBlocks.ITEM_SENDER_NODE); + entries.accept(SpectrumBlocks.ITEM_STORAGE_NODE); + entries.accept(SpectrumBlocks.ITEM_GATHER_NODE); + entries.accept(SpectrumBlocks.FLUID_PROVIDER_NODE); + entries.accept(SpectrumBlocks.FLUID_SENDER_NODE); + entries.accept(SpectrumBlocks.FLUID_STORAGE_NODE); + entries.accept(SpectrumBlocks.FLUID_GATHER_NODE); entries.accept(SpectrumBlocks.LIGHT_LEVEL_DETECTOR); entries.accept(SpectrumBlocks.WEATHER_DETECTOR); From 8efe7dfca58c844e541d8dde1a40106235c31296 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 6 Apr 2026 09:00:45 +0200 Subject: [PATCH 020/477] very wip ink transfer without equalization yet --- .../dafuqs/spectrum/api/energy/InkAmount.java | 2 +- .../InkPoweredStatusEffectInstance.java | 2 +- .../CrystallarieumBlockEntity.java | 2 +- .../network/PastelTransmissionLogic.java | 19 +--- .../payloads/InkPastelPayload.java | 60 ++++++++++ .../payloads/InkPastelPayloadType.java | 105 ++++++++++++++++++ .../payloads/PastelPayloadType.java | 23 +++- .../payloads/SpectrumPastelPayloadTypes.java | 2 +- .../payloads/SpectrumPastelPayloads.java | 2 +- .../TravelersBackpackCompat.java | 8 +- .../registries/SpectrumBlockEntities.java | 2 +- .../spectrum/registries/SpectrumBlocks.java | 2 + .../registries/SpectrumItemGroups.java | 1 + 13 files changed, 204 insertions(+), 26 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/InkAmount.java b/src/main/java/de/dafuqs/spectrum/api/energy/InkAmount.java index 0561d627ca..06725682ed 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/InkAmount.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/InkAmount.java @@ -13,7 +13,7 @@ public record InkAmount(InkColor color, long amount) { Codec.LONG.fieldOf("amount").forGetter(InkAmount::amount) ).apply(i, InkAmount::new)); - public static final StreamCodec PACKET_CODEC = StreamCodec.composite( + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( InkColor.PACKET_CODEC, InkAmount::color, ByteBufCodecs.VAR_LONG, InkAmount::amount, InkAmount::new diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/InkPoweredStatusEffectInstance.java b/src/main/java/de/dafuqs/spectrum/api/energy/InkPoweredStatusEffectInstance.java index 55bfa94a53..b862e59fe9 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/InkPoweredStatusEffectInstance.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/InkPoweredStatusEffectInstance.java @@ -30,7 +30,7 @@ public class InkPoweredStatusEffectInstance { public static final StreamCodec PACKET_CODEC = StreamCodec.composite( MobEffectInstance.STREAM_CODEC, c -> c.statusEffectInstance, - InkAmount.PACKET_CODEC, c -> c.cost, + InkAmount.STREAM_CODEC, c -> c.cost, ByteBufCodecs.VAR_INT, c -> c.customColor, ByteBufCodecs.BOOL, c -> c.unidentifiable, InkPoweredStatusEffectInstance::new diff --git a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java index fd18c75e38..36b6ca7459 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java @@ -249,7 +249,7 @@ public void setOwner(Player playerEntity) { } /** - * Searches recipes for a valid one using fluidStack and plants the first block of that recipe on top + * Searches recipes for a valid one using inkAmount and plants the first block of that recipe on top * * @param itemStack stack that is tried to plant on top, if a valid recipe */ diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index b86995c1c0..56a411be7c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -5,7 +5,9 @@ import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; +import net.minecraft.resources.*; import net.minecraft.util.*; import net.minecraft.world.item.*; import net.neoforged.neoforge.items.*; @@ -77,21 +79,8 @@ public void invalidateCache() { } public void tick(PastelNetwork.NodePriority priority) { - transferBetween(PastelNodeType.SENDER, PastelNodeType.GATHER, TransferMode.PUSH_PULL, priority); - transferBetween(PastelNodeType.PROVIDER, PastelNodeType.GATHER, TransferMode.PULL, priority); - transferBetween(PastelNodeType.STORAGE, PastelNodeType.GATHER, TransferMode.PULL, priority); - transferBetween(PastelNodeType.SENDER, PastelNodeType.STORAGE, TransferMode.PUSH, priority); - } - - private void transferBetween(PastelNodeType sourceType, PastelNodeType destinationType, TransferMode transferMode, PastelNetwork.NodePriority priority) { - for (PastelNodeBlockEntity sourceNode : this.network.getLoadedNodes(sourceType, priority)) { - if (!sourceNode.canTransfer()) { - continue; - } - - for(Supplier payloadType : sourceNode.getSupportedPayloads()) { - payloadType.get().tryTransferToType(this, sourceNode, destinationType, transferMode); - } + for(Map.Entry, PastelPayloadType> payloadType : SpectrumRegistries.PASTEL_PAYLOAD_TYPE.entrySet()) { + payloadType.getValue().tick(this); } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java new file mode 100644 index 0000000000..169c11aaef --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java @@ -0,0 +1,60 @@ +package de.dafuqs.spectrum.blocks.pastel_network.payloads; + +import com.mojang.blaze3d.vertex.*; +import com.mojang.serialization.*; +import com.mojang.serialization.codecs.*; +import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import de.dafuqs.spectrum.items.*; +import de.dafuqs.spectrum.particle.client.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.texture.*; +import net.minecraft.core.*; +import net.minecraft.network.*; +import net.minecraft.network.codec.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; +import net.neoforged.neoforge.fluids.*; +import net.neoforged.neoforge.fluids.capability.*; +import org.jetbrains.annotations.*; + +import java.util.*; + +public record InkPastelPayload(List inkAmount) implements PastelPayload { + + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( + InkAmount.CODEC.listOf().fieldOf("stack").forGetter(InkPastelPayload::inkAmount) + ).apply(i, InkPastelPayload::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + InkAmount.STREAM_CODEC.apply(ByteBufCodecs.list()), InkPastelPayload::inkAmount, + InkPastelPayload::new + ); + + public void render(PastelTransmissionParticle particle, Level level, PoseStack poseStack, final MultiBufferSource vertexConsumers, int light) { + particle.itemRenderer.renderStatic(PigmentItem.byColor(this.inkAmount.get(0).color()).getDefaultInstance(), ItemDisplayContext.GROUND, light, OverlayTexture.NO_OVERLAY, poseStack, vertexConsumers, level, 0); + } + + public MapCodec codec() { + return CODEC; + } + + public StreamCodec streamCodec() { + return STREAM_CODEC; + } + + @Override + public void arriveAtDestination(Level level, BlockPos destination, @Nullable PastelNodeBlockEntity destinationNode) { + if (destinationNode != null) { + @Nullable InkStorageBlockEntity destinationHandler = InkPastelPayloadType.getConnectedInkStorage(destinationNode); + if (destinationHandler != null) { + InkStorage destinationStorage = destinationHandler.getEnergyStorage(); + for(InkAmount ic : inkAmount) { + destinationStorage.addEnergy(ic.color(), ic.amount()); + destinationHandler.setInkDirty(); + } + } + } + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java new file mode 100644 index 0000000000..04520b2b98 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java @@ -0,0 +1,105 @@ +package de.dafuqs.spectrum.blocks.pastel_network.payloads; + +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.blocks.pastel_network.network.*; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import net.minecraft.core.*; +import net.minecraft.world.level.block.entity.*; +import net.minecraft.world.level.block.state.*; +import net.neoforged.neoforge.capabilities.*; +import net.neoforged.neoforge.fluids.*; +import net.neoforged.neoforge.fluids.capability.*; +import org.jetbrains.annotations.*; +import org.jgrapht.*; +import org.jgrapht.graph.*; + +import java.util.*; +import java.util.function.*; + +public class InkPastelPayloadType extends PastelPayloadType { + + public InkPastelPayloadType() { + super(SpectrumCommon.locate("ink"), SpectrumPastelPayloads.INK.get()); + } + + public static @Nullable InkStorageBlockEntity getConnectedInkStorage(PastelNodeBlockEntity pastelNodeBlockEntity) { + BlockState state = pastelNodeBlockEntity.getBlockState(); + if (!(state.getBlock() instanceof PastelNodeBlock)) { + return null; + } + Direction direction = state.getValue(PastelNodeBlock.FACING); + BlockEntity be = pastelNodeBlockEntity.getLevel().getBlockEntity(pastelNodeBlockEntity.getBlockPos().relative(direction.getOpposite())); + if(be instanceof InkStorageBlockEntity inkStorageBlockEntity) { + return inkStorageBlockEntity; + } + return null; + } + + @Override + public void tick(PastelTransmissionLogic logic) { + for (PastelNodeBlockEntity sourceNode : logic.getLoadedNodes(PastelNodeType.SENDER)) { + for(Supplier payloadType : sourceNode.getSupportedPayloads()) { + if(payloadType.get() != this) { + continue; + } + payloadType.get().tryTransferToType(logic, sourceNode, PastelNodeType.SENDER, PastelTransmissionLogic.TransferMode.PUSH); + } + } + } + + @Override + public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode) { + @Nullable InkStorageBlockEntity sourceHandler = getConnectedInkStorage(sourceNode); + if (sourceHandler == null) { + return; + } + + for (PastelNodeBlockEntity destinationNode : logic.getLoadedNodes(type)) { + if (!destinationNode.canTransfer()) { + continue; + } + + @Nullable InkStorageBlockEntity destinationHandler = getConnectedInkStorage(destinationNode); + if (destinationHandler != null) { + boolean success = transferBetween(logic, sourceNode, sourceHandler, destinationNode, destinationHandler, transferMode); + if (success && transferMode != PastelTransmissionLogic.TransferMode.PULL) { + return; + } + } + } + } + + private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, InkStorageBlockEntity sourceHandler, PastelNodeBlockEntity destinationNode, InkStorageBlockEntity destinationHandler, PastelTransmissionLogic.TransferMode transferMode) { + InkStorage sourceStorage = sourceHandler.getEnergyStorage(); + InkStorage destinationStorage = destinationHandler.getEnergyStorage(); + for(Map.Entry sourceEntry : sourceStorage.getEnergy().entrySet()) { + GraphPath graphPath = logic.getPath(sourceNode, destinationNode); + if (graphPath == null) { + continue; + } + + InkColor sourceColor = sourceEntry.getKey(); + + long roomAtDestination = destinationStorage.getRoom(sourceColor); + List transmittedAmounts = new ArrayList<>(); + if(roomAtDestination > 0) { + long transmittedAmount = Math.min(Math.min(sourceEntry.getValue(), roomAtDestination), sourceNode.getMaxTransferredAmount() * 20L); + if(transmittedAmount > 0) { + sourceStorage.addEnergy(sourceEntry.getKey(), -transmittedAmount); + transmittedAmounts.add(new InkAmount(sourceColor, transmittedAmount)); + return true; + } + } + + if(!transmittedAmounts.isEmpty()) { + PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), new InkPastelPayload(transmittedAmounts), sourceNode.getTransferTime()); + logic.addTransmission(sourceNode, destinationNode, transferMode, transmission); + sourceHandler.setInkDirty(); + } + } + return false; + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java index 8b967c4bf7..5977ba785b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java @@ -5,6 +5,8 @@ import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import net.minecraft.resources.*; +import java.util.function.*; + public abstract class PastelPayloadType { protected final ResourceLocation id; @@ -15,6 +17,25 @@ public PastelPayloadType(ResourceLocation id, MapCodec this.codec = codec; } - public abstract void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode); + public void tick(PastelTransmissionLogic logic) { + transferBetween(logic, PastelNodeType.SENDER, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PUSH_PULL); + transferBetween(logic, PastelNodeType.PROVIDER, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PULL); + transferBetween(logic, PastelNodeType.STORAGE, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PULL); + transferBetween(logic, PastelNodeType.SENDER, PastelNodeType.STORAGE, PastelTransmissionLogic.TransferMode.PUSH); + } + + protected void transferBetween(PastelTransmissionLogic logic, PastelNodeType sourceType, PastelNodeType destinationType, PastelTransmissionLogic.TransferMode transferMode) { + for (PastelNodeBlockEntity sourceNode : logic.getLoadedNodes(sourceType)) { + if (!sourceNode.canTransfer()) { + continue; + } + + for(Supplier payloadType : sourceNode.getSupportedPayloads()) { + payloadType.get().tryTransferToType(logic, sourceNode, destinationType, transferMode); + } + } + } + + protected abstract void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode); } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloadTypes.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloadTypes.java index 350fea46dd..003f4ac6a4 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloadTypes.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloadTypes.java @@ -11,7 +11,7 @@ public class SpectrumPastelPayloadTypes { public static final DeferredHolder ITEM = REGISTRAR.register("item", ItemPastelPayloadType::new); public static final DeferredHolder FLUID = REGISTRAR.register("fluid", FluidPastelPayloadType::new); - //public static final DeferredHolder INK = REGISTRAR.register("ink", InkPastelPayload.CODEC); + public static final DeferredHolder INK = REGISTRAR.register("ink", InkPastelPayloadType::new); public static void register(IEventBus modBus) { REGISTRAR.register(modBus); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloads.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloads.java index f3fd98499c..e6873625c1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloads.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/SpectrumPastelPayloads.java @@ -12,7 +12,7 @@ public class SpectrumPastelPayloads { public static final DeferredHolder, MapCodec> ITEM = REGISTRAR.register("item", () -> ItemPastelPayload.CODEC); public static final DeferredHolder, MapCodec> FLUID = REGISTRAR.register("fluid", () -> FluidPastelPayload.CODEC); - //DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); + public static final DeferredHolder, MapCodec> INK = REGISTRAR.register("ink", () -> InkPastelPayload.CODEC); public static void register(IEventBus modBus) { REGISTRAR.register(modBus); diff --git a/src/main/java/de/dafuqs/spectrum/compat/travelersbackpack/TravelersBackpackCompat.java b/src/main/java/de/dafuqs/spectrum/compat/travelersbackpack/TravelersBackpackCompat.java index 5ceb9038ab..836fef54f2 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/travelersbackpack/TravelersBackpackCompat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/travelersbackpack/TravelersBackpackCompat.java @@ -38,7 +38,7 @@ public void register() { /* EffectFluidRegistry.registerFluidEffect(new SpectrumEffectFluid("spectrum:sludge", SpectrumFluids.SLUDGE.get().getSource()) { @Override - public void affectDrinker(FluidStack fluidStack, Level world, Entity entity) { + public void affectDrinker(FluidStack inkAmount, Level world, Entity entity) { if (entity instanceof LivingEntity livingEntity) { livingEntity.addEffect(new MobEffectInstance(MobEffects.CONFUSION, 200)); livingEntity.addEffect(new MobEffectInstance(MobEffects.DAMAGE_RESISTANCE, 400, 2)); @@ -49,7 +49,7 @@ public void affectDrinker(FluidStack fluidStack, Level world, Entity entity) { EffectFluidRegistry.registerFluidEffect(new SpectrumEffectFluid("spectrum:liquid_crystal", SpectrumFluids.LIQUID_CRYSTAL.get().getSource()) { @Override - public void affectDrinker(FluidStack fluidStack, Level world, Entity entity) { + public void affectDrinker(FluidStack inkAmount, Level world, Entity entity) { if (entity instanceof Player player) { player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, 400, 1)); } @@ -58,7 +58,7 @@ public void affectDrinker(FluidStack fluidStack, Level world, Entity entity) { EffectFluidRegistry.registerFluidEffect(new SpectrumEffectFluid("spectrum:midnight_solution", SpectrumFluids.MIDNIGHT_SOLUTION.get().getSource()) { @Override - public void affectDrinker(FluidStack fluidStack, Level world, Entity entity) { + public void affectDrinker(FluidStack inkAmount, Level world, Entity entity) { if (entity instanceof Player player) { player.giveExperiencePoints(-20); @@ -81,7 +81,7 @@ public void affectDrinker(FluidStack fluidStack, Level world, Entity entity) { EffectFluidRegistry.registerFluidEffect(new SpectrumEffectFluid("spectrum:dragonrot", SpectrumFluids.DRAGONROT.get().getSource()) { @Override - public void affectDrinker(FluidStack fluidStack, Level world, Entity entity) { + public void affectDrinker(FluidStack inkAmount, Level world, Entity entity) { if (entity instanceof LivingEntity livingEntity) { livingEntity.addEffect(new MobEffectInstance(SpectrumStatusEffects.LIFE_DRAIN, 600, 3)); livingEntity.hurt(SpectrumDamageTypes.dragonrot(world), 1000); // 💀 diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java index f1ff51ec29..9f8580d4fb 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java @@ -92,7 +92,7 @@ public class SpectrumBlockEntities { public static DeferredHolder, BlockEntityType> PRESENT = register("present", PresentBlockEntity::new, SpectrumBlocks.PRESENT); public static DeferredHolder, BlockEntityType> TITRATION_BARREL = register("titration_barrel", TitrationBarrelBlockEntity::new, SpectrumBlocks.TITRATION_BARREL); public static DeferredHolder, BlockEntityType> PASTEL_NODE = register("pastel_node", PastelNodeBlockEntity::new, - SpectrumBlocks.CONNECTION_NODE, + SpectrumBlocks.CONNECTION_NODE, SpectrumBlocks.INK_NODE, SpectrumBlocks.ITEM_PROVIDER_NODE, SpectrumBlocks.ITEM_STORAGE_NODE, SpectrumBlocks.ITEM_SENDER_NODE, SpectrumBlocks.ITEM_GATHER_NODE, SpectrumBlocks.FLUID_PROVIDER_NODE, SpectrumBlocks.FLUID_STORAGE_NODE, SpectrumBlocks.FLUID_SENDER_NODE, SpectrumBlocks.FLUID_GATHER_NODE); public static DeferredHolder, BlockEntityType> HUMMINGSTONE = register("hummingstone", HummingstoneBlockEntity::new, SpectrumBlocks.HUMMINGSTONE); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index 0295e9cefd..fba903ad5f 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -569,6 +569,8 @@ private static BlockBehaviour.Properties pastelNode(SoundType soundGroup) { public static final DeferredBlock CONNECTION_NODE = register(blockWithItem("connection_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.CONNECTION, Set.of()), () -> IS.of(), InkColors.LIGHT_GRAY).withPredefinedItemModel()); + public static final DeferredBlock INK_NODE = register(blockWithItem("ink_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.INK)), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); + // TODO: rename ids to "item_*" with next major update public static final DeferredBlock ITEM_PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.ITEM)), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); public static final DeferredBlock ITEM_STORAGE_NODE = register(blockWithItem("storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.ITEM)), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java index a7269ea7a0..b2ec909a3c 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java @@ -242,6 +242,7 @@ public static void registerSubTabs() { entries.accept(SpectrumBlocks.UPGRADE_EXPERIENCE2); entries.accept(SpectrumBlocks.CONNECTION_NODE); + entries.accept(SpectrumBlocks.INK_NODE); entries.accept(SpectrumBlocks.ITEM_PROVIDER_NODE); entries.accept(SpectrumBlocks.ITEM_SENDER_NODE); entries.accept(SpectrumBlocks.ITEM_STORAGE_NODE); From 8f53810e95320d5ed0aea3b260aa4c7bbbe596e2 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Wed, 8 Apr 2026 19:10:39 +0200 Subject: [PATCH 021/477] simplify ink storage code. Methods to equalize ink between multiple storages --- .../spectrum/api/energy/InkStorage.java | 134 ++++++++++-------- .../energy/storage/CreativeInkStorage.java | 5 - .../storage/IndividualCappedInkStorage.java | 12 -- .../api/energy/storage/SingleInkStorage.java | 10 -- .../TotalCappedElementalMixingInkStorage.java | 39 ----- .../energy/storage/TotalCappedInkStorage.java | 12 -- 6 files changed, 71 insertions(+), 141 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/InkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/InkStorage.java index 5129503601..b1540526f7 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/InkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/InkStorage.java @@ -1,12 +1,9 @@ package de.dafuqs.spectrum.api.energy; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; -import net.minecraft.nbt.*; import net.minecraft.network.chat.*; -import net.minecraft.util.*; import net.minecraft.world.*; import org.jetbrains.annotations.*; @@ -71,35 +68,83 @@ static long transferInk(@NotNull InkStorage source, @NotNull InkStorage destinat } /** - * Transfer Ink from one storage to another - * Transfers a fixed amount of energy - * => Use the pressure like system without fixed amount, where possible - * - * @param source The ink storage that is getting drawn from - * @param destination The ink storage receiving energy - * @param color The ink type to transfer - * @param amount The fixed amount of ink to transfer - * @return the amount of energy that could be transferred + * Transfers Ink from storages with lots of Ink + * to storages with less. + * When called repeatedly (like every tick) the values of all storages will equalize, + * limited by their max storage. + * Don't forget to mark your stuff dirty, like with InkStorageBlockEntity.setInkDirty()! + * @param inkStorages The storages to run an equalization tick on */ - @Deprecated - static long transferInk(@NotNull InkStorage source, @NotNull InkStorage destination, @NotNull InkColor color, long amount) { - if (!destination.accepts(color)) { - return 0; + static void equalizeInk(List inkStorages) { + SpectrumRegistries.INK_COLOR.stream() + .forEach(inkColor -> equalizeInk(inkStorages, inkColor)); + } + + private static void equalizeInk(List storages, InkColor color) { + long total = 0; + + // collect storages that accept this color + List accepting = new ArrayList<>(storages.size()); + for (InkStorage s : storages) { + if (s.accepts(color)) { + accepting.add(s); + total += s.getEnergy(color); + } } - long sourceAmount = source.getEnergy(color); - if (sourceAmount > 0) { - long destinationRoom = destination.getRoom(color); - if (destinationRoom > 0) { - long transferAmount = Math.min(amount, Math.min(sourceAmount, destinationRoom)); - if (transferAmount > 0) { - destination.addEnergy(color, transferAmount); - source.drainEnergy(color, transferAmount); - return transferAmount; + if (accepting.isEmpty() || total == 0) return; + + long idealTarget = total / accepting.size(); + + // drain storages above target value + long pooled = 0; + for (InkStorage s : accepting) { + long current = s.getEnergy(color); + long delta = idealTarget - current; + long step = delta / 32; + if (step == 0 && delta != 0) { + step = delta > 0 ? 1 : -1; + } + + long smoothedTarget = current + step; + + if (current > smoothedTarget) { + long excess = current - smoothedTarget; + pooled += s.drainEnergy(color, excess); + } + } + + if (pooled <= 0) return; + + // refill storages below target + for (InkStorage s : accepting) { + long current = s.getEnergy(color); + long delta = idealTarget - current; + long step = delta / 32; + if (step == 0 && delta != 0) { + step = delta > 0 ? 1 : -1; + } + long smoothedTarget = current + step; + + if (current < smoothedTarget && pooled > 0) { + long needed = smoothedTarget - current; + long added = needed - s.addEnergy(color, needed); + pooled -= added; + } + } + + // If leftover pooled energy exists (due to capacity limits), + // redistribute with pressure flow + if (pooled > 0) { + for (InkStorage s : accepting) { + long room = s.getRoom(color); + if (room > 0) { + long added = room - s.addEnergy(color, room); + pooled -= added; } + if (pooled <= 0) break; } } - return 0; } // if the storage is able to store this kind of color @@ -112,10 +157,6 @@ static long transferInk(@NotNull InkStorage source, @NotNull InkStorage destinat // In contrast to requestEnergy this drains the energy up until 0, even if not requestedAmount of energy is stored long drainEnergy(InkColor color, long requestedAmount); - // returns true if the energy could be drained successfully - // if not enough energy is stored, the amount of stored energy remains unchanged - boolean requestEnergy(InkColor color, long requestedAmount); - // gets the amount of stored energy of that type long getEnergy(InkColor color); @@ -150,43 +191,10 @@ static long transferInk(@NotNull InkStorage source, @NotNull InkStorage destinat // completely empty the storage void clearContent(); - // Returns how full the storage is, as a float - default float getFillPercent(InkColor color) { - return Mth.clamp((float) getEnergy(color) / getMaxPerColor(), 0, 1); - } - - // Same as above, but in total. - default float getTotalFillPercent() { - return Mth.clamp((float) getCurrentTotal() / getMaxTotal(), 0, 1); - } - void addTooltip(List tooltip); long getRoom(InkColor color); - static @NotNull Map readEnergy(CompoundTag compound) { - Map energy = new HashMap<>(); - if (compound != null) { - for (String key : compound.getAllKeys()) { - InkColor inkColor = SpectrumRegistries.INK_COLOR.get(SpectrumCommon.locate(key)); - if (inkColor == null) { // TODO: needed? Fallback to a default color? - continue; - } - long amount = compound.getLong(key); - energy.put(inkColor, amount); - } - } - return energy; - } - - static @NotNull CompoundTag writeEnergy(Map storedEnergy) { - CompoundTag energy = new CompoundTag(); - for (Map.Entry color : storedEnergy.entrySet()) { - energy.putLong(color.getKey().getID().toString(), color.getValue()); - } - return energy; - } - static void addInkStoreBulletTooltip(List tooltip, InkColor color, long amount) { MutableComponent inkName = color.getColoredInkName(); tooltip.add(Component.translatable("spectrum.tooltip.ink_powered.bullet_amount", Component.literal(getShortenedNumberString(amount)).withStyle(ChatFormatting.WHITE), inkName).setStyle(inkName.getStyle())); diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/CreativeInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/storage/CreativeInkStorage.java index 4c5bd6f795..8d7e43e153 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/CreativeInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/storage/CreativeInkStorage.java @@ -33,11 +33,6 @@ public long drainEnergy(InkColor color, long requestedAmount) { return requestedAmount; } - @Override - public boolean requestEnergy(InkColor color, long requestedAmount) { - return true; - } - @Override public long getEnergy(InkColor color) { return Long.MAX_VALUE; diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/IndividualCappedInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/storage/IndividualCappedInkStorage.java index 1d4942133e..4c8bc441f5 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/IndividualCappedInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/storage/IndividualCappedInkStorage.java @@ -61,18 +61,6 @@ public long addEnergy(InkColor color, long amount) { } } - @Override - public boolean requestEnergy(InkColor color, long amount) { - long storedAmount = this.storedEnergy.getOrDefault(color, 0L); - if (storedAmount < amount) { - return false; - } else { - this.currentTotal -= amount; - this.storedEnergy.put(color, storedAmount - amount); - return true; - } - } - @Override public long drainEnergy(InkColor color, long amount) { long storedAmount = this.storedEnergy.getOrDefault(color, 0L); diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/SingleInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/storage/SingleInkStorage.java index 3f0605c057..b0cb9ec6de 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/SingleInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/storage/SingleInkStorage.java @@ -57,16 +57,6 @@ public long addEnergy(InkColor color, long amount) { return amount; } - @Override - public boolean requestEnergy(InkColor color, long amount) { - if (color == this.storedColor && amount >= this.storedEnergy) { - this.storedEnergy -= amount; - return true; - } else { - return false; - } - } - @Override public long drainEnergy(InkColor color, long amount) { if (color == this.storedColor) { diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedElementalMixingInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedElementalMixingInkStorage.java index 2ef54d8c89..bcee0f491b 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedElementalMixingInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedElementalMixingInkStorage.java @@ -18,45 +18,6 @@ public boolean accepts(InkColor color) { return color.isIn(InkColorTags.ELEMENTAL_COLORS); } - @Override - public boolean requestEnergy(InkColor color, long amount) { - if (color.isIn(InkColorTags.ELEMENTAL_COLORS)) { - // can be output directly - long storedAmount = this.storedEnergy.get(color); - if (storedAmount < amount) { - return false; - } else { - this.currentTotal -= amount; - this.storedEnergy.put(color, storedAmount - amount); - return true; - } - } - - // mix! - Optional> requiredElementals = InkColorMixes.getColorsToMix(color); - if (requiredElementals.isEmpty()) { - return false; - } - - // check if we have enough - for (Map.Entry entry : requiredElementals.get().entrySet()) { - long storedAmount = this.storedEnergy.get(entry.getKey()); - long requiredAmount = (int) Math.ceil(entry.getValue() * amount); - if (storedAmount < requiredAmount) { - return false; - } - } - - // yes, we got stored enough. Drain - for (Map.Entry entry : requiredElementals.get().entrySet()) { - long storedAmount = this.storedEnergy.get(entry.getKey()); - long requiredAmount = (int) Math.ceil(entry.getValue() * amount); - this.currentTotal -= requiredAmount; - this.storedEnergy.put(entry.getKey(), storedAmount - requiredAmount); - } - return true; - } - @Override public long drainEnergy(InkColor color, long amount) { if (color.isIn(InkColorTags.ELEMENTAL_COLORS)) { diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedInkStorage.java index 8c3ff67899..81667ea5dd 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedInkStorage.java @@ -40,18 +40,6 @@ public long addEnergy(InkColor color, long amount) { return overflow; } - @Override - public boolean requestEnergy(InkColor color, long amount) { - long storedAmount = this.storedEnergy.getOrDefault(color, 0L); - if (storedAmount < amount) { - return false; - } else { - this.currentTotal -= amount; - this.storedEnergy.put(color, storedAmount - amount); - return true; - } - } - @Override public long drainEnergy(InkColor color, long amount) { long storedAmount = this.storedEnergy.getOrDefault(color, 0L); From 1222cf47742c845c3841d717e4c5ececc5b40637 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Wed, 8 Apr 2026 19:11:09 +0200 Subject: [PATCH 022/477] ink pastel node logic: fin~ --- .../network/PastelTransmissionLogic.java | 9 +-- .../payloads/InkPastelPayloadType.java | 80 ++++--------------- .../payloads/PastelPayloadType.java | 6 +- 3 files changed, 20 insertions(+), 75 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index 56a411be7c..bfd430def3 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -1,25 +1,18 @@ package de.dafuqs.spectrum.blocks.pastel_network.network; -import com.mojang.serialization.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.resources.*; -import net.minecraft.util.*; -import net.minecraft.world.item.*; -import net.neoforged.neoforge.items.*; import org.jetbrains.annotations.*; import org.jgrapht.*; -import org.jgrapht.Graph; import org.jgrapht.alg.interfaces.*; import org.jgrapht.alg.shortestpath.*; import org.jgrapht.graph.*; import java.util.*; -import java.util.function.*; @SuppressWarnings("UnstableApiUsage") public class PastelTransmissionLogic { @@ -80,7 +73,7 @@ public void invalidateCache() { public void tick(PastelNetwork.NodePriority priority) { for(Map.Entry, PastelPayloadType> payloadType : SpectrumRegistries.PASTEL_PAYLOAD_TYPE.entrySet()) { - payloadType.getValue().tick(this); + payloadType.getValue().tick(this, priority); } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java index 04520b2b98..26fd13c8f5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java @@ -2,21 +2,14 @@ import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import net.minecraft.core.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import net.neoforged.neoforge.capabilities.*; -import net.neoforged.neoforge.fluids.*; -import net.neoforged.neoforge.fluids.capability.*; import org.jetbrains.annotations.*; -import org.jgrapht.*; -import org.jgrapht.graph.*; import java.util.*; -import java.util.function.*; public class InkPastelPayloadType extends PastelPayloadType { @@ -38,68 +31,25 @@ public InkPastelPayloadType() { } @Override - public void tick(PastelTransmissionLogic logic) { - for (PastelNodeBlockEntity sourceNode : logic.getLoadedNodes(PastelNodeType.SENDER)) { - for(Supplier payloadType : sourceNode.getSupportedPayloads()) { - if(payloadType.get() != this) { - continue; - } - payloadType.get().tryTransferToType(logic, sourceNode, PastelNodeType.SENDER, PastelTransmissionLogic.TransferMode.PUSH); - } - } - } - - @Override - public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode) { - @Nullable InkStorageBlockEntity sourceHandler = getConnectedInkStorage(sourceNode); - if (sourceHandler == null) { - return; - } + public void tick(PastelTransmissionLogic logic, PastelNetwork.NodePriority priority) { + Set nodes = logic.getLoadedNodes(PastelNodeType.SENDER); + if (nodes.isEmpty()) return; - for (PastelNodeBlockEntity destinationNode : logic.getLoadedNodes(type)) { - if (!destinationNode.canTransfer()) { - continue; - } - - @Nullable InkStorageBlockEntity destinationHandler = getConnectedInkStorage(destinationNode); - if (destinationHandler != null) { - boolean success = transferBetween(logic, sourceNode, sourceHandler, destinationNode, destinationHandler, transferMode); - if (success && transferMode != PastelTransmissionLogic.TransferMode.PULL) { - return; - } + List> blockEntities = new ArrayList<>(nodes.size()); + List inkStorages = new ArrayList<>(nodes.size()); + for (PastelNodeBlockEntity node : nodes) { + InkStorageBlockEntity storage = getConnectedInkStorage(node); + if (storage != null) { + blockEntities.add(storage); + inkStorages.add(storage.getEnergyStorage()); } } - } - - private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, InkStorageBlockEntity sourceHandler, PastelNodeBlockEntity destinationNode, InkStorageBlockEntity destinationHandler, PastelTransmissionLogic.TransferMode transferMode) { - InkStorage sourceStorage = sourceHandler.getEnergyStorage(); - InkStorage destinationStorage = destinationHandler.getEnergyStorage(); - for(Map.Entry sourceEntry : sourceStorage.getEnergy().entrySet()) { - GraphPath graphPath = logic.getPath(sourceNode, destinationNode); - if (graphPath == null) { - continue; - } - - InkColor sourceColor = sourceEntry.getKey(); - - long roomAtDestination = destinationStorage.getRoom(sourceColor); - List transmittedAmounts = new ArrayList<>(); - if(roomAtDestination > 0) { - long transmittedAmount = Math.min(Math.min(sourceEntry.getValue(), roomAtDestination), sourceNode.getMaxTransferredAmount() * 20L); - if(transmittedAmount > 0) { - sourceStorage.addEnergy(sourceEntry.getKey(), -transmittedAmount); - transmittedAmounts.add(new InkAmount(sourceColor, transmittedAmount)); - return true; - } - } - - if(!transmittedAmounts.isEmpty()) { - PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), new InkPastelPayload(transmittedAmounts), sourceNode.getTransferTime()); - logic.addTransmission(sourceNode, destinationNode, transferMode, transmission); - sourceHandler.setInkDirty(); - } + if (blockEntities.isEmpty()) return; + + InkStorage.equalizeInk(inkStorages); + for(InkStorageBlockEntity s : blockEntities) { + s.setInkDirty(); } - return false; } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java index 5977ba785b..914b6ffa56 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java @@ -17,7 +17,7 @@ public PastelPayloadType(ResourceLocation id, MapCodec this.codec = codec; } - public void tick(PastelTransmissionLogic logic) { + public void tick(PastelTransmissionLogic logic, PastelNetwork.NodePriority priority) { transferBetween(logic, PastelNodeType.SENDER, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PUSH_PULL); transferBetween(logic, PastelNodeType.PROVIDER, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PULL); transferBetween(logic, PastelNodeType.STORAGE, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PULL); @@ -36,6 +36,8 @@ protected void transferBetween(PastelTransmissionLogic logic, PastelNodeType sou } } - protected abstract void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode); + protected void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode){ + + } } \ No newline at end of file From d2028a0c2b65c12869b9b11649ebb484dbb8da00 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 13 Apr 2026 22:04:21 +0200 Subject: [PATCH 023/477] painting station wip --- .../blocks/energy/BaseInkTransferBlock.java | 89 ++++++++ .../energy/BaseInkTransferBlockEntity.java | 198 ++++++++++++++++++ .../blocks/energy/ColorPickerBlock.java | 73 +------ .../blocks/energy/ColorPickerBlockEntity.java | 172 +-------------- .../energy/CrystalApothecaryBlockEntity.java | 13 +- .../blocks/energy/PaintingStationBlock.java | 57 +++++ .../energy/PaintingStationBlockEntity.java | 101 +++++++++ .../registries/SpectrumBlockEntities.java | 1 + .../spectrum/registries/SpectrumBlocks.java | 1 + 9 files changed, 455 insertions(+), 250 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlock.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlock.java new file mode 100644 index 0000000000..0ebe86a106 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlock.java @@ -0,0 +1,89 @@ +package de.dafuqs.spectrum.blocks.energy; + +import net.minecraft.core.*; +import net.minecraft.util.*; +import net.minecraft.world.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.item.*; +import net.minecraft.world.item.context.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.state.*; +import net.minecraft.world.level.pathfinder.*; +import net.minecraft.world.phys.*; +import net.minecraft.world.phys.shapes.*; + +public abstract class BaseInkTransferBlock extends HorizontalDirectionalBlock implements EntityBlock { + + protected static final VoxelShape SHAPE = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 13.0D, 15.0D); + + public BaseInkTransferBlock(Properties settings) { + super(settings); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public boolean isPathfindable(BlockState state, PathComputationType type) { + return false; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext ctx) { + return this.defaultBlockState().setValue(FACING, ctx.getHorizontalDirection().getOpposite()); + } + + @Override + public InteractionResult useWithoutItem(BlockState state, Level world, BlockPos pos, Player player, BlockHitResult hit) { + if (world.isClientSide) { + return InteractionResult.SUCCESS; + } else { + this.openScreen(world, pos, player); + return InteractionResult.CONSUME; + } + } + + protected abstract void openScreen(Level world, BlockPos pos, Player player); + + @Override + public boolean hasAnalogOutputSignal(BlockState state) { + return true; + } + + @Override + public int getAnalogOutputSignal(BlockState state, Level world, BlockPos pos) { + if (world.getBlockEntity(pos) instanceof ColorPickerBlockEntity blockEntity) { + int i = 0; + float f = 0.0f; + for (int j = 0; j < blockEntity.inventory.size(); ++j) { + ItemStack itemStack = blockEntity.inventory.get(j); + if (itemStack.isEmpty()) continue; + f += (float) itemStack.getCount() / (float) itemStack.getMaxStackSize(); + ++i; + } + return Mth.floor(f / (float) blockEntity.inventory.size() * 14.0f) + (i > 0 ? 1 : 0); + } + + return 0; + } + + @Override + public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean moved) { + Containers.dropContentsOnDestroy(state, newState, world, pos); + super.onRemove(state, world, pos, newState, moved); + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java new file mode 100644 index 0000000000..d36d51d7b3 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java @@ -0,0 +1,198 @@ +package de.dafuqs.spectrum.blocks.energy; + +import de.dafuqs.spectrum.api.block.*; +import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.progression.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.core.*; +import net.minecraft.nbt.*; +import net.minecraft.network.protocol.*; +import net.minecraft.network.protocol.game.*; +import net.minecraft.server.level.*; +import net.minecraft.world.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.entity.*; +import net.minecraft.world.level.block.state.*; +import org.jetbrains.annotations.*; + +import java.util.*; + +public abstract class BaseInkTransferBlockEntity extends RandomizableContainerBlockEntity implements PlayerOwned, InkStorageBlockEntity, MenuProvider { + + public static final int INVENTORY_SIZE = 2; // input & output slots + public static final int INPUT_SLOT_ID = 0; + public static final int OUTPUT_SLOT_ID = 1; + + public NonNullList inventory = NonNullList.withSize(INVENTORY_SIZE, ItemStack.EMPTY); + protected T inkStorage; + protected boolean paused; + protected boolean inkDirty; + protected Optional> selectedColor = Optional.empty(); + private UUID ownerUUID; + + public BaseInkTransferBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos, BlockState blockState, T inkStorage) { + super(blockEntityType, blockPos, blockState); + this.inkStorage = inkStorage; + } + + @Override + public T getEnergyStorage() { + return inkStorage; + } + + @Override + public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { + super.loadAdditional(nbt, registryLookup); + this.inventory = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); + if (!this.tryLoadLootTable(nbt)) { + ContainerHelper.loadAllItems(nbt, this.inventory, registryLookup); + } + this.ownerUUID = PlayerOwnedWithName.readOwnerUUID(nbt); + if (nbt.contains("SelectedColor", Tag.TAG_STRING)) { + this.selectedColor = Optional.of(SpectrumRegistries.INK_COLOR.wrapAsHolder(InkColor.ofIdString(nbt.getString("SelectedColor")).get())); + } else { + this.selectedColor = Optional.empty(); + } + } + + @Override + protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { + super.saveAdditional(nbt, registryLookup); + if (!this.trySaveLootTable(nbt)) { + ContainerHelper.saveAllItems(nbt, this.inventory, registryLookup); + } + PlayerOwned.writeOwnerUUID(nbt, this.ownerUUID); + this.selectedColor.ifPresent(color -> nbt.putString("SelectedColor", color.getRegisteredName())); + } + + @Override + public UUID getOwnerUUID() { + return this.ownerUUID; + } + + @Override + public void setOwner(Player playerEntity) { + this.ownerUUID = playerEntity.getUUID(); + setChanged(); + } + + @Override + public void setInkDirty() { + this.inkDirty = true; + } + + @Override + public boolean getInkDirty() { + return inkDirty; + } + + @Override + protected NonNullList getItems() { + return this.inventory; + } + + @Override + protected void setItems(NonNullList list) { + this.inventory = list; + this.paused = false; + updateInClientWorld(); + } + + @Override + public ItemStack removeItem(int slot, int amount) { + ItemStack itemStack = super.removeItem(slot, amount); + this.paused = false; + updateInClientWorld(); + return itemStack; + } + + @Override + public ItemStack removeItemNoUpdate(int slot) { + ItemStack itemStack = super.removeItemNoUpdate(slot); + this.paused = false; + updateInClientWorld(); + return itemStack; + } + + @Override + public void setItem(int slot, ItemStack stack) { + super.setItem(slot, stack); + this.paused = false; + updateInClientWorld(); + } + + @Override + public int getContainerSize() { + return INVENTORY_SIZE; + } + + public boolean tryFillInkContainer() { + long transferredAmount = 0; + + ItemStack stack = inventory.get(OUTPUT_SLOT_ID); + if (stack.getItem() instanceof InkStorageItem inkStorageItem) { + InkStorage itemStorage = inkStorageItem.getEnergyStorage(stack); + + ServerPlayer owner = null; + if (getOwnerIfOnline(this.getLevel()) instanceof ServerPlayer serverPlayerEntity) { + owner = serverPlayerEntity; + } + + if (this.selectedColor.isEmpty()) { + for (InkColor color : InkColors.all()) { + transferredAmount += tryTransferInk(owner, stack, itemStorage, color); + } + } else { + transferredAmount = tryTransferInk(owner, stack, itemStorage, this.selectedColor.get().value()); + } + + if (transferredAmount > 0) { + inkStorageItem.setEnergyStorage(stack, itemStorage); + } + } + + return transferredAmount > 0; + } + + private long tryTransferInk(ServerPlayer owner, ItemStack stack, InkStorage itemStorage, InkColor color) { + long amount = InkStorage.transferInk(getEnergyStorage(), itemStorage, color); + if (amount > 0 && owner != null) { + SpectrumAdvancementCriteria.INK_CONTAINER_INTERACTION.trigger(owner, stack, itemStorage, color, amount); + } + return amount; + } + + public void setSelectedColor(Optional> inkColor) { + this.selectedColor = inkColor; + this.paused = false; + this.setChanged(); + } + + public Optional> getSelectedColor() { + return this.selectedColor; + } + + // Called when the chunk is first loaded to initialize this be + @Override + public CompoundTag getUpdateTag(HolderLookup.Provider registryLookup) { + CompoundTag nbtCompound = new CompoundTag(); + this.saveAdditional(nbtCompound, registryLookup); + return nbtCompound; + } + + @Nullable + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + public void updateInClientWorld() { + if (level != null) { + level.sendBlockUpdated(worldPosition, level.getBlockState(worldPosition), level.getBlockState(worldPosition), Block.UPDATE_INVISIBLE); + } + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlock.java index b3924efe8a..13285419e0 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlock.java @@ -6,28 +6,19 @@ import net.minecraft.*; import net.minecraft.core.*; import net.minecraft.network.chat.*; -import net.minecraft.util.*; -import net.minecraft.world.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; -import net.minecraft.world.item.context.*; import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import net.minecraft.world.level.pathfinder.*; -import net.minecraft.world.phys.*; -import net.minecraft.world.phys.shapes.*; import org.jetbrains.annotations.*; import java.util.*; -public class ColorPickerBlock extends HorizontalDirectionalBlock implements EntityBlock { +public class ColorPickerBlock extends BaseInkTransferBlock { public static final MapCodec CODEC = simpleCodec(ColorPickerBlock::new); - protected static final VoxelShape SHAPE = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 13.0D, 15.0D); - public ColorPickerBlock(Properties settings) { super(settings); } @@ -37,42 +28,17 @@ public MapCodec codec() { return CODEC; } - @Override - public RenderShape getRenderShape(BlockState state) { - return RenderShape.MODEL; - } - @Override public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipFlag type) { super.appendHoverText(stack, context, tooltip, type); tooltip.add(Component.translatable("block.spectrum.color_picker.tooltip").withStyle(ChatFormatting.GRAY)); } - @Override - public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { - return SHAPE; - } - @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { return new ColorPickerBlockEntity(pos, state); } - @Override - public boolean isPathfindable(BlockState state, PathComputationType type) { - return false; - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(FACING); - } - - @Override - public BlockState getStateForPlacement(BlockPlaceContext ctx) { - return this.defaultBlockState().setValue(FACING, ctx.getHorizontalDirection().getOpposite()); - } - @Nullable @Override public BlockEntityTicker getTicker(Level world, BlockState state, BlockEntityType type) { @@ -80,15 +46,6 @@ public BlockEntityTicker getTicker(Level world, Block } @Override - public InteractionResult useWithoutItem(BlockState state, Level world, BlockPos pos, Player player, BlockHitResult hit) { - if (world.isClientSide) { - return InteractionResult.SUCCESS; - } else { - this.openScreen(world, pos, player); - return InteractionResult.CONSUME; - } - } - protected void openScreen(Level world, BlockPos pos, Player player) { BlockEntity blockEntity = world.getBlockEntity(pos); if (blockEntity instanceof ColorPickerBlockEntity colorPickerBlockEntity) { @@ -97,32 +54,4 @@ protected void openScreen(Level world, BlockPos pos, Player player) { } } - @Override - public boolean hasAnalogOutputSignal(BlockState state) { - return true; - } - - @Override - public int getAnalogOutputSignal(BlockState state, Level world, BlockPos pos) { - if (world.getBlockEntity(pos) instanceof ColorPickerBlockEntity blockEntity) { - int i = 0; - float f = 0.0f; - for (int j = 0; j < blockEntity.inventory.size(); ++j) { - ItemStack itemStack = blockEntity.inventory.get(j); - if (itemStack.isEmpty()) continue; - f += (float) itemStack.getCount() / (float) itemStack.getMaxStackSize(); - ++i; - } - return Mth.floor(f / (float) blockEntity.inventory.size() * 14.0f) + (i > 0 ? 1 : 0); - } - - return 0; - } - - @Override - public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean moved) { - Containers.dropContentsOnDestroy(state, newState, world, pos); - super.onRemove(state, world, pos, newState, moved); - } - } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java index 7c0ef195fc..0ebcf0a0d8 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.blocks.energy; -import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.energy.*; import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.api.energy.storage.*; @@ -10,15 +9,12 @@ import de.dafuqs.spectrum.inventories.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.particle.effect.*; -import de.dafuqs.spectrum.progression.*; import de.dafuqs.spectrum.recipe.color_picker.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.nbt.*; import net.minecraft.network.*; import net.minecraft.network.chat.*; -import net.minecraft.network.protocol.*; -import net.minecraft.network.protocol.game.*; import net.minecraft.server.level.*; import net.minecraft.sounds.*; import net.minecraft.world.*; @@ -27,35 +23,20 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; import org.jetbrains.annotations.*; import java.util.*; -public class ColorPickerBlockEntity extends RandomizableContainerBlockEntity implements PlayerOwned, InkStorageBlockEntity, MenuProvider { +public class ColorPickerBlockEntity extends BaseInkTransferBlockEntity implements MenuProvider { - public static final int INVENTORY_SIZE = 2; // input & output slots - public static final int INPUT_SLOT_ID = 0; - public static final int OUTPUT_SLOT_ID = 1; public static final long TICKS_PER_CONVERSION = 5; - public static final long STORAGE_AMOUNT = 64 * 64 * 64 * 100; - - public NonNullList inventory; - protected TotalCappedInkStorage inkStorage; - protected boolean paused; - protected boolean inkDirty; + public static final long STORAGE_AMOUNT = (long) Math.pow(2, 16); protected @Nullable InkConvertingRecipe cachedRecipe; - protected Optional> selectedColor = Optional.empty(); - private UUID ownerUUID; public ColorPickerBlockEntity(BlockPos blockPos, BlockState blockState) { - super(SpectrumBlockEntities.COLOR_PICKER.get(), blockPos, blockState); - - this.inventory = NonNullList.withSize(INVENTORY_SIZE, ItemStack.EMPTY); - this.inkStorage = new TotalCappedInkStorage(STORAGE_AMOUNT, Map.of()); + super(SpectrumBlockEntities.COLOR_PICKER.get(), blockPos, blockState, new TotalCappedInkStorage(STORAGE_AMOUNT, Map.of())); } @SuppressWarnings("unused") @@ -86,28 +67,13 @@ public static void tick(Level world, BlockPos pos, BlockState state, ColorPicker @Override public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { super.loadAdditional(nbt, registryLookup); - this.inventory = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); - if (!this.tryLoadLootTable(nbt)) { - ContainerHelper.loadAllItems(nbt, this.inventory, registryLookup); - } CodecHelper.fromNbt(InkStorageComponent.CODEC, nbt.get("InkStorage")).ifPresent(storage -> this.inkStorage = new TotalCappedInkStorage(storage.maxEnergyTotal(), storage.storedEnergy())); - this.ownerUUID = PlayerOwnedWithName.readOwnerUUID(nbt); - if (nbt.contains("SelectedColor", Tag.TAG_STRING)) { - this.selectedColor = Optional.of(SpectrumRegistries.INK_COLOR.wrapAsHolder(InkColor.ofIdString(nbt.getString("SelectedColor")).get())); - } else { - this.selectedColor = Optional.empty(); - } } @Override protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { super.saveAdditional(nbt, registryLookup); - if (!this.trySaveLootTable(nbt)) { - ContainerHelper.saveAllItems(nbt, this.inventory, registryLookup); - } CodecHelper.writeNbt(nbt, "InkStorage", InkStorageComponent.CODEC, new InkStorageComponent(this.inkStorage)); - PlayerOwned.writeOwnerUUID(nbt, this.ownerUUID); - this.selectedColor.ifPresent(color -> nbt.putString("SelectedColor", color.getRegisteredName())); } @Override @@ -125,72 +91,6 @@ public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByte ColorPickerScreenHandler.ScreenOpeningData.PACKET_CODEC.encode(buffer, new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); } - @Override - public UUID getOwnerUUID() { - return this.ownerUUID; - } - - @Override - public void setOwner(Player playerEntity) { - this.ownerUUID = playerEntity.getUUID(); - setChanged(); - } - - @Override - public TotalCappedInkStorage getEnergyStorage() { - return inkStorage; - } - - @Override - public void setInkDirty() { - this.inkDirty = true; - } - - @Override - public boolean getInkDirty() { - return inkDirty; - } - - @Override - protected NonNullList getItems() { - return this.inventory; - } - - @Override - protected void setItems(NonNullList list) { - this.inventory = list; - this.paused = false; - updateInClientWorld(); - } - - @Override - public ItemStack removeItem(int slot, int amount) { - ItemStack itemStack = super.removeItem(slot, amount); - this.paused = false; - updateInClientWorld(); - return itemStack; - } - - @Override - public ItemStack removeItemNoUpdate(int slot) { - ItemStack itemStack = super.removeItemNoUpdate(slot); - this.paused = false; - updateInClientWorld(); - return itemStack; - } - - @Override - public void setItem(int slot, ItemStack stack) { - super.setItem(slot, stack); - this.paused = false; - updateInClientWorld(); - } - - @Override - public int getContainerSize() { - return INVENTORY_SIZE; - } - protected boolean tryConvertPigmentToEnergy(ServerLevel world) { InkConvertingRecipe recipe = getInkConvertingRecipe(world); if (recipe != null) { @@ -243,72 +143,6 @@ protected boolean tryConvertPigmentToEnergy(ServerLevel world) { } } - protected boolean tryFillInkContainer() { - long transferredAmount = 0; - - ItemStack stack = inventory.get(OUTPUT_SLOT_ID); - if (stack.getItem() instanceof InkStorageItem inkStorageItem) { - InkStorage itemStorage = inkStorageItem.getEnergyStorage(stack); - - ServerPlayer owner = null; - if (getOwnerIfOnline(this.getLevel()) instanceof ServerPlayer serverPlayerEntity) { - owner = serverPlayerEntity; - } - - if (this.selectedColor.isEmpty()) { - for (InkColor color : InkColors.all()) { - transferredAmount += tryTransferInk(owner, stack, itemStorage, color); - } - } else { - transferredAmount = tryTransferInk(owner, stack, itemStorage, this.selectedColor.get().value()); - } - - if (transferredAmount > 0) { - inkStorageItem.setEnergyStorage(stack, itemStorage); - } - } - - return transferredAmount > 0; - } - - private long tryTransferInk(ServerPlayer owner, ItemStack stack, InkStorage itemStorage, InkColor color) { - long amount = InkStorage.transferInk(this.inkStorage, itemStorage, color); - if (amount > 0 && owner != null) { - SpectrumAdvancementCriteria.INK_CONTAINER_INTERACTION.trigger(owner, stack, itemStorage, color, amount); - } - return amount; - } - - public void setSelectedColor(Optional> inkColor) { - this.selectedColor = inkColor; - this.paused = false; - this.setChanged(); - } - - public Optional> getSelectedColor() { - return this.selectedColor; - } - - // Called when the chunk is first loaded to initialize this be - @Override - public CompoundTag getUpdateTag(HolderLookup.Provider registryLookup) { - CompoundTag nbtCompound = new CompoundTag(); - this.saveAdditional(nbtCompound, registryLookup); - return nbtCompound; - } - - @Nullable - @Override - public Packet getUpdatePacket() { - return ClientboundBlockEntityDataPacket.create(this); - } - - public void updateInClientWorld() { - if (level != null) { - level.sendBlockUpdated(worldPosition, level.getBlockState(worldPosition), level.getBlockState(worldPosition), Block.UPDATE_INVISIBLE); - } - } - @Override public boolean canPlaceItem(int slot, ItemStack stack) { if (slot == INPUT_SLOT_ID) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystalApothecaryBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystalApothecaryBlockEntity.java index 3224d2500b..c31ee3de1c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystalApothecaryBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystalApothecaryBlockEntity.java @@ -28,7 +28,6 @@ import org.jetbrains.annotations.*; import java.util.*; -import java.util.function.*; import java.util.stream.*; public class CrystalApothecaryBlockEntity extends RandomizableContainerBlockEntity implements PlayerOwnedWithName, BlockPosEventQueue.Callback { @@ -36,19 +35,15 @@ public class CrystalApothecaryBlockEntity extends RandomizableContainerBlockEnti private static final int RANGE = 12; private static final ItemStack HARVEST_ITEMSTACK = ItemStack.EMPTY; - private final BlockPosEventQueue blockPosEventTransferListener; - protected long compensationWorldTime; - private NonNullList inventory; - private boolean listenerPaused; + private final BlockPosEventQueue blockPosEventTransferListener = new BlockPosEventQueue(new BlockPositionSource(this.worldPosition), RANGE, this); + protected long compensationWorldTime = -1; + private NonNullList inventory = NonNullList.withSize(27, ItemStack.EMPTY); + private boolean listenerPaused = false; private UUID ownerUUID; private String ownerName; public CrystalApothecaryBlockEntity(BlockPos blockPos, BlockState blockState) { super(SpectrumBlockEntities.CRYSTAL_APOTHECARY.get(), blockPos, blockState); - this.blockPosEventTransferListener = new BlockPosEventQueue(new BlockPositionSource(this.worldPosition), RANGE, this); - this.inventory = NonNullList.withSize(27, ItemStack.EMPTY); - this.listenerPaused = false; - this.compensationWorldTime = -1; } @SuppressWarnings("unused") diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java new file mode 100644 index 0000000000..3322e2620a --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java @@ -0,0 +1,57 @@ +package de.dafuqs.spectrum.blocks.energy; + +import com.mojang.serialization.*; +import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.*; +import net.minecraft.core.*; +import net.minecraft.network.chat.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.entity.*; +import net.minecraft.world.level.block.state.*; +import org.jetbrains.annotations.*; + +import java.util.*; + +public class PaintingStationBlock extends BaseInkTransferBlock { + + public static final MapCodec CODEC = simpleCodec(PaintingStationBlock::new); + + public PaintingStationBlock(Properties settings) { + super(settings); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipFlag type) { + super.appendHoverText(stack, context, tooltip, type); + tooltip.add(Component.translatable("block.spectrum.painting_station.tooltip").withStyle(ChatFormatting.GRAY)); + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new ColorPickerBlockEntity(pos, state); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level world, BlockState state, BlockEntityType type) { + return world.isClientSide ? null : Support.checkType(type, SpectrumBlockEntities.COLOR_PICKER.get(), ColorPickerBlockEntity::tick); + } + + @Override + protected void openScreen(Level world, BlockPos pos, Player player) { + BlockEntity blockEntity = world.getBlockEntity(pos); + if (blockEntity instanceof ColorPickerBlockEntity colorPickerBlockEntity) { + colorPickerBlockEntity.setOwner(player); + player.openMenu(colorPickerBlockEntity); + } + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java new file mode 100644 index 0000000000..332cf69493 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java @@ -0,0 +1,101 @@ +package de.dafuqs.spectrum.blocks.energy; + +import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.components.*; +import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.inventories.*; +import de.dafuqs.spectrum.recipe.color_picker.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.core.*; +import net.minecraft.nbt.*; +import net.minecraft.network.*; +import net.minecraft.network.chat.*; +import net.minecraft.world.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.inventory.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.state.*; +import org.jetbrains.annotations.*; + +import java.util.*; + +public class PaintingStationBlockEntity extends BaseInkTransferBlockEntity implements MenuProvider { + + public static final long TICKS_PER_CONVERSION = 5; + public static final long ITEM_COLORING_COST = 10; + public static final long STORAGE_AMOUNT = (long) Math.pow(2, 64); + protected @Nullable InkConvertingRecipe cachedRecipe; + + public PaintingStationBlockEntity(BlockPos blockPos, BlockState blockState) { + super(SpectrumBlockEntities.PAINTING_STATION.get(), blockPos, blockState, new IndividualCappedInkStorage(STORAGE_AMOUNT, Map.of())); + } + + @SuppressWarnings("unused") + public static void tick(Level world, BlockPos pos, BlockState state, PaintingStationBlockEntity blockEntity) { + if (!world.isClientSide) { + blockEntity.inkDirty = false; + if (!blockEntity.paused) { + boolean convertedPigment = false; + boolean didSomething = true; + + Optional> selectedColor = blockEntity.getSelectedColor(); + InkStorage inkStorage = blockEntity.getEnergyStorage(); + + if (selectedColor.isPresent() && world.getGameTime() % TICKS_PER_CONVERSION == 0) { + if (inkStorage.getEnergy(selectedColor.get().value()) >= ITEM_COLORING_COST) { + didSomething = blockEntity.tryColorItem(selectedColor); + } + } else { + didSomething = blockEntity.tryFillInkContainer(); + } + + if (didSomething) { + blockEntity.updateInClientWorld(); + blockEntity.setInkDirty(); + blockEntity.setChanged(); + } else { + blockEntity.paused = true; + } + } + } + } + + @Override + public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { + super.loadAdditional(nbt, registryLookup); + CodecHelper.fromNbt(InkStorageComponent.CODEC, nbt.get("InkStorage")).ifPresent(storage -> this.inkStorage = new IndividualCappedInkStorage(storage.maxEnergyTotal(), storage.storedEnergy())); + } + + @Override + protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { + super.saveAdditional(nbt, registryLookup); + CodecHelper.writeNbt(nbt, "InkStorage", InkStorageComponent.CODEC, new InkStorageComponent(this.inkStorage)); + } + + @Override + protected Component getDefaultName() { + return Component.translatable("block.spectrum.painting_station"); + } + + @Override + protected AbstractContainerMenu createMenu(int syncId, Inventory playerInventory) { + return new ColorPickerScreenHandler(syncId, playerInventory, playerInventory.player.level().getBlockEntity(new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor).pos(), SpectrumBlockEntities.COLOR_PICKER.get()).orElseThrow(), new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor).inkColor()); + } + + @Override + public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { + ColorPickerScreenHandler.ScreenOpeningData.PACKET_CODEC.encode(buffer, new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); + } + + @Override + public boolean canPlaceItem(int slot, ItemStack stack) { + if (slot == OUTPUT_SLOT_ID) { + return stack.getItem() instanceof InkStorageItem; + } + return true; + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java index 9f8580d4fb..027a7c8413 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java @@ -70,6 +70,7 @@ public class SpectrumBlockEntities { public static DeferredHolder, BlockEntityType> CRYSTAL_APOTHECARY = register("crystal_apothecary", CrystalApothecaryBlockEntity::new, SpectrumBlocks.CRYSTAL_APOTHECARY); public static DeferredHolder, BlockEntityType> COLOR_PICKER = register("color_picker", ColorPickerBlockEntity::new, SpectrumBlocks.COLOR_PICKER); + public static DeferredHolder, BlockEntityType> PAINTING_STATION = register("painting_station", PaintingStationBlockEntity::new, SpectrumBlocks.PAINTING_STATION); public static DeferredHolder, BlockEntityType> COMPACTING_CHEST = register("compacting_chest", CompactingChestBlockEntity::new, SpectrumBlocks.COMPACTING_CHEST); public static DeferredHolder, BlockEntityType> FABRICATION_CHEST = register("fabrication_chest", FabricationChestBlockEntity::new, SpectrumBlocks.FABRICATION_CHEST); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index fba903ad5f..f2d2c4efcf 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -140,6 +140,7 @@ private static BlockBehaviour.Properties craftingBlock(MapColor mapColor, SoundT public static final DeferredBlock CINDERHEARTH = register(defaultNorthHorizontalFacing(blockWithItem("cinderhearth", () -> new CinderhearthBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of().fireResistant(), InkColors.ORANGE), ModelLocationUtils::getModelLocation)); public static final DeferredBlock COLOR_PICKER = register(defaultWestHorizontalFacing(blockWithItem("color_picker", () -> new ColorPickerBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock PAINTING_STATION = register(defaultWestHorizontalFacing(blockWithItem("painting_station", () -> new PaintingStationBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); public static final DeferredBlock CRYSTAL_APOTHECARY = register(singletonWithSoup(blockWithItem("crystal_apothecary", () -> new CrystalApothecaryBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); private static BlockBehaviour.Properties gemstone(MapColor mapColor, SoundType blockSoundGroup, int luminance) { From 7132d43d8bdec4fd9199e38700b03fc2a335037b Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 2 May 2026 14:15:42 +0200 Subject: [PATCH 024/477] painting station wip --- .../de/dafuqs/spectrum/SpectrumCommon.java | 6 +- .../api/block/FilterConfigurable.java | 12 +- .../energy/BaseInkTransferBlockEntity.java | 22 ++-- .../blocks/energy/ColorPickerBlock.java | 2 +- .../blocks/energy/ColorPickerBlockEntity.java | 36 +++--- .../blocks/energy/PaintingStationBlock.java | 10 +- .../energy/PaintingStationBlockEntity.java | 104 ++++++++++++----- .../entity/entity/InkProjectileEntity.java | 2 +- ...kVariantHelper.java => VariantHelper.java} | 105 +++++++++--------- .../inventories/AutoCraftingMode.java | 3 +- .../dafuqs/spectrum/items/GuidebookItem.java | 4 +- .../items/magic_items/PaintbrushItem.java | 8 +- .../dynamic/HardcorePlayerRevivalRecipe.java | 8 +- .../registries/SpectrumBlockTags.java | 2 +- .../registries/SpectrumEventListeners.java | 5 +- .../spectrum/registries/SpectrumItemTags.java | 49 ++++---- .../resources/assets/spectrum/lang/en_us.json | 4 +- ...klisted.json => coloring_blacklisted.json} | 0 .../tags/item/coloring_blacklisted.json | 3 + 19 files changed, 219 insertions(+), 166 deletions(-) rename src/main/java/de/dafuqs/spectrum/helpers/{BlockVariantHelper.java => VariantHelper.java} (50%) rename src/main/resources/data/spectrum/tags/block/{ink_effect_blacklisted.json => coloring_blacklisted.json} (100%) create mode 100644 src/main/resources/data/spectrum/tags/item/coloring_blacklisted.json diff --git a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java index 840c505bab..fd13c76dd2 100644 --- a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java +++ b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java @@ -20,9 +20,7 @@ import de.dafuqs.spectrum.sound.*; import net.minecraft.resources.*; import net.minecraft.server.*; -import net.minecraft.tags.*; import net.minecraft.world.entity.player.*; -import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; import net.neoforged.bus.api.*; @@ -48,9 +46,7 @@ public class SpectrumCommon { public static final String MOD_ID = "spectrum"; public static final Logger LOGGER = LoggerFactory.getLogger("Spectrum"); - // Todo: move to filter classes - public static final Map> CACHED_ITEM_TAG_MAP = new HashMap<>(); - + public static void logInfo(String message) { LOGGER.info("{}", message); } diff --git a/src/main/java/de/dafuqs/spectrum/api/block/FilterConfigurable.java b/src/main/java/de/dafuqs/spectrum/api/block/FilterConfigurable.java index dc7dbe22b0..b752ed8584 100644 --- a/src/main/java/de/dafuqs/spectrum/api/block/FilterConfigurable.java +++ b/src/main/java/de/dafuqs/spectrum/api/block/FilterConfigurable.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.api.block; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.inventories.slots.*; import de.dafuqs.spectrum.networking.c2s_payloads.*; @@ -26,6 +25,15 @@ public interface FilterConfigurable { + // 'effectively' private + class Cache { + private static final Map> CACHED_ITEM_TAG_MAP = new HashMap<>(); + } + + static void invalidateCache() { + Cache.CACHED_ITEM_TAG_MAP.clear(); + } + default Object2BooleanMap> getFilteredTags() { return Object2BooleanMaps.emptyMap(); } @@ -96,7 +104,7 @@ default boolean addTagFilteringItem(ItemStack itemVariant) { } // Copied from PastelNodeBlockEntity. This entire section could potentially be a candidate to move into its own function. - TagKey tag = SpectrumCommon.CACHED_ITEM_TAG_MAP.computeIfAbsent(identifier, tagId -> BuiltInRegistries.ITEM.getTagNames() + TagKey tag = Cache.CACHED_ITEM_TAG_MAP.computeIfAbsent(identifier, tagId -> BuiltInRegistries.ITEM.getTagNames() .filter(t -> t.location().equals(tagId)) .findFirst() .orElse(null)); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java index d36d51d7b3..1c6988df85 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java @@ -79,6 +79,15 @@ public void setOwner(Player playerEntity) { setChanged(); } + @Override + public void setChanged() { + super.setChanged(); + if (this.level != null && !this.level.isClientSide) { + this.paused = false; + updateInClientWorld(); + } + } + @Override public void setInkDirty() { this.inkDirty = true; @@ -97,30 +106,26 @@ protected NonNullList getItems() { @Override protected void setItems(NonNullList list) { this.inventory = list; - this.paused = false; - updateInClientWorld(); + setChanged(); } @Override public ItemStack removeItem(int slot, int amount) { ItemStack itemStack = super.removeItem(slot, amount); - this.paused = false; - updateInClientWorld(); + setChanged(); return itemStack; } @Override public ItemStack removeItemNoUpdate(int slot) { ItemStack itemStack = super.removeItemNoUpdate(slot); - this.paused = false; - updateInClientWorld(); + setChanged(); return itemStack; } @Override public void setItem(int slot, ItemStack stack) { - super.setItem(slot, stack); - this.paused = false; + setChanged(); updateInClientWorld(); } @@ -167,7 +172,6 @@ private long tryTransferInk(ServerPlayer owner, ItemStack stack, InkStorage item public void setSelectedColor(Optional> inkColor) { this.selectedColor = inkColor; - this.paused = false; this.setChanged(); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlock.java index 13285419e0..2a6088f8b5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlock.java @@ -42,7 +42,7 @@ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { @Nullable @Override public BlockEntityTicker getTicker(Level world, BlockState state, BlockEntityType type) { - return world.isClientSide ? null : Support.checkType(type, SpectrumBlockEntities.COLOR_PICKER.get(), ColorPickerBlockEntity::tick); + return world.isClientSide ? null : Support.checkType(type, SpectrumBlockEntities.COLOR_PICKER.get(), ColorPickerBlockEntity::serverTick); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java index 0ebcf0a0d8..17b23ee498 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java @@ -40,26 +40,22 @@ public ColorPickerBlockEntity(BlockPos blockPos, BlockState blockState) { } @SuppressWarnings("unused") - public static void tick(Level world, BlockPos pos, BlockState state, ColorPickerBlockEntity blockEntity) { - if (!world.isClientSide) { - blockEntity.inkDirty = false; - if (!blockEntity.paused) { - boolean convertedPigment = false; - boolean shouldPause = true; - if (world.getGameTime() % TICKS_PER_CONVERSION == 0) { - convertedPigment = blockEntity.tryConvertPigmentToEnergy((ServerLevel) world); - } else { - shouldPause = false; - } - boolean filledContainer = blockEntity.tryFillInkContainer(); // that's an OR - - if (convertedPigment || filledContainer) { - blockEntity.updateInClientWorld(); - blockEntity.setInkDirty(); - blockEntity.setChanged(); - } else if (shouldPause) { - blockEntity.paused = true; - } + public static void serverTick(Level world, BlockPos pos, BlockState state, ColorPickerBlockEntity blockEntity) { + blockEntity.inkDirty = false; + if (!blockEntity.paused) { + boolean convertedPigment = false; + boolean shouldPause = true; + if (world.getGameTime() % TICKS_PER_CONVERSION == 0) { + convertedPigment = blockEntity.tryConvertPigmentToEnergy((ServerLevel) world); + } else { + shouldPause = false; + } + boolean filledContainer = blockEntity.tryFillInkContainer(); // that's an OR + + if (convertedPigment || filledContainer) { + blockEntity.setChanged(); + } else if (shouldPause) { + blockEntity.paused = true; } } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java index 3322e2620a..70c88feec9 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java @@ -36,21 +36,21 @@ public void appendHoverText(ItemStack stack, Item.TooltipContext context, List BlockEntityTicker getTicker(Level world, BlockState state, BlockEntityType type) { - return world.isClientSide ? null : Support.checkType(type, SpectrumBlockEntities.COLOR_PICKER.get(), ColorPickerBlockEntity::tick); + return world.isClientSide ? null : Support.checkType(type, SpectrumBlockEntities.PAINTING_STATION.get(), PaintingStationBlockEntity::serverTick); } @Override protected void openScreen(Level world, BlockPos pos, Player player) { BlockEntity blockEntity = world.getBlockEntity(pos); - if (blockEntity instanceof ColorPickerBlockEntity colorPickerBlockEntity) { - colorPickerBlockEntity.setOwner(player); - player.openMenu(colorPickerBlockEntity); + if (blockEntity instanceof PaintingStationBlockEntity paintingStationBlockEntity) { + paintingStationBlockEntity.setOwner(player); + player.openMenu(paintingStationBlockEntity); } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java index 332cf69493..521124e17c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java @@ -4,65 +4,113 @@ import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.api.energy.storage.*; import de.dafuqs.spectrum.components.*; +import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.inventories.*; -import de.dafuqs.spectrum.recipe.color_picker.*; +import de.dafuqs.spectrum.networking.s2c_payloads.*; +import de.dafuqs.spectrum.particle.effect.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.nbt.*; import net.minecraft.network.*; import net.minecraft.network.chat.*; +import net.minecraft.server.level.*; +import net.minecraft.sounds.*; import net.minecraft.world.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; -import org.jetbrains.annotations.*; +import net.minecraft.world.phys.*; import java.util.*; public class PaintingStationBlockEntity extends BaseInkTransferBlockEntity implements MenuProvider { + public static final int INPUT_SLOT_ID = 0; + public static final int OUTPUT_SLOT_ID = 1; + public static final long TICKS_PER_CONVERSION = 5; public static final long ITEM_COLORING_COST = 10; public static final long STORAGE_AMOUNT = (long) Math.pow(2, 64); - protected @Nullable InkConvertingRecipe cachedRecipe; public PaintingStationBlockEntity(BlockPos blockPos, BlockState blockState) { super(SpectrumBlockEntities.PAINTING_STATION.get(), blockPos, blockState, new IndividualCappedInkStorage(STORAGE_AMOUNT, Map.of())); } @SuppressWarnings("unused") - public static void tick(Level world, BlockPos pos, BlockState state, PaintingStationBlockEntity blockEntity) { - if (!world.isClientSide) { - blockEntity.inkDirty = false; - if (!blockEntity.paused) { - boolean convertedPigment = false; - boolean didSomething = true; - - Optional> selectedColor = blockEntity.getSelectedColor(); - InkStorage inkStorage = blockEntity.getEnergyStorage(); - - if (selectedColor.isPresent() && world.getGameTime() % TICKS_PER_CONVERSION == 0) { - if (inkStorage.getEnergy(selectedColor.get().value()) >= ITEM_COLORING_COST) { - didSomething = blockEntity.tryColorItem(selectedColor); - } - } else { - didSomething = blockEntity.tryFillInkContainer(); - } - - if (didSomething) { - blockEntity.updateInClientWorld(); - blockEntity.setInkDirty(); - blockEntity.setChanged(); - } else { - blockEntity.paused = true; - } + public static void serverTick(Level world, BlockPos pos, BlockState state, PaintingStationBlockEntity blockEntity) { + blockEntity.inkDirty = false; + if (!blockEntity.paused) { + boolean convertedPigment = false; + boolean didSomething = true; + + Optional> selectedColor = blockEntity.getSelectedColor(); + InkStorage inkStorage = blockEntity.getEnergyStorage(); + + if (selectedColor.isPresent() && world.getGameTime() % TICKS_PER_CONVERSION == 0) { + didSomething = blockEntity.tryColorStack(selectedColor.get().value()); + } + + if(!didSomething) { + didSomething = blockEntity.tryFillInkContainer(); + } + + if (didSomething) { + blockEntity.setInkDirty(); + blockEntity.setChanged(); + } else { + blockEntity.paused = true; } } } + public boolean tryColorStack(InkColor inkColor) { + if(inkStorage.getEnergy(inkColor) < ITEM_COLORING_COST) { + return false; + } + + ItemStack output = getItem(OUTPUT_SLOT_ID); + if(output.getCount() >= output.getMaxStackSize()){ + return false; + } + + ItemStack input = getItem(INPUT_SLOT_ID); + Item resultItem = VariantHelper.getColoredItem(input, inkColor); + if(resultItem == Items.AIR) { + return false; + } + + ItemStack resultStack = resultItem.getDefaultInstance(); + resultStack.applyComponents(input.getComponents()); + + if(output.isEmpty()) { + setItem(OUTPUT_SLOT_ID, resultStack); + } else if(ItemStack.isSameItemSameComponents(output, resultStack)) { + input.shrink(1); + output.grow(1); + } else { + return false; + } + + input.shrink(1); + inkStorage.addEnergy(inkColor, -ITEM_COLORING_COST); + + if (SpectrumConfig.CONFIG.BlockSoundVolume.get() > 0) { + level.playSound(null, worldPosition, SpectrumSoundEvents.COLOR_PICKER_PROCESSING, SoundSource.BLOCKS, SpectrumConfig.CONFIG.BlockSoundVolume.get() / 3, 1.0F); + + PlayParticleWithRandomOffsetAndVelocityPayload.playParticleWithRandomOffsetAndVelocity((ServerLevel) level, + new Vec3(worldPosition.getX() + 0.5, worldPosition.getY() + 0.7, worldPosition.getZ() + 0.5), + ColoredFluidRisingParticleEffect.of(inkColor.getColorInt()), + 5, + new Vec3(0.22, 0.0, 0.22), + new Vec3(0.0, 0.1, 0.0) + ); + } + return true; + } + @Override public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { super.loadAdditional(nbt, registryLookup); diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java index a20eee8fb7..2dfe4370e1 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java @@ -188,7 +188,7 @@ protected void onHitBlock(BlockHitResult blockHitResult) { continue; } if (dyeColor.isPresent()) { - BlockState coloredBlockState = BlockVariantHelper.getCursedBlockColorVariant(this.level(), blockPos, dyeColor.get()); + BlockState coloredBlockState = VariantHelper.getColoredBlock(this.level(), blockPos, inkColor); if (!coloredBlockState.isAir()) { this.level().setBlockAndUpdate(blockPos, coloredBlockState); } diff --git a/src/main/java/de/dafuqs/spectrum/helpers/BlockVariantHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java similarity index 50% rename from src/main/java/de/dafuqs/spectrum/helpers/BlockVariantHelper.java rename to src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java index 9e8b990a1f..08bd2633f4 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/BlockVariantHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java @@ -1,5 +1,6 @@ package de.dafuqs.spectrum.helpers; +import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.core.registries.*; @@ -9,67 +10,67 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; +import org.jetbrains.annotations.*; import java.util.*; +import java.util.function.*; -public class BlockVariantHelper { +public class VariantHelper { - // cache for cursedBlockColorVariant() - private static final Map> coloredStates = new HashMap<>(); - // ordered color strings so "light_" variants match before non-light - private static final List COLOR_STRINGS = List.of("light_blue", "light_gray", "white", "orange", "magenta", "yellow", "lime", "pink", "gray", "cyan", "purple", "blue", "brown", "green", "red", "black"); + private static final Map> COLORED_STATE_CACHE = new HashMap<>(); + private static final Map> COLORED_ITEM_CACHE = new HashMap<>(); - public static BlockState getCursedBlockColorVariant(Level world, BlockPos blockPos, DyeColor newColor) { - BlockEntity blockEntity = world.getBlockEntity(blockPos); - if (blockEntity != null) { - return Blocks.AIR.defaultBlockState(); + public static @Nullable BlockState getColoredBlock(Level world, BlockPos pos, InkColor newColor) { + if (world.getBlockEntity(pos) != null) { + return null; } - BlockState blockState = world.getBlockState(blockPos); - - if (blockState.is(SpectrumBlockTags.INK_EFFECT_BLACKLISTED) || blockState.getDestroySpeed(world, blockPos) == -1) { - return Blocks.AIR.defaultBlockState(); - } - - Block block = blockState.getBlock(); - if (coloredStates.containsKey(block)) { - Map colorMap = coloredStates.get(block); - if (colorMap.containsKey(newColor)) { - Block newBlock = colorMap.get(newColor); - return newBlock.withPropertiesOf(blockState); - } + BlockState state = world.getBlockState(pos); + if (state.is(SpectrumBlockTags.COLORING_BLACKLISTED) || state.getDestroySpeed(world, pos) == -1) { + return null; } - ResourceLocation identifier = BuiltInRegistries.BLOCK.getKey(block); - - String newPath = null; - for (String colorString : COLOR_STRINGS) { - if (identifier.getPath().contains(colorString)) { - newPath = identifier.getPath().replace(colorString, newColor.toString()); - break; - } + Block block = state.getBlock(); + Block result = recolorRegistryObject(block, newColor, COLORED_STATE_CACHE, BuiltInRegistries.BLOCK::getKey, BuiltInRegistries.BLOCK::get); + return result != null ? result.withPropertiesOf(state) : null; + } + + public static @Nullable Item getColoredItem(ItemStack stack, InkColor newColor) { + if (stack.is(SpectrumItemTags.COLORING_BLACKLISTED)) { + return null; } - - Block returnBlock = Blocks.AIR; - if (newPath != null) { - ResourceLocation newIdentifier = ResourceLocation.fromNamespaceAndPath(identifier.getNamespace(), newPath); - Block newIdentifierBlock = BuiltInRegistries.BLOCK.get(newIdentifier); - if (newIdentifierBlock != block) { - returnBlock = newIdentifierBlock; + Item item = stack.getItem(); + return recolorRegistryObject(item, newColor, COLORED_ITEM_CACHE, BuiltInRegistries.ITEM::getKey, BuiltInRegistries.ITEM::get); + } + + public static @Nullable T recolorRegistryObject(T original, InkColor newColor, Map> cache, Function idGetter, Function lookup) { + Map colorMap = cache.computeIfAbsent(original, k -> new HashMap<>()); + return colorMap.computeIfAbsent(newColor, color -> { + ResourceLocation id = idGetter.apply(original); + String[] parts = id.getPath().split("_"); + + for (int i = 0; i < parts.length; i++) { + int finalI = i; + InkColor matched = SpectrumRegistries.INK_COLOR.stream() + .filter(c -> c.toString().equals(parts[finalI])) + .findFirst() + .orElse(null); + + if (matched != null) { + parts[i] = color.toString(); + String newPath = String.join("_", parts); + ResourceLocation newId = ResourceLocation.fromNamespaceAndPath(id.getNamespace(), newPath); + T newObj = lookup.apply(newId); + return !newObj.equals(original) ? newObj : null; + } } - } - - // cache - if (coloredStates.containsKey(block)) { - Map colorMap = coloredStates.get(block); - colorMap.put(newColor, returnBlock); - } else { - Map colorMap = new HashMap<>(); - colorMap.put(newColor, returnBlock); - coloredStates.put(block, colorMap); - } - - return returnBlock.withPropertiesOf(blockState); + return null; + }); + } + + public static void invalidateCaches() { + COLORED_STATE_CACHE.clear(); + COLORED_ITEM_CACHE.clear(); } // cache for getCursedRepairedBlockVariant() @@ -93,14 +94,14 @@ public static BlockState getCursedBlockColorVariant(Level world, BlockPos blockP }}; //TODO: unused - public static Block getCursedRepairedBlockVariant(Level world, BlockPos blockPos) { + public static Block getRepairedBlockVariant(Level world, BlockPos blockPos) { BlockEntity blockEntity = world.getBlockEntity(blockPos); if (blockEntity != null) { return Blocks.AIR; } BlockState blockState = world.getBlockState(blockPos); - if (blockState.is(SpectrumBlockTags.INK_EFFECT_BLACKLISTED)) { + if (blockState.is(SpectrumBlockTags.COLORING_BLACKLISTED)) { return Blocks.AIR; } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/AutoCraftingMode.java b/src/main/java/de/dafuqs/spectrum/inventories/AutoCraftingMode.java index 00295da7d3..b0ee35f765 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/AutoCraftingMode.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/AutoCraftingMode.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.inventories; -import net.minecraft.resources.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; @@ -76,7 +75,7 @@ public boolean equals(Object obj) { } } - public static void clearCache() { + public static void invalidateCache() { CACHE.clear(); } diff --git a/src/main/java/de/dafuqs/spectrum/items/GuidebookItem.java b/src/main/java/de/dafuqs/spectrum/items/GuidebookItem.java index b3d763dc25..e2ed13fc9a 100644 --- a/src/main/java/de/dafuqs/spectrum/items/GuidebookItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/GuidebookItem.java @@ -39,7 +39,7 @@ public GuidebookItem(Properties settings) { } public static void reprocessAdvancementUnlocks(ServerPlayer serverPlayerEntity) { - if (serverPlayerEntity.getServer() == null || SpectrumCommon.minecraftServer == null) { + if (serverPlayerEntity.getServer() == null) { return; } @@ -57,7 +57,7 @@ public static void reprocessAdvancementUnlocks(ServerPlayer serverPlayerEntity) for (var criterionEntry : advancement.value().criteria().entrySet()) { var conditions = criterionEntry.getValue().triggerInstance(); if (conditions instanceof AdvancementGottenCriterion.Conditions hasAdvancementConditions) { - var advancementCriterionAdvancement = SpectrumCommon.minecraftServer.getAdvancements().get(hasAdvancementConditions.getAdvancementIdentifier()); + var advancementCriterionAdvancement = serverPlayerEntity.getServer().getAdvancements().get(hasAdvancementConditions.getAdvancementIdentifier()); if (advancementCriterionAdvancement != null) { var hasAdvancementCriterionAdvancement = tracker.getOrStartProgress(advancementCriterionAdvancement); if (hasAdvancementCriterionAdvancement.isDone()) { diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java index 6cd6964819..11299744be 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java @@ -151,13 +151,7 @@ private boolean cursedColor(UseOnContext context) { } InkColor inkColor = optionalInkColor.get(); - Optional optionalDyeColor = inkColor.getDyeColor(); - if (optionalDyeColor.isEmpty()) { - return false; - } - DyeColor dyeColor = optionalDyeColor.get(); - - BlockState newBlockState = BlockVariantHelper.getCursedBlockColorVariant(context.getLevel(), context.getClickedPos(), dyeColor); + BlockState newBlockState = VariantHelper.getColoredBlock(context.getLevel(), context.getClickedPos(), inkColor); if (newBlockState.isAir()) { return false; } diff --git a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/HardcorePlayerRevivalRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/HardcorePlayerRevivalRecipe.java index e8221f5c99..4639ca5d72 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/HardcorePlayerRevivalRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/HardcorePlayerRevivalRecipe.java @@ -37,8 +37,8 @@ public RecipeSerializer getSerializer() { public ItemStack assemble(InstanceRecipeInput recipeInput, HolderLookup.Provider drm) { SpiritInstillerBlockEntity spiritInstillerBlockEntity = recipeInput.getInstance(); GameProfile gameProfile = getSkullOwner(recipeInput.getItem(SpiritInstillerRecipe.CENTER_INGREDIENT)); - if (gameProfile != null && SpectrumCommon.minecraftServer != null) { - ServerPlayer revivedPlayer = SpectrumCommon.minecraftServer.getPlayerList().getPlayerByName(gameProfile.getName()); + if (gameProfile != null) { + ServerPlayer revivedPlayer = recipeInput.getInstance().getLevel().getServer().getPlayerList().getPlayerByName(gameProfile.getName()); if (revivedPlayer != null) { HardcoreDeathAttachmentType.clearHardcoreDeath(revivedPlayer); revivedPlayer.setGameMode(revivedPlayer.server.getDefaultGameType()); @@ -64,11 +64,11 @@ public boolean canCraftWithStacks(InstanceRecipeInput BUILDING_STAFFS_BLACKLISTED = spectrum("building_staffs_blacklisted"); public static final TagKey CRYSTAL_APOTHECARY_HARVESTABLE = spectrum("crystal_apothecary_harvestable"); public static final TagKey UNBREAKABLE_STRUCTURE_BLOCKS = spectrum("unbreakable_structure_blocks"); - public static final TagKey INK_EFFECT_BLACKLISTED = spectrum("ink_effect_blacklisted"); // blacklisting form block coloring, repairing, ... + public static final TagKey COLORING_BLACKLISTED = spectrum("coloring_blacklisted"); public static final TagKey SPREADS_TO_BLACKSLAG = spectrum("spreads_to_blackslag"); public static final TagKey OVERGROWN = spectrum("overgrown"); public static final TagKey ASH = spectrum("ash"); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index fbdaf1e398..96375f4ac5 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -464,8 +464,9 @@ private static void onReloadResources(AddReloadListenerEvent event) { event.addListener(new ResourceManagerReloadListener() { @Override public void onResourceManagerReload(ResourceManager resourceManager) { - AutoCraftingMode.clearCache(); - SpectrumCommon.CACHED_ITEM_TAG_MAP.clear(); + AutoCraftingMode.invalidateCache(); + VariantHelper.invalidateCaches(); + FilterConfigurable.invalidateCache(); if (SpectrumCommon.minecraftServer != null) { FirestarterIdolBlock.addBlockSmeltingRecipes(SpectrumCommon.minecraftServer); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemTags.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemTags.java index a45d287858..8f59ff2311 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemTags.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemTags.java @@ -9,36 +9,37 @@ public class SpectrumItemTags { // "c" namespace - public static final TagKey SKULLS = common("skulls"); - public static final TagKey FRUITS = common("foods/fruit"); + public static final TagKey SKULLS = conventional("skulls"); + public static final TagKey FRUITS = conventional("foods/fruit"); // "spectrum" namespace - public static final TagKey FISHING_RODS = of("fishing_rods"); - public static final TagKey COLORED_PLANKS = of("colored_planks"); - public static final TagKey GEMSTONE_SHARDS = of("gemstone_shards"); - public static final TagKey COMING_SOON_TOOLTIP = of("coming_soon_tooltip"); - public static final TagKey ENCHANTABLE_BOOKS = of("enchantable_books"); - public static final TagKey MEMORY_BONDING_AGENTS_CONCEALABLE = of("memory_bonding_agents_concealable"); - public static final TagKey NO_CINDERHEARTH_DOUBLING = of("no_cinderhearth_doubling"); - public static final TagKey SHOOTING_STARS = of("shooting_stars"); - public static final TagKey GLASS_ARROWS = of("glass_arrows"); - public static final TagKey KINDLING_FOOD = of("kindling_food"); - public static final TagKey REQUIRES_OMNI_ACCELERATOR_PVP_ENABLED = of("requires_omni_accelerator_pvp_enabled"); - public static final TagKey EMISSIVE = of("emissive"); - public static final TagKey PASTEL_NODE_UPGRADES = of("pastel_node_upgrades"); - public static final TagKey TAG_FILTERING_ITEMS = of("tag_filtering_items"); - public static final TagKey PLAYER_ATTRIBUTED_PLACEMENT = of("player_attributed_placement"); - public static final TagKey NATURES_STAFF_CONSUMABLE = of("consumable/natures_staff"); - public static final TagKey RADIANCE_STAFF_CONSUMABLE = of("consumable/radiance_staff"); - public static final TagKey GLOW_VISION_GOGGLES_CONSUMABLE = of("consumable/glow_vision_goggles"); - public static final TagKey TRINKETS = of("trinkets"); - public static final TagKey STORES_ITEMS_ADDED_TO_INVENTORY = of("stores_items_added_to_inventory"); // TODO: this might be fun as an item component / enchantment actually + public static final TagKey FISHING_RODS = spectrum("fishing_rods"); + public static final TagKey COLORED_PLANKS = spectrum("colored_planks"); + public static final TagKey GEMSTONE_SHARDS = spectrum("gemstone_shards"); + public static final TagKey COMING_SOON_TOOLTIP = spectrum("coming_soon_tooltip"); + public static final TagKey ENCHANTABLE_BOOKS = spectrum("enchantable_books"); + public static final TagKey MEMORY_BONDING_AGENTS_CONCEALABLE = spectrum("memory_bonding_agents_concealable"); + public static final TagKey NO_CINDERHEARTH_DOUBLING = spectrum("no_cinderhearth_doubling"); + public static final TagKey SHOOTING_STARS = spectrum("shooting_stars"); + public static final TagKey GLASS_ARROWS = spectrum("glass_arrows"); + public static final TagKey KINDLING_FOOD = spectrum("kindling_food"); + public static final TagKey REQUIRES_OMNI_ACCELERATOR_PVP_ENABLED = spectrum("requires_omni_accelerator_pvp_enabled"); + public static final TagKey EMISSIVE = spectrum("emissive"); + public static final TagKey PASTEL_NODE_UPGRADES = spectrum("pastel_node_upgrades"); + public static final TagKey TAG_FILTERING_ITEMS = spectrum("tag_filtering_items"); + public static final TagKey PLAYER_ATTRIBUTED_PLACEMENT = spectrum("player_attributed_placement"); + public static final TagKey NATURES_STAFF_CONSUMABLE = spectrum("consumable/natures_staff"); + public static final TagKey RADIANCE_STAFF_CONSUMABLE = spectrum("consumable/radiance_staff"); + public static final TagKey GLOW_VISION_GOGGLES_CONSUMABLE = spectrum("consumable/glow_vision_goggles"); + public static final TagKey TRINKETS = spectrum("trinkets"); + public static final TagKey STORES_ITEMS_ADDED_TO_INVENTORY = spectrum("stores_items_added_to_inventory"); // TODO: this might be fun as an item component / enchantment actually + public static final TagKey COLORING_BLACKLISTED = spectrum("coloring_blacklisted"); - private static TagKey of(String id) { + private static TagKey spectrum(String id) { return TagKey.create(Registries.ITEM, SpectrumCommon.locate(id)); } - private static TagKey common(String id) { + private static TagKey conventional(String id) { return TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath("c", id)); } diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index f7489d936c..770d4f8ff5 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -6037,5 +6037,7 @@ "book.spectrum.guidebook.mysterious_locket.page4.title": "The Locket's Contents", "book.spectrum.guidebook.mysterious_locket.page4.text": "There also was a little note inside... who could it have belonged to?", "book.spectrum.guidebook.mysterious_locket.page5.text": "Now that I understand the Dreiton language, it is easy for me to decipher the inscription on the back:\\\n\\\n*Don't be silly, Asteras – the moon cannot shine, it can only reflect the light of the sun.*", - "book.spectrum.guidebook.mysterious_locket.page5.title": "The unidentified Note" + "book.spectrum.guidebook.mysterious_locket.page5.title": "The unidentified Note", + "block.spectrum.painting_station": "Painting Station", + "block.spectrum.painting_station.tooltip": "Recolors items with color variants and fills Ink equipment" } diff --git a/src/main/resources/data/spectrum/tags/block/ink_effect_blacklisted.json b/src/main/resources/data/spectrum/tags/block/coloring_blacklisted.json similarity index 100% rename from src/main/resources/data/spectrum/tags/block/ink_effect_blacklisted.json rename to src/main/resources/data/spectrum/tags/block/coloring_blacklisted.json diff --git a/src/main/resources/data/spectrum/tags/item/coloring_blacklisted.json b/src/main/resources/data/spectrum/tags/item/coloring_blacklisted.json new file mode 100644 index 0000000000..f72d209df7 --- /dev/null +++ b/src/main/resources/data/spectrum/tags/item/coloring_blacklisted.json @@ -0,0 +1,3 @@ +{ + "values": [] +} \ No newline at end of file From 3605ccc009c0c44aab818511d4a51cea303fb6f1 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 2 May 2026 14:28:39 +0200 Subject: [PATCH 025/477] merge from master --- .../spectrum/blocks/energy/ColorPickerBlockEntity.java | 8 ++++---- .../blocks/energy/PaintingStationBlockEntity.java | 2 +- .../pastel_network/payloads/ItemPastelPayloadType.java | 3 +++ 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java index 17b23ee498..b52886bb7d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java @@ -87,8 +87,8 @@ public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByte ColorPickerScreenHandler.ScreenOpeningData.PACKET_CODEC.encode(buffer, new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); } - protected boolean tryConvertPigmentToEnergy(ServerLevel world) { - InkConvertingRecipe recipe = getInkConvertingRecipe(world); + protected boolean tryConvertPigmentToEnergy(ServerLevel level) { + InkConvertingRecipe recipe = getInkConvertingRecipe(level); if (recipe != null) { InkColor inkColor = recipe.getInkColor(); long amount = recipe.getInkAmount(); @@ -97,9 +97,9 @@ protected boolean tryConvertPigmentToEnergy(ServerLevel world) { this.inkStorage.addEnergy(inkColor, amount); if (SpectrumConfig.CONFIG.BlockSoundVolume.get() > 0) { - world.playSound(null, worldPosition, SpectrumSoundEvents.COLOR_PICKER_PROCESSING, SoundSource.BLOCKS, SpectrumConfig.CONFIG.BlockSoundVolume.get().floatValue() / 3F, 1.0F); + level.playSound(null, worldPosition, SpectrumSoundEvents.COLOR_PICKER_PROCESSING, SoundSource.BLOCKS, SpectrumConfig.CONFIG.BlockSoundVolume.get().floatValue() / 3F, 1.0F); } - PlayParticleWithRandomOffsetAndVelocityPayload.playParticleWithRandomOffsetAndVelocity(world, + PlayParticleWithRandomOffsetAndVelocityPayload.playParticleWithRandomOffsetAndVelocity(level, new Vec3(worldPosition.getX() + 0.5, worldPosition.getY() + 0.7, worldPosition.getZ() + 0.5), ColoredFluidRisingParticleEffect.of(inkColor.getColorInt()), 5, diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java index 521124e17c..344470bea2 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java @@ -98,7 +98,7 @@ public boolean tryColorStack(InkColor inkColor) { inkStorage.addEnergy(inkColor, -ITEM_COLORING_COST); if (SpectrumConfig.CONFIG.BlockSoundVolume.get() > 0) { - level.playSound(null, worldPosition, SpectrumSoundEvents.COLOR_PICKER_PROCESSING, SoundSource.BLOCKS, SpectrumConfig.CONFIG.BlockSoundVolume.get() / 3, 1.0F); + level.playSound(null, worldPosition, SpectrumSoundEvents.COLOR_PICKER_PROCESSING, SoundSource.BLOCKS, SpectrumConfig.CONFIG.BlockSoundVolume.get().floatValue() / 3F, 1.0F); PlayParticleWithRandomOffsetAndVelocityPayload.playParticleWithRandomOffsetAndVelocity((ServerLevel) level, new Vec3(worldPosition.getX() + 0.5, worldPosition.getY() + 0.7, worldPosition.getZ() + 0.5), diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java index e9ce3cec3a..5418bc8693 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java @@ -95,6 +95,9 @@ private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEn ItemStack proposedStack = stack.copyWithCount((int) proposedAmount); int simulatedAmount = (int) (proposedAmount - ItemHandlerHelper.insertItemStacked(destinationStorage, proposedStack, true).getCount()); + if(simulatedAmount == 0) { + continue; + } Tuple> matchingStacks = InventoryHelper.getStackCountInInventory(proposedStack, sourceStorage, simulatedAmount); if (matchingStacks.getA() == 0) From 0604c7139cd96ffab948deb0725edd007ac58fb1 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 2 May 2026 16:45:13 +0200 Subject: [PATCH 026/477] pastel network formatting --- .../network/ServerPastelNetwork.java | 15 +++++---------- .../network/ServerPastelNetworkManager.java | 2 +- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java index 2770298c58..94800d8167 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java @@ -89,16 +89,11 @@ public void updateNodePriority(PastelNodeBlockEntity node, NodePriority oldPrior @Override public String getNodeDebugText() { return super.getNodeDebugText() + - " - Prov: " + - getLoadedNodes(PastelNodeType.PROVIDER).size() + - " - Send: " + - getLoadedNodes(PastelNodeType.SENDER).size() + - " - Gath: " + - getLoadedNodes(PastelNodeType.GATHER).size() + - " - Stor: " + - getLoadedNodes(PastelNodeType.STORAGE).size() + - " - Conn: " + - getLoadedNodes(PastelNodeType.CONNECTION).size(); + " - Prov: " + getLoadedNodes(PastelNodeType.PROVIDER).size() + + " - Send: " + getLoadedNodes(PastelNodeType.SENDER).size() + + " - Gath: " + getLoadedNodes(PastelNodeType.GATHER).size() + + " - Stor: " + getLoadedNodes(PastelNodeType.STORAGE).size() + + " - Conn: " + getLoadedNodes(PastelNodeType.CONNECTION).size(); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java index 5ec34fa4b1..2988199a62 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java @@ -154,7 +154,7 @@ public void removeNode(PastelNodeBlockEntity node, NodeRemovalReason reason) { if (optional.isPresent()) { ServerPastelNetwork network = optional.get(); - if (network.size() == 1) { + if (network.size() <= 1) { this.removeNetwork(network.getUUID()); } else { network.removeNode(node, reason); From 28aae9a6cb6297662237ee36e95923b9425ac530 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 2 May 2026 16:45:44 +0200 Subject: [PATCH 027/477] tinting station --- .../energy/BaseInkTransferBlockEntity.java | 2 +- .../blocks/energy/ColorPickerBlockEntity.java | 4 ++-- ...ionBlock.java => TintingStationBlock.java} | 20 +++++++++---------- ...ty.java => TintingStationBlockEntity.java} | 14 ++++++------- .../registries/SpectrumBlockEntities.java | 2 +- .../spectrum/registries/SpectrumBlocks.java | 2 +- .../resources/assets/spectrum/lang/en_us.json | 5 +++-- 7 files changed, 25 insertions(+), 24 deletions(-) rename src/main/java/de/dafuqs/spectrum/blocks/energy/{PaintingStationBlock.java => TintingStationBlock.java} (63%) rename src/main/java/de/dafuqs/spectrum/blocks/energy/{PaintingStationBlockEntity.java => TintingStationBlockEntity.java} (82%) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java index 1c6988df85..372d5ba147 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java @@ -125,8 +125,8 @@ public ItemStack removeItemNoUpdate(int slot) { @Override public void setItem(int slot, ItemStack stack) { + super.setItem(slot, stack); setChanged(); - updateInClientWorld(); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java index b52886bb7d..d58f9128a3 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java @@ -79,12 +79,12 @@ protected Component getDefaultName() { @Override protected AbstractContainerMenu createMenu(int syncId, Inventory playerInventory) { - return new ColorPickerScreenHandler(syncId, playerInventory, playerInventory.player.level().getBlockEntity(new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor).pos(), SpectrumBlockEntities.COLOR_PICKER.get()).orElseThrow(), new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor).inkColor()); + return new ColorPickerScreenHandler(syncId, playerInventory, this, new InkTransferScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor).inkColor()); } @Override public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { - ColorPickerScreenHandler.ScreenOpeningData.PACKET_CODEC.encode(buffer, new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); + InkTransferScreenHandler.ScreenOpeningData.PACKET_CODEC.encode(buffer, new InkTransferScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); } protected boolean tryConvertPigmentToEnergy(ServerLevel level) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/TintingStationBlock.java similarity index 63% rename from src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/energy/TintingStationBlock.java index 70c88feec9..f7ffce14ea 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/TintingStationBlock.java @@ -15,42 +15,42 @@ import java.util.*; -public class PaintingStationBlock extends BaseInkTransferBlock { +public class TintingStationBlock extends BaseInkTransferBlock { - public static final MapCodec CODEC = simpleCodec(PaintingStationBlock::new); + public static final MapCodec CODEC = simpleCodec(TintingStationBlock::new); - public PaintingStationBlock(Properties settings) { + public TintingStationBlock(Properties settings) { super(settings); } @Override - public MapCodec codec() { + public MapCodec codec() { return CODEC; } @Override public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipFlag type) { super.appendHoverText(stack, context, tooltip, type); - tooltip.add(Component.translatable("block.spectrum.painting_station.tooltip").withStyle(ChatFormatting.GRAY)); + tooltip.add(Component.translatable("block.spectrum.tinting_station.tooltip").withStyle(ChatFormatting.GRAY)); } @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new PaintingStationBlockEntity(pos, state); + return new TintingStationBlockEntity(pos, state); } @Nullable @Override public BlockEntityTicker getTicker(Level world, BlockState state, BlockEntityType type) { - return world.isClientSide ? null : Support.checkType(type, SpectrumBlockEntities.PAINTING_STATION.get(), PaintingStationBlockEntity::serverTick); + return world.isClientSide ? null : Support.checkType(type, SpectrumBlockEntities.TINTING_STATION.get(), TintingStationBlockEntity::serverTick); } @Override protected void openScreen(Level world, BlockPos pos, Player player) { BlockEntity blockEntity = world.getBlockEntity(pos); - if (blockEntity instanceof PaintingStationBlockEntity paintingStationBlockEntity) { - paintingStationBlockEntity.setOwner(player); - player.openMenu(paintingStationBlockEntity); + if (blockEntity instanceof TintingStationBlockEntity tintingStationBlockEntity) { + tintingStationBlockEntity.setOwner(player); + player.openMenu(tintingStationBlockEntity); } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/TintingStationBlockEntity.java similarity index 82% rename from src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/energy/TintingStationBlockEntity.java index 344470bea2..fae54af823 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/TintingStationBlockEntity.java @@ -26,7 +26,7 @@ import java.util.*; -public class PaintingStationBlockEntity extends BaseInkTransferBlockEntity implements MenuProvider { +public class TintingStationBlockEntity extends BaseInkTransferBlockEntity implements MenuProvider { public static final int INPUT_SLOT_ID = 0; public static final int OUTPUT_SLOT_ID = 1; @@ -35,12 +35,12 @@ public class PaintingStationBlockEntity extends BaseInkTransferBlockEntity, BlockEntityType> CRYSTAL_APOTHECARY = register("crystal_apothecary", CrystalApothecaryBlockEntity::new, SpectrumBlocks.CRYSTAL_APOTHECARY); public static DeferredHolder, BlockEntityType> COLOR_PICKER = register("color_picker", ColorPickerBlockEntity::new, SpectrumBlocks.COLOR_PICKER); - public static DeferredHolder, BlockEntityType> PAINTING_STATION = register("painting_station", PaintingStationBlockEntity::new, SpectrumBlocks.PAINTING_STATION); + public static DeferredHolder, BlockEntityType> TINTING_STATION = register("tinting_station", TintingStationBlockEntity::new, SpectrumBlocks.TINTING_STATION); public static DeferredHolder, BlockEntityType> COMPACTING_CHEST = register("compacting_chest", CompactingChestBlockEntity::new, SpectrumBlocks.COMPACTING_CHEST); public static DeferredHolder, BlockEntityType> FABRICATION_CHEST = register("fabrication_chest", FabricationChestBlockEntity::new, SpectrumBlocks.FABRICATION_CHEST); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index f2d2c4efcf..872e2e0f92 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -140,7 +140,7 @@ private static BlockBehaviour.Properties craftingBlock(MapColor mapColor, SoundT public static final DeferredBlock CINDERHEARTH = register(defaultNorthHorizontalFacing(blockWithItem("cinderhearth", () -> new CinderhearthBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of().fireResistant(), InkColors.ORANGE), ModelLocationUtils::getModelLocation)); public static final DeferredBlock COLOR_PICKER = register(defaultWestHorizontalFacing(blockWithItem("color_picker", () -> new ColorPickerBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); - public static final DeferredBlock PAINTING_STATION = register(defaultWestHorizontalFacing(blockWithItem("painting_station", () -> new PaintingStationBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock TINTING_STATION = register(defaultWestHorizontalFacing(blockWithItem("tinting_station", () -> new TintingStationBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); public static final DeferredBlock CRYSTAL_APOTHECARY = register(singletonWithSoup(blockWithItem("crystal_apothecary", () -> new CrystalApothecaryBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); private static BlockBehaviour.Properties gemstone(MapColor mapColor, SoundType blockSoundGroup, int luminance) { diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 770d4f8ff5..a576c32f9c 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -6038,6 +6038,7 @@ "book.spectrum.guidebook.mysterious_locket.page4.text": "There also was a little note inside... who could it have belonged to?", "book.spectrum.guidebook.mysterious_locket.page5.text": "Now that I understand the Dreiton language, it is easy for me to decipher the inscription on the back:\\\n\\\n*Don't be silly, Asteras – the moon cannot shine, it can only reflect the light of the sun.*", "book.spectrum.guidebook.mysterious_locket.page5.title": "The unidentified Note", - "block.spectrum.painting_station": "Painting Station", - "block.spectrum.painting_station.tooltip": "Recolors items with color variants and fills Ink equipment" + + "block.spectrum.tinting_station": "Tinting Station", + "block.spectrum.tinting_station.tooltip": "Fills Ink equipment and recolors items that have color variants" } From aa2a5c77fa9f51cc434a913b669e56255bee0cb5 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 2 May 2026 16:46:06 +0200 Subject: [PATCH 028/477] screens. Make ink widgets actual widgets --- .../inventories/CinderhearthScreen.java | 9 +- .../inventories/ColorPickerScreen.java | 69 ++-------- .../inventories/ColorPickerScreenHandler.java | 119 +--------------- .../inventories/InkTransferScreen.java | 98 +++++++++++++ .../inventories/InkTransferScreenHandler.java | 130 ++++++++++++++++++ .../inventories/SpectrumScreenHandlerIDs.java | 1 + .../SpectrumScreenHandlerTypes.java | 2 + .../inventories/TintingStationScreen.java | 49 +++++++ .../TintingStationScreenHandler.java | 31 +++++ .../slots/ColorPickerInputSlot.java | 3 +- .../widgets/ColorSelectionWidget.java | 25 ++-- .../inventories/widgets/InkGaugeWidget.java | 101 +++++--------- .../inventories/widgets/InkMeterWidget.java | 61 ++------ .../widgets/StackedInkMeterWidget.java | 86 ++++-------- 14 files changed, 420 insertions(+), 364 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java create mode 100644 src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreenHandler.java create mode 100644 src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java create mode 100644 src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java index 5878dc09ed..c504b9cf2b 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java @@ -29,7 +29,8 @@ protected void init() { int startX = (this.width - this.imageWidth) / 2; int startY = (this.height - this.imageHeight) / 2; - this.inkMeterWidget = new InkMeterWidget(startX + 140, startY + 34, 40, this, this.menu.getBlockEntity()); + this.inkMeterWidget = new InkMeterWidget(startX + 140, startY + 34, 40, this.menu.getBlockEntity(), CinderhearthBlockEntity.USED_INK_COLORS); + addWidget(inkMeterWidget); } @Override @@ -40,18 +41,18 @@ protected void renderLabels(GuiGraphics drawContext, int mouseX, int mouseY) { Component title = this.title; drawContext.drawString(this.font, title, titleX, titleY, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); - drawContext.drawString(this.font, this.playerInventoryTitle, ColorPickerScreenHandler.PLAYER_INVENTORY_START_X, ColorPickerScreenHandler.PLAYER_INVENTORY_START_Y - 10, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); + drawContext.drawString(this.font, this.playerInventoryTitle, InkTransferScreenHandler.PLAYER_INVENTORY_START_X, InkTransferScreenHandler.PLAYER_INVENTORY_START_Y - 10, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); } @Override - protected void renderBg(GuiGraphics drawContext, float delta, int mouseX, int mouseY) { + protected void renderBg(GuiGraphics drawContext, float partialTick, int mouseX, int mouseY) { int startX = (this.width - this.imageWidth) / 2; int startY = (this.height - this.imageHeight) / 2; // main background drawContext.blit(BACKGROUND, startX, startY, 0, 0, imageWidth, imageHeight); - this.inkMeterWidget.draw(drawContext, CinderhearthBlockEntity.USED_INK_COLORS); + // this.inkMeterWidget.render(drawContext, mouseX, mouseY, partialTick); int craftingTime = this.menu.getCraftingTime(); int craftingTimeTotal = this.menu.getCraftingTimeTotal(); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java index 25b4d9ee75..9ef21170c1 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java @@ -1,7 +1,9 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.energy.*; import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.energy.storage.*; import de.dafuqs.spectrum.blocks.energy.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.inventories.widgets.*; @@ -17,18 +19,18 @@ import java.util.*; import java.util.function.*; -public class ColorPickerScreen extends AbstractContainerScreen implements Consumer>> { +public class ColorPickerScreen extends InkTransferScreen { protected final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); - protected ColorSelectionWidget colorSelectionWidget; - protected InkGaugeWidget inkGaugeWidget; + protected StackedInkMeterWidget inkMeterWidget; - public ColorPickerScreen(ColorPickerScreenHandler handler, Inventory playerInventory, Component title) { + public ColorPickerScreen(InkTransferScreenHandler handler, Inventory playerInventory, Component title) { super(handler, playerInventory, title); this.imageHeight = 166; } + @Override protected void init() { super.init(); @@ -36,67 +38,22 @@ protected void init() { int startX = (this.width - this.imageWidth) / 2; int startY = (this.height - this.imageHeight) / 2; - this.colorSelectionWidget = new ColorSelectionWidget(startX + 113, startY + 55, startX + 139, startY + 25, this, this.menu.getBlockEntity()); - this.inkGaugeWidget = new InkGaugeWidget(startX + 54, startY + 21, 42, 42, this, this.menu.getBlockEntity()); - this.inkMeterWidget = new StackedInkMeterWidget(startX + 100, startY + 21, 4, 40, this, this.menu.getBlockEntity()); - - this.colorSelectionWidget.setChangedListener(this); - - addWidget(this.colorSelectionWidget); + this.inkGaugeWidget = new InkGaugeWidget(startX + 54, startY + 21, 42, 42, this.menu.getBlockEntity()); + addWidget(this.inkGaugeWidget); + this.inkMeterWidget = new StackedInkMeterWidget(startX + 100, startY + 21, 4, 40, this.menu.getBlockEntity()); + addWidget(inkMeterWidget); } @Override - protected void renderLabels(GuiGraphics drawContext, int mouseX, int mouseY) { - // draw "title" and "inventory" texts - int titleX = (imageWidth - font.width(title)) / 2; - int titleY = 6; - Component title = this.title; - - drawContext.drawString(this.font, title.getVisualOrderText(), titleX, titleY, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); - drawContext.drawString(this.font, this.playerInventoryTitle, ColorPickerScreenHandler.PLAYER_INVENTORY_START_X, ColorPickerScreenHandler.PLAYER_INVENTORY_START_Y - 10, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); - } - - @Override - protected void renderBg(GuiGraphics drawContext, float delta, int mouseX, int mouseY) { + protected void renderBg(GuiGraphics drawContext, float partialTick, int mouseX, int mouseY) { int startX = (this.width - this.imageWidth) / 2; int startY = (this.height - this.imageHeight) / 2; // main background drawContext.blit(BACKGROUND, startX, startY, 0, 0, imageWidth, imageHeight); + // this.inkMeterWidget.render(drawContext, mouseX, mouseY, partialTick); - this.inkGaugeWidget.draw(drawContext); - this.inkMeterWidget.draw(drawContext); - this.colorSelectionWidget.render(drawContext, mouseX, mouseY, delta); - - // gauge blanket - drawContext.blit(BACKGROUND, startX + 52, startY + 18, 176, 0, 46, 46); - } - - @Override - public void render(GuiGraphics drawContext, int mouseX, int mouseY, float delta) { - renderBackground(drawContext, mouseX, mouseY, delta); - super.render(drawContext, mouseX, mouseY, delta); - renderTooltip(drawContext, mouseX, mouseY); - } - - @Override - protected void renderTooltip(GuiGraphics drawContext, int x, int y) { - if (this.inkGaugeWidget.isMouseOver(x, y)) { - this.inkGaugeWidget.drawMouseoverTooltip(drawContext, x, y); - } else if (this.inkMeterWidget.isMouseOver(x, y)) { - this.inkMeterWidget.drawMouseoverTooltip(drawContext, x, y); - } else if (this.colorSelectionWidget.isMouseOver(x, y)) { - this.colorSelectionWidget.drawMouseoverTooltip(drawContext, x, y); - } else { - super.renderTooltip(drawContext, x, y); - } - } - - @Override - public void accept(Optional> inkColor) { - ColorPickerBlockEntity colorPicker = this.menu.getBlockEntity(); - colorPicker.setSelectedColor(inkColor); - PacketDistributor.sendToServer(new InkColorSelectedC2SPayload(inkColor)); + super.renderBg(drawContext, partialTick, mouseX, mouseY); } } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java index b044557c57..8a439a0223 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java @@ -1,135 +1,30 @@ package de.dafuqs.spectrum.inventories; -import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.blocks.energy.*; import de.dafuqs.spectrum.inventories.slots.*; -import de.dafuqs.spectrum.networking.s2c_payloads.*; -import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.network.*; -import net.minecraft.network.codec.*; -import net.minecraft.server.level.*; import net.minecraft.world.entity.player.*; -import net.minecraft.world.inventory.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.*; import java.util.*; -public class ColorPickerScreenHandler extends AbstractContainerMenu implements InkColorSelectedPacketReceiver { - - public record ScreenOpeningData(BlockPos pos, Optional> inkColor) { - public static final StreamCodec PACKET_CODEC = StreamCodec.composite( - BlockPos.STREAM_CODEC, ScreenOpeningData::pos, - ByteBufCodecs.optional(ByteBufCodecs.holderRegistry(SpectrumRegistryKeys.INK_COLOR)), ScreenOpeningData::inkColor, - ScreenOpeningData::new - ); - } - - public static final int PLAYER_INVENTORY_START_X = 8; - public static final int PLAYER_INVENTORY_START_Y = 84; - - protected final Level world; - public final ServerPlayer player; - protected ColorPickerBlockEntity blockEntity; +public class ColorPickerScreenHandler extends InkTransferScreenHandler { // clientside public ColorPickerScreenHandler(int syncId, Inventory playerInventory, RegistryFriendlyByteBuf buf) { - this(syncId, playerInventory, ScreenOpeningData.PACKET_CODEC.decode(buf)); - } - - private ColorPickerScreenHandler(int syncId, Inventory playerInventory, ScreenOpeningData screenOpeningData) { - this(syncId, playerInventory, playerInventory.player.level().getBlockEntity(screenOpeningData.pos(), SpectrumBlockEntities.COLOR_PICKER.get()).orElseThrow(), screenOpeningData.inkColor()); + super(SpectrumScreenHandlerTypes.COLOR_PICKER, syncId, playerInventory, ScreenOpeningData.PACKET_CODEC.decode(buf)); } // serverside - public ColorPickerScreenHandler(int syncId, Inventory playerInventory, ColorPickerBlockEntity blockEntity, Optional> selectedColor) { - super(SpectrumScreenHandlerTypes.COLOR_PICKER, syncId); - - this.player = playerInventory.player instanceof ServerPlayer serverPlayerEntity ? serverPlayerEntity : null; - this.world = playerInventory.player.level(); - this.blockEntity = blockEntity; - - this.blockEntity.setSelectedColor(selectedColor); - - checkContainerSize(blockEntity, ColorPickerBlockEntity.INVENTORY_SIZE); - blockEntity.startOpen(playerInventory.player); - - // color picker slots - this.addSlot(new ColorPickerInputSlot(blockEntity, 0, 26, 33)); - this.addSlot(new InkStorageSlot(blockEntity, 1, 133, 33)); - - // player inventory - for (int j = 0; j < 3; ++j) { - for (int k = 0; k < 9; ++k) { - this.addSlot(new Slot(playerInventory, k + j * 9 + 9, PLAYER_INVENTORY_START_X + k * 18, PLAYER_INVENTORY_START_Y + j * 18)); - } - } - - // player hotbar - for (int j = 0; j < 9; ++j) { - this.addSlot(new Slot(playerInventory, j, PLAYER_INVENTORY_START_X + j * 18, PLAYER_INVENTORY_START_Y + 58)); - } - - if (this.player != null) { - UpdateBlockEntityInkPayload.updateBlockEntityInk(blockEntity.getBlockPos(), this.blockEntity.getEnergyStorage(), player); - } - } - - @Override - public ColorPickerBlockEntity getBlockEntity() { - return this.blockEntity; + public ColorPickerScreenHandler(int syncId, Inventory playerInventory, BaseInkTransferBlockEntity blockEntity, Optional> selectedColor) { + super(SpectrumScreenHandlerTypes.COLOR_PICKER, syncId, playerInventory, blockEntity, selectedColor); } @Override - public boolean stillValid(Player player) { - return this.blockEntity.stillValid(player); - } - - @Override - public void removed(Player player) { - super.removed(player); - this.blockEntity.stopOpen(player); - } - - @Override - public ItemStack quickMoveStack(Player player, int index) { - ItemStack itemStack = ItemStack.EMPTY; - Slot slot = this.slots.get(index); - if (slot.hasItem()) { - ItemStack itemStack2 = slot.getItem(); - itemStack = itemStack2.copy(); - if (index < ColorPickerBlockEntity.INVENTORY_SIZE) { - if (!this.moveItemStackTo(itemStack2, ColorPickerBlockEntity.INVENTORY_SIZE, this.slots.size(), true)) { - return ItemStack.EMPTY; - } - } else if (!this.moveItemStackTo(itemStack2, 0, ColorPickerBlockEntity.INVENTORY_SIZE, false)) { - return ItemStack.EMPTY; - } - - if (itemStack2.isEmpty()) { - slot.setByPlayer(ItemStack.EMPTY); - } else { - slot.setChanged(); - } - } - - return itemStack; - } - - @Override - public void onInkColorSelectedPacket(Optional> inkColor) { - this.blockEntity.setSelectedColor(inkColor); - } - - @Override - public void broadcastChanges() { - super.broadcastChanges(); - - if (this.player != null && this.blockEntity.getInkDirty()) { - UpdateBlockEntityInkPayload.updateBlockEntityInk(blockEntity.getBlockPos(), blockEntity.getEnergyStorage(), player); - } + public void addBlockEntitySlots() { + this.addSlot(new ColorPickerInputSlot(blockEntity, 0, 26, 33)); + this.addSlot(new InkStorageSlot(blockEntity, 1, 133, 33)); } } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java new file mode 100644 index 0000000000..61b3b0b2ee --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java @@ -0,0 +1,98 @@ +package de.dafuqs.spectrum.inventories; + +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.blocks.energy.*; +import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.inventories.widgets.*; +import de.dafuqs.spectrum.networking.c2s_payloads.*; +import net.minecraft.client.gui.*; +import net.minecraft.client.gui.components.*; +import net.minecraft.client.gui.screens.inventory.*; +import net.minecraft.core.*; +import net.minecraft.network.chat.*; +import net.minecraft.resources.*; +import net.minecraft.world.entity.player.*; +import net.neoforged.neoforge.network.*; + +import java.util.*; +import java.util.function.*; + +public class InkTransferScreen extends AbstractContainerScreen implements Consumer>> { + + protected final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); + + protected ColorSelectionWidget colorSelectionWidget; + protected AbstractWidget inkMeterWidget; + protected InkGaugeWidget inkGaugeWidget; + + public InkTransferScreen(InkTransferScreenHandler handler, Inventory playerInventory, Component title) { + super(handler, playerInventory, title); + this.imageHeight = 166; + } + + @Override + protected void init() { + super.init(); + + int startX = (this.width - this.imageWidth) / 2; + int startY = (this.height - this.imageHeight) / 2; + + this.colorSelectionWidget = new ColorSelectionWidget(startX + 113, startY + 55, startX + 139, startY + 25, this.menu.getBlockEntity()); + this.colorSelectionWidget.setChangedListener(this); + addWidget(this.colorSelectionWidget); + } + + @Override + protected void renderLabels(GuiGraphics drawContext, int mouseX, int mouseY) { + int titleX = (imageWidth - font.width(title)) / 2; + int titleY = 6; + Component title = this.title; + + drawContext.drawString(this.font, title.getVisualOrderText(), titleX, titleY, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); + drawContext.drawString(this.font, this.playerInventoryTitle, InkTransferScreenHandler.PLAYER_INVENTORY_START_X, InkTransferScreenHandler.PLAYER_INVENTORY_START_Y - 10, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); + } + + @Override + protected void renderBg(GuiGraphics drawContext, float delta, int mouseX, int mouseY) { + int startX = (this.width - this.imageWidth) / 2; + int startY = (this.height - this.imageHeight) / 2; + + // main background + drawContext.blit(BACKGROUND, startX, startY, 0, 0, imageWidth, imageHeight); + + this.inkGaugeWidget.render(drawContext, mouseX, mouseY, delta); + this.colorSelectionWidget.render(drawContext, mouseX, mouseY, delta); + + // gauge blanket + drawContext.blit(BACKGROUND, startX + 52, startY + 18, 176, 0, 46, 46); + } + + @Override + public void render(GuiGraphics drawContext, int mouseX, int mouseY, float delta) { + renderBackground(drawContext, mouseX, mouseY, delta); + super.render(drawContext, mouseX, mouseY, delta); + renderTooltip(drawContext, mouseX, mouseY); + } + + @Override + protected void renderTooltip(GuiGraphics drawContext, int x, int y) { + if (this.inkGaugeWidget.isHoveredOrFocused()) { + this.inkGaugeWidget.drawMouseoverTooltip(drawContext, x, y); + //} else if (this.inkMeterWidget.isHoveredOrFocused()) { // TODO + // this.inkMeterWidget.dra(drawContext, x, y); + } else if (this.colorSelectionWidget.isHoveredOrFocused()) { + this.colorSelectionWidget.drawMouseoverTooltip(drawContext, x, y); + } else { + super.renderTooltip(drawContext, x, y); + } + } + + @Override + public void accept(Optional> inkColor) { + BaseInkTransferBlockEntity colorPicker = this.menu.getBlockEntity(); + colorPicker.setSelectedColor(inkColor); + PacketDistributor.sendToServer(new InkColorSelectedC2SPayload(inkColor)); + } + +} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreenHandler.java new file mode 100644 index 0000000000..d2979098cf --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreenHandler.java @@ -0,0 +1,130 @@ +package de.dafuqs.spectrum.inventories; + +import de.dafuqs.spectrum.api.block.*; +import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.blocks.energy.*; +import de.dafuqs.spectrum.networking.s2c_payloads.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.core.*; +import net.minecraft.network.*; +import net.minecraft.network.codec.*; +import net.minecraft.server.level.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.inventory.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; + +import javax.annotation.*; +import java.util.*; + +public abstract class InkTransferScreenHandler extends AbstractContainerMenu implements InkColorSelectedPacketReceiver { + + public record ScreenOpeningData(BlockPos pos, Optional> inkColor) { + public static final StreamCodec PACKET_CODEC = StreamCodec.composite( + BlockPos.STREAM_CODEC, ScreenOpeningData::pos, + ByteBufCodecs.optional(ByteBufCodecs.holderRegistry(SpectrumRegistryKeys.INK_COLOR)), ScreenOpeningData::inkColor, + ScreenOpeningData::new + ); + } + + public static final int PLAYER_INVENTORY_START_X = 8; + public static final int PLAYER_INVENTORY_START_Y = 84; + + protected final Level world; + public final ServerPlayer serverPlayer; + protected BaseInkTransferBlockEntity blockEntity; + + // clientside + protected InkTransferScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, ScreenOpeningData screenOpeningData) { + this(menuType, syncId, playerInventory, (BaseInkTransferBlockEntity) playerInventory.player.level().getBlockEntity(screenOpeningData.pos()), screenOpeningData.inkColor()); + } + + // serverside + protected InkTransferScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, BaseInkTransferBlockEntity blockEntity, Optional> selectedColor) { + super(menuType, syncId); + + this.serverPlayer = playerInventory.player instanceof ServerPlayer serverPlayerEntity ? serverPlayerEntity : null; + this.world = playerInventory.player.level(); + this.blockEntity = blockEntity; + this.blockEntity.setSelectedColor(selectedColor); + + checkContainerSize(blockEntity, ColorPickerBlockEntity.INVENTORY_SIZE); + blockEntity.startOpen(playerInventory.player); + + addBlockEntitySlots(); + + // player inventory + for (int j = 0; j < 3; ++j) { + for (int k = 0; k < 9; ++k) { + this.addSlot(new Slot(playerInventory, k + j * 9 + 9, PLAYER_INVENTORY_START_X + k * 18, PLAYER_INVENTORY_START_Y + j * 18)); + } + } + + // player hotbar + for (int j = 0; j < 9; ++j) { + this.addSlot(new Slot(playerInventory, j, PLAYER_INVENTORY_START_X + j * 18, PLAYER_INVENTORY_START_Y + 58)); + } + + if (this.serverPlayer != null) { + UpdateBlockEntityInkPayload.updateBlockEntityInk(blockEntity.getBlockPos(), this.blockEntity.getEnergyStorage(), serverPlayer); + } + } + + public abstract void addBlockEntitySlots(); + + @Override + public BaseInkTransferBlockEntity getBlockEntity() { + return this.blockEntity; + } + + @Override + public boolean stillValid(Player player) { + return this.blockEntity.stillValid(player); + } + + @Override + public void removed(Player player) { + super.removed(player); + this.blockEntity.stopOpen(player); + } + + @Override + public ItemStack quickMoveStack(Player player, int index) { + ItemStack itemStack = ItemStack.EMPTY; + Slot slot = this.slots.get(index); + if (slot.hasItem()) { + ItemStack itemStack2 = slot.getItem(); + itemStack = itemStack2.copy(); + if (index < ColorPickerBlockEntity.INVENTORY_SIZE) { + if (!this.moveItemStackTo(itemStack2, ColorPickerBlockEntity.INVENTORY_SIZE, this.slots.size(), true)) { + return ItemStack.EMPTY; + } + } else if (!this.moveItemStackTo(itemStack2, 0, ColorPickerBlockEntity.INVENTORY_SIZE, false)) { + return ItemStack.EMPTY; + } + + if (itemStack2.isEmpty()) { + slot.setByPlayer(ItemStack.EMPTY); + } else { + slot.setChanged(); + } + } + + return itemStack; + } + + @Override + public void onInkColorSelectedPacket(Optional> inkColor) { + this.blockEntity.setSelectedColor(inkColor); + } + + @Override + public void broadcastChanges() { + super.broadcastChanges(); + + if (this.serverPlayer != null && this.blockEntity.getInkDirty()) { + UpdateBlockEntityInkPayload.updateBlockEntityInk(blockEntity.getBlockPos(), blockEntity.getEnergyStorage(), serverPlayer); + } + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumScreenHandlerIDs.java b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumScreenHandlerIDs.java index 48acb59629..d649f14ac3 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumScreenHandlerIDs.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumScreenHandlerIDs.java @@ -17,6 +17,7 @@ public class SpectrumScreenHandlerIDs { public static final ResourceLocation BLACK_HOLE_CHEST = SpectrumCommon.locate("black_hole_chest"); public static final ResourceLocation POTION_WORKSHOP = SpectrumCommon.locate("potion_workshop"); public static final ResourceLocation COLOR_PICKER = SpectrumCommon.locate("color_picker"); + public static final ResourceLocation TINTING_STATION = SpectrumCommon.locate("tinting_station"); public static final ResourceLocation CINDERHEARTH = SpectrumCommon.locate("cinderhearth"); public static final ResourceLocation FILTERING = SpectrumCommon.locate("filtering"); public static final ResourceLocation BAG_OF_HOLDING = SpectrumCommon.locate("bag_of_holding"); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumScreenHandlerTypes.java b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumScreenHandlerTypes.java index 809cb3eb9b..b3c658a276 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumScreenHandlerTypes.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumScreenHandlerTypes.java @@ -31,6 +31,7 @@ public class SpectrumScreenHandlerTypes { public static MenuType BLACK_HOLE_CHEST = registerExtended(SpectrumScreenHandlerIDs.BLACK_HOLE_CHEST, BlackHoleChestScreenHandler::new, FilterConfigurable.ExtendedDataWithPos.PACKET_CODEC); public static MenuType POTION_WORKSHOP = registerSimple(SpectrumScreenHandlerIDs.POTION_WORKSHOP, PotionWorkshopScreenHandler::new); public static MenuType COLOR_PICKER = registerExtended(SpectrumScreenHandlerIDs.COLOR_PICKER, ColorPickerScreenHandler::new, ColorPickerScreenHandler.ScreenOpeningData.PACKET_CODEC); + public static MenuType TINTING_STATION = registerExtended(SpectrumScreenHandlerIDs.TINTING_STATION, TintingStationScreenHandler::new, ColorPickerScreenHandler.ScreenOpeningData.PACKET_CODEC); public static MenuType CINDERHEARTH = registerExtended(SpectrumScreenHandlerIDs.CINDERHEARTH, CinderhearthScreenHandler::new, BlockPos.STREAM_CODEC); public static MenuType FILTERING = registerExtended(SpectrumScreenHandlerIDs.FILTERING, FilteringScreenHandler::new, FilterConfigurable.ExtendedData.PACKET_CODEC); public static MenuType BAG_OF_HOLDING = registerSimple(SpectrumScreenHandlerIDs.BAG_OF_HOLDING, BagOfHoldingScreenHandler::new); @@ -76,6 +77,7 @@ public static void registerClient(RegisterMenuScreensEvent event) { event.register(SpectrumScreenHandlerTypes.BLACK_HOLE_CHEST, BlackHoleChestScreen::new); event.register(SpectrumScreenHandlerTypes.POTION_WORKSHOP, PotionWorkshopScreen::new); event.register(SpectrumScreenHandlerTypes.COLOR_PICKER, ColorPickerScreen::new); + event.register(SpectrumScreenHandlerTypes.TINTING_STATION, TintingStationScreen::new); event.register(SpectrumScreenHandlerTypes.CINDERHEARTH, CinderhearthScreen::new); event.register(SpectrumScreenHandlerTypes.FILTERING, FilteringScreen::new); event.register(SpectrumScreenHandlerTypes.BAG_OF_HOLDING, ContainerScreen::new); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java new file mode 100644 index 0000000000..2e343766c8 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java @@ -0,0 +1,49 @@ +package de.dafuqs.spectrum.inventories; + +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.inventories.widgets.*; +import net.minecraft.client.gui.*; +import net.minecraft.network.chat.*; +import net.minecraft.resources.*; +import net.minecraft.world.entity.player.*; + +public class TintingStationScreen extends InkTransferScreen { + + protected final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); + + protected InkMeterWidget inkMeterWidget; + + public TintingStationScreen(InkTransferScreenHandler handler, Inventory playerInventory, Component title) { + super(handler, playerInventory, title); + } + + @Override + protected void init() { + super.init(); + + int startX = (this.width - this.imageWidth) / 2; + int startY = (this.height - this.imageHeight) / 2; + + this.inkGaugeWidget = new InkGaugeWidget(startX + 54, startY + 21, 42, 42, this.menu.getBlockEntity()); + addWidget(inkGaugeWidget); + this.inkMeterWidget = new InkMeterWidget(startX + 140, startY + 34, 40, (InkStorageBlockEntity) this.menu.getBlockEntity(), InkColors.all()); + addWidget(inkMeterWidget); + } + + @Override + protected void renderBg(GuiGraphics drawContext, float delta, int mouseX, int mouseY) { + super.renderBg(drawContext, delta, mouseX, mouseY); + int startX = (this.width - this.imageWidth) / 2; + int startY = (this.height - this.imageHeight) / 2; + + // main background + drawContext.blit(BACKGROUND, startX, startY, 0, 0, imageWidth, imageHeight); + // this.inkMeterWidget.render(drawContext, ((InkStorageBlockEntity) this.menu.getBlockEntity()).getEnergyStorage().getEnergy().keySet()); + + super.renderBg(drawContext, delta, mouseX, mouseY); + } + +} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java new file mode 100644 index 0000000000..8551485267 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java @@ -0,0 +1,31 @@ +package de.dafuqs.spectrum.inventories; + +import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.blocks.energy.*; +import de.dafuqs.spectrum.inventories.slots.*; +import net.minecraft.core.*; +import net.minecraft.network.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.inventory.*; + +import java.util.*; + +public class TintingStationScreenHandler extends InkTransferScreenHandler { + + // clientside + public TintingStationScreenHandler(int syncId, Inventory playerInventory, RegistryFriendlyByteBuf buf) { + super(SpectrumScreenHandlerTypes.TINTING_STATION, syncId, playerInventory, ScreenOpeningData.PACKET_CODEC.decode(buf)); + } + + // serverside + public TintingStationScreenHandler(int syncId, Inventory playerInventory, BaseInkTransferBlockEntity blockEntity, Optional> selectedColor) { + super(SpectrumScreenHandlerTypes.TINTING_STATION, syncId, playerInventory, blockEntity, selectedColor); + } + + @Override + public void addBlockEntitySlots() { + this.addSlot(new Slot(blockEntity, 0, 26, 33)); + this.addSlot(new InkStorageSlot(blockEntity, 1, 133, 33)); + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/inventories/slots/ColorPickerInputSlot.java b/src/main/java/de/dafuqs/spectrum/inventories/slots/ColorPickerInputSlot.java index d69bb7313b..e433f896b3 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/slots/ColorPickerInputSlot.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/slots/ColorPickerInputSlot.java @@ -4,6 +4,7 @@ import net.minecraft.world.*; import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; +import org.jetbrains.annotations.*; public class ColorPickerInputSlot extends Slot { @@ -12,7 +13,7 @@ public ColorPickerInputSlot(Container inventory, int index, int x, int y) { } @Override - public boolean mayPlace(ItemStack stack) { + public boolean mayPlace(@NotNull ItemStack stack) { return super.mayPlace(stack) && InkConvertingRecipe.isInput(stack.getItem()); } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java index a28e05a900..abf7370b5d 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java @@ -8,7 +8,6 @@ import net.minecraft.client.gui.*; import net.minecraft.client.gui.components.*; import net.minecraft.client.gui.narration.*; -import net.minecraft.client.gui.screens.*; import net.minecraft.core.*; import net.minecraft.network.chat.*; import net.minecraft.util.*; @@ -22,27 +21,25 @@ public class ColorSelectionWidget extends AbstractWidget { - protected final ColorPickerBlockEntity colorPicker; + protected final BaseInkTransferBlockEntity colorPicker; @Nullable private Consumer>> changedListener; - protected final Screen screen; final List> usableColors = new ArrayList<>(); // stores if a certain color should be displayed final int selectedDotX; final int selectedDotY; - public ColorSelectionWidget(int x, int y, int selectedDotX, int selectedDotY, Screen screen, ColorPickerBlockEntity colorPicker) { - this(x, y, selectedDotX, selectedDotY, screen, colorPicker, InkColors.BUILTIN_COLORS); + public ColorSelectionWidget(int x, int y, int selectedDotX, int selectedDotY, BaseInkTransferBlockEntity colorPicker) { + this(x, y, selectedDotX, selectedDotY, colorPicker, InkColors.BUILTIN_COLORS); } - public ColorSelectionWidget(int x, int y, int selectedDotX, int selectedDotY, Screen screen, ColorPickerBlockEntity colorPicker, List availableColors) { + public ColorSelectionWidget(int x, int y, int selectedDotX, int selectedDotY, BaseInkTransferBlockEntity colorPicker, List availableColors) { super(x, y, 56, 14, Component.literal("")); this.colorPicker = colorPicker; this.selectedDotX = selectedDotX; this.selectedDotY = selectedDotY; - this.screen = screen; for (InkColor inkColor : availableColors) { usableColors.add(new Tuple<>(inkColor, AdvancementHelper.hasAdvancementClient(inkColor.getRequiredAdvancement()))); @@ -122,10 +119,6 @@ private boolean isUnselection(double mouseX, double mouseY) { return mouseX >= (double) selectedDotX && mouseX < (double) (selectedDotX + 4) && mouseY >= (double) selectedDotY && mouseY < (double) (selectedDotY + 4); } - public boolean isMouseOver(double mouseX, double mouseY) { - return super.isMouseOver(mouseX, mouseY) || (this.active && this.visible && isUnselection(mouseX, mouseY)); - } - public void drawMouseoverTooltip(GuiGraphics drawContext, int mouseX, int mouseY) { Minecraft client = Minecraft.getInstance(); boolean overUnselection = mouseX >= (double) selectedDotX && mouseX < (double) (selectedDotX + 4) && mouseY >= (double) selectedDotY && mouseY < (double) (selectedDotY + 4); @@ -147,4 +140,14 @@ public void drawMouseoverTooltip(GuiGraphics drawContext, int mouseX, int mouseY } } } + + @Override + public void mouseMoved(double mouseX, double mouseY) { + super.mouseMoved(mouseX, mouseY); + } + + @Override + public @Nullable Tooltip getTooltip() { + return new WidgetTooltipHolder().get(); + } } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/InkGaugeWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/InkGaugeWidget.java index f983d24b76..780d51ce45 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/InkGaugeWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/InkGaugeWidget.java @@ -6,89 +6,29 @@ import net.minecraft.client.*; import net.minecraft.client.gui.*; import net.minecraft.client.gui.components.*; -import net.minecraft.client.gui.components.events.*; import net.minecraft.client.gui.narration.*; -import net.minecraft.client.gui.screens.*; import net.minecraft.network.chat.*; +import org.jetbrains.annotations.*; import java.util.*; -public class InkGaugeWidget implements Renderable, GuiEventListener, NarratableEntry { +public class InkGaugeWidget extends AbstractWidget { - public final int x; - public final int y; - public final int width; - public final int height; - protected boolean focused; - protected boolean hovered; - - protected final Screen screen; protected final InkStorageBlockEntity blockEntity; - public InkGaugeWidget(int x, int y, int width, int height, Screen screen, InkStorageBlockEntity blockEntity) { - this.x = x; - this.y = y; - this.width = width; - this.height = height; - - this.screen = screen; + public InkGaugeWidget(int x, int y, int width, int height, InkStorageBlockEntity blockEntity) { + super(x, y, width, height, Component.empty()); this.blockEntity = blockEntity; } @Override - public boolean isMouseOver(double mouseX, double mouseY) { - return mouseX >= (double) this.x && mouseX < (double) (this.x + this.width) && mouseY >= (double) this.y && mouseY < (double) (this.y + this.height); - } - - @Override - public void setFocused(boolean focused) { - this.focused = focused; - } - - @Override - public boolean isFocused() { - return focused; - } - - @Override - public void render(GuiGraphics drawContext, int mouseX, int mouseY, float delta) { - this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; - } - - @Override - public NarrationPriority narrationPriority() { - return this.hovered ? NarrationPriority.HOVERED : NarrationPriority.NONE; - } - - @Override - public void updateNarration(NarrationElementOutput builder) { - - } - - public void drawMouseoverTooltip(GuiGraphics drawContext, int x, int y) { - Minecraft client = Minecraft.getInstance(); - List tooltip = new ArrayList<>(); - for (InkColor color : InkColors.all()) { - long amount = blockEntity.getEnergyStorage().getEnergy(color); - if (amount > 0) { - InkStorage.addInkStoreBulletTooltip(tooltip, color, amount); - } - } - if (tooltip.isEmpty()) { - tooltip.add(Component.translatable("spectrum.tooltip.ink_powered.empty")); - } else { - tooltip.add(0, Component.translatable("spectrum.tooltip.ink_powered.stored")); - } - drawContext.renderTooltip(client.font, tooltip, Optional.empty(), x, y); - } - - public void draw(GuiGraphics drawContext) { + protected void renderWidget(@NotNull GuiGraphics guiGraphics, int i, int i1, float v) { long totalInk = blockEntity.getEnergyStorage().getCurrentTotal(); if (totalInk > 0) { - int centerX = x + width / 2; - int centerY = y + width / 2; + int centerX = getX() + width / 2; + int centerY = getY() + width / 2; int radius = 22; double startRad = -0.5 * Math.PI; @@ -107,7 +47,7 @@ public void draw(GuiGraphics drawContext) { int p3x = (int) (radius * Math.cos(endRad)); int p3y = (int) (radius * Math.sin(endRad)); - RenderHelper.fillTriangle(drawContext.pose(), + RenderHelper.fillTriangle(guiGraphics.pose(), centerX, centerY, // center point centerX + p3x, centerY + p3y, // end point centerX + p2x, centerY + p2y, // start point @@ -116,7 +56,7 @@ public void draw(GuiGraphics drawContext) { double middleRad = startRad + curr * Math.PI; int pmx = (int) (radius * Math.cos(middleRad)); int pmy = (int) (radius * Math.sin(middleRad)); - RenderHelper.fillTriangle(drawContext.pose(), + RenderHelper.fillTriangle(guiGraphics.pose(), centerX + p3x, centerY + p3y, centerX + pmx, centerY + pmy, centerX + p2x, centerY + p2y, @@ -128,4 +68,27 @@ public void draw(GuiGraphics drawContext) { } } } + + public void drawMouseoverTooltip(GuiGraphics drawContext, int x, int y) { + Minecraft client = Minecraft.getInstance(); + List tooltip = new ArrayList<>(); + for (InkColor color : InkColors.all()) { + long amount = blockEntity.getEnergyStorage().getEnergy(color); + if (amount > 0) { + InkStorage.addInkStoreBulletTooltip(tooltip, color, amount); + } + } + if (tooltip.isEmpty()) { + tooltip.add(Component.translatable("spectrum.tooltip.ink_powered.empty")); + } else { + tooltip.addFirst(Component.translatable("spectrum.tooltip.ink_powered.stored")); + } + drawContext.renderTooltip(client.font, tooltip, Optional.empty(), x, y); + } + + @Override + protected void updateWidgetNarration(@NotNull NarrationElementOutput narrationElementOutput) { + + } + } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/InkMeterWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/InkMeterWidget.java index 9744ba7538..5b1819f385 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/InkMeterWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/InkMeterWidget.java @@ -7,61 +7,28 @@ import net.minecraft.client.*; import net.minecraft.client.gui.*; import net.minecraft.client.gui.components.*; -import net.minecraft.client.gui.components.events.*; import net.minecraft.client.gui.narration.*; -import net.minecraft.client.gui.screens.*; import net.minecraft.network.chat.*; +import org.jetbrains.annotations.*; import java.util.*; - -public class InkMeterWidget implements Renderable, GuiEventListener, NarratableEntry { +public class InkMeterWidget extends AbstractWidget { public static final int WIDTH_PER_COLOR = 4; public static final int SPACE_BETWEEN_COLORS = 2; - public final int x; - public final int y; - public final int width; - public final int height; - protected boolean hovered; - protected boolean focused; - - protected final Screen screen; + protected final Iterable colors; protected final InkStorageBlockEntity inkStorageBlockEntity; - public InkMeterWidget(int x, int y, int height, Screen screen, InkStorageBlockEntity inkStorageBlockEntity) { - this.x = x; - this.y = y; - this.width = inkStorageBlockEntity.getEnergyStorage().getSupportedColors().size() * (WIDTH_PER_COLOR + SPACE_BETWEEN_COLORS) - SPACE_BETWEEN_COLORS; - this.height = height; - - this.screen = screen; + public InkMeterWidget(int x, int y, int height, InkStorageBlockEntity inkStorageBlockEntity, Iterable colors) { + super(x, y, inkStorageBlockEntity.getEnergyStorage().getSupportedColors().size() * (WIDTH_PER_COLOR + SPACE_BETWEEN_COLORS) - SPACE_BETWEEN_COLORS, height, Component.empty()); + this.colors = colors; this.inkStorageBlockEntity = inkStorageBlockEntity; } @Override - public boolean isMouseOver(double mouseX, double mouseY) { - return mouseX >= (double) this.x && mouseX < (double) (this.x + this.width) && mouseY >= (double) this.y && mouseY < (double) (this.y + this.height); - } - - @Override - public void setFocused(boolean focused) { - this.focused = focused; - } - - @Override - public boolean isFocused() { - return focused; - } - - @Override - public NarrationPriority narrationPriority() { - return this.hovered ? NarrationPriority.HOVERED : NarrationPriority.NONE; - } - - @Override - public void updateNarration(NarrationElementOutput builder) { + protected void updateWidgetNarration(@NotNull NarrationElementOutput narrationElementOutput) { } @@ -72,8 +39,9 @@ public void drawMouseoverTooltip(GuiGraphics drawContext, int x, int y) { drawContext.renderTooltip(client.font, tooltip, Optional.empty(), x, y); } - public void draw(GuiGraphics drawContext, List colors) { - int startHeight = this.y + this.height; + @Override + protected void renderWidget(@NotNull GuiGraphics guiGraphics, int i, int i1, float v) { + int startHeight = getY() + getHeight(); int currentXOffset = 0; IndividualCappedInkStorage inkStorage = inkStorageBlockEntity.getEnergyStorage(); @@ -81,16 +49,11 @@ public void draw(GuiGraphics drawContext, List colors) { for (InkColor color : colors) { long amount = inkStorage.getEnergy(color); if (amount > 0) { - int height = Math.max(1, Math.round(((float) amount / ((float) total / this.height)))); - RenderHelper.fillQuad(drawContext.pose(), this.x + currentXOffset, startHeight - height, height, WIDTH_PER_COLOR, color.getColorVec()); + int height = Math.max(1, Math.round(((float) amount / ((float) total / getHeight())))); + RenderHelper.fillQuad(guiGraphics.pose(), getX() + currentXOffset, startHeight - height, height, WIDTH_PER_COLOR, color.getColorVec()); } currentXOffset = currentXOffset + WIDTH_PER_COLOR + SPACE_BETWEEN_COLORS; } } - @Override - public void render(GuiGraphics drawContext, int mouseX, int mouseY, float delta) { - this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; - } - } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/StackedInkMeterWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/StackedInkMeterWidget.java index e607cec9c6..d873c85cd1 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/StackedInkMeterWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/StackedInkMeterWidget.java @@ -6,90 +6,37 @@ import net.minecraft.client.*; import net.minecraft.client.gui.*; import net.minecraft.client.gui.components.*; -import net.minecraft.client.gui.components.events.*; import net.minecraft.client.gui.narration.*; -import net.minecraft.client.gui.screens.*; import net.minecraft.network.chat.*; +import org.jetbrains.annotations.*; import java.util.*; -public class StackedInkMeterWidget implements Renderable, GuiEventListener, NarratableEntry { - - public final int x; - public final int y; - public final int width; - public final int height; - protected boolean hovered; - protected boolean focused; - - protected final Screen screen; +public class StackedInkMeterWidget extends AbstractWidget { + protected final InkStorageBlockEntity blockEntity; - public StackedInkMeterWidget(int x, int y, int width, int height, Screen screen, InkStorageBlockEntity blockEntity) { - this.x = x; - this.y = y; - this.width = width; - this.height = height; - - this.screen = screen; + public StackedInkMeterWidget(int x, int y, int width, int height, InkStorageBlockEntity blockEntity) { + super(x, y, width, height, Component.empty()); this.blockEntity = blockEntity; } @Override - public boolean isMouseOver(double mouseX, double mouseY) { - return mouseX >= (double) this.x && mouseX < (double) (this.x + this.width) && mouseY >= (double) this.y && mouseY < (double) (this.y + this.height); - } - - @Override - public void setFocused(boolean focused) { - this.focused = focused; - } - - @Override - public boolean isFocused() { - return focused; - } - - @Override - public void render(GuiGraphics drawContext, int mouseX, int mouseY, float delta) { - this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; - } - - @Override - public NarrationPriority narrationPriority() { - return this.hovered ? NarrationPriority.HOVERED : NarrationPriority.NONE; - } - - @Override - public void updateNarration(NarrationElementOutput builder) { - - } - - public void drawMouseoverTooltip(GuiGraphics drawContext, int x, int y) { - Minecraft client = Minecraft.getInstance(); - InkStorage inkStorage = this.blockEntity.getEnergyStorage(); - long currentTotal = inkStorage.getCurrentTotal(); - String readableCurrentTotalString = Support.getShortenedNumberString(currentTotal); - String percent = Support.getSensiblePercentString(inkStorage.getCurrentTotal(), (inkStorage.getMaxTotal())); - drawContext.renderTooltip(client.font, List.of(Component.translatable("spectrum.tooltip.ink_powered.percent_filled", readableCurrentTotalString, percent)), - Optional.empty(), x, y); - } - - public void draw(GuiGraphics drawContext) { + protected void renderWidget(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { InkStorage inkStorage = this.blockEntity.getEnergyStorage(); long currentTotal = inkStorage.getCurrentTotal(); if (currentTotal > 0) { long maxTotal = inkStorage.getMaxTotal(); - int currentHeight = this.y + this.height; + int currentHeight = getX() + getHeight(); for (InkColor color : InkColors.all()) { long amount = inkStorage.getEnergy(color); if (amount > 0) { - int height = Math.round(((float) amount / (float) maxTotal * this.height)); + int height = Math.round(((float) amount / (float) maxTotal * getHeight())); if (height > 0) { - RenderHelper.fillQuad(drawContext.pose(), this.x, currentHeight - height, height, this.width, color.getColorVec()); + RenderHelper.fillQuad(guiGraphics.pose(), getX(), currentHeight - height, height, getWidth(), color.getColorVec()); } currentHeight -= height; } @@ -97,4 +44,19 @@ public void draw(GuiGraphics drawContext) { } } + @Override + protected void updateWidgetNarration(@NotNull NarrationElementOutput narrationElementOutput) { + + } + + public void drawMouseoverTooltip(GuiGraphics drawContext, int x, int y) { + Minecraft client = Minecraft.getInstance(); + InkStorage inkStorage = this.blockEntity.getEnergyStorage(); + long currentTotal = inkStorage.getCurrentTotal(); + String readableCurrentTotalString = Support.getShortenedNumberString(currentTotal); + String percent = Support.getSensiblePercentString(inkStorage.getCurrentTotal(), (inkStorage.getMaxTotal())); + drawContext.renderTooltip(client.font, List.of(Component.translatable("spectrum.tooltip.ink_powered.percent_filled", readableCurrentTotalString, percent)), + Optional.empty(), x, y); + } + } From 15cae212e6e47c6669e3c9749a483a81a3b3a466 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 2 May 2026 19:54:57 +0200 Subject: [PATCH 029/477] add tinting station to creative menu --- .../java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java index b2ec909a3c..56ad3848ae 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java @@ -230,6 +230,7 @@ public static void registerSubTabs() { entries.accept(SpectrumBlocks.CINDERHEARTH); entries.accept(SpectrumBlocks.CRYSTAL_APOTHECARY); entries.accept(SpectrumBlocks.COLOR_PICKER); + entries.accept(SpectrumBlocks.TINTING_STATION); entries.accept(SpectrumBlocks.UPGRADE_SPEED); entries.accept(SpectrumBlocks.UPGRADE_SPEED2); From ee542b8c16eabc520a0b16207b68cd1d6c1cb839 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 2 May 2026 20:04:28 +0200 Subject: [PATCH 030/477] rewrote screen rendering and ink tooltip internals. - reused lots of vanilla code, removing quite a bit of code and makes compat easier down the line - tooltips are now consistent between ink storage items / blocks - tooltips now use line wrapping --- .../spectrum/api/energy/InkStorage.java | 15 +++++- .../energy/storage/CreativeInkStorage.java | 7 ++- .../storage/IndividualCappedInkStorage.java | 20 ++++--- .../api/energy/storage/SingleInkStorage.java | 13 +++-- .../TotalCappedElementalMixingInkStorage.java | 12 +++-- .../energy/storage/TotalCappedInkStorage.java | 27 ++++++---- .../energy/TintingStationBlockEntity.java | 2 +- .../entity/entity/InkProjectileEntity.java | 5 +- .../inventories/BedrockAnvilScreen.java | 7 +-- .../inventories/CinderhearthScreen.java | 36 +++++-------- .../inventories/ColorPickerScreen.java | 50 ++++++++--------- .../inventories/CompactingChestScreen.java | 7 +-- .../inventories/InkTransferScreen.java | 53 +++++++------------ .../inventories/ParticleSpawnerScreen.java | 8 +-- .../inventories/PotionWorkshopScreen.java | 9 ++-- .../Spectrum3x3ContainerScreen.java | 12 ++--- .../SpectrumGenericContainerScreen.java | 4 +- .../inventories/TintingStationScreen.java | 32 +++++------ .../widgets/ColorSelectionWidget.java | 44 ++++++++------- .../InkListWidget.java} | 23 ++++---- .../InkPieWidget.java} | 27 +++------- .../StackedInkBarWidget.java} | 21 ++++---- .../items/energy/ArtistsPaletteItem.java | 2 +- .../energy/CreativeInkAssortmentItem.java | 2 +- .../items/energy/InkAssortmentItem.java | 2 +- .../spectrum/items/energy/InkFlaskItem.java | 3 +- .../items/energy/PigmentPaletteItem.java | 2 +- .../items/magic_items/PaintbrushItem.java | 4 +- .../resources/assets/spectrum/lang/en_us.json | 6 +-- 29 files changed, 219 insertions(+), 236 deletions(-) rename src/main/java/de/dafuqs/spectrum/inventories/widgets/{InkMeterWidget.java => ink/InkListWidget.java} (73%) rename src/main/java/de/dafuqs/spectrum/inventories/widgets/{InkGaugeWidget.java => ink/InkPieWidget.java} (70%) rename src/main/java/de/dafuqs/spectrum/inventories/widgets/{StackedInkMeterWidget.java => ink/StackedInkBarWidget.java} (68%) diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/InkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/InkStorage.java index b1540526f7..558084e827 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/InkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/InkStorage.java @@ -150,6 +150,14 @@ private static void equalizeInk(List storages, InkColor color) { // if the storage is able to store this kind of color boolean accepts(InkColor color); + default Iterable acceptedColors() { + List colors = new ArrayList<>(); + for(InkColor color : InkColors.all()) { + if(accepts(color)) colors.add(color); + } + return colors; + } + // returns the amount of energy that could not be added long addEnergy(InkColor color, long amount); @@ -191,7 +199,7 @@ private static void equalizeInk(List storages, InkColor color) { // completely empty the storage void clearContent(); - void addTooltip(List tooltip); + MutableComponent getTooltip(); long getRoom(InkColor color); @@ -200,4 +208,9 @@ static void addInkStoreBulletTooltip(List tooltip, InkColor color, lo tooltip.add(Component.translatable("spectrum.tooltip.ink_powered.bullet_amount", Component.literal(getShortenedNumberString(amount)).withStyle(ChatFormatting.WHITE), inkName).setStyle(inkName.getStyle())); } + static Component getInkStoreBulletTooltip(InkColor color, long amount) { + MutableComponent inkName = color.getColoredInkName(); + return Component.translatable("spectrum.tooltip.ink_powered.bullet_amount", Component.literal(getShortenedNumberString(amount)).withStyle(ChatFormatting.WHITE), inkName).setStyle(inkName.getStyle()); + } + } diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/CreativeInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/storage/CreativeInkStorage.java index 8d7e43e153..37685ed28f 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/CreativeInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/storage/CreativeInkStorage.java @@ -2,8 +2,11 @@ import de.dafuqs.spectrum.api.energy.*; import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.network.chat.*; +import javax.annotation.*; import java.util.*; public class CreativeInkStorage implements InkStorage { @@ -81,8 +84,8 @@ public void clearContent() { } @Override - public void addTooltip(List tooltip) { - tooltip.add(Component.translatable("item.spectrum.creative_ink_assortment.tooltip")); + public MutableComponent getTooltip() { + return Component.translatable("item.spectrum.creative_ink_assortment.tooltip"); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/IndividualCappedInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/storage/IndividualCappedInkStorage.java index 4c8bc441f5..b5cdfac775 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/IndividualCappedInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/storage/IndividualCappedInkStorage.java @@ -6,6 +6,7 @@ import it.unimi.dsi.fastutil.objects.*; import net.minecraft.network.chat.*; +import javax.annotation.*; import java.util.*; import static de.dafuqs.spectrum.helpers.Support.*; @@ -114,16 +115,23 @@ public boolean isFull() { } @Override - public void addTooltip(List tooltip) { - tooltip.add(Component.translatable("item.spectrum.ink_storage.stores_ink_per_type", getShortenedNumberString(maxEnergyPerColor))); + public MutableComponent getTooltip() { + MutableComponent c = Component.translatable("item.spectrum.ink_storage.stores_ink_per_type", getShortenedNumberString(maxEnergyPerColor)); + c.append(Component.literal("\n")); // we are iterating them this way to preserve the ordering - for (InkColor color : SpectrumRegistries.INK_COLOR) { - long amount = this.storedEnergy.getOrDefault(color, 0L); - if (amount > 0) { - InkStorage.addInkStoreBulletTooltip(tooltip, color, amount); + if(isEmpty()) { + c.append(Component.translatable("spectrum.tooltip.ink_powered.empty")); + } else { + for (InkColor color : SpectrumRegistries.INK_COLOR) { + long amount = this.storedEnergy.getOrDefault(color, 0L); + if (amount > 0) { + c.append(InkStorage.getInkStoreBulletTooltip(color, amount)); + c.append(Component.literal("\n")); + } } } + return c; } @Override diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/SingleInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/storage/SingleInkStorage.java index b0cb9ec6de..e7b44fb05d 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/SingleInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/storage/SingleInkStorage.java @@ -2,8 +2,11 @@ import de.dafuqs.spectrum.api.energy.*; import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.network.chat.*; +import javax.annotation.*; import java.util.*; import static de.dafuqs.spectrum.helpers.Support.*; @@ -121,11 +124,15 @@ public boolean isFull() { } @Override - public void addTooltip(List tooltip) { - tooltip.add(Component.translatable("item.spectrum.ink_storage.stores_up_to_ink_per_type", getShortenedNumberString(this.maxEnergy))); + public MutableComponent getTooltip() { + MutableComponent c = Component.translatable("item.spectrum.ink_storage.stores_up_to_ink_per_type", getShortenedNumberString(this.maxEnergy)); + c.append(Component.literal("\n")); if (this.storedEnergy > 0) { - InkStorage.addInkStoreBulletTooltip(tooltip, this.storedColor, this.storedEnergy); + c.append(InkStorage.getInkStoreBulletTooltip(this.storedColor, this.storedEnergy)); + } else { + c.append(Component.translatable("spectrum.tooltip.ink_powered.empty")); } + return c; } @Override diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedElementalMixingInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedElementalMixingInkStorage.java index bcee0f491b..3682af4de4 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedElementalMixingInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedElementalMixingInkStorage.java @@ -1,8 +1,10 @@ package de.dafuqs.spectrum.api.energy.storage; import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.helpers.*; import net.minecraft.network.chat.*; +import javax.annotation.*; import java.util.*; import static de.dafuqs.spectrum.helpers.Support.*; @@ -111,10 +113,12 @@ public long getRoom(InkColor color) { } @Override - public void addTooltip(List tooltip) { - tooltip.add(Component.translatable("item.spectrum.artists_palette.tooltip", getShortenedNumberString(this.maxEnergyTotal))); - tooltip.add(Component.translatable("item.spectrum.artists_palette.tooltip.mix_on_demand")); - addInkContentTooltip(tooltip); + public MutableComponent getTooltip() { + MutableComponent c = Component.translatable("item.spectrum.artists_palette.tooltip", getShortenedNumberString(this.maxEnergyTotal)); + c.append(Component.literal("\n")); + c.append(Component.translatable("item.spectrum.artists_palette.tooltip.mix_on_demand")); + appendInkStoreBulletTooltips(c); + return c; } } diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedInkStorage.java index 81667ea5dd..6959c897c9 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedInkStorage.java @@ -2,14 +2,14 @@ import de.dafuqs.spectrum.api.energy.*; import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.network.chat.*; +import javax.annotation.*; import java.util.*; -import static de.dafuqs.spectrum.helpers.Support.*; - public class TotalCappedInkStorage implements InkStorage { protected final long maxEnergyTotal; @@ -121,17 +121,24 @@ public void clearContent() { } @Override - public void addTooltip(List tooltip) { - tooltip.add(Component.translatable("item.spectrum.total_capped_simple_pigment_energy_storage.tooltip", getShortenedNumberString(maxEnergyTotal))); - addInkContentTooltip(tooltip); + public MutableComponent getTooltip() { + long maxEnergyPerColor = getMaxPerColor(); + MutableComponent c = Component.translatable("item.spectrum.ink_storage.stores_ink_per_type", Support.getShortenedNumberString(maxEnergyPerColor)); + appendInkStoreBulletTooltips(c); + return c; } - protected void addInkContentTooltip(List tooltip) { - // we are iterating them this way to preserve the ordering in which they were registered - for (InkColor color : SpectrumRegistries.INK_COLOR) { - long amount = this.storedEnergy.getOrDefault(color, 0L); + protected void appendInkStoreBulletTooltips(MutableComponent c) { + if(isEmpty()) { + c.append(Component.translatable("spectrum.tooltip.ink_powered.empty")); + return; + } + + for (InkColor color : SpectrumRegistries.INK_COLOR) { // we are iterating them this way to preserve the ordering + long amount = this.storedEnergy.getOrDefault(color, -1L); if (amount > 0) { - InkStorage.addInkStoreBulletTooltip(tooltip, color, amount); + c.append(Component.literal("\n")); + c.append(InkStorage.getInkStoreBulletTooltip(color, amount)); } } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/TintingStationBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/TintingStationBlockEntity.java index fae54af823..080f2bc922 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/TintingStationBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/TintingStationBlockEntity.java @@ -78,7 +78,7 @@ public boolean tryColorStack(InkColor inkColor) { ItemStack input = getItem(INPUT_SLOT_ID); Item resultItem = VariantHelper.getColoredItem(input, inkColor); - if(resultItem == Items.AIR) { + if(resultItem == null) { return false; } diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java index 2dfe4370e1..2a68a254da 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java @@ -27,6 +27,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; +import org.jetbrains.annotations.*; import java.util.*; @@ -188,8 +189,8 @@ protected void onHitBlock(BlockHitResult blockHitResult) { continue; } if (dyeColor.isPresent()) { - BlockState coloredBlockState = VariantHelper.getColoredBlock(this.level(), blockPos, inkColor); - if (!coloredBlockState.isAir()) { + @Nullable BlockState coloredBlockState = VariantHelper.getColoredBlock(this.level(), blockPos, inkColor); + if (coloredBlockState != null) { this.level().setBlockAndUpdate(blockPos, coloredBlockState); } } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/BedrockAnvilScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/BedrockAnvilScreen.java index 24230cc3a1..53ae152fb8 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/BedrockAnvilScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/BedrockAnvilScreen.java @@ -39,10 +39,7 @@ public BedrockAnvilScreen(BedrockAnvilScreenHandler handler, Inventory inventory @Override protected void subInit() { - int i = (this.width - this.imageWidth) / 2; - int j = (this.height - this.imageHeight) / 2; - - this.nameField = new EditBox(this.font, i + 62, j + 24, 98, 12, Component.translatable("container.spectrum.bedrock_anvil")); + this.nameField = new EditBox(this.font, getGuiLeft() + 62, getGuiTop() + 24, 98, 12, Component.translatable("container.spectrum.bedrock_anvil")); this.nameField.setTextColor(-1); this.nameField.setTextColorUneditable(-1); this.nameField.setBordered(false); @@ -52,7 +49,7 @@ protected void subInit() { this.addWidget(this.nameField); this.nameField.setEditable((this.menu).getSlot(0).hasItem()); - this.loreField = new EditBox(this.font, i + 45, j + 76, 116, 12, Component.translatable("container.spectrum.bedrock_anvil.lore")); + this.loreField = new EditBox(this.font, getGuiLeft() + 45, getGuiTop() + 76, 116, 12, Component.translatable("container.spectrum.bedrock_anvil.lore")); this.loreField.setTextColor(-1); this.loreField.setTextColorUneditable(-1); this.loreField.setBordered(false); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java index c504b9cf2b..6ad64beddc 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java @@ -4,7 +4,8 @@ import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.blocks.cinderhearth.*; import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.inventories.widgets.*; +import de.dafuqs.spectrum.inventories.widgets.ink.*; +import net.minecraft.client.*; import net.minecraft.client.gui.*; import net.minecraft.client.gui.screens.inventory.*; import net.minecraft.network.chat.*; @@ -15,7 +16,7 @@ public class CinderhearthScreen extends AbstractContainerScreen 0) { - drawContext.blit(BACKGROUND, this.leftPos + 14, this.topPos + 62, 176, 14, 15, 2); + guiGraphics.blit(BACKGROUND, this.leftPos + 14, this.topPos + 62, 176, 14, 15, 2); } if (craftingTimeTotal > 0) { // the fire - drawContext.blit(BACKGROUND, this.leftPos + 15, this.topPos + 48, 176, 0, 14, 14); + guiGraphics.blit(BACKGROUND, this.leftPos + 15, this.topPos + 48, 176, 0, 14, 14); // the arrow - drawContext.blit(BACKGROUND, this.leftPos + 35, this.topPos + 32, 176, 16, (craftingTime * 22) / craftingTimeTotal, 16); + guiGraphics.blit(BACKGROUND, this.leftPos + 35, this.topPos + 32, 176, 16, (craftingTime * 22) / craftingTimeTotal, 16); } } @@ -80,10 +72,10 @@ public void render(GuiGraphics drawContext, int mouseX, int mouseY, float delta) @Override protected void renderTooltip(GuiGraphics drawContext, int x, int y) { - if (this.inkMeterWidget.isMouseOver(x, y)) { - this.inkMeterWidget.drawMouseoverTooltip(drawContext, x, y); - } else { - super.renderTooltip(drawContext, x, y); + super.renderTooltip(drawContext, x, y); + + if (this.inkListWidget.isHoveredOrFocused()) { + drawContext.renderTooltip(this.font, this.inkListWidget.getTooltip().toCharSequence(Minecraft.getInstance()), x, y); } } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java index 9ef21170c1..c5b0d27169 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java @@ -1,29 +1,20 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; -import de.dafuqs.spectrum.blocks.energy.*; -import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.inventories.widgets.*; -import de.dafuqs.spectrum.networking.c2s_payloads.*; +import de.dafuqs.spectrum.inventories.widgets.ink.*; +import net.minecraft.client.*; import net.minecraft.client.gui.*; -import net.minecraft.client.gui.screens.inventory.*; -import net.minecraft.core.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; -import net.neoforged.neoforge.network.*; - -import java.util.*; -import java.util.function.*; +import org.jetbrains.annotations.*; public class ColorPickerScreen extends InkTransferScreen { protected final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); - protected StackedInkMeterWidget inkMeterWidget; + protected StackedInkBarWidget stackedInkBarWidget; + protected InkPieWidget inkPieWidget; public ColorPickerScreen(InkTransferScreenHandler handler, Inventory playerInventory, Component title) { super(handler, playerInventory, title); @@ -35,25 +26,28 @@ public ColorPickerScreen(InkTransferScreenHandler handler, Inventory playerInven protected void init() { super.init(); - int startX = (this.width - this.imageWidth) / 2; - int startY = (this.height - this.imageHeight) / 2; - - this.inkGaugeWidget = new InkGaugeWidget(startX + 54, startY + 21, 42, 42, this.menu.getBlockEntity()); - addWidget(this.inkGaugeWidget); - this.inkMeterWidget = new StackedInkMeterWidget(startX + 100, startY + 21, 4, 40, this.menu.getBlockEntity()); - addWidget(inkMeterWidget); + this.inkPieWidget = new InkPieWidget(getGuiLeft() + 54, getGuiTop() + 21, 42, 42, this.menu.getBlockEntity()); + addRenderableWidget(this.inkPieWidget); + this.stackedInkBarWidget = new StackedInkBarWidget(getGuiLeft() + 100, getGuiTop() + 21, 4, 40, this.menu.getBlockEntity()); + addRenderableWidget(stackedInkBarWidget); } @Override protected void renderBg(GuiGraphics drawContext, float partialTick, int mouseX, int mouseY) { - int startX = (this.width - this.imageWidth) / 2; - int startY = (this.height - this.imageHeight) / 2; - - // main background - drawContext.blit(BACKGROUND, startX, startY, 0, 0, imageWidth, imageHeight); - // this.inkMeterWidget.render(drawContext, mouseX, mouseY, partialTick); - + drawContext.blit(BACKGROUND, getGuiLeft(), getGuiTop(), 0, 0, imageWidth, imageHeight); super.renderBg(drawContext, partialTick, mouseX, mouseY); } + @Override + protected void renderTooltip(@NotNull GuiGraphics guiGraphics, int x, int y) { + super.renderTooltip(guiGraphics, x, y); + + if (this.inkPieWidget.isHoveredOrFocused()) { + guiGraphics.renderTooltip(this.font, this.inkPieWidget.getTooltip().toCharSequence(Minecraft.getInstance()), x, y); + } + if (this.stackedInkBarWidget.isHoveredOrFocused()) { + guiGraphics.renderTooltip(this.font, this.stackedInkBarWidget.getTooltip().toCharSequence(Minecraft.getInstance()), x, y); + } + } + } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CompactingChestScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/CompactingChestScreen.java index 2109e52ea9..77a41bdd25 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CompactingChestScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CompactingChestScreen.java @@ -26,12 +26,9 @@ protected void init() { } protected void setupInputFields() { - int x = (this.width - this.imageWidth) / 2 + 3; - int y = (this.height - this.imageHeight) / 2 + 3; - addWidget(Button.builder(Component.literal("Mode"), this::craftingModeButtonPressed) .size(16, 16) - .pos(x + 154, y + 6) + .pos(getGuiLeft() + 157, getGuiTop() + 9) .build()); } @@ -42,7 +39,7 @@ private void craftingModeButtonPressed(Button buttonWidget) { @Override protected void renderLabels(GuiGraphics drawContext, int mouseX, int mouseY) { // draw "title" and "inventory" texts - int titleX = (imageWidth - font.width(title)) / 2; // 8; + int titleX = (imageWidth - font.width(title)) / 2; int titleY = 6; Component title = this.title; int inventoryX = 8; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java index 61b3b0b2ee..0d19cb4fe0 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java @@ -5,15 +5,17 @@ import de.dafuqs.spectrum.blocks.energy.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.inventories.widgets.*; +import de.dafuqs.spectrum.inventories.widgets.ink.*; import de.dafuqs.spectrum.networking.c2s_payloads.*; +import net.minecraft.client.*; import net.minecraft.client.gui.*; -import net.minecraft.client.gui.components.*; import net.minecraft.client.gui.screens.inventory.*; import net.minecraft.core.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; import net.neoforged.neoforge.network.*; +import org.jetbrains.annotations.*; import java.util.*; import java.util.function.*; @@ -23,8 +25,6 @@ public class InkTransferScreen extends AbstractContainerScreen 0) { // the rising bubbles int progress = BUBBLE_PROGRESS[brewTime / 2 % 13]; if (progress > 0) { - drawContext.blit(background, startX + 29, startY + 39 + 43 - progress, 176, 40 - progress, 11, progress); + drawContext.blit(background, getGuiLeft() + 29, getGuiTop() + 39 + 43 - progress, 176, 40 - progress, 11, progress); } int maxBrewTime = (this.menu).getMaxBrewTime(); @@ -67,7 +64,7 @@ protected void renderBg(GuiGraphics drawContext, float delta, int mouseX, int mo // the brew progress = (int) (100.0F * ((float) brewTime / maxBrewTime)); RenderSystem.setShaderColor(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, 1.0F); - drawContext.blit(background, startX + 45, startY + 22, 0, 212, progress, 44); + drawContext.blit(background, getGuiLeft() + 45, getGuiTop() + 22, 0, 212, progress, 44); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreen.java index f209312221..5c9fd34b9d 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreen.java @@ -29,10 +29,10 @@ protected void init() { } @Override - public void render(GuiGraphics drawContext, int mouseX, int mouseY, float delta) { - this.renderBackground(drawContext, mouseX, mouseY, delta); - super.render(drawContext, mouseX, mouseY, delta); - this.renderTooltip(drawContext, mouseX, mouseY); + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { + this.renderBackground(guiGraphics, mouseX, mouseY, delta); + super.render(guiGraphics, mouseX, mouseY, delta); + this.renderTooltip(guiGraphics, mouseX, mouseY); } /** @@ -40,9 +40,7 @@ public void render(GuiGraphics drawContext, int mouseX, int mouseY, float delta) */ @Override protected void renderBg(GuiGraphics drawContext, float delta, int mouseX, int mouseY) { - int i = (this.width - this.imageWidth) / 2; - int j = (this.height - this.imageHeight) / 2; - drawContext.blit(backgroundTexture, i, j, 0, 0, this.imageWidth, this.imageHeight); + drawContext.blit(backgroundTexture, getGuiLeft(), getGuiTop(), 0, 0, this.imageWidth, this.imageHeight); } @Contract(pure = true) diff --git a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumGenericContainerScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumGenericContainerScreen.java index 81c19cf3db..2db8321812 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumGenericContainerScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumGenericContainerScreen.java @@ -51,8 +51,8 @@ protected void renderLabels(GuiGraphics drawContext, int mouseX, int mouseY) { @Override protected void renderBg(GuiGraphics drawContext, float delta, int mouseX, int mouseY) { - int i = (this.width - this.imageWidth) / 2; - int j = (this.height - this.imageHeight) / 2; + int i = getGuiLeft(); + int j = getGuiTop(); drawContext.blit(backgroundTexture, i, j, 0, 0, this.imageWidth, this.rows * 18 + 17); drawContext.blit(backgroundTexture, i, j + this.rows * 18 + 17, 0, 126, this.imageWidth, 96); } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java index 2e343766c8..3defcc86fd 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java @@ -4,17 +4,19 @@ import de.dafuqs.spectrum.api.energy.*; import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.api.energy.storage.*; -import de.dafuqs.spectrum.inventories.widgets.*; +import de.dafuqs.spectrum.inventories.widgets.ink.*; +import net.minecraft.client.*; import net.minecraft.client.gui.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; +import org.jetbrains.annotations.*; public class TintingStationScreen extends InkTransferScreen { protected final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); - protected InkMeterWidget inkMeterWidget; + protected InkListWidget inkListWidget; public TintingStationScreen(InkTransferScreenHandler handler, Inventory playerInventory, Component title) { super(handler, playerInventory, title); @@ -24,26 +26,24 @@ public TintingStationScreen(InkTransferScreenHandler handler, Inventory playerIn protected void init() { super.init(); - int startX = (this.width - this.imageWidth) / 2; - int startY = (this.height - this.imageHeight) / 2; - - this.inkGaugeWidget = new InkGaugeWidget(startX + 54, startY + 21, 42, 42, this.menu.getBlockEntity()); - addWidget(inkGaugeWidget); - this.inkMeterWidget = new InkMeterWidget(startX + 140, startY + 34, 40, (InkStorageBlockEntity) this.menu.getBlockEntity(), InkColors.all()); - addWidget(inkMeterWidget); + this.inkListWidget = new InkListWidget(getGuiLeft() + 140, getGuiTop() + 34, 40, (InkStorageBlockEntity) this.menu.getBlockEntity(), InkColors.all()); + addRenderableWidget(inkListWidget); } @Override protected void renderBg(GuiGraphics drawContext, float delta, int mouseX, int mouseY) { super.renderBg(drawContext, delta, mouseX, mouseY); - int startX = (this.width - this.imageWidth) / 2; - int startY = (this.height - this.imageHeight) / 2; - - // main background - drawContext.blit(BACKGROUND, startX, startY, 0, 0, imageWidth, imageHeight); - // this.inkMeterWidget.render(drawContext, ((InkStorageBlockEntity) this.menu.getBlockEntity()).getEnergyStorage().getEnergy().keySet()); - + drawContext.blit(BACKGROUND, getGuiLeft(), getGuiTop(), 0, 0, imageWidth, imageHeight); super.renderBg(drawContext, delta, mouseX, mouseY); } + @Override + protected void renderTooltip(@NotNull GuiGraphics guiGraphics, int x, int y) { + super.renderTooltip(guiGraphics, x, y); + + if (this.inkListWidget.isHoveredOrFocused()) { + guiGraphics.renderTooltip(this.font, this.inkListWidget.getTooltip().toCharSequence(Minecraft.getInstance()), x, y); + } + } + } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java index abf7370b5d..e8e5c49f23 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java @@ -21,25 +21,25 @@ public class ColorSelectionWidget extends AbstractWidget { - protected final BaseInkTransferBlockEntity colorPicker; + protected final BaseInkTransferBlockEntity blockEntity; @Nullable private Consumer>> changedListener; final List> usableColors = new ArrayList<>(); // stores if a certain color should be displayed - final int selectedDotX; - final int selectedDotY; + final int selectedIndexX; + final int selectedIndexY; - public ColorSelectionWidget(int x, int y, int selectedDotX, int selectedDotY, BaseInkTransferBlockEntity colorPicker) { - this(x, y, selectedDotX, selectedDotY, colorPicker, InkColors.BUILTIN_COLORS); + public ColorSelectionWidget(int x, int y, int selectedIndexX, int selectedIndexY, BaseInkTransferBlockEntity blockEntity) { + this(x, y, selectedIndexX, selectedIndexY, blockEntity, blockEntity.getEnergyStorage().acceptedColors()); } - public ColorSelectionWidget(int x, int y, int selectedDotX, int selectedDotY, BaseInkTransferBlockEntity colorPicker, List availableColors) { + public ColorSelectionWidget(int x, int y, int selectedIndexX, int selectedIndexY, BaseInkTransferBlockEntity blockEntity, Iterable availableColors) { super(x, y, 56, 14, Component.literal("")); - this.colorPicker = colorPicker; - this.selectedDotX = selectedDotX; - this.selectedDotY = selectedDotY; + this.blockEntity = blockEntity; + this.selectedIndexX = selectedIndexX; + this.selectedIndexY = selectedIndexY; for (InkColor inkColor : availableColors) { usableColors.add(new Tuple<>(inkColor, AdvancementHelper.hasAdvancementClient(inkColor.getRequiredAdvancement()))); @@ -56,6 +56,11 @@ private void onChanged(Optional> newColor) { } } + @Override + public boolean isMouseOver(double mouseX, double mouseY) { + return super.isMouseOver(mouseX, mouseY) || (this.active && this.visible && isUnselection(mouseX, mouseY)); + } + @Override protected void renderWidget(@NotNull GuiGraphics context, int mouseX, int mouseY, float delta) { // draw selection icons @@ -74,8 +79,7 @@ protected void renderWidget(@NotNull GuiGraphics context, int mouseX, int mouseY } } - // draw currently selected icon - this.colorPicker.getSelectedColor().ifPresent(inkColor -> fillQuad(context.pose(), selectedDotX, selectedDotY, 4, 4, inkColor.value().getColorVec())); + this.blockEntity.getSelectedColor().ifPresent(inkColor -> fillQuad(context.pose(), selectedIndexX, selectedIndexY, 4, 4, inkColor.value().getColorVec())); } @Override @@ -116,13 +120,12 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { protected void updateWidgetNarration(@NotNull NarrationElementOutput builder) { } private boolean isUnselection(double mouseX, double mouseY) { - return mouseX >= (double) selectedDotX && mouseX < (double) (selectedDotX + 4) && mouseY >= (double) selectedDotY && mouseY < (double) (selectedDotY + 4); + return mouseX >= (double) selectedIndexX && mouseX < (double) (selectedIndexX + 4) && mouseY >= (double) selectedIndexY && mouseY < (double) (selectedIndexY + 4); } public void drawMouseoverTooltip(GuiGraphics drawContext, int mouseX, int mouseY) { Minecraft client = Minecraft.getInstance(); - boolean overUnselection = mouseX >= (double) selectedDotX && mouseX < (double) (selectedDotX + 4) && mouseY >= (double) selectedDotY && mouseY < (double) (selectedDotY + 4); - if (overUnselection) { + if (isUnselection(mouseX, mouseY)) { drawContext.renderTooltip(client.font, List.of(Component.translatable("spectrum.tooltip.ink_powered.unselect_color")), Optional.empty(), getX(), getY()); } else { int xOffset = Mth.floor(mouseX) - this.getX(); @@ -132,6 +135,10 @@ public void drawMouseoverTooltip(GuiGraphics drawContext, int mouseX, int mouseY int verticalColorOffset = yOffset / 7; int newColorIndex = horizontalColorOffset + verticalColorOffset * 8; + if(newColorIndex < 0 || newColorIndex >= usableColors.size()) { + return; + } + var hoveredColor = usableColors.get(newColorIndex); if (hoveredColor.getB()) { drawContext.renderTooltip(client.font, List.of(hoveredColor.getA().getName()), Optional.empty(), getX(), getY()); @@ -141,13 +148,4 @@ public void drawMouseoverTooltip(GuiGraphics drawContext, int mouseX, int mouseY } } - @Override - public void mouseMoved(double mouseX, double mouseY) { - super.mouseMoved(mouseX, mouseY); - } - - @Override - public @Nullable Tooltip getTooltip() { - return new WidgetTooltipHolder().get(); - } } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/InkMeterWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java similarity index 73% rename from src/main/java/de/dafuqs/spectrum/inventories/widgets/InkMeterWidget.java rename to src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java index 5b1819f385..3342268426 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/InkMeterWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java @@ -1,19 +1,18 @@ -package de.dafuqs.spectrum.inventories.widgets; +package de.dafuqs.spectrum.inventories.widgets.ink; import de.dafuqs.spectrum.api.energy.*; import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.api.energy.storage.*; import de.dafuqs.spectrum.helpers.*; -import net.minecraft.client.*; import net.minecraft.client.gui.*; import net.minecraft.client.gui.components.*; import net.minecraft.client.gui.narration.*; import net.minecraft.network.chat.*; import org.jetbrains.annotations.*; -import java.util.*; +import javax.annotation.Nullable; -public class InkMeterWidget extends AbstractWidget { +public class InkListWidget extends AbstractWidget { public static final int WIDTH_PER_COLOR = 4; public static final int SPACE_BETWEEN_COLORS = 2; @@ -21,7 +20,7 @@ public class InkMeterWidget extends AbstractWidget { protected final Iterable colors; protected final InkStorageBlockEntity inkStorageBlockEntity; - public InkMeterWidget(int x, int y, int height, InkStorageBlockEntity inkStorageBlockEntity, Iterable colors) { + public InkListWidget(int x, int y, int height, InkStorageBlockEntity inkStorageBlockEntity, Iterable colors) { super(x, y, inkStorageBlockEntity.getEnergyStorage().getSupportedColors().size() * (WIDTH_PER_COLOR + SPACE_BETWEEN_COLORS) - SPACE_BETWEEN_COLORS, height, Component.empty()); this.colors = colors; this.inkStorageBlockEntity = inkStorageBlockEntity; @@ -29,14 +28,7 @@ public InkMeterWidget(int x, int y, int height, InkStorageBlockEntity tooltip = new ArrayList<>(); - inkStorageBlockEntity.getEnergyStorage().addTooltip(tooltip); - drawContext.renderTooltip(client.font, tooltip, Optional.empty(), x, y); + } @Override @@ -56,4 +48,9 @@ protected void renderWidget(@NotNull GuiGraphics guiGraphics, int i, int i1, flo } } + @Nullable + public Tooltip getTooltip() { + return Tooltip.create(inkStorageBlockEntity.getEnergyStorage().getTooltip()); + } + } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/InkGaugeWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkPieWidget.java similarity index 70% rename from src/main/java/de/dafuqs/spectrum/inventories/widgets/InkGaugeWidget.java rename to src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkPieWidget.java index 780d51ce45..11b7586322 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/InkGaugeWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkPieWidget.java @@ -1,23 +1,22 @@ -package de.dafuqs.spectrum.inventories.widgets; +package de.dafuqs.spectrum.inventories.widgets.ink; import de.dafuqs.spectrum.api.energy.*; import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.helpers.*; -import net.minecraft.client.*; import net.minecraft.client.gui.*; import net.minecraft.client.gui.components.*; import net.minecraft.client.gui.narration.*; import net.minecraft.network.chat.*; import org.jetbrains.annotations.*; -import java.util.*; +import javax.annotation.Nullable; -public class InkGaugeWidget extends AbstractWidget { +public class InkPieWidget extends AbstractWidget { protected final InkStorageBlockEntity blockEntity; - public InkGaugeWidget(int x, int y, int width, int height, InkStorageBlockEntity blockEntity) { + public InkPieWidget(int x, int y, int width, int height, InkStorageBlockEntity blockEntity) { super(x, y, width, height, Component.empty()); this.blockEntity = blockEntity; } @@ -69,21 +68,9 @@ protected void renderWidget(@NotNull GuiGraphics guiGraphics, int i, int i1, flo } } - public void drawMouseoverTooltip(GuiGraphics drawContext, int x, int y) { - Minecraft client = Minecraft.getInstance(); - List tooltip = new ArrayList<>(); - for (InkColor color : InkColors.all()) { - long amount = blockEntity.getEnergyStorage().getEnergy(color); - if (amount > 0) { - InkStorage.addInkStoreBulletTooltip(tooltip, color, amount); - } - } - if (tooltip.isEmpty()) { - tooltip.add(Component.translatable("spectrum.tooltip.ink_powered.empty")); - } else { - tooltip.addFirst(Component.translatable("spectrum.tooltip.ink_powered.stored")); - } - drawContext.renderTooltip(client.font, tooltip, Optional.empty(), x, y); + @Nullable + public net.minecraft.client.gui.components.Tooltip getTooltip() { + return Tooltip.create(blockEntity.getEnergyStorage().getTooltip()); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/StackedInkMeterWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/StackedInkBarWidget.java similarity index 68% rename from src/main/java/de/dafuqs/spectrum/inventories/widgets/StackedInkMeterWidget.java rename to src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/StackedInkBarWidget.java index d873c85cd1..98a03c9a25 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/StackedInkMeterWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/StackedInkBarWidget.java @@ -1,23 +1,22 @@ -package de.dafuqs.spectrum.inventories.widgets; +package de.dafuqs.spectrum.inventories.widgets.ink; import de.dafuqs.spectrum.api.energy.*; import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.helpers.*; -import net.minecraft.client.*; import net.minecraft.client.gui.*; import net.minecraft.client.gui.components.*; import net.minecraft.client.gui.narration.*; import net.minecraft.network.chat.*; import org.jetbrains.annotations.*; -import java.util.*; +import javax.annotation.Nullable; -public class StackedInkMeterWidget extends AbstractWidget { +public class StackedInkBarWidget extends AbstractWidget { protected final InkStorageBlockEntity blockEntity; - public StackedInkMeterWidget(int x, int y, int width, int height, InkStorageBlockEntity blockEntity) { + public StackedInkBarWidget(int x, int y, int width, int height, InkStorageBlockEntity blockEntity) { super(x, y, width, height, Component.empty()); this.blockEntity = blockEntity; } @@ -30,7 +29,7 @@ protected void renderWidget(@NotNull GuiGraphics guiGraphics, int mouseX, int mo if (currentTotal > 0) { long maxTotal = inkStorage.getMaxTotal(); - int currentHeight = getX() + getHeight(); + int currentHeight = getY() + getHeight(); for (InkColor color : InkColors.all()) { long amount = inkStorage.getEnergy(color); if (amount > 0) { @@ -49,14 +48,12 @@ protected void updateWidgetNarration(@NotNull NarrationElementOutput narrationEl } - public void drawMouseoverTooltip(GuiGraphics drawContext, int x, int y) { - Minecraft client = Minecraft.getInstance(); + @Nullable + public Tooltip getTooltip() { InkStorage inkStorage = this.blockEntity.getEnergyStorage(); - long currentTotal = inkStorage.getCurrentTotal(); - String readableCurrentTotalString = Support.getShortenedNumberString(currentTotal); + String readableCurrentTotalString = Support.getShortenedNumberString(inkStorage.getCurrentTotal()); String percent = Support.getSensiblePercentString(inkStorage.getCurrentTotal(), (inkStorage.getMaxTotal())); - drawContext.renderTooltip(client.font, List.of(Component.translatable("spectrum.tooltip.ink_powered.percent_filled", readableCurrentTotalString, percent)), - Optional.empty(), x, y); + return Tooltip.create(Component.translatable("spectrum.tooltip.ink_powered.percent_filled", readableCurrentTotalString, percent)); } } diff --git a/src/main/java/de/dafuqs/spectrum/items/energy/ArtistsPaletteItem.java b/src/main/java/de/dafuqs/spectrum/items/energy/ArtistsPaletteItem.java index 80e343ea21..826c7ec1e1 100644 --- a/src/main/java/de/dafuqs/spectrum/items/energy/ArtistsPaletteItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/energy/ArtistsPaletteItem.java @@ -52,7 +52,7 @@ public ItemStack getDefaultInstance() { public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag type) { super.appendHoverText(stack, context, tooltip, type); tooltip.add(Component.translatable("item.spectrum.pigment_palette.tooltip.target").withStyle(ChatFormatting.GRAY)); - getEnergyStorage(stack).addTooltip(tooltip); + tooltip.add(getEnergyStorage(stack).getTooltip()); addBannerPatternProviderTooltip(tooltip); } diff --git a/src/main/java/de/dafuqs/spectrum/items/energy/CreativeInkAssortmentItem.java b/src/main/java/de/dafuqs/spectrum/items/energy/CreativeInkAssortmentItem.java index b89e64f1a8..edfde1968c 100644 --- a/src/main/java/de/dafuqs/spectrum/items/energy/CreativeInkAssortmentItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/energy/CreativeInkAssortmentItem.java @@ -62,7 +62,7 @@ public void setEnergyStorage(ItemStack itemStack, InkStorage storage) { public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag type) { super.appendHoverText(stack, context, tooltip, type); CreativeOnlyItem.appendTooltip(tooltip); - getEnergyStorage(stack).addTooltip(tooltip); + tooltip.add(getEnergyStorage(stack).getTooltip()); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/items/energy/InkAssortmentItem.java b/src/main/java/de/dafuqs/spectrum/items/energy/InkAssortmentItem.java index 57f3ac1c44..d9c93cf54a 100644 --- a/src/main/java/de/dafuqs/spectrum/items/energy/InkAssortmentItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/energy/InkAssortmentItem.java @@ -45,7 +45,7 @@ public ItemStack getDefaultInstance() { @Override public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag type) { super.appendHoverText(stack, context, tooltip, type); - getEnergyStorage(stack).addTooltip(tooltip); + tooltip.add(getEnergyStorage(stack).getTooltip()); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/items/energy/InkFlaskItem.java b/src/main/java/de/dafuqs/spectrum/items/energy/InkFlaskItem.java index 1e7e9061c2..72d63d149f 100644 --- a/src/main/java/de/dafuqs/spectrum/items/energy/InkFlaskItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/energy/InkFlaskItem.java @@ -12,6 +12,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.block.entity.*; +import net.neoforged.neoforge.event.entity.player.*; import org.jetbrains.annotations.*; import java.util.*; @@ -48,7 +49,7 @@ public ItemStack getDefaultInstance() { @Override public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag type) { super.appendHoverText(stack, context, tooltip, type); - getEnergyStorage(stack).addTooltip(tooltip); + tooltip.add(getEnergyStorage(stack).getTooltip()); addBannerPatternProviderTooltip(tooltip); } diff --git a/src/main/java/de/dafuqs/spectrum/items/energy/PigmentPaletteItem.java b/src/main/java/de/dafuqs/spectrum/items/energy/PigmentPaletteItem.java index 4d4f956708..0b5be67568 100644 --- a/src/main/java/de/dafuqs/spectrum/items/energy/PigmentPaletteItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/energy/PigmentPaletteItem.java @@ -52,7 +52,7 @@ public IndividualCappedInkStorage getEnergyStorage(ItemStack itemStack) { public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag type) { super.appendHoverText(stack, context, tooltip, type); tooltip.add(Component.translatable("item.spectrum.pigment_palette.tooltip.target").withStyle(ChatFormatting.GRAY)); - getEnergyStorage(stack).addTooltip(tooltip); + tooltip.add(getEnergyStorage(stack).getTooltip()); addBannerPatternProviderTooltip(tooltip); } diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java index 11299744be..50de6061ff 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java @@ -151,8 +151,8 @@ private boolean cursedColor(UseOnContext context) { } InkColor inkColor = optionalInkColor.get(); - BlockState newBlockState = VariantHelper.getColoredBlock(context.getLevel(), context.getClickedPos(), inkColor); - if (newBlockState.isAir()) { + @Nullable BlockState newBlockState = VariantHelper.getColoredBlock(context.getLevel(), context.getClickedPos(), inkColor); + if (newBlockState == null) { return false; } diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index a576c32f9c..64c775be48 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -4387,7 +4387,7 @@ "item.spectrum.artisans_atlas.set_structure": "Now locates ", "item.spectrum.artisans_atlas.unlocatable": "The aura of this structure seems to be of a special kind", "item.spectrum.artists_palette": "Artist's Palette", - "item.spectrum.artists_palette.tooltip": "§7Stores up to %d§7 of elemental Ink in total", + "item.spectrum.artists_palette.tooltip": "§7Stores up to %d§7 elemental colored Ink in total", "item.spectrum.artists_palette.tooltip.mix_on_demand": "§7Mixes other types of Ink on demand", "item.spectrum.ash_flakes": "Ash Flakes", "item.spectrum.ashen_circlet": "Ashen Circlet", @@ -4696,8 +4696,8 @@ "item.spectrum.infused_beverage.tooltip.variant.crown_jewel": "Crown Jewel", "item.spectrum.ink_assortment": "Ink Assortment", "item.spectrum.ink_flask": "Ink Flask", - "item.spectrum.ink_storage.stores_ink_per_type": "§7Stores up to %d§7 Ink per type", - "item.spectrum.ink_storage.stores_up_to_ink_per_type": "§7Stores up to %d§7 of one type of Ink", + "item.spectrum.ink_storage.stores_ink_per_type": "§7Stores up to %d§7 Ink per color", + "item.spectrum.ink_storage.stores_up_to_ink_per_type": "§7Stores up to %d§7 of a single color of Ink", "item.spectrum.jade_jelly": "Jade Jelly", "item.spectrum.jade_jelly.tooltip": "Nutritious, as well as tasty", "item.spectrum.jade_vine_petals": "Jade Petals", From 941b2233c4545678bd00b10f440881b32d7533e3 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 2 May 2026 20:10:28 +0200 Subject: [PATCH 031/477] code cleanup --- .../inventories/CinderhearthScreen.java | 2 +- .../inventories/ColorPickerScreen.java | 15 ++++---------- .../inventories/InkTransferScreen.java | 20 ++++++------------- .../inventories/TintingStationScreen.java | 13 +++--------- 4 files changed, 14 insertions(+), 36 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java index 6ad64beddc..dc1466f60c 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java @@ -75,7 +75,7 @@ protected void renderTooltip(GuiGraphics drawContext, int x, int y) { super.renderTooltip(drawContext, x, y); if (this.inkListWidget.isHoveredOrFocused()) { - drawContext.renderTooltip(this.font, this.inkListWidget.getTooltip().toCharSequence(Minecraft.getInstance()), x, y); + drawContext.renderTooltip(this.font, this.inkListWidget.getTooltip().toCharSequence(this.minecraft), x, y); } } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java index c5b0d27169..c852c7c237 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java @@ -11,17 +11,16 @@ public class ColorPickerScreen extends InkTransferScreen { - protected final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); + protected static final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); protected StackedInkBarWidget stackedInkBarWidget; protected InkPieWidget inkPieWidget; public ColorPickerScreen(InkTransferScreenHandler handler, Inventory playerInventory, Component title) { - super(handler, playerInventory, title); + super(handler, playerInventory, title, BACKGROUND); this.imageHeight = 166; } - @Override protected void init() { super.init(); @@ -32,21 +31,15 @@ protected void init() { addRenderableWidget(stackedInkBarWidget); } - @Override - protected void renderBg(GuiGraphics drawContext, float partialTick, int mouseX, int mouseY) { - drawContext.blit(BACKGROUND, getGuiLeft(), getGuiTop(), 0, 0, imageWidth, imageHeight); - super.renderBg(drawContext, partialTick, mouseX, mouseY); - } - @Override protected void renderTooltip(@NotNull GuiGraphics guiGraphics, int x, int y) { super.renderTooltip(guiGraphics, x, y); if (this.inkPieWidget.isHoveredOrFocused()) { - guiGraphics.renderTooltip(this.font, this.inkPieWidget.getTooltip().toCharSequence(Minecraft.getInstance()), x, y); + guiGraphics.renderTooltip(this.font, this.inkPieWidget.getTooltip().toCharSequence(this.minecraft), x, y); } if (this.stackedInkBarWidget.isHoveredOrFocused()) { - guiGraphics.renderTooltip(this.font, this.stackedInkBarWidget.getTooltip().toCharSequence(Minecraft.getInstance()), x, y); + guiGraphics.renderTooltip(this.font, this.stackedInkBarWidget.getTooltip().toCharSequence(this.minecraft), x, y); } } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java index 0d19cb4fe0..bbcd669e5c 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java @@ -1,13 +1,10 @@ package de.dafuqs.spectrum.inventories; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.blocks.energy.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.inventories.widgets.*; -import de.dafuqs.spectrum.inventories.widgets.ink.*; import de.dafuqs.spectrum.networking.c2s_payloads.*; -import net.minecraft.client.*; import net.minecraft.client.gui.*; import net.minecraft.client.gui.screens.inventory.*; import net.minecraft.core.*; @@ -22,12 +19,12 @@ public class InkTransferScreen extends AbstractContainerScreen implements Consumer>> { - protected final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); - + protected final ResourceLocation background; protected ColorSelectionWidget colorSelectionWidget; - public InkTransferScreen(InkTransferScreenHandler handler, Inventory playerInventory, Component title) { + public InkTransferScreen(InkTransferScreenHandler handler, Inventory playerInventory, Component title, ResourceLocation background) { super(handler, playerInventory, title); + this.background = background; this.imageHeight = 166; } @@ -48,19 +45,14 @@ protected void renderLabels(GuiGraphics drawContext, int mouseX, int mouseY) { } @Override - protected void renderBg(GuiGraphics drawContext, float delta, int mouseX, int mouseY) { - // main background - drawContext.blit(BACKGROUND, getGuiLeft(), getGuiTop(), 0, 0, imageWidth, imageHeight); - + protected void renderBg(GuiGraphics guiGraphics, float partialTick, int mouseX, int mouseY) { + guiGraphics.blit(background, getGuiLeft(), getGuiTop(), 0, 0, imageWidth, imageHeight); } @Override public void render(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { super.render(guiGraphics, mouseX, mouseY, delta); - - // gauge blanket - guiGraphics.blit(BACKGROUND, getGuiLeft() + 52, getGuiTop() + 18, 176, 0, 46, 46); - + guiGraphics.blit(background, getGuiLeft() + 52, getGuiTop() + 18, 176, 0, 46, 46); // gauge blanket renderTooltip(guiGraphics, mouseX, mouseY); } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java index 3defcc86fd..2042f07b73 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java @@ -14,12 +14,12 @@ public class TintingStationScreen extends InkTransferScreen { - protected final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); + protected static final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); protected InkListWidget inkListWidget; public TintingStationScreen(InkTransferScreenHandler handler, Inventory playerInventory, Component title) { - super(handler, playerInventory, title); + super(handler, playerInventory, title, BACKGROUND); } @Override @@ -30,19 +30,12 @@ protected void init() { addRenderableWidget(inkListWidget); } - @Override - protected void renderBg(GuiGraphics drawContext, float delta, int mouseX, int mouseY) { - super.renderBg(drawContext, delta, mouseX, mouseY); - drawContext.blit(BACKGROUND, getGuiLeft(), getGuiTop(), 0, 0, imageWidth, imageHeight); - super.renderBg(drawContext, delta, mouseX, mouseY); - } - @Override protected void renderTooltip(@NotNull GuiGraphics guiGraphics, int x, int y) { super.renderTooltip(guiGraphics, x, y); if (this.inkListWidget.isHoveredOrFocused()) { - guiGraphics.renderTooltip(this.font, this.inkListWidget.getTooltip().toCharSequence(Minecraft.getInstance()), x, y); + guiGraphics.renderTooltip(this.font, this.inkListWidget.getTooltip().toCharSequence(this.minecraft), x, y); } } From 4beba31cbf60e9e71807e9045a6f9f268c189d6c Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 2 May 2026 20:15:08 +0200 Subject: [PATCH 032/477] no swearing pls. Also tweaks --- .../dafuqs/spectrum/helpers/Orientation.java | 2 +- .../dafuqs/spectrum/helpers/SchedulerMap.java | 4 +-- .../spectrum/helpers/VariantHelper.java | 28 ++++--------------- 3 files changed, 8 insertions(+), 26 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/helpers/Orientation.java b/src/main/java/de/dafuqs/spectrum/helpers/Orientation.java index 8edac9f276..c7cb5eb646 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/Orientation.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/Orientation.java @@ -40,7 +40,7 @@ public Orientation subtract(Orientation other) { } /** - * Phi my phucking phnuts + * Reference: http://www.vias.org/comp_geometry/math_coord_sphere.htm */ public static Orientation getVectorOrientation(Vec3 vector) { var r = vector.length(); diff --git a/src/main/java/de/dafuqs/spectrum/helpers/SchedulerMap.java b/src/main/java/de/dafuqs/spectrum/helpers/SchedulerMap.java index 8b49eee751..2e660721fd 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/SchedulerMap.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/SchedulerMap.java @@ -53,8 +53,8 @@ public void tick() { if (next.getValue() >= 1) { next.setValue(next.getValue() - 1); } else { - if (key instanceof SchedulerMap.Callback) { - ((Callback) key).trigger(); + if (key instanceof SchedulerMap.Callback callback) { + callback.trigger(); } iterator.remove(); } diff --git a/src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java index 08bd2633f4..c6dbe304d1 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java @@ -19,6 +19,7 @@ public class VariantHelper { private static final Map> COLORED_STATE_CACHE = new HashMap<>(); private static final Map> COLORED_ITEM_CACHE = new HashMap<>(); + private static final Map REPAIRED_STATE_CACHE = new HashMap<>(); public static @Nullable BlockState getColoredBlock(Level world, BlockPos pos, InkColor newColor) { if (world.getBlockEntity(pos) != null) { @@ -71,28 +72,9 @@ public class VariantHelper { public static void invalidateCaches() { COLORED_STATE_CACHE.clear(); COLORED_ITEM_CACHE.clear(); + REPAIRED_STATE_CACHE.clear(); } - // cache for getCursedRepairedBlockVariant() - private static final Map repairedStates = new HashMap<>() {{ - put(Blocks.CRACKED_DEEPSLATE_BRICKS, Blocks.DEEPSLATE_BRICKS); - put(Blocks.CRACKED_DEEPSLATE_TILES, Blocks.DEEPSLATE_TILES); - put(Blocks.CRACKED_NETHER_BRICKS, Blocks.NETHER_BRICKS); - put(Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS, Blocks.POLISHED_BLACKSTONE_BRICKS); - put(Blocks.CRACKED_STONE_BRICKS, Blocks.STONE_BRICKS); - put(Blocks.INFESTED_CRACKED_STONE_BRICKS, Blocks.INFESTED_STONE_BRICKS); - - put(Blocks.DAMAGED_ANVIL, Blocks.CHIPPED_ANVIL); - put(Blocks.CHIPPED_ANVIL, Blocks.ANVIL); - - put(Blocks.EXPOSED_COPPER, Blocks.COPPER_BLOCK); - put(Blocks.WEATHERED_COPPER, Blocks.EXPOSED_COPPER); - put(Blocks.OXIDIZED_COPPER, Blocks.WEATHERED_COPPER); - put(Blocks.EXPOSED_CUT_COPPER, Blocks.CUT_COPPER); - put(Blocks.WEATHERED_CUT_COPPER, Blocks.EXPOSED_CUT_COPPER); - put(Blocks.OXIDIZED_CUT_COPPER, Blocks.WEATHERED_CUT_COPPER); - }}; - //TODO: unused public static Block getRepairedBlockVariant(Level world, BlockPos blockPos) { BlockEntity blockEntity = world.getBlockEntity(blockPos); @@ -107,8 +89,8 @@ public static Block getRepairedBlockVariant(Level world, BlockPos blockPos) { Block block = blockState.getBlock(); - if (repairedStates.containsKey(block)) { - return repairedStates.get(block); + if (REPAIRED_STATE_CACHE.containsKey(block)) { + return REPAIRED_STATE_CACHE.get(block); } ResourceLocation identifier = BuiltInRegistries.BLOCK.getKey(block); @@ -128,7 +110,7 @@ public static Block getRepairedBlockVariant(Level world, BlockPos blockPos) { } // cache - repairedStates.put(block, returnBlock); + REPAIRED_STATE_CACHE.put(block, returnBlock); return returnBlock; } From 034dc2c4d6f0e8388b43641692232e63c589f765 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 2 May 2026 20:41:35 +0200 Subject: [PATCH 033/477] coloring glass and other blocks with weird naming schemes --- .../entity/entity/InkProjectileEntity.java | 2 +- .../spectrum/helpers/VariantHelper.java | 23 ++++++++++++++----- .../items/magic_items/PaintbrushItem.java | 2 +- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java index 2a68a254da..21ad032973 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java @@ -189,7 +189,7 @@ protected void onHitBlock(BlockHitResult blockHitResult) { continue; } if (dyeColor.isPresent()) { - @Nullable BlockState coloredBlockState = VariantHelper.getColoredBlock(this.level(), blockPos, inkColor); + @Nullable BlockState coloredBlockState = VariantHelper.getColoredBlockState(this.level(), blockPos, inkColor); if (coloredBlockState != null) { this.level().setBlockAndUpdate(blockPos, coloredBlockState); } diff --git a/src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java index c6dbe304d1..c29657ebf9 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java @@ -21,7 +21,7 @@ public class VariantHelper { private static final Map> COLORED_ITEM_CACHE = new HashMap<>(); private static final Map REPAIRED_STATE_CACHE = new HashMap<>(); - public static @Nullable BlockState getColoredBlock(Level world, BlockPos pos, InkColor newColor) { + public static @Nullable BlockState getColoredBlockState(Level world, BlockPos pos, InkColor newColor) { if (world.getBlockEntity(pos) != null) { return null; } @@ -32,7 +32,7 @@ public class VariantHelper { } Block block = state.getBlock(); - Block result = recolorRegistryObject(block, newColor, COLORED_STATE_CACHE, BuiltInRegistries.BLOCK::getKey, BuiltInRegistries.BLOCK::get); + Block result = recolorRegistryObject(block, newColor, COLORED_STATE_CACHE, BuiltInRegistries.BLOCK::getKey, BuiltInRegistries.BLOCK::get, Blocks.AIR); return result != null ? result.withPropertiesOf(state) : null; } @@ -40,16 +40,18 @@ public class VariantHelper { if (stack.is(SpectrumItemTags.COLORING_BLACKLISTED)) { return null; } + Item item = stack.getItem(); - return recolorRegistryObject(item, newColor, COLORED_ITEM_CACHE, BuiltInRegistries.ITEM::getKey, BuiltInRegistries.ITEM::get); + return recolorRegistryObject(item, newColor, COLORED_ITEM_CACHE, BuiltInRegistries.ITEM::getKey, BuiltInRegistries.ITEM::get, Items.AIR); } - public static @Nullable T recolorRegistryObject(T original, InkColor newColor, Map> cache, Function idGetter, Function lookup) { + public static @Nullable T recolorRegistryObject(T original, InkColor newColor, Map> cache, Function idGetter, Function lookup, T defaultToIgnore) { Map colorMap = cache.computeIfAbsent(original, k -> new HashMap<>()); return colorMap.computeIfAbsent(newColor, color -> { ResourceLocation id = idGetter.apply(original); String[] parts = id.getPath().split("_"); + // Option 1: try replacing an existing color ("red_concrete" => "light_blue_concrete") for (int i = 0; i < parts.length; i++) { int finalI = i; InkColor matched = SpectrumRegistries.INK_COLOR.stream() @@ -62,10 +64,19 @@ public class VariantHelper { String newPath = String.join("_", parts); ResourceLocation newId = ResourceLocation.fromNamespaceAndPath(id.getNamespace(), newPath); T newObj = lookup.apply(newId); - return !newObj.equals(original) ? newObj : null; + return (newObj != defaultToIgnore && !newObj.equals(original)) ? newObj : null; } } - return null; + + // Option 2: prefix the color ("concrete" => "light_blue_concrete") + T newObj = lookup.apply(ResourceLocation.fromNamespaceAndPath(id.getNamespace(), color.getID().getPath() + "_" + id.getPath())); + if(newObj != defaultToIgnore && !newObj.equals(original)) { + return newObj; + } + + // Option 3: prefix the color + "stained" ("glass" => "red_stained_glass") + newObj = lookup.apply(ResourceLocation.fromNamespaceAndPath(id.getNamespace(), color.getID().getPath() + "_stained_" + id.getPath())); + return (newObj != defaultToIgnore && !newObj.equals(original)) ? newObj : null; }); } diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java index 50de6061ff..6537234be2 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java @@ -151,7 +151,7 @@ private boolean cursedColor(UseOnContext context) { } InkColor inkColor = optionalInkColor.get(); - @Nullable BlockState newBlockState = VariantHelper.getColoredBlock(context.getLevel(), context.getClickedPos(), inkColor); + @Nullable BlockState newBlockState = VariantHelper.getColoredBlockState(context.getLevel(), context.getClickedPos(), inkColor); if (newBlockState == null) { return false; } From c09f2d7e48b89cfec72bae43c4fd75887935a196 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 2 May 2026 21:02:56 +0200 Subject: [PATCH 034/477] fix merge conflicts --- .../blocks/energy/ColorPickerBlockEntity.java | 69 +++++------- .../blocks/energy/PaintingStationBlock.java | 57 ---------- .../energy/PaintingStationBlockEntity.java | 101 ------------------ 3 files changed, 27 insertions(+), 200 deletions(-) delete mode 100644 src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java delete mode 100644 src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java index 0bec387d83..0953ff5560 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.blocks.energy; -import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.energy.*; import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.api.energy.storage.*; @@ -10,15 +9,12 @@ import de.dafuqs.spectrum.inventories.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.particle.effect.*; -import de.dafuqs.spectrum.progression.*; import de.dafuqs.spectrum.recipe.color_picker.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.nbt.*; import net.minecraft.network.*; import net.minecraft.network.chat.*; -import net.minecraft.network.protocol.*; -import net.minecraft.network.protocol.game.*; import net.minecraft.server.level.*; import net.minecraft.sounds.*; import net.minecraft.world.*; @@ -27,54 +23,43 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; import org.jetbrains.annotations.*; import java.util.*; -public class ColorPickerBlockEntity extends RandomizableContainerBlockEntity implements PlayerOwned, InkStorageBlockEntity, MenuProvider { +public class ColorPickerBlockEntity extends BaseInkTransferBlockEntity implements MenuProvider { - public static final int INVENTORY_SIZE = 2; // input & output slots - public static final int INPUT_SLOT_ID = 0; - public static final int OUTPUT_SLOT_ID = 1; public static final long TICKS_PER_CONVERSION = 5; - public static final long STORAGE_AMOUNT = 64 * 64 * 64 * 100; - - public NonNullList inventory; - protected TotalCappedInkStorage inkStorage; - protected boolean paused; - protected boolean inkDirty; + public static final long STORAGE_AMOUNT = (long) Math.pow(2, 16); protected @Nullable InkConvertingRecipe cachedRecipe; - protected Optional> selectedColor = Optional.empty(); - private UUID ownerUUID; public ColorPickerBlockEntity(BlockPos blockPos, BlockState blockState) { - super(SpectrumBlockEntities.COLOR_PICKER.get(), blockPos, blockState); - - this.inventory = NonNullList.withSize(INVENTORY_SIZE, ItemStack.EMPTY); - this.inkStorage = new TotalCappedInkStorage(STORAGE_AMOUNT, Map.of()); + super(SpectrumBlockEntities.COLOR_PICKER.get(), blockPos, blockState, new TotalCappedInkStorage(STORAGE_AMOUNT, Map.of())); } @SuppressWarnings("unused") public static void serverTick(Level world, BlockPos pos, BlockState state, ColorPickerBlockEntity blockEntity) { - blockEntity.inkDirty = false; - if (!blockEntity.paused) { - boolean convertedPigment = false; - boolean shouldPause = true; - if (world.getGameTime() % TICKS_PER_CONVERSION == 0) { - convertedPigment = blockEntity.tryConvertPigmentToEnergy((ServerLevel) world); - } else { - shouldPause = false; - } - boolean filledContainer = blockEntity.tryFillInkContainer(); // that's an OR - - if (convertedPigment || filledContainer) { - blockEntity.setChanged(); - } else if (shouldPause) { - blockEntity.paused = true; + if (!world.isClientSide) { + blockEntity.inkDirty = false; + if (!blockEntity.paused) { + boolean convertedPigment = false; + boolean shouldPause = true; + if (world.getGameTime() % TICKS_PER_CONVERSION == 0) { + convertedPigment = blockEntity.tryConvertPigmentToEnergy((ServerLevel) world); + } else { + shouldPause = false; + } + boolean filledContainer = blockEntity.tryFillInkContainer(); // that's an OR + + if (convertedPigment || filledContainer) { + blockEntity.updateInClientWorld(); + blockEntity.setInkDirty(); + blockEntity.setChanged(); + } else if (shouldPause) { + blockEntity.paused = true; + } } } } @@ -98,16 +83,16 @@ protected Component getDefaultName() { @Override protected AbstractContainerMenu createMenu(int syncId, Inventory playerInventory) { - return new ColorPickerScreenHandler(syncId, playerInventory, this, new InkTransferScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor).inkColor()); + return new ColorPickerScreenHandler(syncId, playerInventory, playerInventory.player.level().getBlockEntity(new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor).pos(), SpectrumBlockEntities.COLOR_PICKER.get()).orElseThrow(), new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor).inkColor()); } @Override public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { - InkTransferScreenHandler.ScreenOpeningData.PACKET_CODEC.encode(buffer, new InkTransferScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); + ColorPickerScreenHandler.ScreenOpeningData.PACKET_CODEC.encode(buffer, new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); } - protected boolean tryConvertPigmentToEnergy(ServerLevel level) { - InkConvertingRecipe recipe = getInkConvertingRecipe(level); + protected boolean tryConvertPigmentToEnergy(ServerLevel world) { + InkConvertingRecipe recipe = getInkConvertingRecipe(world); if (recipe != null) { InkColor inkColor = recipe.getInkColor(); long amount = recipe.getInkAmount(); @@ -118,7 +103,7 @@ protected boolean tryConvertPigmentToEnergy(ServerLevel level) { if (SpectrumConfig.CONFIG.BlockSoundVolume.get() > 0) { level.playSound(null, worldPosition, SpectrumSoundEvents.COLOR_PICKER_PROCESSING, SoundSource.BLOCKS, SpectrumConfig.CONFIG.BlockSoundVolume.get().floatValue() / 3F, 1.0F); } - PlayParticleWithRandomOffsetAndVelocityPayload.playParticleWithRandomOffsetAndVelocity(level, + PlayParticleWithRandomOffsetAndVelocityPayload.playParticleWithRandomOffsetAndVelocity(world, new Vec3(worldPosition.getX() + 0.5, worldPosition.getY() + 0.7, worldPosition.getZ() + 0.5), ColoredFluidRisingParticleEffect.of(inkColor.getColorInt()), 5, diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java deleted file mode 100644 index 3322e2620a..0000000000 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlock.java +++ /dev/null @@ -1,57 +0,0 @@ -package de.dafuqs.spectrum.blocks.energy; - -import com.mojang.serialization.*; -import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.*; -import net.minecraft.core.*; -import net.minecraft.network.chat.*; -import net.minecraft.world.entity.player.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.*; -import net.minecraft.world.level.block.entity.*; -import net.minecraft.world.level.block.state.*; -import org.jetbrains.annotations.*; - -import java.util.*; - -public class PaintingStationBlock extends BaseInkTransferBlock { - - public static final MapCodec CODEC = simpleCodec(PaintingStationBlock::new); - - public PaintingStationBlock(Properties settings) { - super(settings); - } - - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipFlag type) { - super.appendHoverText(stack, context, tooltip, type); - tooltip.add(Component.translatable("block.spectrum.painting_station.tooltip").withStyle(ChatFormatting.GRAY)); - } - - @Override - public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new ColorPickerBlockEntity(pos, state); - } - - @Nullable - @Override - public BlockEntityTicker getTicker(Level world, BlockState state, BlockEntityType type) { - return world.isClientSide ? null : Support.checkType(type, SpectrumBlockEntities.COLOR_PICKER.get(), ColorPickerBlockEntity::tick); - } - - @Override - protected void openScreen(Level world, BlockPos pos, Player player) { - BlockEntity blockEntity = world.getBlockEntity(pos); - if (blockEntity instanceof ColorPickerBlockEntity colorPickerBlockEntity) { - colorPickerBlockEntity.setOwner(player); - player.openMenu(colorPickerBlockEntity); - } - } - -} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java deleted file mode 100644 index 332cf69493..0000000000 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/PaintingStationBlockEntity.java +++ /dev/null @@ -1,101 +0,0 @@ -package de.dafuqs.spectrum.blocks.energy; - -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; -import de.dafuqs.spectrum.components.*; -import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.inventories.*; -import de.dafuqs.spectrum.recipe.color_picker.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.core.*; -import net.minecraft.nbt.*; -import net.minecraft.network.*; -import net.minecraft.network.chat.*; -import net.minecraft.world.*; -import net.minecraft.world.entity.player.*; -import net.minecraft.world.inventory.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.*; -import net.minecraft.world.level.block.state.*; -import org.jetbrains.annotations.*; - -import java.util.*; - -public class PaintingStationBlockEntity extends BaseInkTransferBlockEntity implements MenuProvider { - - public static final long TICKS_PER_CONVERSION = 5; - public static final long ITEM_COLORING_COST = 10; - public static final long STORAGE_AMOUNT = (long) Math.pow(2, 64); - protected @Nullable InkConvertingRecipe cachedRecipe; - - public PaintingStationBlockEntity(BlockPos blockPos, BlockState blockState) { - super(SpectrumBlockEntities.PAINTING_STATION.get(), blockPos, blockState, new IndividualCappedInkStorage(STORAGE_AMOUNT, Map.of())); - } - - @SuppressWarnings("unused") - public static void tick(Level world, BlockPos pos, BlockState state, PaintingStationBlockEntity blockEntity) { - if (!world.isClientSide) { - blockEntity.inkDirty = false; - if (!blockEntity.paused) { - boolean convertedPigment = false; - boolean didSomething = true; - - Optional> selectedColor = blockEntity.getSelectedColor(); - InkStorage inkStorage = blockEntity.getEnergyStorage(); - - if (selectedColor.isPresent() && world.getGameTime() % TICKS_PER_CONVERSION == 0) { - if (inkStorage.getEnergy(selectedColor.get().value()) >= ITEM_COLORING_COST) { - didSomething = blockEntity.tryColorItem(selectedColor); - } - } else { - didSomething = blockEntity.tryFillInkContainer(); - } - - if (didSomething) { - blockEntity.updateInClientWorld(); - blockEntity.setInkDirty(); - blockEntity.setChanged(); - } else { - blockEntity.paused = true; - } - } - } - } - - @Override - public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { - super.loadAdditional(nbt, registryLookup); - CodecHelper.fromNbt(InkStorageComponent.CODEC, nbt.get("InkStorage")).ifPresent(storage -> this.inkStorage = new IndividualCappedInkStorage(storage.maxEnergyTotal(), storage.storedEnergy())); - } - - @Override - protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { - super.saveAdditional(nbt, registryLookup); - CodecHelper.writeNbt(nbt, "InkStorage", InkStorageComponent.CODEC, new InkStorageComponent(this.inkStorage)); - } - - @Override - protected Component getDefaultName() { - return Component.translatable("block.spectrum.painting_station"); - } - - @Override - protected AbstractContainerMenu createMenu(int syncId, Inventory playerInventory) { - return new ColorPickerScreenHandler(syncId, playerInventory, playerInventory.player.level().getBlockEntity(new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor).pos(), SpectrumBlockEntities.COLOR_PICKER.get()).orElseThrow(), new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor).inkColor()); - } - - @Override - public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { - ColorPickerScreenHandler.ScreenOpeningData.PACKET_CODEC.encode(buffer, new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); - } - - @Override - public boolean canPlaceItem(int slot, ItemStack stack) { - if (slot == OUTPUT_SLOT_ID) { - return stack.getItem() instanceof InkStorageItem; - } - return true; - } - -} From cb8da8517a6fe84fbd3a28cf283f796d298018e4 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 24 May 2026 14:50:59 +0200 Subject: [PATCH 035/477] ink as capability; rename energy package to ink --- disabled/compat/botania/BotaniaCompat.java | 2 +- .../de/dafuqs/spectrum/data/BlockDatagen.java | 2 +- .../dafuqs/spectrum/data/SpectrumItems.java | 2 +- .../spectrum/data/SpectrumRecipeProvider.java | 2 +- .../de/dafuqs/spectrum/SpectrumCommon.java | 2 +- .../block/InkColorSelectedPacketReceiver.java | 2 +- .../spectrum/api/color/ColorRegistry.java | 3 - .../spectrum/api/energy/InkStorage.java | 214 ------------------ .../api/{energy => ink}/InkAmount.java | 4 +- .../api/{energy => ink}/InkPowered.java | 5 +- .../InkPoweredStatusEffectInstance.java | 2 +- .../spectrum/api/ink/InkTransferHelper.java | 120 ++++++++++ .../capability/BlockEntityInkCapability.java | 38 ++++ .../api/ink/capability/InkCapabilities.java | 22 ++ .../api/ink/capability/InkCapability.java | 9 + .../api/ink/capability/ItemInkCapability.java | 36 +++ .../api/{energy => ink}/color/InkColor.java | 2 +- .../{energy => ink}/color/InkColorMixes.java | 4 +- .../{energy => ink}/color/InkColorTags.java | 2 +- .../api/{energy => ink}/color/InkColors.java | 2 +- .../storage/CreativeInkStorage.java | 14 +- .../storage/FixedSingleInkStorage.java | 4 +- .../storage/IndividualCappedInkStorage.java | 21 +- .../spectrum/api/ink/storage/InkStorage.java | 140 ++++++++++++ .../storage}/InkStorageBlockEntity.java | 16 +- .../storage}/InkStorageItem.java | 2 +- .../storage/SingleInkStorage.java | 22 +- .../TotalCappedElementalMixingInkStorage.java | 18 +- .../storage/TotalCappedInkStorage.java | 24 +- .../api/item/InkPoweredPotionFillable.java | 2 +- .../spectrum/blocks/BismuthBudBlock.java | 2 +- .../colored_tree/ColoredFenceBlock.java | 2 +- .../colored_tree/ColoredFenceGateBlock.java | 2 +- .../colored_tree/ColoredLeavesBlock.java | 2 +- .../colored_tree/ColoredLightBlock.java | 2 +- .../colored_tree/ColoredLogBlock.java | 2 +- .../colored_tree/ColoredPlankBlock.java | 2 +- .../ColoredPressurePlateBlock.java | 2 +- .../colored_tree/ColoredSaplingBlock.java | 2 +- .../colored_tree/ColoredSlabBlock.java | 2 +- .../ColoredSporeBlossomBlock.java | 2 +- .../colored_tree/ColoredStairBlock.java | 2 +- .../ColoredStrippedSpectrumLogBlock.java | 2 +- .../ColoredStrippedWoodBlockSpectrum.java | 2 +- .../conditional/colored_tree/ColoredTree.java | 2 +- .../colored_tree/ColoredWoodBlock.java | 2 +- .../ColoredWoodenButtonBlock.java | 2 +- .../PottedColoredSaplingBlock.java | 2 +- .../spectrum/blocks/decoration/GlowBlock.java | 2 +- .../blocks/decoration/PigmentBlock.java | 2 +- .../energy/BaseInkTransferBlockEntity.java | 46 ++-- .../CinderhearthBlock.java | 2 +- .../CinderhearthBlockEntity.java | 13 +- .../blocks/energy/ColorPickerBlockEntity.java | 8 +- .../CrystallarieumBlock.java | 6 +- .../CrystallarieumBlockEntity.java | 7 +- .../CrystallarieumBlockEntityRenderer.java | 4 +- .../energy/TintingStationBlockEntity.java | 184 +++++++++------ .../FusionShrineBlockEntity.java | 2 +- .../SpectrumClusterBlock.java | 2 +- .../blocks/item_bowl/ItemBowlBlockEntity.java | 4 +- .../SpectrumSkullBlockEntityRenderer.java | 2 +- .../payloads/InkPastelPayload.java | 8 +- .../payloads/InkPastelPayloadType.java | 29 +-- .../blocks/pedestal/BuiltinGemstoneColor.java | 2 +- .../spectrum/blocks/present/PresentBlock.java | 2 +- .../blocks/present/PresentBlockEntity.java | 1 - .../blocks/present/PresentBlockItem.java | 2 +- .../capabilities/SpectrumCapabilities.java | 15 +- .../spectrum/commands/SanityCommand.java | 2 +- .../REI/plugins/CrystallarieumCategory.java | 2 +- .../REI/plugins/CrystallarieumDisplay.java | 2 +- .../REI/plugins/InkConvertingDisplay.java | 2 +- .../dafuqs/spectrum/compat/ae2/AE2Compat.java | 4 +- .../spectrum/compat/create/CreateCompat.java | 4 +- .../recipes/CrystallarieumEmiRecipeGated.java | 3 +- .../spectrum/compat/gobber/GobberCompat.java | 4 +- .../spectrum/compat/malum/MalumCompat.java | 4 - ...BookCrystallarieumGrowingPageRenderer.java | 3 +- .../components/InkPoweredComponent.java | 2 +- .../components/InkStorageComponent.java | 4 +- .../components/WrappedPresentComponent.java | 2 +- .../data_loaders/ColorMappingDataLoader.java | 8 +- .../SpectrumTrackedDataHandlerRegistry.java | 2 +- .../entity/entity/InkProjectileEntity.java | 2 +- .../spectrum/entity/entity/LizardEntity.java | 2 +- .../entity/entity/MagicProjectileEntity.java | 2 +- .../entity/entity/MiningProjectileEntity.java | 2 +- .../entity/predicates/LizardPredicate.java | 2 +- .../spectrum/helpers/MobEffectHelper.java | 1 - .../spectrum/helpers/SpectrumColorHelper.java | 2 +- .../spectrum/helpers/VariantHelper.java | 8 +- .../inventories/CinderhearthScreen.java | 8 +- .../CinderhearthScreenHandler.java | 6 +- .../inventories/ColorPickerScreenHandler.java | 2 +- .../inventories/InkTransferScreen.java | 2 +- .../inventories/InkTransferScreenHandler.java | 6 +- .../inventories/PaintbrushScreen.java | 3 +- .../inventories/PaintbrushScreenHandler.java | 2 +- .../inventories/TintingStationScreen.java | 9 +- .../TintingStationScreenHandler.java | 2 +- .../inventories/slots/InkInputSlot.java | 2 +- .../inventories/slots/InkStorageSlot.java | 2 +- .../widgets/ColorSelectionWidget.java | 4 +- .../widgets/ink/InkListWidget.java | 43 ++-- .../ink/InkListWidgetWithBorderAndTitle.java | 57 +++++ .../inventories/widgets/ink/InkPieWidget.java | 16 +- .../widgets/ink/StackedInkBarWidget.java | 8 +- .../spectrum/items/ConcealingOilsItem.java | 2 +- .../de/dafuqs/spectrum/items/PigmentItem.java | 2 +- .../items/energy/ArtistsPaletteItem.java | 7 +- .../energy/CreativeInkAssortmentItem.java | 10 +- .../items/energy/InkAssortmentItem.java | 7 +- .../spectrum/items/energy/InkFlaskItem.java | 8 +- .../items/energy/PigmentPaletteItem.java | 7 +- .../items/magic_items/BuildingStaffItem.java | 4 +- .../magic_items/CelestialPocketWatchItem.java | 4 +- .../magic_items/ConstructorsStaffItem.java | 4 +- .../items/magic_items/ExchangeStaffItem.java | 4 +- .../items/magic_items/NaturesStaffItem.java | 4 +- .../items/magic_items/PaintbrushItem.java | 4 +- .../items/magic_items/RadianceStaffItem.java | 4 +- .../magic_items/StaffOfRemembranceItem.java | 4 +- .../ampoules/MalachiteGlassAmpouleItem.java | 2 +- .../items/tools/DraconicTwinswordItem.java | 2 +- .../spectrum/items/tools/DragonTalonItem.java | 2 +- .../spectrum/items/tools/DreamflayerItem.java | 4 +- .../items/tools/FerociousBidentItem.java | 4 +- .../items/tools/FractalBidentItem.java | 4 +- .../items/tools/GlassCrestCrossbowItem.java | 4 +- .../items/tools/GlassCrestGreatswordItem.java | 4 +- .../items/tools/GlassCrestWorkstaffItem.java | 4 +- .../spectrum/items/tools/NectarLanceItem.java | 2 +- .../items/tools/NightfallsBladeItem.java | 2 +- .../items/tools/OmniAcceleratorItem.java | 4 +- .../spectrum/items/tools/WorkstaffItem.java | 4 +- .../items/trinkets/AzureDikeAmuletItem.java | 4 +- .../items/trinkets/ExtraHealthRingItem.java | 4 +- .../trinkets/ExtraMiningSpeedRingItem.java | 4 +- .../items/trinkets/ExtraReachGlovesItem.java | 4 +- .../items/trinkets/GlowVisionGogglesItem.java | 4 +- .../items/trinkets/GravityRingItem.java | 4 +- .../items/trinkets/InkDrainCurioItem.java | 5 +- .../items/trinkets/LaurelsOfSerenityItem.java | 4 +- .../items/trinkets/PotionPendantItem.java | 2 +- .../items/trinkets/RingOfAerialGraceItem.java | 2 +- .../items/trinkets/RingOfDenserStepsItem.java | 2 +- .../FillPotionFillableLootFunction.java | 4 +- .../InkColorSelectedC2SPayload.java | 2 +- .../InkColorSelectedS2CPayload.java | 2 +- ...FusionCraftingFinishedParticlePayload.java | 2 +- .../PlayPresentOpeningParticlesPayload.java | 2 +- .../UpdateBlockEntityInkPayload.java | 6 +- .../effect/ColoredCraftingParticleEffect.java | 2 +- .../ColoredExplosionParticleEffect.java | 2 +- ...oredFallingSporeBlossomParticleEffect.java | 2 +- .../ColoredFluidRisingParticleEffect.java | 2 +- .../ColoredSparkleRisingParticleEffect.java | 2 +- .../ColoredSporeBlossomAirParticleEffect.java | 2 +- .../advancement/InkColorPredicate.java | 2 +- .../InkContainerInteractionCriterion.java | 4 +- .../color_picker/InkConvertingRecipe.java | 2 +- .../crafting/dynamic/ClearInkRecipe.java | 2 +- .../crafting/dynamic/WrapPresentRecipe.java | 2 +- .../crystallarieum/CrystallarieumRecipe.java | 2 +- .../potion_workshop/PotionRecipeEffect.java | 4 +- .../PotionWorkshopBrewingRecipe.java | 2 +- .../registries/SpectrumBlockEntities.java | 2 - .../spectrum/registries/SpectrumBlocks.java | 4 +- .../SpectrumDataComponentTypes.java | 3 +- .../SpectrumEntityColorProcessors.java | 2 +- .../spectrum/registries/SpectrumFluids.java | 2 - .../registries/SpectrumItemGroups.java | 2 +- .../spectrum/registries/SpectrumItems.java | 2 +- .../registries/SpectrumRegistries.java | 2 +- .../registries/SpectrumRegistryKeys.java | 2 +- .../client/SpectrumClientEventListeners.java | 2 +- .../client/SpectrumColorProviders.java | 8 +- .../SpectrumModelPredicateProviders.java | 3 +- 179 files changed, 896 insertions(+), 702 deletions(-) delete mode 100644 src/main/java/de/dafuqs/spectrum/api/energy/InkStorage.java rename src/main/java/de/dafuqs/spectrum/api/{energy => ink}/InkAmount.java (88%) rename src/main/java/de/dafuqs/spectrum/api/{energy => ink}/InkPowered.java (98%) rename src/main/java/de/dafuqs/spectrum/api/{energy => ink}/InkPoweredStatusEffectInstance.java (99%) create mode 100644 src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java create mode 100644 src/main/java/de/dafuqs/spectrum/api/ink/capability/BlockEntityInkCapability.java create mode 100644 src/main/java/de/dafuqs/spectrum/api/ink/capability/InkCapabilities.java create mode 100644 src/main/java/de/dafuqs/spectrum/api/ink/capability/InkCapability.java create mode 100644 src/main/java/de/dafuqs/spectrum/api/ink/capability/ItemInkCapability.java rename src/main/java/de/dafuqs/spectrum/api/{energy => ink}/color/InkColor.java (98%) rename src/main/java/de/dafuqs/spectrum/api/{energy => ink}/color/InkColorMixes.java (95%) rename src/main/java/de/dafuqs/spectrum/api/{energy => ink}/color/InkColorTags.java (91%) rename src/main/java/de/dafuqs/spectrum/api/{energy => ink}/color/InkColors.java (99%) rename src/main/java/de/dafuqs/spectrum/api/{energy => ink}/storage/CreativeInkStorage.java (75%) rename src/main/java/de/dafuqs/spectrum/api/{energy => ink}/storage/FixedSingleInkStorage.java (85%) rename src/main/java/de/dafuqs/spectrum/api/{energy => ink}/storage/IndividualCappedInkStorage.java (86%) create mode 100644 src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorage.java rename src/main/java/de/dafuqs/spectrum/api/{energy => ink/storage}/InkStorageBlockEntity.java (83%) rename src/main/java/de/dafuqs/spectrum/api/{energy => ink/storage}/InkStorageItem.java (97%) rename src/main/java/de/dafuqs/spectrum/api/{energy => ink}/storage/SingleInkStorage.java (81%) rename src/main/java/de/dafuqs/spectrum/api/{energy => ink}/storage/TotalCappedElementalMixingInkStorage.java (86%) rename src/main/java/de/dafuqs/spectrum/api/{energy => ink}/storage/TotalCappedInkStorage.java (82%) rename src/main/java/de/dafuqs/spectrum/blocks/{cinderhearth => energy}/CinderhearthBlock.java (99%) rename src/main/java/de/dafuqs/spectrum/blocks/{cinderhearth => energy}/CinderhearthBlockEntity.java (98%) rename src/main/java/de/dafuqs/spectrum/blocks/{crystallarieum => energy}/CrystallarieumBlock.java (97%) rename src/main/java/de/dafuqs/spectrum/blocks/{crystallarieum => energy}/CrystallarieumBlockEntity.java (98%) rename src/main/java/de/dafuqs/spectrum/blocks/{crystallarieum => energy}/CrystallarieumBlockEntityRenderer.java (98%) rename src/main/java/de/dafuqs/spectrum/blocks/{crystallarieum => gemstone}/SpectrumClusterBlock.java (94%) create mode 100644 src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidgetWithBorderAndTitle.java diff --git a/disabled/compat/botania/BotaniaCompat.java b/disabled/compat/botania/BotaniaCompat.java index 769019102b..4c3813fb72 100644 --- a/disabled/compat/botania/BotaniaCompat.java +++ b/disabled/compat/botania/BotaniaCompat.java @@ -2,7 +2,7 @@ import de.dafuqs.fractal.api.*; import de.dafuqs.spectrum.api.color.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.interaction.*; import de.dafuqs.spectrum.api.item_group.*; import de.dafuqs.spectrum.compat.*; diff --git a/disabled/datagen/java/de/dafuqs/spectrum/data/BlockDatagen.java b/disabled/datagen/java/de/dafuqs/spectrum/data/BlockDatagen.java index 9701570742..995c97087e 100644 --- a/disabled/datagen/java/de/dafuqs/spectrum/data/BlockDatagen.java +++ b/disabled/datagen/java/de/dafuqs/spectrum/data/BlockDatagen.java @@ -2,7 +2,7 @@ import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.color.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.blocks.amphora.*; import de.dafuqs.spectrum.blocks.block_flooder.*; diff --git a/disabled/datagen/java/de/dafuqs/spectrum/data/SpectrumItems.java b/disabled/datagen/java/de/dafuqs/spectrum/data/SpectrumItems.java index f7a4464bdc..bab0a1d5af 100644 --- a/disabled/datagen/java/de/dafuqs/spectrum/data/SpectrumItems.java +++ b/disabled/datagen/java/de/dafuqs/spectrum/data/SpectrumItems.java @@ -3,7 +3,7 @@ import de.dafuqs.revelationary.api.revelations.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.color.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.blocks.conditional.*; import de.dafuqs.spectrum.blocks.gravity.*; diff --git a/disabled/datagen/java/de/dafuqs/spectrum/data/SpectrumRecipeProvider.java b/disabled/datagen/java/de/dafuqs/spectrum/data/SpectrumRecipeProvider.java index 2ad08f9793..84c307465d 100644 --- a/disabled/datagen/java/de/dafuqs/spectrum/data/SpectrumRecipeProvider.java +++ b/disabled/datagen/java/de/dafuqs/spectrum/data/SpectrumRecipeProvider.java @@ -2,7 +2,7 @@ import com.mojang.datafixers.util.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.recipe.*; import de.dafuqs.spectrum.recipe.crystallarieum.*; import de.dafuqs.spectrum.recipe.enchanter.*; diff --git a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java index fd13c76dd2..3f04f2a427 100644 --- a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java +++ b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum; import de.dafuqs.spectrum.api.color.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.attachment_types.*; import de.dafuqs.spectrum.blocks.pastel_network.*; import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/block/InkColorSelectedPacketReceiver.java b/src/main/java/de/dafuqs/spectrum/api/block/InkColorSelectedPacketReceiver.java index b62e9fb926..89f485a7fe 100644 --- a/src/main/java/de/dafuqs/spectrum/api/block/InkColorSelectedPacketReceiver.java +++ b/src/main/java/de/dafuqs/spectrum/api/block/InkColorSelectedPacketReceiver.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.api.block; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import net.minecraft.core.*; import net.minecraft.world.level.block.entity.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/color/ColorRegistry.java b/src/main/java/de/dafuqs/spectrum/api/color/ColorRegistry.java index 98a8434bde..63c0b66503 100644 --- a/src/main/java/de/dafuqs/spectrum/api/color/ColorRegistry.java +++ b/src/main/java/de/dafuqs/spectrum/api/color/ColorRegistry.java @@ -1,14 +1,11 @@ package de.dafuqs.spectrum.api.color; -import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.data_loaders.*; import net.minecraft.core.registries.*; import net.minecraft.world.item.*; import net.minecraft.world.level.material.*; import net.neoforged.neoforge.event.*; -import java.util.*; - public abstract class ColorRegistry { public static ColorMappingDataLoader ITEM_COLORS = new ColorMappingDataLoader<>("item", BuiltInRegistries.ITEM); diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/InkStorage.java b/src/main/java/de/dafuqs/spectrum/api/energy/InkStorage.java deleted file mode 100644 index 68a6e6d546..0000000000 --- a/src/main/java/de/dafuqs/spectrum/api/energy/InkStorage.java +++ /dev/null @@ -1,214 +0,0 @@ -package de.dafuqs.spectrum.api.energy; - -import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.*; -import net.minecraft.nbt.*; -import net.minecraft.network.chat.*; -import net.minecraft.util.*; -import net.minecraft.world.*; -import org.jetbrains.annotations.*; - -import java.util.*; - -import static de.dafuqs.spectrum.helpers.Support.*; - -/** - * This interface defines that an object can - * store pigment energy and how much - * TODO: migrate to capability - **/ -public interface InkStorage extends Clearable { - - /** - * Transfer Ink from one storage to another - * Transfers Ink using a "pressure like" system: Tries to balance the ink in source and destination. - * The more energy is in source, the more is getting transferred, up to when both storages even out. - * - * @param source The ink storage that is getting drawn from - * @param destination The ink storage receiving energy - * @return the total amount of energy that could be transferred - */ - static long transferInk(@NotNull InkStorage source, @NotNull InkStorage destination) { - long transferred = 0; - for (InkColor inkColor : source.getEnergy().keySet()) { - transferred += transferInk(source, destination, inkColor); - } - return transferred; - } - - /** - * Transfer Ink from one storage to another - * Transfers Ink using a "pressure like" system: Tries to balance the ink in source and destination. - * The more energy is in source, the more is getting transferred, up to when both storages even out. - * - * @param source The ink storage that is getting drawn from - * @param destination The ink storage receiving energy - * @param color The ink type to transfer - * @return the amount of energy that could be transferred - */ - static long transferInk(@NotNull InkStorage source, @NotNull InkStorage destination, @NotNull InkColor color) { - if (!destination.accepts(color)) { - return 0; - } - - long sourceAmount = source.getEnergy(color); - if (sourceAmount > 0) { - long destinationRoom = destination.getRoom(color); - if (destinationRoom > 0) { - long destinationAmount = destination.getEnergy(color); - if (sourceAmount > destinationAmount + 1) { - long transferAmount = Math.max(1, (sourceAmount - destinationAmount) / 32); // the constant here is simulating pressure flow - transferAmount = Math.min(transferAmount, Math.min(sourceAmount, destinationRoom)); - destination.addEnergy(color, transferAmount); - source.drainEnergy(color, transferAmount); - return transferAmount; - } - } - } - return 0; - } - - /** - * Transfers Ink from storages with lots of Ink - * to storages with less. - * When called repeatedly (like every tick) the values of all storages will equalize, - * limited by their max storage. - * Don't forget to mark your stuff dirty, like with InkStorageBlockEntity.setInkDirty()! - * @param inkStorages The storages to run an equalization tick on - */ - static void equalizeInk(List inkStorages) { - SpectrumRegistries.INK_COLOR.stream() - .forEach(inkColor -> equalizeInk(inkStorages, inkColor)); - } - - private static void equalizeInk(List storages, InkColor color) { - long total = 0; - - // collect storages that accept this color - List accepting = new ArrayList<>(storages.size()); - for (InkStorage s : storages) { - if (s.accepts(color)) { - accepting.add(s); - total += s.getEnergy(color); - } - } - - if (accepting.isEmpty() || total == 0) return; - - long idealTarget = total / accepting.size(); - - // drain storages above target value - long pooled = 0; - for (InkStorage s : accepting) { - long current = s.getEnergy(color); - long delta = idealTarget - current; - long step = delta / 32; - if (step == 0 && delta != 0) { - step = delta > 0 ? 1 : -1; - } - - long smoothedTarget = current + step; - - if (current > smoothedTarget) { - long excess = current - smoothedTarget; - pooled += s.drainEnergy(color, excess); - } - } - - if (pooled <= 0) return; - - // refill storages below target - for (InkStorage s : accepting) { - long current = s.getEnergy(color); - long delta = idealTarget - current; - long step = delta / 32; - if (step == 0 && delta != 0) { - step = delta > 0 ? 1 : -1; - } - long smoothedTarget = current + step; - - if (current < smoothedTarget && pooled > 0) { - long needed = smoothedTarget - current; - long added = needed - s.addEnergy(color, needed); - pooled -= added; - } - } - - // If leftover pooled energy exists (due to capacity limits), - // redistribute with pressure flow - if (pooled > 0) { - for (InkStorage s : accepting) { - long room = s.getRoom(color); - if (room > 0) { - long added = room - s.addEnergy(color, room); - pooled -= added; - } - if (pooled <= 0) break; - } - } - } - - // if the storage is able to store this kind of color - boolean accepts(InkColor color); - - default Iterable acceptedColors() { - List colors = new ArrayList<>(); - for(InkColor color : InkColors.all()) { - if(accepts(color)) colors.add(color); - } - return colors; - } - - // returns the amount of energy that could not be added - long addEnergy(InkColor color, long amount); - - // Drains energy from the storage. Returns the amount of energy that could be drained - // In contrast to requestEnergy this drains the energy up until 0, even if not requestedAmount of energy is stored - long drainEnergy(InkColor color, long requestedAmount); - - // gets the amount of stored energy of that type - long getEnergy(InkColor color); - - // gets all stored ink - // only use for syncing server <=> clientside - @Deprecated - Map getEnergy(); - - // sets the amount of stored energy of that type - // only use for syncing server <=> clientside - @Deprecated - void setEnergy(Map colors, long total); - - // the amount of energy that can be stored per individual color - long getMaxPerColor(); - - // the amount of energy that can be stored in total - long getMaxTotal(); - - // the amount of energy that is currently stored - long getCurrentTotal(); - - // true if no energy is stored - boolean isEmpty(); - - // true if the max total is reached - boolean isFull(); - - // fill up the storage with as much energy as possible - void fillCompletely(); - - // completely empty the storage - void clearContent(); - - MutableComponent getTooltip(); - - long getRoom(InkColor color); - - static Component getInkStoreBulletTooltip(InkColor color, long amount) { - MutableComponent inkName = color.getColoredInkName(); - return Component.translatable("spectrum.tooltip.ink_powered.bullet_amount", Component.literal(getShortenedNumberString(amount)).withStyle(ChatFormatting.WHITE), inkName).setStyle(inkName.getStyle()); - } - -} diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/InkAmount.java b/src/main/java/de/dafuqs/spectrum/api/ink/InkAmount.java similarity index 88% rename from src/main/java/de/dafuqs/spectrum/api/energy/InkAmount.java rename to src/main/java/de/dafuqs/spectrum/api/ink/InkAmount.java index 06725682ed..ed85a2bd5b 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/InkAmount.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/InkAmount.java @@ -1,8 +1,8 @@ -package de.dafuqs.spectrum.api.energy; +package de.dafuqs.spectrum.api.ink; import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import io.netty.buffer.*; import net.minecraft.network.codec.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/InkPowered.java b/src/main/java/de/dafuqs/spectrum/api/ink/InkPowered.java similarity index 98% rename from src/main/java/de/dafuqs/spectrum/api/energy/InkPowered.java rename to src/main/java/de/dafuqs/spectrum/api/ink/InkPowered.java index 894ba09d9c..fc8aed83fb 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/InkPowered.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/InkPowered.java @@ -1,8 +1,9 @@ -package de.dafuqs.spectrum.api.energy; +package de.dafuqs.spectrum.api.ink; import de.dafuqs.revelationary.api.advancements.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.compat.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.progression.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/InkPoweredStatusEffectInstance.java b/src/main/java/de/dafuqs/spectrum/api/ink/InkPoweredStatusEffectInstance.java similarity index 99% rename from src/main/java/de/dafuqs/spectrum/api/energy/InkPoweredStatusEffectInstance.java rename to src/main/java/de/dafuqs/spectrum/api/ink/InkPoweredStatusEffectInstance.java index b862e59fe9..a1f3a6406d 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/InkPoweredStatusEffectInstance.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/InkPoweredStatusEffectInstance.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.api.energy; +package de.dafuqs.spectrum.api.ink; import com.google.common.collect.*; import com.mojang.serialization.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java b/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java new file mode 100644 index 0000000000..cbe1012eee --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java @@ -0,0 +1,120 @@ +package de.dafuqs.spectrum.api.ink; + +import de.dafuqs.spectrum.api.ink.capability.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; +import de.dafuqs.spectrum.progression.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.server.level.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.item.*; + +import javax.annotation.*; +import java.util.*; + +public class InkTransferHelper { + + public static long transferInkOneWay(InkCapability source, InkCapability destination, @Nullable InkColor color, @Nullable Player advancementPlayer, ItemStack advancementStack) { + long amount = 0; + if (color != null) { + amount = InkStorage.transferInk(source.getStorage(), destination.getStorage(), color); + } else { + for (InkColor c : InkColors.all()) { + amount += InkStorage.transferInk(source.getStorage(), destination.getStorage(), c); + } + } + + if (amount > 0) { + source.markDirty(); + destination.markDirty(); + + if (advancementPlayer instanceof ServerPlayer serverPlayer) { + SpectrumAdvancementCriteria.INK_CONTAINER_INTERACTION.trigger(serverPlayer, advancementStack, source.getStorage(), color, amount); + } + } + return amount; + } + + /** + * Transfers Ink from storages with lots of Ink + * to storages with less. + * When called repeatedly (like every tick) the values of all storages will equalize, + * limited by their max storage. + * Don't forget to mark your stuff dirty, like with InkStorageBlockEntity.setInkDirty()! + * @param targets The storages to run an equalization tick on + */ + public static void equalizeInk(List targets) { + SpectrumRegistries.INK_COLOR.stream().forEach(inkColor -> equalizeInk(targets, inkColor)); + for(InkCapability inkStorage : targets) { + inkStorage.markDirty(); + } + } + + private static void equalizeInk(List targets, InkColor color) { + long total = 0; + + // collect targets that accept this color + List accepting = new ArrayList<>(targets.size()); + for (InkCapability s : targets) { + InkStorage storage = s.getStorage(); + if (storage.accepts(color)) { + accepting.add(storage); + total += storage.getEnergy(color); + } + } + + if (accepting.isEmpty() || total == 0) return; + + long idealTarget = total / accepting.size(); + + // drain targets above target value + long pooled = 0; + for (InkStorage s : accepting) { + long current = s.getEnergy(color); + long delta = idealTarget - current; + long step = delta / 32; + if (step == 0 && delta != 0) { + step = delta > 0 ? 1 : -1; + } + + long smoothedTarget = current + step; + + if (current > smoothedTarget) { + long excess = current - smoothedTarget; + pooled += s.drainEnergy(color, excess); + } + } + + if (pooled <= 0) return; + + // refill targets below target + for (InkStorage s : accepting) { + long current = s.getEnergy(color); + long delta = idealTarget - current; + long step = delta / 32; + if (step == 0 && delta != 0) { + step = delta > 0 ? 1 : -1; + } + long smoothedTarget = current + step; + + if (current < smoothedTarget && pooled > 0) { + long needed = smoothedTarget - current; + long added = needed - s.addEnergy(color, needed); + pooled -= added; + } + } + + // If leftover pooled energy exists (due to capacity limits), + // redistribute with pressure flow + if (pooled > 0) { + for (InkStorage s : accepting) { + long room = s.getRoom(color); + if (room > 0) { + long added = room - s.addEnergy(color, room); + pooled -= added; + } + if (pooled <= 0) break; + } + } + } +} diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/capability/BlockEntityInkCapability.java b/src/main/java/de/dafuqs/spectrum/api/ink/capability/BlockEntityInkCapability.java new file mode 100644 index 0000000000..d7f5c8821e --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/api/ink/capability/BlockEntityInkCapability.java @@ -0,0 +1,38 @@ +package de.dafuqs.spectrum.api.ink.capability; + +import de.dafuqs.spectrum.api.ink.storage.*; +import net.minecraft.core.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.entity.*; + +import javax.annotation.*; + +public class BlockEntityInkCapability implements InkCapability { + protected final InkStorageBlockEntity inkStorageBlockEntity; + protected final InkStorage storage; + + public static @Nullable BlockEntityInkCapability of(Level level, BlockPos pos) { + return of(level.getBlockEntity(pos)); + } + + public static @Nullable BlockEntityInkCapability of(BlockEntity blockEntity) { + if (blockEntity instanceof InkStorageBlockEntity inkBlockEntity) { + return new BlockEntityInkCapability(inkBlockEntity); + } + return null; + } + + private BlockEntityInkCapability(InkStorageBlockEntity inkBlockEntity) { + this.inkStorageBlockEntity = inkBlockEntity; + this.storage = inkBlockEntity.getInkStorage(); + } + + public InkStorage getStorage() { + return storage; + } + + public void markDirty() { + inkStorageBlockEntity.setInkDirty(); + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/capability/InkCapabilities.java b/src/main/java/de/dafuqs/spectrum/api/ink/capability/InkCapabilities.java new file mode 100644 index 0000000000..89dd6469d1 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/api/ink/capability/InkCapabilities.java @@ -0,0 +1,22 @@ +package de.dafuqs.spectrum.api.ink.capability; + +import de.dafuqs.spectrum.*; +import net.neoforged.neoforge.capabilities.*; + +public class InkCapabilities { + + public static final BlockCapability BLOCK = + BlockCapability.create( + SpectrumCommon.locate("ink_handler"), + InkCapability.class, + Void.class + ); + + public static final ItemCapability ITEM = + ItemCapability.create( + SpectrumCommon.locate("ink_handler"), + InkCapability.class, + Void.class + ); + +} diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/capability/InkCapability.java b/src/main/java/de/dafuqs/spectrum/api/ink/capability/InkCapability.java new file mode 100644 index 0000000000..9fa17c369d --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/api/ink/capability/InkCapability.java @@ -0,0 +1,9 @@ +package de.dafuqs.spectrum.api.ink.capability; + +import de.dafuqs.spectrum.api.ink.storage.*; + +public interface InkCapability { + InkStorage getStorage(); + + void markDirty(); +} diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/capability/ItemInkCapability.java b/src/main/java/de/dafuqs/spectrum/api/ink/capability/ItemInkCapability.java new file mode 100644 index 0000000000..239de190aa --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/api/ink/capability/ItemInkCapability.java @@ -0,0 +1,36 @@ +package de.dafuqs.spectrum.api.ink.capability; + +import de.dafuqs.spectrum.api.ink.storage.*; +import net.minecraft.core.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; + +import javax.annotation.*; + +public class ItemInkCapability implements InkCapability { + protected final ItemStack stack; + protected final InkStorageItem item; + protected final InkStorage storage; + + public static @Nullable ItemInkCapability of(ItemStack stack) { + if (stack.getItem() instanceof InkStorageItem inkStorageItem) { + return new ItemInkCapability(stack, inkStorageItem); + } + return null; + } + + private ItemInkCapability(ItemStack stack, InkStorageItem inkStorageItem) { + this.stack = stack; + this.item = inkStorageItem; + this.storage = inkStorageItem.getEnergyStorage(stack); + } + + public InkStorage getStorage() { + return storage; + } + + public void markDirty() { + item.setEnergyStorage(stack, storage); + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/color/InkColor.java b/src/main/java/de/dafuqs/spectrum/api/ink/color/InkColor.java similarity index 98% rename from src/main/java/de/dafuqs/spectrum/api/energy/color/InkColor.java rename to src/main/java/de/dafuqs/spectrum/api/ink/color/InkColor.java index 2ce92864da..b81ef5e042 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/color/InkColor.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/color/InkColor.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.api.energy.color; +package de.dafuqs.spectrum.api.ink.color; import com.mojang.serialization.*; import de.dafuqs.spectrum.helpers.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/color/InkColorMixes.java b/src/main/java/de/dafuqs/spectrum/api/ink/color/InkColorMixes.java similarity index 95% rename from src/main/java/de/dafuqs/spectrum/api/energy/color/InkColorMixes.java rename to src/main/java/de/dafuqs/spectrum/api/ink/color/InkColorMixes.java index b5b02f699e..038ccd5ae7 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/color/InkColorMixes.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/color/InkColorMixes.java @@ -1,10 +1,10 @@ -package de.dafuqs.spectrum.api.energy.color; +package de.dafuqs.spectrum.api.ink.color; import net.minecraft.util.*; import java.util.*; -import static de.dafuqs.spectrum.api.energy.color.InkColors.*; +import static de.dafuqs.spectrum.api.ink.color.InkColors.*; public class InkColorMixes { diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/color/InkColorTags.java b/src/main/java/de/dafuqs/spectrum/api/ink/color/InkColorTags.java similarity index 91% rename from src/main/java/de/dafuqs/spectrum/api/energy/color/InkColorTags.java rename to src/main/java/de/dafuqs/spectrum/api/ink/color/InkColorTags.java index cedbdd4ece..1eb570b651 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/color/InkColorTags.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/color/InkColorTags.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.api.energy.color; +package de.dafuqs.spectrum.api.ink.color; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/color/InkColors.java b/src/main/java/de/dafuqs/spectrum/api/ink/color/InkColors.java similarity index 99% rename from src/main/java/de/dafuqs/spectrum/api/energy/color/InkColors.java rename to src/main/java/de/dafuqs/spectrum/api/ink/color/InkColors.java index 34d322c248..4946cef170 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/color/InkColors.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/color/InkColors.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.api.energy.color; +package de.dafuqs.spectrum.api.ink.color; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/CreativeInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/CreativeInkStorage.java similarity index 75% rename from src/main/java/de/dafuqs/spectrum/api/energy/storage/CreativeInkStorage.java rename to src/main/java/de/dafuqs/spectrum/api/ink/storage/CreativeInkStorage.java index 37685ed28f..77ecdaf4b1 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/CreativeInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/CreativeInkStorage.java @@ -1,15 +1,11 @@ -package de.dafuqs.spectrum.api.energy.storage; +package de.dafuqs.spectrum.api.ink.storage; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.registries.*; +import de.dafuqs.spectrum.api.ink.color.*; import net.minecraft.network.chat.*; -import javax.annotation.*; import java.util.*; -public class CreativeInkStorage implements InkStorage { +public class CreativeInkStorage extends InkStorage { private static final Map STORAGE = new HashMap<>() {{ for (InkColor inkColor : InkColors.all()) { @@ -84,8 +80,8 @@ public void clearContent() { } @Override - public MutableComponent getTooltip() { - return Component.translatable("item.spectrum.creative_ink_assortment.tooltip"); + public List getTooltip() { + return List.of(Component.translatable("item.spectrum.creative_ink_assortment.tooltip")); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/FixedSingleInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/FixedSingleInkStorage.java similarity index 85% rename from src/main/java/de/dafuqs/spectrum/api/energy/storage/FixedSingleInkStorage.java rename to src/main/java/de/dafuqs/spectrum/api/ink/storage/FixedSingleInkStorage.java index 2baa81920c..ef8abcb767 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/FixedSingleInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/FixedSingleInkStorage.java @@ -1,6 +1,6 @@ -package de.dafuqs.spectrum.api.energy.storage; +package de.dafuqs.spectrum.api.ink.storage; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; public class FixedSingleInkStorage extends SingleInkStorage { diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/IndividualCappedInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/IndividualCappedInkStorage.java similarity index 86% rename from src/main/java/de/dafuqs/spectrum/api/energy/storage/IndividualCappedInkStorage.java rename to src/main/java/de/dafuqs/spectrum/api/ink/storage/IndividualCappedInkStorage.java index b5cdfac775..8d5eb656fa 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/IndividualCappedInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/IndividualCappedInkStorage.java @@ -1,17 +1,15 @@ -package de.dafuqs.spectrum.api.energy.storage; +package de.dafuqs.spectrum.api.ink.storage; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.registries.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.network.chat.*; -import javax.annotation.*; import java.util.*; import static de.dafuqs.spectrum.helpers.Support.*; -public class IndividualCappedInkStorage implements InkStorage { +public class IndividualCappedInkStorage extends InkStorage { protected final long maxEnergyPerColor; protected Map storedEnergy = new Object2LongArrayMap<>(); @@ -115,23 +113,22 @@ public boolean isFull() { } @Override - public MutableComponent getTooltip() { - MutableComponent c = Component.translatable("item.spectrum.ink_storage.stores_ink_per_type", getShortenedNumberString(maxEnergyPerColor)); - c.append(Component.literal("\n")); + public List getTooltip() { + List tooltip = new ArrayList<>(); + tooltip.add(Component.translatable("item.spectrum.ink_storage.stores_ink_per_type", getShortenedNumberString(maxEnergyPerColor))); // we are iterating them this way to preserve the ordering if(isEmpty()) { - c.append(Component.translatable("spectrum.tooltip.ink_powered.empty")); + tooltip.add(Component.translatable("spectrum.tooltip.ink_powered.empty")); } else { for (InkColor color : SpectrumRegistries.INK_COLOR) { long amount = this.storedEnergy.getOrDefault(color, 0L); if (amount > 0) { - c.append(InkStorage.getInkStoreBulletTooltip(color, amount)); - c.append(Component.literal("\n")); + tooltip.add(InkStorage.getInkStoreBulletTooltip(color, amount)); } } } - return c; + return tooltip; } @Override diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorage.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorage.java new file mode 100644 index 0000000000..96aa2b1776 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorage.java @@ -0,0 +1,140 @@ +package de.dafuqs.spectrum.api.ink.storage; + +import de.dafuqs.spectrum.api.ink.color.*; +import net.minecraft.*; +import net.minecraft.client.gui.components.*; +import net.minecraft.network.chat.*; +import net.minecraft.world.*; +import org.jetbrains.annotations.*; + +import java.util.*; + +import static de.dafuqs.spectrum.helpers.Support.*; + +/** + * Defines an object can store ink + **/ +public abstract class InkStorage implements Clearable { + + /** + * Transfer Ink from one storage to another + * Transfers Ink using a "pressure like" system: Tries to balance the ink in source and destination. + * The more energy is in source, the more is getting transferred, up to when both storages even out. + * + * @param source The ink storage that is getting drawn from + * @param destination The ink storage receiving energy + * @return the total amount of energy that could be transferred + */ + public static long transferInk(@NotNull InkStorage source, @NotNull InkStorage destination) { + long transferred = 0; + for (InkColor inkColor : source.getEnergy().keySet()) { + transferred += transferInk(source, destination, inkColor); + } + return transferred; + } + + /** + * Transfer Ink from one storage to another + * Transfers Ink using a "pressure like" system: Tries to balance the ink in source and destination. + * The more energy is in source, the more is getting transferred, up to when both storages even out. + * + * @param source The ink storage that is getting drawn from + * @param destination The ink storage receiving energy + * @param color The ink type to transfer + * @return the amount of energy that could be transferred + */ + public static long transferInk(@NotNull InkStorage source, @NotNull InkStorage destination, @NotNull InkColor color) { + if (!destination.accepts(color)) { + return 0; + } + + long sourceAmount = source.getEnergy(color); + if (sourceAmount > 0) { + long destinationRoom = destination.getRoom(color); + if (destinationRoom > 0) { + long destinationAmount = destination.getEnergy(color); + if (sourceAmount > destinationAmount + 1) { + long transferAmount = Math.max(1, (sourceAmount - destinationAmount) / 32); // the constant here is simulating pressure flow + transferAmount = Math.min(transferAmount, Math.min(sourceAmount, destinationRoom)); + destination.addEnergy(color, transferAmount); + source.drainEnergy(color, transferAmount); + return transferAmount; + } + } + } + return 0; + } + + // if the storage is able to store this kind of color + public abstract boolean accepts(InkColor color); + + public Collection acceptedColors() { + List colors = new ArrayList<>(); + for(InkColor color : InkColors.all()) { + if(accepts(color)) colors.add(color); + } + return colors; + } + + // returns the amount of energy that could not be added + public abstract long addEnergy(InkColor color, long amount); + + // Drains energy from the storage. Returns the amount of energy that could be drained + // In contrast to requestEnergy this drains the energy up until 0, even if not requestedAmount of energy is stored + public abstract long drainEnergy(InkColor color, long requestedAmount); + + // gets the amount of stored energy of that type + public abstract long getEnergy(InkColor color); + + // gets all stored ink + // only use for syncing server <=> clientside + @Deprecated + public abstract Map getEnergy(); + + // sets the amount of stored energy of that type + // only use for syncing server <=> clientside + @Deprecated + public abstract void setEnergy(Map colors, long total); + + // the amount of energy that can be stored per individual color + public abstract long getMaxPerColor(); + + // the amount of energy that can be stored in total + public abstract long getMaxTotal(); + + // the amount of energy that is currently stored + public abstract long getCurrentTotal(); + + // true if no energy is stored + public abstract boolean isEmpty(); + + // true if the max total is reached + public abstract boolean isFull(); + + // fill up the storage with as much energy as possible + public abstract void fillCompletely(); + + // List instead of appended Components, since line breaks do not work in the GUI consistently + // WONTFIX as of https://bugs.mojang.com/browse/MC/issues/MC-269003 + public abstract List getTooltip(); + + public Tooltip getWidgetTooltip() { + MutableComponent mutableComponent = Component.literal(""); + List lines = getTooltip(); + for (int i = 0; i < lines.size(); i++) { + mutableComponent.append(lines.get(i)); + if (i < lines.size() - 1) { + mutableComponent.append(CommonComponents.NEW_LINE); + } + } + return Tooltip.create(mutableComponent); + } + + public abstract long getRoom(InkColor color); + + public static Component getInkStoreBulletTooltip(InkColor color, long amount) { + MutableComponent inkName = color.getColoredInkName(); + return Component.translatable("spectrum.tooltip.ink_powered.bullet_amount", Component.literal(getShortenedNumberString(amount)).withStyle(ChatFormatting.WHITE), inkName).setStyle(inkName.getStyle()); + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/InkStorageBlockEntity.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorageBlockEntity.java similarity index 83% rename from src/main/java/de/dafuqs/spectrum/api/energy/InkStorageBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorageBlockEntity.java index 7a49555454..6bfbeeb270 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/InkStorageBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorageBlockEntity.java @@ -1,6 +1,6 @@ -package de.dafuqs.spectrum.api.energy; +package de.dafuqs.spectrum.api.ink.storage; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.upgrade.*; import org.jetbrains.annotations.*; @@ -8,11 +8,11 @@ * Defines that an object holds a PigmentEnergyStorage * Objects are supposed to be block entities * - * @param + * @param */ -public interface InkStorageBlockEntity { +public interface InkStorageBlockEntity { - PStorage getEnergyStorage(); + IS getInkStorage(); /** * Drains ink exponentially increased by the amount of upgrades used. @@ -27,7 +27,7 @@ default float drainInkForUpgrades(@NotNull Upgradeable upgradeable, @NotNull Upg } long inkToDrain = useEfficiency ? upgradeHolder.getEffectiveCostUsingEfficiency(upgradeType) : upgradeHolder.getEffectiveCost(upgradeType); - if (getEnergyStorage().drainEnergy(color, inkToDrain) == inkToDrain) { + if (getInkStorage().drainEnergy(color, inkToDrain) == inkToDrain) { setInkDirty(); return upgradeHolder.getEffectiveValue(upgradeType); } @@ -44,7 +44,7 @@ default float drainInkForUpgrades(@NotNull Upgradeable upgradeable, @NotNull Upg default boolean drainInkForUpgradesRequired(@NotNull Upgradeable upgradeable, @NotNull Upgradeable.UpgradeType upgradeType, @NotNull InkColor color, boolean useEfficiency) { Upgradeable.UpgradeHolder upgradeHolder = upgradeable.getUpgradeHolder(); long inkToDrain = useEfficiency ? upgradeHolder.getEffectiveCostUsingEfficiency(upgradeType) : upgradeHolder.getEffectiveCost(upgradeType); - if (getEnergyStorage().drainEnergy(color, inkToDrain) == inkToDrain) { + if (getInkStorage().drainEnergy(color, inkToDrain) == inkToDrain) { setInkDirty(); return true; } @@ -60,7 +60,7 @@ default boolean drainInkForUpgradesRequired(@NotNull Upgradeable upgradeable, @N */ default boolean drainInkForUpgradesRequired(@NotNull Upgradeable upgradeable, @NotNull InkColor color, long amount, boolean useEfficiency) { long inkToDrain = useEfficiency ? upgradeable.getUpgradeHolder().getEffectiveCostUsingEfficiency(amount) : amount; - if (getEnergyStorage().drainEnergy(color, inkToDrain) == inkToDrain) { + if (getInkStorage().drainEnergy(color, inkToDrain) == inkToDrain) { setInkDirty(); return true; } diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/InkStorageItem.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorageItem.java similarity index 97% rename from src/main/java/de/dafuqs/spectrum/api/energy/InkStorageItem.java rename to src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorageItem.java index 8107440b9a..20dc5ad43c 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/InkStorageItem.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorageItem.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.api.energy; +package de.dafuqs.spectrum.api.ink.storage; import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/SingleInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/SingleInkStorage.java similarity index 81% rename from src/main/java/de/dafuqs/spectrum/api/energy/storage/SingleInkStorage.java rename to src/main/java/de/dafuqs/spectrum/api/ink/storage/SingleInkStorage.java index e7b44fb05d..efa9f7b420 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/SingleInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/SingleInkStorage.java @@ -1,17 +1,13 @@ -package de.dafuqs.spectrum.api.energy.storage; +package de.dafuqs.spectrum.api.ink.storage; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.registries.*; +import de.dafuqs.spectrum.api.ink.color.*; import net.minecraft.network.chat.*; -import javax.annotation.*; import java.util.*; import static de.dafuqs.spectrum.helpers.Support.*; -public class SingleInkStorage implements InkStorage { +public class SingleInkStorage extends InkStorage { protected final long maxEnergy; protected InkColor storedColor; @@ -124,15 +120,15 @@ public boolean isFull() { } @Override - public MutableComponent getTooltip() { - MutableComponent c = Component.translatable("item.spectrum.ink_storage.stores_up_to_ink_per_type", getShortenedNumberString(this.maxEnergy)); - c.append(Component.literal("\n")); + public List getTooltip() { + List tooltip = new ArrayList<>(); + tooltip.add(Component.translatable("item.spectrum.ink_storage.stores_up_to_ink_per_type", getShortenedNumberString(this.maxEnergy))); if (this.storedEnergy > 0) { - c.append(InkStorage.getInkStoreBulletTooltip(this.storedColor, this.storedEnergy)); + tooltip.add(InkStorage.getInkStoreBulletTooltip(this.storedColor, this.storedEnergy)); } else { - c.append(Component.translatable("spectrum.tooltip.ink_powered.empty")); + tooltip.add(Component.translatable("spectrum.tooltip.ink_powered.empty")); } - return c; + return tooltip; } @Override diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedElementalMixingInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/TotalCappedElementalMixingInkStorage.java similarity index 86% rename from src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedElementalMixingInkStorage.java rename to src/main/java/de/dafuqs/spectrum/api/ink/storage/TotalCappedElementalMixingInkStorage.java index 3682af4de4..a628cc3870 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedElementalMixingInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/TotalCappedElementalMixingInkStorage.java @@ -1,10 +1,8 @@ -package de.dafuqs.spectrum.api.energy.storage; +package de.dafuqs.spectrum.api.ink.storage; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.api.ink.color.*; import net.minecraft.network.chat.*; -import javax.annotation.*; import java.util.*; import static de.dafuqs.spectrum.helpers.Support.*; @@ -113,12 +111,12 @@ public long getRoom(InkColor color) { } @Override - public MutableComponent getTooltip() { - MutableComponent c = Component.translatable("item.spectrum.artists_palette.tooltip", getShortenedNumberString(this.maxEnergyTotal)); - c.append(Component.literal("\n")); - c.append(Component.translatable("item.spectrum.artists_palette.tooltip.mix_on_demand")); - appendInkStoreBulletTooltips(c); - return c; + public List getTooltip() { + List tooltip = new ArrayList<>(); + tooltip.add(Component.translatable("item.spectrum.artists_palette.tooltip", getShortenedNumberString(this.maxEnergyTotal))); + tooltip.add(Component.translatable("item.spectrum.artists_palette.tooltip.mix_on_demand")); + appendInkStoreBulletTooltips(tooltip); + return tooltip; } } diff --git a/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/TotalCappedInkStorage.java similarity index 82% rename from src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedInkStorage.java rename to src/main/java/de/dafuqs/spectrum/api/ink/storage/TotalCappedInkStorage.java index 6959c897c9..47ad07b9b8 100644 --- a/src/main/java/de/dafuqs/spectrum/api/energy/storage/TotalCappedInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/TotalCappedInkStorage.java @@ -1,16 +1,14 @@ -package de.dafuqs.spectrum.api.energy.storage; +package de.dafuqs.spectrum.api.ink.storage; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.network.chat.*; -import javax.annotation.*; import java.util.*; -public class TotalCappedInkStorage implements InkStorage { +public class TotalCappedInkStorage extends InkStorage { protected final long maxEnergyTotal; protected Map storedEnergy = new Object2LongArrayMap<>(); @@ -121,24 +119,24 @@ public void clearContent() { } @Override - public MutableComponent getTooltip() { + public List getTooltip() { + List tooltip = new ArrayList<>(); long maxEnergyPerColor = getMaxPerColor(); - MutableComponent c = Component.translatable("item.spectrum.ink_storage.stores_ink_per_type", Support.getShortenedNumberString(maxEnergyPerColor)); - appendInkStoreBulletTooltips(c); - return c; + tooltip.add(Component.translatable("item.spectrum.ink_storage.stores_ink_per_type", Support.getShortenedNumberString(maxEnergyPerColor))); + appendInkStoreBulletTooltips(tooltip); + return tooltip; } - protected void appendInkStoreBulletTooltips(MutableComponent c) { + protected void appendInkStoreBulletTooltips(List tooltip) { if(isEmpty()) { - c.append(Component.translatable("spectrum.tooltip.ink_powered.empty")); + tooltip.add(Component.translatable("spectrum.tooltip.ink_powered.empty")); return; } for (InkColor color : SpectrumRegistries.INK_COLOR) { // we are iterating them this way to preserve the ordering long amount = this.storedEnergy.getOrDefault(color, -1L); if (amount > 0) { - c.append(Component.literal("\n")); - c.append(InkStorage.getInkStoreBulletTooltip(color, amount)); + tooltip.add(InkStorage.getInkStoreBulletTooltip(color, amount)); } } } diff --git a/src/main/java/de/dafuqs/spectrum/api/item/InkPoweredPotionFillable.java b/src/main/java/de/dafuqs/spectrum/api/item/InkPoweredPotionFillable.java index bd0da8a8a5..2b8861beed 100644 --- a/src/main/java/de/dafuqs/spectrum/api/item/InkPoweredPotionFillable.java +++ b/src/main/java/de/dafuqs/spectrum/api/item/InkPoweredPotionFillable.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.api.item; -import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.ink.*; import net.minecraft.network.chat.*; import net.minecraft.world.effect.*; import net.minecraft.world.item.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/BismuthBudBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/BismuthBudBlock.java index 687c2b152d..21f2b4295c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/BismuthBudBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/BismuthBudBlock.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.blocks; -import de.dafuqs.spectrum.blocks.crystallarieum.*; +import de.dafuqs.spectrum.blocks.gemstone.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.particle.effect.*; import net.minecraft.core.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredFenceBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredFenceBlock.java index 5980bdcbba..5b03bfb745 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredFenceBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredFenceBlock.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.blocks.conditional.colored_tree; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.flammable.*; import it.unimi.dsi.fastutil.objects.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredFenceGateBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredFenceGateBlock.java index 64bc8376c7..fdfbdb266e 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredFenceGateBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredFenceGateBlock.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.blocks.conditional.colored_tree; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.flammable.*; import de.dafuqs.spectrum.registries.*; import it.unimi.dsi.fastutil.objects.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLeavesBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLeavesBlock.java index 9fa1d83880..7495973147 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLeavesBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLeavesBlock.java @@ -3,7 +3,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import de.dafuqs.revelationary.api.revelations.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.flammable.*; import de.dafuqs.spectrum.registries.client.*; import it.unimi.dsi.fastutil.objects.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLightBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLightBlock.java index 52e3dc5401..ffbeb62c68 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLightBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLightBlock.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.blocks.conditional.colored_tree; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.core.*; import net.minecraft.world.level.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLogBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLogBlock.java index 75000b939f..d6fe6d8653 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLogBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLogBlock.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import de.dafuqs.revelationary.api.revelations.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.flammable.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.core.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredPlankBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredPlankBlock.java index e30282fe55..784756c50d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredPlankBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredPlankBlock.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.flammable.*; import it.unimi.dsi.fastutil.objects.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredPressurePlateBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredPressurePlateBlock.java index 8168d2ea11..9a882cce9a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredPressurePlateBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredPressurePlateBlock.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.blocks.conditional.colored_tree; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.registries.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.world.level.block.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSaplingBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSaplingBlock.java index 85148a1297..5f99ae25c1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSaplingBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSaplingBlock.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import de.dafuqs.revelationary.api.revelations.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.resources.*; import net.minecraft.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSlabBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSlabBlock.java index 3ed8b99519..88776bd966 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSlabBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSlabBlock.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.flammable.*; import it.unimi.dsi.fastutil.objects.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSporeBlossomBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSporeBlossomBlock.java index 57dbf93859..4de57bada8 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSporeBlossomBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSporeBlossomBlock.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.blocks.conditional.colored_tree; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.core.*; import net.minecraft.core.particles.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStairBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStairBlock.java index 922ba24aeb..4a1d2b6c64 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStairBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStairBlock.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.flammable.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.world.level.block.state.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStrippedSpectrumLogBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStrippedSpectrumLogBlock.java index 9c45c3361b..3a6ad718a6 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStrippedSpectrumLogBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStrippedSpectrumLogBlock.java @@ -3,7 +3,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import de.dafuqs.revelationary.api.revelations.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.flammable.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.core.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStrippedWoodBlockSpectrum.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStrippedWoodBlockSpectrum.java index 919cf33d2b..a75d9acd9c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStrippedWoodBlockSpectrum.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStrippedWoodBlockSpectrum.java @@ -3,7 +3,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import de.dafuqs.revelationary.api.revelations.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.flammable.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.resources.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredTree.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredTree.java index 3d4af9b87f..cfb454f4a4 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredTree.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredTree.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.blocks.conditional.colored_tree; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.resources.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java index c97ebdc0cd..d7523436fd 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import de.dafuqs.revelationary.api.revelations.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.flammable.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.resources.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodenButtonBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodenButtonBlock.java index d943e457dc..b0c5270157 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodenButtonBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodenButtonBlock.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.blocks.conditional.colored_tree; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.registries.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.world.level.block.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/PottedColoredSaplingBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/PottedColoredSaplingBlock.java index 7e3f2d8288..cff2a00684 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/PottedColoredSaplingBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/PottedColoredSaplingBlock.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.blocks.conditional.colored_tree; import de.dafuqs.revelationary.api.revelations.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import net.minecraft.resources.*; import net.minecraft.util.*; import net.minecraft.world.item.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/GlowBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/GlowBlock.java index 9302c20b3e..7354b90801 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/GlowBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/GlowBlock.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.core.*; import net.minecraft.world.level.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/PigmentBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/PigmentBlock.java index def4f0f801..1bd2ff93bc 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/PigmentBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/PigmentBlock.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.world.level.block.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java index 372d5ba147..5cf2541ede 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java @@ -1,15 +1,15 @@ package de.dafuqs.spectrum.blocks.energy; import de.dafuqs.spectrum.api.block.*; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.progression.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.capability.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.nbt.*; import net.minecraft.network.protocol.*; import net.minecraft.network.protocol.game.*; -import net.minecraft.server.level.*; import net.minecraft.world.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; @@ -39,10 +39,14 @@ public BaseInkTransferBlockEntity(BlockEntityType blockEntityType, BlockPos b } @Override - public T getEnergyStorage() { + public T getInkStorage() { return inkStorage; } + public InkCapability getCapability() { + return getLevel().getCapability(InkCapabilities.BLOCK, getBlockPos(), null); + } + @Override public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { super.loadAdditional(nbt, registryLookup); @@ -90,6 +94,7 @@ public void setChanged() { @Override public void setInkDirty() { + this.setChanged(); this.inkDirty = true; } @@ -138,38 +143,15 @@ public boolean tryFillInkContainer() { long transferredAmount = 0; ItemStack stack = inventory.get(OUTPUT_SLOT_ID); - if (stack.getItem() instanceof InkStorageItem inkStorageItem) { - InkStorage itemStorage = inkStorageItem.getEnergyStorage(stack); - - ServerPlayer owner = null; - if (getOwnerIfOnline(this.getLevel()) instanceof ServerPlayer serverPlayerEntity) { - owner = serverPlayerEntity; - } - - if (this.selectedColor.isEmpty()) { - for (InkColor color : InkColors.all()) { - transferredAmount += tryTransferInk(owner, stack, itemStorage, color); - } - } else { - transferredAmount = tryTransferInk(owner, stack, itemStorage, this.selectedColor.get().value()); - } - - if (transferredAmount > 0) { - inkStorageItem.setEnergyStorage(stack, itemStorage); - } + InkCapability itemStorage = stack.getCapability(InkCapabilities.ITEM, null); + if (itemStorage != null) { + InkCapability blockEntityStorage = this.level.getCapability(InkCapabilities.BLOCK, this.worldPosition, null); + transferredAmount = InkTransferHelper.transferInkOneWay(blockEntityStorage, itemStorage, this.selectedColor.map(Holder::value).orElse(null), getOwnerIfOnline(this.getLevel()), stack); } return transferredAmount > 0; } - private long tryTransferInk(ServerPlayer owner, ItemStack stack, InkStorage itemStorage, InkColor color) { - long amount = InkStorage.transferInk(getEnergyStorage(), itemStorage, color); - if (amount > 0 && owner != null) { - SpectrumAdvancementCriteria.INK_CONTAINER_INTERACTION.trigger(owner, stack, itemStorage, color, amount); - } - return amount; - } - public void setSelectedColor(Optional> inkColor) { this.selectedColor = inkColor; this.setChanged(); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/cinderhearth/CinderhearthBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/CinderhearthBlock.java similarity index 99% rename from src/main/java/de/dafuqs/spectrum/blocks/cinderhearth/CinderhearthBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/energy/CinderhearthBlock.java index d41181b8b2..f756e7ef26 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/cinderhearth/CinderhearthBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/CinderhearthBlock.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.cinderhearth; +package de.dafuqs.spectrum.blocks.energy; import com.klikli_dev.modonomicon.api.multiblock.*; import com.mojang.serialization.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/cinderhearth/CinderhearthBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/CinderhearthBlockEntity.java similarity index 98% rename from src/main/java/de/dafuqs/spectrum/blocks/cinderhearth/CinderhearthBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/energy/CinderhearthBlockEntity.java index ac2dd929ee..7b6dae58a0 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/cinderhearth/CinderhearthBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/CinderhearthBlockEntity.java @@ -1,9 +1,8 @@ -package de.dafuqs.spectrum.blocks.cinderhearth; +package de.dafuqs.spectrum.blocks.energy; import de.dafuqs.spectrum.api.block.*; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.recipe.*; import de.dafuqs.spectrum.blocks.*; @@ -188,8 +187,7 @@ public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup ContainerHelper.loadAllItems(nbt, this.inventory, registryLookup); - CodecHelper.fromNbt(InkStorageComponent.CODEC, nbt.get("InkStorage")).ifPresent(storage -> - this.inkStorage = new IndividualCappedInkStorage(storage.maxPerColor(), storage.storedEnergy())); + CodecHelper.fromNbt(InkStorageComponent.CODEC, nbt.get("InkStorage")).ifPresent(storage -> this.inkStorage = new IndividualCappedInkStorage(storage.maxPerColor(), storage.storedEnergy())); this.propertyDelegate.craftingTime = nbt.getShort("CraftingTime"); this.propertyDelegate.craftingTimeTotal = nbt.getShort("CraftingTimeTotal"); this.usesEfficiency = nbt.getBoolean("UsesEfficiency"); @@ -248,7 +246,6 @@ public static void serverTick(Level world, BlockPos blockPos, BlockState blockSt } } if (didSomething) { - cinderhearthBlockEntity.setChanged(); cinderhearthBlockEntity.setInkDirty(); } else { cinderhearthBlockEntity.canTransferInk = false; @@ -567,7 +564,7 @@ public List getUpgradePosOffsets() { } @Override - public IndividualCappedInkStorage getEnergyStorage() { + public IndividualCappedInkStorage getInkStorage() { return this.inkStorage; } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java index 0953ff5560..f094e36857 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java @@ -1,8 +1,7 @@ package de.dafuqs.spectrum.blocks.energy; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.helpers.*; @@ -51,12 +50,11 @@ public static void serverTick(Level world, BlockPos pos, BlockState state, Color } else { shouldPause = false; } - boolean filledContainer = blockEntity.tryFillInkContainer(); // that's an OR + boolean filledContainer = blockEntity.tryFillInkContainer(); if (convertedPigment || filledContainer) { blockEntity.updateInClientWorld(); blockEntity.setInkDirty(); - blockEntity.setChanged(); } else if (shouldPause) { blockEntity.paused = true; } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystallarieumBlock.java similarity index 97% rename from src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/energy/CrystallarieumBlock.java index 4d2edd19d7..02ed3da4cf 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystallarieumBlock.java @@ -1,8 +1,8 @@ -package de.dafuqs.spectrum.blocks.crystallarieum; +package de.dafuqs.spectrum.blocks.energy; import com.mojang.serialization.*; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystallarieumBlockEntity.java similarity index 98% rename from src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/energy/CrystallarieumBlockEntity.java index 36b6ca7459..a28a5c76f4 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystallarieumBlockEntity.java @@ -1,8 +1,7 @@ -package de.dafuqs.spectrum.blocks.crystallarieum; +package de.dafuqs.spectrum.blocks.energy; import de.dafuqs.spectrum.api.block.*; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.api.fluid.*; import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.components.*; @@ -341,7 +340,7 @@ public void onTopBlockChange(BlockState newState, @Nullable RecipeHolder> selectedColor = blockEntity.getSelectedColor(); - InkStorage inkStorage = blockEntity.getEnergyStorage(); - - if (selectedColor.isPresent() && world.getGameTime() % TICKS_PER_CONVERSION == 0) { - didSomething = blockEntity.tryColorStack(selectedColor.get().value()); - } - - if(!didSomething) { - didSomething = blockEntity.tryFillInkContainer(); - } - - if (didSomething) { - blockEntity.setInkDirty(); - blockEntity.setChanged(); - } else { - blockEntity.paused = true; - } - } - } - - public boolean tryColorStack(InkColor inkColor) { - if(inkStorage.getEnergy(inkColor) < ITEM_COLORING_COST) { - return false; + if (blockEntity.paused) { + return; } - ItemStack output = getItem(OUTPUT_SLOT_ID); - if(output.getCount() >= output.getMaxStackSize()){ - return false; - } + boolean didSomething = false; - ItemStack input = getItem(INPUT_SLOT_ID); - Item resultItem = VariantHelper.getColoredItem(input, inkColor); - if(resultItem == null) { - return false; + Optional> inkColorHolder = blockEntity.getSelectedColor(); + InkStorage inkStorage = blockEntity.getInkStorage(); + + ItemStack input = blockEntity.getItem(INPUT_SLOT_ID); + if (!input.isEmpty()) { + if (inkColorHolder.isPresent() && world.getGameTime() % TICKS_PER_CONVERSION == 0) { + InkColor selectedInkColor = inkColorHolder.get().value(); + if (inkStorage.getEnergy(selectedInkColor) >= ITEM_COLORING_COST) { + ItemStack output = blockEntity.getItem(OUTPUT_SLOT_ID); + if (output.getCount() < output.getMaxStackSize()) { + ItemStack resultStack = blockEntity.colorStack(input, selectedInkColor); + if (resultStack.isEmpty()) { + resultStack = tintStack(input, selectedInkColor); + } + + if (!resultStack.isEmpty()) { + if (output.isEmpty()) { + input.shrink(1); + blockEntity.setItem(OUTPUT_SLOT_ID, resultStack); + didSomething = true; + } else if (ItemStack.isSameItemSameComponents(output, resultStack)) { + input.shrink(1); + output.grow(1); + didSomething = true; + } + + if (didSomething) { + inkStorage.addEnergy(selectedInkColor, -ITEM_COLORING_COST); + + if (SpectrumConfig.CONFIG.BlockSoundVolume.get() > 0) { + blockEntity.getLevel().playSound(null, blockEntity.getBlockPos(), SpectrumSoundEvents.COLOR_PICKER_PROCESSING, SoundSource.BLOCKS, SpectrumConfig.CONFIG.BlockSoundVolume.get().floatValue() / 3F, 1.0F); + + PlayParticleWithRandomOffsetAndVelocityPayload.playParticleWithRandomOffsetAndVelocity((ServerLevel) blockEntity.getLevel(), + new Vec3(blockEntity.getBlockPos().getX() + 0.5, blockEntity.getBlockPos().getY() + 0.7, blockEntity.getBlockPos().getZ() + 0.5), + ColoredFluidRisingParticleEffect.of(selectedInkColor.getColorInt()), + 5, + new Vec3(0.22, 0.0, 0.22), + new Vec3(0.0, 0.1, 0.0) + ); + } + } + } + } + } + } } - ItemStack resultStack = resultItem.getDefaultInstance(); - resultStack.applyComponents(input.getComponents()); + if(!didSomething) { + didSomething = blockEntity.tryFillInkContainer(); + } - if(output.isEmpty()) { - setItem(OUTPUT_SLOT_ID, resultStack); - } else if(ItemStack.isSameItemSameComponents(output, resultStack)) { - input.shrink(1); - output.grow(1); + if (didSomething) { + blockEntity.setInkDirty(); } else { - return false; + blockEntity.paused = true; } - - input.shrink(1); - inkStorage.addEnergy(inkColor, -ITEM_COLORING_COST); - - if (SpectrumConfig.CONFIG.BlockSoundVolume.get() > 0) { - level.playSound(null, worldPosition, SpectrumSoundEvents.COLOR_PICKER_PROCESSING, SoundSource.BLOCKS, SpectrumConfig.CONFIG.BlockSoundVolume.get().floatValue() / 3F, 1.0F); + } + + // Cleaned up version of net.minecraft.world.item.component.DyedItemColor + // modified to work with InkColor + protected static ItemStack tintStack(ItemStack stack, InkColor inkColor) { + if (!stack.is(ItemTags.DYEABLE)) { + return ItemStack.EMPTY; + } else { + ItemStack result = stack.copyWithCount(1); + int i = 0; + int j = 0; + int k = 0; + int prevMax = 0; + int i1 = 0; + DyedItemColor dyeditemcolor = result.get(DataComponents.DYED_COLOR); + if (dyeditemcolor != null) { + int prevRed = FastColor.ARGB32.red(dyeditemcolor.rgb()); + int prevGreen = FastColor.ARGB32.green(dyeditemcolor.rgb()); + int prevBlue = FastColor.ARGB32.blue(dyeditemcolor.rgb()); + prevMax += Math.max(prevRed, Math.max(prevGreen, prevBlue)); + i += prevRed; + j += prevGreen; + k += prevBlue; + i1++; + } + + int j3 = inkColor.getColorInt(); + int i2 = FastColor.ARGB32.red(j3); + int j2 = FastColor.ARGB32.green(j3); + int k2 = FastColor.ARGB32.blue(j3); + prevMax += Math.max(i2, Math.max(j2, k2)); + i += i2; + j += j2; + k += k2; + i1++; - PlayParticleWithRandomOffsetAndVelocityPayload.playParticleWithRandomOffsetAndVelocity((ServerLevel) level, - new Vec3(worldPosition.getX() + 0.5, worldPosition.getY() + 0.7, worldPosition.getZ() + 0.5), - ColoredFluidRisingParticleEffect.of(inkColor.getColorInt()), - 5, - new Vec3(0.22, 0.0, 0.22), - new Vec3(0.0, 0.1, 0.0) - ); + int finalRed = i / i1; + int finalGreen = j / i1; + int finalBlue = k / i1; + float f = (float)prevMax / (float)i1; + float f1 = (float)Math.max(finalRed, Math.max(finalGreen, finalBlue)); + finalRed = (int)((float)finalRed * f / f1); + finalGreen = (int)((float)finalGreen * f / f1); + finalBlue = (int)((float)finalBlue * f / f1); + int finalColor = FastColor.ARGB32.color(0, finalRed, finalGreen, finalBlue); + boolean flag = dyeditemcolor == null || dyeditemcolor.showInTooltip(); + result.set(DataComponents.DYED_COLOR, new DyedItemColor(finalColor, flag)); + return result; } - return true; + } + + public ItemStack colorStack(ItemStack stack, InkColor inkColor) { + Item resultItem = VariantHelper.getColoredItem(stack, inkColor); + if(resultItem == null) { + return ItemStack.EMPTY; + } + + ItemStack resultStack = resultItem.getDefaultInstance(); + resultStack.applyComponents(stack.getComponents()); + return resultStack; } @Override public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { super.loadAdditional(nbt, registryLookup); - CodecHelper.fromNbt(InkStorageComponent.CODEC, nbt.get("InkStorage")).ifPresent(storage -> this.inkStorage = new IndividualCappedInkStorage(storage.maxEnergyTotal(), storage.storedEnergy())); + CodecHelper.fromNbt(InkStorageComponent.CODEC, nbt.get("ink_storage")).ifPresent(storage -> this.inkStorage = new IndividualCappedInkStorage(storage.maxPerColor(), storage.storedEnergy())); } @Override protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { super.saveAdditional(nbt, registryLookup); - CodecHelper.writeNbt(nbt, "InkStorage", InkStorageComponent.CODEC, new InkStorageComponent(this.inkStorage)); + CodecHelper.writeNbt(nbt, "ink_storage", InkStorageComponent.CODEC, new InkStorageComponent(this.inkStorage)); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlockEntity.java index d1d5b123c6..b6dfd88b4c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlockEntity.java @@ -2,7 +2,7 @@ import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.color.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.fluid.*; import de.dafuqs.spectrum.api.recipe.*; import de.dafuqs.spectrum.blocks.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/SpectrumClusterBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/gemstone/SpectrumClusterBlock.java similarity index 94% rename from src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/SpectrumClusterBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/gemstone/SpectrumClusterBlock.java index 0f434d9aef..60d44f699b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/SpectrumClusterBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/gemstone/SpectrumClusterBlock.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.crystallarieum; +package de.dafuqs.spectrum.blocks.gemstone; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/ItemBowlBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/ItemBowlBlockEntity.java index df27dffef0..ead337d59d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/ItemBowlBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/ItemBowlBlockEntity.java @@ -1,8 +1,7 @@ package de.dafuqs.spectrum.blocks.item_bowl; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.color.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.events.*; @@ -10,7 +9,6 @@ import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.particle.effect.*; import de.dafuqs.spectrum.registries.*; -import net.minecraft.client.multiplayer.*; import net.minecraft.core.*; import net.minecraft.core.particles.*; import net.minecraft.nbt.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/mob_head/client/SpectrumSkullBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/mob_head/client/SpectrumSkullBlockEntityRenderer.java index de9074e442..912806d3ad 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/mob_head/client/SpectrumSkullBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/mob_head/client/SpectrumSkullBlockEntityRenderer.java @@ -3,7 +3,7 @@ import com.google.common.collect.*; import com.mojang.blaze3d.vertex.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.mob_head.*; import de.dafuqs.spectrum.blocks.mob_head.client.models.*; import de.dafuqs.spectrum.entity.render.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java index 169c11aaef..995ff71ead 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java @@ -3,7 +3,7 @@ import com.mojang.blaze3d.vertex.*; import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.ink.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.items.*; import de.dafuqs.spectrum.particle.client.*; @@ -14,8 +14,6 @@ import net.minecraft.network.codec.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import net.neoforged.neoforge.fluids.*; -import net.neoforged.neoforge.fluids.capability.*; import org.jetbrains.annotations.*; import java.util.*; @@ -45,7 +43,7 @@ public StreamCodec streamCodec() { @Override public void arriveAtDestination(Level level, BlockPos destination, @Nullable PastelNodeBlockEntity destinationNode) { - if (destinationNode != null) { + /*if (destinationNode != null) { @Nullable InkStorageBlockEntity destinationHandler = InkPastelPayloadType.getConnectedInkStorage(destinationNode); if (destinationHandler != null) { InkStorage destinationStorage = destinationHandler.getEnergyStorage(); @@ -54,7 +52,7 @@ public void arriveAtDestination(Level level, BlockPos destination, @Nullable Pas destinationHandler.setInkDirty(); } } - } + }*/ } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java index 26fd13c8f5..5bbc778bb0 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java @@ -1,7 +1,9 @@ package de.dafuqs.spectrum.blocks.pastel_network.payloads; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.capability.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import net.minecraft.core.*; @@ -17,17 +19,13 @@ public InkPastelPayloadType() { super(SpectrumCommon.locate("ink"), SpectrumPastelPayloads.INK.get()); } - public static @Nullable InkStorageBlockEntity getConnectedInkStorage(PastelNodeBlockEntity pastelNodeBlockEntity) { + public static @Nullable InkCapability getConnectedInkStorage(PastelNodeBlockEntity pastelNodeBlockEntity) { BlockState state = pastelNodeBlockEntity.getBlockState(); if (!(state.getBlock() instanceof PastelNodeBlock)) { return null; } Direction direction = state.getValue(PastelNodeBlock.FACING); - BlockEntity be = pastelNodeBlockEntity.getLevel().getBlockEntity(pastelNodeBlockEntity.getBlockPos().relative(direction.getOpposite())); - if(be instanceof InkStorageBlockEntity inkStorageBlockEntity) { - return inkStorageBlockEntity; - } - return null; + return pastelNodeBlockEntity.getLevel().getCapability(InkCapabilities.BLOCK, pastelNodeBlockEntity.getBlockPos().relative(direction.getOpposite()), null); } @Override @@ -35,21 +33,16 @@ public void tick(PastelTransmissionLogic logic, PastelNetwork.NodePriority prior Set nodes = logic.getLoadedNodes(PastelNodeType.SENDER); if (nodes.isEmpty()) return; - List> blockEntities = new ArrayList<>(nodes.size()); - List inkStorages = new ArrayList<>(nodes.size()); + List targets = new ArrayList<>(nodes.size()); for (PastelNodeBlockEntity node : nodes) { - InkStorageBlockEntity storage = getConnectedInkStorage(node); - if (storage != null) { - blockEntities.add(storage); - inkStorages.add(storage.getEnergyStorage()); + InkCapability inkCapability = getConnectedInkStorage(node); + if (inkCapability != null) { + targets.add(inkCapability); } } - if (blockEntities.isEmpty()) return; - InkStorage.equalizeInk(inkStorages); - for(InkStorageBlockEntity s : blockEntities) { - s.setInkDirty(); - } + if (targets.isEmpty()) return; + InkTransferHelper.equalizeInk(targets); } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pedestal/BuiltinGemstoneColor.java b/src/main/java/de/dafuqs/spectrum/blocks/pedestal/BuiltinGemstoneColor.java index f6b799db13..8d58771ece 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pedestal/BuiltinGemstoneColor.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pedestal/BuiltinGemstoneColor.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.blocks.pedestal; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlock.java index 12df51d1b0..9db69a2ab7 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlock.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.blocks.present; import com.mojang.serialization.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlockEntity.java index aa75a4fff1..f378346f12 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlockEntity.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.blocks.present; import de.dafuqs.spectrum.api.block.*; -import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlockItem.java b/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlockItem.java index 1a6367d531..c013d5100a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlockItem.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlockItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.blocks.present; import com.mojang.authlib.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; diff --git a/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java b/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java index bd4e8f5fc8..26579da658 100644 --- a/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java +++ b/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java @@ -1,10 +1,9 @@ package de.dafuqs.spectrum.capabilities; +import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.blocks.amphora.*; import de.dafuqs.spectrum.blocks.bottomless_bundle.*; import de.dafuqs.spectrum.blocks.chests.*; -import de.dafuqs.spectrum.blocks.cinderhearth.*; -import de.dafuqs.spectrum.blocks.crystallarieum.*; import de.dafuqs.spectrum.blocks.enchanter.*; import de.dafuqs.spectrum.blocks.energy.*; import de.dafuqs.spectrum.blocks.fusion_shrine.*; @@ -54,7 +53,6 @@ public static void register(RegisterCapabilitiesEvent event) { // ItemHandler.ITEM event.registerItem(Capabilities.ItemHandler.ITEM, (stack, ctx) -> BottomlessItemCapability.get(stack), SpectrumBlocks.BOTTOMLESS_BUNDLE.asItem()); - /* // BAG_OF_HOLDING only works server side // the client does not know about the content of the ender chest, unless opened @@ -63,6 +61,17 @@ public static void register(RegisterCapabilitiesEvent event) { // FluidHandler.ITEM event.registerItem(Capabilities.FluidHandler.ITEM, (stack, v) -> new FluidHandlerItemStackSimple.Consumable(SpectrumDataComponentTypes.FLUID_CONTENT, stack, 1000), SpectrumItems.MERMAIDS_GEM.get()); + + // Ink Blocks + event.registerBlockEntity(InkCapabilities.BLOCK, SpectrumBlockEntities.COLOR_PICKER.get(), (blockEntity, context) -> BlockEntityInkCapability.of(blockEntity)); + event.registerBlockEntity(InkCapabilities.BLOCK, SpectrumBlockEntities.TINTING_STATION.get(), (blockEntity, context) -> BlockEntityInkCapability.of(blockEntity)); + event.registerBlockEntity(InkCapabilities.BLOCK, SpectrumBlockEntities.CINDERHEARTH.get(), (blockEntity, context) -> BlockEntityInkCapability.of(blockEntity)); + event.registerBlockEntity(InkCapabilities.BLOCK, SpectrumBlockEntities.CRYSTALLARIEUM.get(), (blockEntity, context) -> BlockEntityInkCapability.of(blockEntity)); + + // Ink Items + event.registerItem(InkCapabilities.ITEM, (stack, ctx) -> ItemInkCapability.of(stack), + SpectrumItems.INK_FLASK, SpectrumItems.INK_ASSORTMENT, SpectrumItems.CREATIVE_INK_ASSORTMENT, SpectrumItems.PIGMENT_PALETTE, SpectrumItems.ARTISTS_PALETTE, + SpectrumItems.SHIELDGRASP_AMULET, SpectrumItems.HEARTSINGERS_REWARD, SpectrumItems.GLOVES_OF_DAWNS_GRASP, SpectrumItems.RING_OF_PURSUIT, SpectrumItems.RING_OF_DENSER_STEPS, SpectrumItems.RING_OF_AERIAL_GRACE, SpectrumItems.LAURELS_OF_SERENITY); } } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/commands/SanityCommand.java b/src/main/java/de/dafuqs/spectrum/commands/SanityCommand.java index a69c6ccea8..e1e5827ecb 100644 --- a/src/main/java/de/dafuqs/spectrum/commands/SanityCommand.java +++ b/src/main/java/de/dafuqs/spectrum/commands/SanityCommand.java @@ -8,7 +8,7 @@ import de.dafuqs.revelationary.advancement_criteria.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.color.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.recipe.*; import de.dafuqs.spectrum.blocks.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumCategory.java index 6eb19fdf34..01e1f784a8 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumCategory.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.compat.REI.plugins; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.blocks.crystallarieum.*; +import de.dafuqs.spectrum.blocks.energy.*; import de.dafuqs.spectrum.compat.REI.*; import de.dafuqs.spectrum.recipe.crystallarieum.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumDisplay.java index 01c621a9c7..a32f54fd70 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumDisplay.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumDisplay.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.compat.REI.plugins; import de.dafuqs.revelationary.api.advancements.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.compat.REI.*; import de.dafuqs.spectrum.recipe.crystallarieum.*; import me.shedaniel.rei.api.common.category.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/InkConvertingDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/InkConvertingDisplay.java index c7551eecc3..bdb7ab45c6 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/InkConvertingDisplay.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/InkConvertingDisplay.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.compat.REI.plugins; import de.dafuqs.revelationary.api.advancements.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.compat.REI.*; import de.dafuqs.spectrum.recipe.color_picker.InkConvertingRecipe; import me.shedaniel.rei.api.common.category.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java b/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java index 66ebeeea89..3f07686e7b 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.compat.ae2; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.blocks.crystallarieum.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.blocks.gemstone.*; import de.dafuqs.spectrum.compat.*; import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.registries.SpectrumItems.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/create/CreateCompat.java b/src/main/java/de/dafuqs/spectrum/compat/create/CreateCompat.java index 1b84e7df82..7864e718ef 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/create/CreateCompat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/create/CreateCompat.java @@ -1,9 +1,9 @@ package de.dafuqs.spectrum.compat.create; import com.simibubi.create.api.event.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.blocks.crystallarieum.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.fluid.*; +import de.dafuqs.spectrum.blocks.gemstone.*; import de.dafuqs.spectrum.compat.*; import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.registries.client.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java index 03d7e82399..0a438540a2 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java @@ -1,14 +1,13 @@ package de.dafuqs.spectrum.compat.emi.recipes; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.blocks.crystallarieum.*; +import de.dafuqs.spectrum.blocks.energy.*; import de.dafuqs.spectrum.compat.emi.*; import de.dafuqs.spectrum.recipe.crystallarieum.*; import de.dafuqs.spectrum.registries.*; import dev.emi.emi.api.neoforge.*; import dev.emi.emi.api.stack.*; import dev.emi.emi.api.widget.*; -import dev.emi.emi.platform.neoforge.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.item.crafting.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/gobber/GobberCompat.java b/src/main/java/de/dafuqs/spectrum/compat/gobber/GobberCompat.java index 3466907f87..655718602e 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/gobber/GobberCompat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/gobber/GobberCompat.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.compat.gobber; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.blocks.crystallarieum.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.blocks.gemstone.*; import de.dafuqs.spectrum.compat.*; import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.registries.SpectrumItems.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/malum/MalumCompat.java b/src/main/java/de/dafuqs/spectrum/compat/malum/MalumCompat.java index c64ea90d85..80a393189d 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/malum/MalumCompat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/malum/MalumCompat.java @@ -1,9 +1,5 @@ package de.dafuqs.spectrum.compat.malum; -import com.sammy.malum.registry.common.block.*; -import com.sammy.malum.registry.common.item.*; -import de.dafuqs.spectrum.api.color.*; -import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.compat.*; import net.neoforged.api.distmarker.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java index 5cb263405f..14aa04223f 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java @@ -3,10 +3,9 @@ import com.klikli_dev.modonomicon.book.*; import com.klikli_dev.modonomicon.client.gui.book.entry.*; import com.klikli_dev.modonomicon.data.*; -import com.klikli_dev.modonomicon.fluid.*; import com.mojang.blaze3d.systems.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.blocks.crystallarieum.*; +import de.dafuqs.spectrum.blocks.energy.*; import de.dafuqs.spectrum.compat.modonomicon.pages.*; import de.dafuqs.spectrum.recipe.crystallarieum.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/components/InkPoweredComponent.java b/src/main/java/de/dafuqs/spectrum/components/InkPoweredComponent.java index c159ffd9d2..3c7512b2ab 100644 --- a/src/main/java/de/dafuqs/spectrum/components/InkPoweredComponent.java +++ b/src/main/java/de/dafuqs/spectrum/components/InkPoweredComponent.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.ink.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; diff --git a/src/main/java/de/dafuqs/spectrum/components/InkStorageComponent.java b/src/main/java/de/dafuqs/spectrum/components/InkStorageComponent.java index 7d76412023..f1dfac8bba 100644 --- a/src/main/java/de/dafuqs/spectrum/components/InkStorageComponent.java +++ b/src/main/java/de/dafuqs/spectrum/components/InkStorageComponent.java @@ -2,8 +2,8 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import io.netty.buffer.*; import net.minecraft.network.codec.*; import net.minecraft.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/components/WrappedPresentComponent.java b/src/main/java/de/dafuqs/spectrum/components/WrappedPresentComponent.java index 95254bec81..bf3b6398a5 100644 --- a/src/main/java/de/dafuqs/spectrum/components/WrappedPresentComponent.java +++ b/src/main/java/de/dafuqs/spectrum/components/WrappedPresentComponent.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.present.*; import de.dafuqs.spectrum.helpers.*; import net.minecraft.network.*; diff --git a/src/main/java/de/dafuqs/spectrum/data_loaders/ColorMappingDataLoader.java b/src/main/java/de/dafuqs/spectrum/data_loaders/ColorMappingDataLoader.java index cc3193e43a..fa0a005769 100644 --- a/src/main/java/de/dafuqs/spectrum/data_loaders/ColorMappingDataLoader.java +++ b/src/main/java/de/dafuqs/spectrum/data_loaders/ColorMappingDataLoader.java @@ -1,22 +1,16 @@ package de.dafuqs.spectrum.data_loaders; import com.google.gson.*; -import com.mojang.datafixers.util.*; -import com.mojang.serialization.*; -import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.resources.*; import net.minecraft.server.packs.resources.*; -import net.minecraft.util.*; import net.minecraft.util.profiling.*; import org.jetbrains.annotations.*; import java.util.*; -import java.util.function.*; -import java.util.stream.*; public class ColorMappingDataLoader extends SimpleJsonResourceReloadListener { diff --git a/src/main/java/de/dafuqs/spectrum/entity/SpectrumTrackedDataHandlerRegistry.java b/src/main/java/de/dafuqs/spectrum/entity/SpectrumTrackedDataHandlerRegistry.java index f3e18c60ff..66cd74b826 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/SpectrumTrackedDataHandlerRegistry.java +++ b/src/main/java/de/dafuqs/spectrum/entity/SpectrumTrackedDataHandlerRegistry.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.entity; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.entity.variants.*; import de.dafuqs.spectrum.items.tools.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java index 21ad032973..def79afe91 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.entity.entity; import de.dafuqs.spectrum.api.block.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.interaction.*; import de.dafuqs.spectrum.compat.claims.*; import de.dafuqs.spectrum.entity.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/LizardEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/LizardEntity.java index 3642a5b08c..ce09da6a92 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/LizardEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/LizardEntity.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.entity.entity; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.entity.*; import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.entity.variants.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/MagicProjectileEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/MagicProjectileEntity.java index f1873f176e..0de1863013 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/MagicProjectileEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/MagicProjectileEntity.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.entity.entity; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.sound.*; import net.minecraft.core.particles.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/MiningProjectileEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/MiningProjectileEntity.java index dab4be2ee8..4203855296 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/MiningProjectileEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/MiningProjectileEntity.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.entity.entity; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.effect.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/predicates/LizardPredicate.java b/src/main/java/de/dafuqs/spectrum/entity/predicates/LizardPredicate.java index 62dcdef99f..8323e0681f 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/predicates/LizardPredicate.java +++ b/src/main/java/de/dafuqs/spectrum/entity/predicates/LizardPredicate.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.entity.entity.*; import de.dafuqs.spectrum.entity.variants.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/MobEffectHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/MobEffectHelper.java index 353bcaf8f7..2890317327 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/MobEffectHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/MobEffectHelper.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.helpers; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.*; import de.dafuqs.spectrum.mixin.accessors.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/SpectrumColorHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/SpectrumColorHelper.java index 0f799d5c09..4782baeb57 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/SpectrumColorHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/SpectrumColorHelper.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.helpers; import com.mojang.serialization.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.items.*; import net.minecraft.util.*; import net.minecraft.world.item.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java index c29657ebf9..9e45c35f67 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.helpers; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.core.registries.*; @@ -55,12 +55,12 @@ public class VariantHelper { for (int i = 0; i < parts.length; i++) { int finalI = i; InkColor matched = SpectrumRegistries.INK_COLOR.stream() - .filter(c -> c.toString().equals(parts[finalI])) + .filter(c -> c.getID().getPath().equals(parts[finalI])) .findFirst() .orElse(null); if (matched != null) { - parts[i] = color.toString(); + parts[i] = color.getID().getPath(); String newPath = String.join("_", parts); ResourceLocation newId = ResourceLocation.fromNamespaceAndPath(id.getNamespace(), newPath); T newObj = lookup.apply(newId); @@ -74,7 +74,7 @@ public class VariantHelper { return newObj; } - // Option 3: prefix the color + "stained" ("glass" => "red_stained_glass") + // Option 3: prefix the color + "_stained_" ("glass" => "red_stained_glass") newObj = lookup.apply(ResourceLocation.fromNamespaceAndPath(id.getNamespace(), color.getID().getPath() + "_stained_" + id.getPath())); return (newObj != defaultToIgnore && !newObj.equals(original)) ? newObj : null; }); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java index dc1466f60c..294ac01fbd 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java @@ -1,11 +1,9 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.blocks.cinderhearth.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.inventories.widgets.ink.*; -import net.minecraft.client.*; import net.minecraft.client.gui.*; import net.minecraft.client.gui.screens.inventory.*; import net.minecraft.network.chat.*; @@ -26,7 +24,7 @@ public CinderhearthScreen(CinderhearthScreenHandler handler, Inventory playerInv @Override protected void init() { super.init(); - this.inkListWidget = new InkListWidget(getGuiLeft() + 140, getGuiTop() + 34, 40, this.menu.getBlockEntity(), CinderhearthBlockEntity.USED_INK_COLORS); + this.inkListWidget = new InkListWidget(getGuiLeft() + 140, getGuiTop() + 34, 40, this.menu.getBlockEntity()); addRenderableWidget(inkListWidget); } @@ -49,7 +47,7 @@ protected void renderBg(GuiGraphics guiGraphics, float partialTick, int mouseX, int craftingTime = this.menu.getCraftingTime(); int craftingTimeTotal = this.menu.getCraftingTimeTotal(); - if (this.menu.getBlockEntity().getEnergyStorage().getEnergy(InkColors.ORANGE) > 0) { + if (this.menu.getBlockEntity().getInkStorage().getEnergy(InkColors.ORANGE) > 0) { guiGraphics.blit(BACKGROUND, this.leftPos + 14, this.topPos + 62, 176, 14, 15, 2); } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java index c9a475ce27..a8253e9be4 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.inventories; -import de.dafuqs.spectrum.blocks.cinderhearth.*; +import de.dafuqs.spectrum.blocks.energy.*; import de.dafuqs.spectrum.inventories.slots.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.registries.*; @@ -64,7 +64,7 @@ public CinderhearthScreenHandler(int syncId, Inventory playerInventory, Cinderhe } if (this.player != null) { - UpdateBlockEntityInkPayload.updateBlockEntityInk(blockEntity.getBlockPos(), this.blockEntity.getEnergyStorage(), player); + UpdateBlockEntityInkPayload.updateBlockEntityInk(blockEntity.getBlockPos(), this.blockEntity.getInkStorage(), player); } this.addDataSlots(propertyDelegate); @@ -123,7 +123,7 @@ public void broadcastChanges() { super.broadcastChanges(); if (this.player != null && this.blockEntity.getInkDirty()) { - UpdateBlockEntityInkPayload.updateBlockEntityInk(blockEntity.getBlockPos(), blockEntity.getEnergyStorage(), player); + UpdateBlockEntityInkPayload.updateBlockEntityInk(blockEntity.getBlockPos(), blockEntity.getInkStorage(), player); } } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java index 8a439a0223..2acba2ec24 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.inventories; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.energy.*; import de.dafuqs.spectrum.inventories.slots.*; import net.minecraft.core.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java index bbcd669e5c..1906352d97 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.inventories; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.energy.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.inventories.widgets.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreenHandler.java index d2979098cf..27b615f1a4 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreenHandler.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.api.block.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.energy.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.registries.*; @@ -66,7 +66,7 @@ protected InkTransferScreenHandler(@Nullable MenuType menuType, int syncId, I } if (this.serverPlayer != null) { - UpdateBlockEntityInkPayload.updateBlockEntityInk(blockEntity.getBlockPos(), this.blockEntity.getEnergyStorage(), serverPlayer); + UpdateBlockEntityInkPayload.updateBlockEntityInk(blockEntity.getBlockPos(), this.blockEntity.getInkStorage(), serverPlayer); } } @@ -123,7 +123,7 @@ public void broadcastChanges() { super.broadcastChanges(); if (this.serverPlayer != null && this.blockEntity.getInkDirty()) { - UpdateBlockEntityInkPayload.updateBlockEntityInk(blockEntity.getBlockPos(), blockEntity.getEnergyStorage(), serverPlayer); + UpdateBlockEntityInkPayload.updateBlockEntityInk(blockEntity.getBlockPos(), blockEntity.getInkStorage(), serverPlayer); } } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreen.java index 8e568bf106..7ad6434b41 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreen.java @@ -1,13 +1,12 @@ package de.dafuqs.spectrum.inventories; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.networking.c2s_payloads.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.client.*; import net.minecraft.network.chat.*; import net.minecraft.sounds.*; import net.minecraft.world.entity.player.*; -import net.neoforged.api.distmarker.*; import net.neoforged.neoforge.network.*; import org.jetbrains.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreenHandler.java index 767923c0d4..ff195aa700 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreenHandler.java @@ -2,7 +2,7 @@ import de.dafuqs.revelationary.api.advancements.*; import de.dafuqs.spectrum.api.block.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.items.magic_items.*; import net.minecraft.core.*; import net.minecraft.world.entity.player.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java index 2042f07b73..a960da4456 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java @@ -1,11 +1,7 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; import de.dafuqs.spectrum.inventories.widgets.ink.*; -import net.minecraft.client.*; import net.minecraft.client.gui.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; @@ -14,7 +10,7 @@ public class TintingStationScreen extends InkTransferScreen { - protected static final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); + protected static final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/tinting_station.png"); protected InkListWidget inkListWidget; @@ -26,7 +22,8 @@ public TintingStationScreen(InkTransferScreenHandler handler, Inventory playerIn protected void init() { super.init(); - this.inkListWidget = new InkListWidget(getGuiLeft() + 140, getGuiTop() + 34, 40, (InkStorageBlockEntity) this.menu.getBlockEntity(), InkColors.all()); + this.inkListWidget = new InkListWidgetWithBorderAndTitle(getGuiLeft() + 140, getGuiTop() + 40, 40, this.menu.getBlockEntity()); + inkListWidget.setPosition(getGuiLeft() - this.inkListWidget.getWidth(), getGuiTop() + 40); addRenderableWidget(inkListWidget); } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java index 8551485267..1adb15d930 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.inventories; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.energy.*; import de.dafuqs.spectrum.inventories.slots.*; import net.minecraft.core.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/slots/InkInputSlot.java b/src/main/java/de/dafuqs/spectrum/inventories/slots/InkInputSlot.java index 6cda311980..5ac10d3919 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/slots/InkInputSlot.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/slots/InkInputSlot.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.inventories.slots; -import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.ink.storage.*; import net.minecraft.world.*; import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/slots/InkStorageSlot.java b/src/main/java/de/dafuqs/spectrum/inventories/slots/InkStorageSlot.java index 175dccc808..ca26a38170 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/slots/InkStorageSlot.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/slots/InkStorageSlot.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.inventories.slots; -import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.ink.storage.*; import net.minecraft.world.*; import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java index e8e5c49f23..bc344c0b31 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.inventories.widgets; import de.dafuqs.revelationary.api.advancements.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.energy.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.client.*; @@ -32,7 +32,7 @@ public class ColorSelectionWidget extends AbstractWidget { final int selectedIndexY; public ColorSelectionWidget(int x, int y, int selectedIndexX, int selectedIndexY, BaseInkTransferBlockEntity blockEntity) { - this(x, y, selectedIndexX, selectedIndexY, blockEntity, blockEntity.getEnergyStorage().acceptedColors()); + this(x, y, selectedIndexX, selectedIndexY, blockEntity, blockEntity.getInkStorage().acceptedColors()); } public ColorSelectionWidget(int x, int y, int selectedIndexX, int selectedIndexY, BaseInkTransferBlockEntity blockEntity, Iterable availableColors) { diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java index 3342268426..10ee42c418 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java @@ -1,29 +1,37 @@ package de.dafuqs.spectrum.inventories.widgets.ink; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.helpers.*; import net.minecraft.client.gui.*; import net.minecraft.client.gui.components.*; import net.minecraft.client.gui.narration.*; import net.minecraft.network.chat.*; +import net.minecraft.resources.*; import org.jetbrains.annotations.*; import javax.annotation.Nullable; public class InkListWidget extends AbstractWidget { - public static final int WIDTH_PER_COLOR = 4; - public static final int SPACE_BETWEEN_COLORS = 2; - + protected final int padding; + protected final int widthPerColor; + protected final int spaceBetweenColors; protected final Iterable colors; - protected final InkStorageBlockEntity inkStorageBlockEntity; + protected final InkStorageBlockEntity inkStorageBlockEntity; + + public InkListWidget(int x, int y, int height, InkStorageBlockEntity inkStorageBlockEntity) { + this(x, y, height, inkStorageBlockEntity, 4, 2, 0); + } - public InkListWidget(int x, int y, int height, InkStorageBlockEntity inkStorageBlockEntity, Iterable colors) { - super(x, y, inkStorageBlockEntity.getEnergyStorage().getSupportedColors().size() * (WIDTH_PER_COLOR + SPACE_BETWEEN_COLORS) - SPACE_BETWEEN_COLORS, height, Component.empty()); - this.colors = colors; + public InkListWidget(int x, int y, int height, InkStorageBlockEntity inkStorageBlockEntity, int widthPerColor, int spaceBetweenColors, int padding) { + super(x, y, inkStorageBlockEntity.getInkStorage().acceptedColors().size() * (widthPerColor + spaceBetweenColors) - spaceBetweenColors + padding + padding, height, Component.empty()); + this.widthPerColor = widthPerColor; + this.padding = padding; + this.spaceBetweenColors = spaceBetweenColors; this.inkStorageBlockEntity = inkStorageBlockEntity; + this.colors = inkStorageBlockEntity.getInkStorage().acceptedColors(); } @Override @@ -32,25 +40,26 @@ protected void updateWidgetNarration(@NotNull NarrationElementOutput narrationEl } @Override - protected void renderWidget(@NotNull GuiGraphics guiGraphics, int i, int i1, float v) { - int startHeight = getY() + getHeight(); - int currentXOffset = 0; + protected void renderWidget(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + InkStorage inkStorage = inkStorageBlockEntity.getInkStorage(); - IndividualCappedInkStorage inkStorage = inkStorageBlockEntity.getEnergyStorage(); + // foreground bars + int startHeight = getY() + getHeight() + padding; + int currentXOffset = 0; long total = inkStorage.getMaxPerColor(); for (InkColor color : colors) { long amount = inkStorage.getEnergy(color); if (amount > 0) { int height = Math.max(1, Math.round(((float) amount / ((float) total / getHeight())))); - RenderHelper.fillQuad(guiGraphics.pose(), getX() + currentXOffset, startHeight - height, height, WIDTH_PER_COLOR, color.getColorVec()); + RenderHelper.fillQuad(guiGraphics.pose(), getX() + currentXOffset + padding, startHeight - height, height - padding - padding, widthPerColor, color.getColorVec()); } - currentXOffset = currentXOffset + WIDTH_PER_COLOR + SPACE_BETWEEN_COLORS; + currentXOffset = currentXOffset + widthPerColor + spaceBetweenColors; } } @Nullable public Tooltip getTooltip() { - return Tooltip.create(inkStorageBlockEntity.getEnergyStorage().getTooltip()); + return inkStorageBlockEntity.getInkStorage().getWidgetTooltip(); } } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidgetWithBorderAndTitle.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidgetWithBorderAndTitle.java new file mode 100644 index 0000000000..93098db57b --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidgetWithBorderAndTitle.java @@ -0,0 +1,57 @@ +package de.dafuqs.spectrum.inventories.widgets.ink; + +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; +import de.dafuqs.spectrum.helpers.*; +import net.minecraft.client.gui.*; +import net.minecraft.resources.*; +import net.minecraft.util.*; +import org.jetbrains.annotations.*; + +import java.util.*; + +public class InkListWidgetWithBorderAndTitle extends InkListWidget { + + protected static final ResourceLocation BACKGROUND_SPRITE = SpectrumCommon.locate("widget/ink_list"); + protected static final ResourceLocation INK_SPRITE = SpectrumCommon.locate("widget/ink_text"); + protected static final int TITLE_HEIGHT = 18; + + public InkListWidgetWithBorderAndTitle(int x, int y, int height, InkStorageBlockEntity inkStorageBlockEntity) { + super(x, y, height, inkStorageBlockEntity, 4, 1, 5); + } + + @Override + protected void renderWidget(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + // We first collect the colors we need to draw + // this widget does skip ink colors that the player has no access to yet + InkStorage inkStorage = inkStorageBlockEntity.getInkStorage(); + List> inkColorAmountsOverZero = new ArrayList<>(); + for (InkColor color : colors) { + long amount = inkStorage.getEnergy(color); + if(amount > 0) { + inkColorAmountsOverZero.add(new Tuple<>(color, amount));} + } + + int prevWidth = getWidth(); + int newWidth = Math.max(45, inkColorAmountsOverZero.size() * (widthPerColor + spaceBetweenColors) + padding + padding); + setWidth(newWidth); + setX(getX() + prevWidth - newWidth); + + // background and title + // we exceed the widgets size here so the mouseover still only shows up when hovering the gauges + guiGraphics.blitSprite(BACKGROUND_SPRITE, this.getX(), this.getY() - TITLE_HEIGHT, this.getWidth(), this.getHeight() + TITLE_HEIGHT); + guiGraphics.blitSprite(INK_SPRITE, this.getX() + 4, this.getY() - 12, 40, 14); + + // foreground bars + int startHeight = getY() + getHeight() + padding; + int currentXOffset = 0; + long total = inkStorage.getMaxPerColor(); + for (Tuple entry : inkColorAmountsOverZero) { + int height = Math.max(1, Math.round(((float) entry.getB() / ((float) total / getHeight())))); + RenderHelper.fillQuad(guiGraphics.pose(), getX() + currentXOffset + padding, startHeight - height, height - padding - padding, widthPerColor, entry.getA().getColorVec()); + currentXOffset = currentXOffset + widthPerColor + spaceBetweenColors; + } + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkPieWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkPieWidget.java index 11b7586322..c204174d45 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkPieWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkPieWidget.java @@ -1,12 +1,12 @@ package de.dafuqs.spectrum.inventories.widgets.ink; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.helpers.*; import net.minecraft.client.gui.*; import net.minecraft.client.gui.components.*; import net.minecraft.client.gui.narration.*; -import net.minecraft.network.chat.*; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.*; import javax.annotation.Nullable; @@ -22,8 +22,8 @@ public InkPieWidget(int x, int y, int width, int height, InkStorageBlockEntity 0) { int centerX = getX() + width / 2; @@ -32,7 +32,7 @@ protected void renderWidget(@NotNull GuiGraphics guiGraphics, int i, int i1, flo double startRad = -0.5 * Math.PI; for (InkColor color : InkColors.all()) { - long currentInk = blockEntity.getEnergyStorage().getEnergy(color); + long currentInk = blockEntity.getInkStorage().getEnergy(color); if (currentInk > 0) { double thisPart = ((double) currentInk / (double) totalInk); while (thisPart > 0) { @@ -69,8 +69,8 @@ protected void renderWidget(@NotNull GuiGraphics guiGraphics, int i, int i1, flo } @Nullable - public net.minecraft.client.gui.components.Tooltip getTooltip() { - return Tooltip.create(blockEntity.getEnergyStorage().getTooltip()); + public Tooltip getTooltip() { + return blockEntity.getInkStorage().getWidgetTooltip(); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/StackedInkBarWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/StackedInkBarWidget.java index 98a03c9a25..f635b867fe 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/StackedInkBarWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/StackedInkBarWidget.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.inventories.widgets.ink; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.helpers.*; import net.minecraft.client.gui.*; import net.minecraft.client.gui.components.*; @@ -23,7 +23,7 @@ public StackedInkBarWidget(int x, int y, int width, int height, InkStorageBlockE @Override protected void renderWidget(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { - InkStorage inkStorage = this.blockEntity.getEnergyStorage(); + InkStorage inkStorage = this.blockEntity.getInkStorage(); long currentTotal = inkStorage.getCurrentTotal(); if (currentTotal > 0) { @@ -50,7 +50,7 @@ protected void updateWidgetNarration(@NotNull NarrationElementOutput narrationEl @Nullable public Tooltip getTooltip() { - InkStorage inkStorage = this.blockEntity.getEnergyStorage(); + InkStorage inkStorage = this.blockEntity.getInkStorage(); String readableCurrentTotalString = Support.getShortenedNumberString(inkStorage.getCurrentTotal()); String percent = Support.getSensiblePercentString(inkStorage.getCurrentTotal(), (inkStorage.getMaxTotal())); return Tooltip.create(Component.translatable("spectrum.tooltip.ink_powered.percent_filled", readableCurrentTotalString, percent)); diff --git a/src/main/java/de/dafuqs/spectrum/items/ConcealingOilsItem.java b/src/main/java/de/dafuqs/spectrum/items/ConcealingOilsItem.java index 4d9cacb815..43656cc14b 100644 --- a/src/main/java/de/dafuqs/spectrum/items/ConcealingOilsItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ConcealingOilsItem.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.items; -import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.ink.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.items.food.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/PigmentItem.java b/src/main/java/de/dafuqs/spectrum/items/PigmentItem.java index 22cd22e570..2d367d6f6f 100644 --- a/src/main/java/de/dafuqs/spectrum/items/PigmentItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/PigmentItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.items.conditional.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/energy/ArtistsPaletteItem.java b/src/main/java/de/dafuqs/spectrum/items/energy/ArtistsPaletteItem.java index 826c7ec1e1..a8d2ef014e 100644 --- a/src/main/java/de/dafuqs/spectrum/items/energy/ArtistsPaletteItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/energy/ArtistsPaletteItem.java @@ -1,9 +1,8 @@ package de.dafuqs.spectrum.items.energy; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.helpers.*; @@ -52,7 +51,7 @@ public ItemStack getDefaultInstance() { public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag type) { super.appendHoverText(stack, context, tooltip, type); tooltip.add(Component.translatable("item.spectrum.pigment_palette.tooltip.target").withStyle(ChatFormatting.GRAY)); - tooltip.add(getEnergyStorage(stack).getTooltip()); + tooltip.addAll(getEnergyStorage(stack).getTooltip()); addBannerPatternProviderTooltip(tooltip); } diff --git a/src/main/java/de/dafuqs/spectrum/items/energy/CreativeInkAssortmentItem.java b/src/main/java/de/dafuqs/spectrum/items/energy/CreativeInkAssortmentItem.java index edfde1968c..c9149736a6 100644 --- a/src/main/java/de/dafuqs/spectrum/items/energy/CreativeInkAssortmentItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/energy/CreativeInkAssortmentItem.java @@ -1,8 +1,7 @@ package de.dafuqs.spectrum.items.energy; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.helpers.*; @@ -30,9 +29,8 @@ public InteractionResult useOn(UseOnContext context) { if (!world.isClientSide) { BlockEntity blockEntity = world.getBlockEntity(context.getClickedPos()); if (blockEntity instanceof InkStorageBlockEntity inkStorageBlockEntity) { - inkStorageBlockEntity.getEnergyStorage().fillCompletely(); + inkStorageBlockEntity.getInkStorage().fillCompletely(); inkStorageBlockEntity.setInkDirty(); - blockEntity.setChanged(); } } return super.useOn(context); @@ -62,7 +60,7 @@ public void setEnergyStorage(ItemStack itemStack, InkStorage storage) { public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag type) { super.appendHoverText(stack, context, tooltip, type); CreativeOnlyItem.appendTooltip(tooltip); - tooltip.add(getEnergyStorage(stack).getTooltip()); + tooltip.addAll(getEnergyStorage(stack).getTooltip()); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/items/energy/InkAssortmentItem.java b/src/main/java/de/dafuqs/spectrum/items/energy/InkAssortmentItem.java index d9c93cf54a..39feea1375 100644 --- a/src/main/java/de/dafuqs/spectrum/items/energy/InkAssortmentItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/energy/InkAssortmentItem.java @@ -1,8 +1,7 @@ package de.dafuqs.spectrum.items.energy; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; @@ -45,7 +44,7 @@ public ItemStack getDefaultInstance() { @Override public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag type) { super.appendHoverText(stack, context, tooltip, type); - tooltip.add(getEnergyStorage(stack).getTooltip()); + tooltip.addAll(getEnergyStorage(stack).getTooltip()); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/items/energy/InkFlaskItem.java b/src/main/java/de/dafuqs/spectrum/items/energy/InkFlaskItem.java index 72d63d149f..6877666c6c 100644 --- a/src/main/java/de/dafuqs/spectrum/items/energy/InkFlaskItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/energy/InkFlaskItem.java @@ -1,8 +1,7 @@ package de.dafuqs.spectrum.items.energy; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.helpers.*; @@ -12,7 +11,6 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.block.entity.*; -import net.neoforged.neoforge.event.entity.player.*; import org.jetbrains.annotations.*; import java.util.*; @@ -49,7 +47,7 @@ public ItemStack getDefaultInstance() { @Override public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag type) { super.appendHoverText(stack, context, tooltip, type); - tooltip.add(getEnergyStorage(stack).getTooltip()); + tooltip.addAll(getEnergyStorage(stack).getTooltip()); addBannerPatternProviderTooltip(tooltip); } diff --git a/src/main/java/de/dafuqs/spectrum/items/energy/PigmentPaletteItem.java b/src/main/java/de/dafuqs/spectrum/items/energy/PigmentPaletteItem.java index 0b5be67568..200ceb02d9 100644 --- a/src/main/java/de/dafuqs/spectrum/items/energy/PigmentPaletteItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/energy/PigmentPaletteItem.java @@ -1,9 +1,8 @@ package de.dafuqs.spectrum.items.energy; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.helpers.*; @@ -52,7 +51,7 @@ public IndividualCappedInkStorage getEnergyStorage(ItemStack itemStack) { public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag type) { super.appendHoverText(stack, context, tooltip, type); tooltip.add(Component.translatable("item.spectrum.pigment_palette.tooltip.target").withStyle(ChatFormatting.GRAY)); - tooltip.add(getEnergyStorage(stack).getTooltip()); + tooltip.addAll(getEnergyStorage(stack).getTooltip()); addBannerPatternProviderTooltip(tooltip); } diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/BuildingStaffItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/BuildingStaffItem.java index edcc3f8415..c31cf20e53 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/BuildingStaffItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/BuildingStaffItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items.magic_items; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.compat.claims.*; import de.dafuqs.spectrum.helpers.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/CelestialPocketWatchItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/CelestialPocketWatchItem.java index 572dacc8cb..44d6dca0b7 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/CelestialPocketWatchItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/CelestialPocketWatchItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items.magic_items; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/ConstructorsStaffItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/ConstructorsStaffItem.java index 1188808211..d553ee7aee 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/ConstructorsStaffItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/ConstructorsStaffItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items.magic_items; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.compat.claims.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.recipe.pedestal.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/ExchangeStaffItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/ExchangeStaffItem.java index 7041b0c0b0..3f1cc17736 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/ExchangeStaffItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/ExchangeStaffItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items.magic_items; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.compat.claims.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/NaturesStaffItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/NaturesStaffItem.java index a710918ae4..a7f175de06 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/NaturesStaffItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/NaturesStaffItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items.magic_items; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.interaction.*; import de.dafuqs.spectrum.compat.claims.*; import de.dafuqs.spectrum.data_loaders.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java index 6537234be2..8e094cb938 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java @@ -2,8 +2,8 @@ import de.dafuqs.revelationary.api.advancements.*; import de.dafuqs.spectrum.api.block.*; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.interaction.*; import de.dafuqs.spectrum.compat.claims.*; import de.dafuqs.spectrum.entity.entity.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/RadianceStaffItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/RadianceStaffItem.java index 3a525c2055..dc5f1a0f4e 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/RadianceStaffItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/RadianceStaffItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items.magic_items; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.decoration.*; import de.dafuqs.spectrum.compat.claims.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/StaffOfRemembranceItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/StaffOfRemembranceItem.java index f628927de9..0e19c9f23c 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/StaffOfRemembranceItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/StaffOfRemembranceItem.java @@ -1,8 +1,8 @@ package de.dafuqs.spectrum.items.magic_items; import de.dafuqs.revelationary.api.advancements.*; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.blocks.memory.*; import de.dafuqs.spectrum.compat.claims.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/MalachiteGlassAmpouleItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/MalachiteGlassAmpouleItem.java index 0f85eda68f..1de8e7aff6 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/MalachiteGlassAmpouleItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/MalachiteGlassAmpouleItem.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.items.magic_items.ampoules; -import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.ink.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.entity.entity.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/DraconicTwinswordItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/DraconicTwinswordItem.java index b506b99990..0352f8e3c1 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/DraconicTwinswordItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/DraconicTwinswordItem.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.items.tools; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.entity.entity.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/DragonTalonItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/DragonTalonItem.java index 04a94fb1a4..5405f7f9e8 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/DragonTalonItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/DragonTalonItem.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.items.tools; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.entity.entity.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/DreamflayerItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/DreamflayerItem.java index b6fb80a16a..1c3da7982d 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/DreamflayerItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/DreamflayerItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items.tools; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.particle.effect.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/FerociousBidentItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/FerociousBidentItem.java index aecd21458c..9350412220 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/FerociousBidentItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/FerociousBidentItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items.tools; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.helpers.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/FractalBidentItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/FractalBidentItem.java index a684f13bea..7594348f36 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/FractalBidentItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/FractalBidentItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items.tools; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.render.*; import net.minecraft.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestCrossbowItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestCrossbowItem.java index c390702548..3e8f55ced9 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestCrossbowItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestCrossbowItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items.tools; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestGreatswordItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestGreatswordItem.java index e6cfe5e871..ea9924d170 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestGreatswordItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestGreatswordItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items.tools; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.helpers.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestWorkstaffItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestWorkstaffItem.java index 3da1348a03..956c4e53d1 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestWorkstaffItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestWorkstaffItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items.tools; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.entity.entity.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/NectarLanceItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/NectarLanceItem.java index 60e7e9e70a..d81796b40e 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/NectarLanceItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/NectarLanceItem.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.items.tools; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.mob_effect.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/NightfallsBladeItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/NightfallsBladeItem.java index 62ee7691c8..f6f1fbefe0 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/NightfallsBladeItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/NightfallsBladeItem.java @@ -2,7 +2,7 @@ import de.dafuqs.revelationary.api.advancements.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.ink.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.helpers.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/OmniAcceleratorItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/OmniAcceleratorItem.java index c16e3b8838..0124786467 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/OmniAcceleratorItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/OmniAcceleratorItem.java @@ -1,8 +1,8 @@ package de.dafuqs.spectrum.items.tools; import com.mojang.blaze3d.vertex.*; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.interaction.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/WorkstaffItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/WorkstaffItem.java index 035bbf520c..b76d8396d0 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/WorkstaffItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/WorkstaffItem.java @@ -1,8 +1,8 @@ package de.dafuqs.spectrum.items.tools; import de.dafuqs.revelationary.api.advancements.*; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.helpers.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/AzureDikeAmuletItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/AzureDikeAmuletItem.java index 016175264d..dd345c8d9b 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/AzureDikeAmuletItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/AzureDikeAmuletItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items.trinkets; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.attachment_types.*; import de.dafuqs.spectrum.progression.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/ExtraHealthRingItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/ExtraHealthRingItem.java index 56cfa1aa89..536b24c293 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/ExtraHealthRingItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/ExtraHealthRingItem.java @@ -2,8 +2,8 @@ import com.google.common.collect.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import net.minecraft.*; import net.minecraft.core.*; import net.minecraft.network.chat.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/ExtraMiningSpeedRingItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/ExtraMiningSpeedRingItem.java index 9cba1133c0..5d1cdf6584 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/ExtraMiningSpeedRingItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/ExtraMiningSpeedRingItem.java @@ -2,8 +2,8 @@ import com.google.common.collect.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import net.minecraft.*; import net.minecraft.core.*; import net.minecraft.network.chat.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/ExtraReachGlovesItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/ExtraReachGlovesItem.java index 5daf8d9a89..ad78ec6b54 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/ExtraReachGlovesItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/ExtraReachGlovesItem.java @@ -2,8 +2,8 @@ import com.google.common.collect.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import net.minecraft.*; import net.minecraft.core.*; import net.minecraft.network.chat.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/GlowVisionGogglesItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/GlowVisionGogglesItem.java index c85a505f1c..d82254c9f7 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/GlowVisionGogglesItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/GlowVisionGogglesItem.java @@ -1,8 +1,8 @@ package de.dafuqs.spectrum.items.trinkets; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.network.chat.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/GravityRingItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/GravityRingItem.java index 49ee6f3b3d..97db68d348 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/GravityRingItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/GravityRingItem.java @@ -1,8 +1,8 @@ package de.dafuqs.spectrum.items.trinkets; import com.google.common.collect.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import net.minecraft.core.*; import net.minecraft.resources.*; import net.minecraft.world.entity.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/InkDrainCurioItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/InkDrainCurioItem.java index 92f882f031..17cdf57a17 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/InkDrainCurioItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/InkDrainCurioItem.java @@ -1,8 +1,7 @@ package de.dafuqs.spectrum.items.trinkets; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.helpers.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/LaurelsOfSerenityItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/LaurelsOfSerenityItem.java index a242495865..b4ca5362e6 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/LaurelsOfSerenityItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/LaurelsOfSerenityItem.java @@ -3,8 +3,8 @@ import com.google.common.collect.*; import de.dafuqs.additionalentityattributes.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; import net.minecraft.core.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/PotionPendantItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/PotionPendantItem.java index 476f0c5cc2..ca20396c46 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/PotionPendantItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/PotionPendantItem.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.items.trinkets; -import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.ink.*; import de.dafuqs.spectrum.api.item.*; import net.minecraft.core.component.*; import net.minecraft.network.chat.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/RingOfAerialGraceItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/RingOfAerialGraceItem.java index 9f057810ef..506d19b7f3 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/RingOfAerialGraceItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/RingOfAerialGraceItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items.trinkets; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import net.minecraft.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/RingOfDenserStepsItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/RingOfDenserStepsItem.java index 007c51943a..c5dc866d17 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/RingOfDenserStepsItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/RingOfDenserStepsItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items.trinkets; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import net.minecraft.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; diff --git a/src/main/java/de/dafuqs/spectrum/loot/functions/FillPotionFillableLootFunction.java b/src/main/java/de/dafuqs/spectrum/loot/functions/FillPotionFillableLootFunction.java index ef0bc0c1c6..887d5ab858 100644 --- a/src/main/java/de/dafuqs/spectrum/loot/functions/FillPotionFillableLootFunction.java +++ b/src/main/java/de/dafuqs/spectrum/loot/functions/FillPotionFillableLootFunction.java @@ -2,8 +2,8 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.loot.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/InkColorSelectedC2SPayload.java b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/InkColorSelectedC2SPayload.java index 3ddcda1a4b..78b1cedbba 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/InkColorSelectedC2SPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/InkColorSelectedC2SPayload.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.networking.c2s_payloads; import de.dafuqs.spectrum.api.block.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.networking.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/InkColorSelectedS2CPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/InkColorSelectedS2CPayload.java index 6ee7be8651..1bc76c0e8e 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/InkColorSelectedS2CPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/InkColorSelectedS2CPayload.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.networking.s2c_payloads; import de.dafuqs.spectrum.api.block.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.networking.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingFinishedParticlePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingFinishedParticlePayload.java index 20b6a9f14e..ecfd5887d6 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingFinishedParticlePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingFinishedParticlePayload.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.networking.s2c_payloads; import de.dafuqs.spectrum.api.color.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.networking.*; import de.dafuqs.spectrum.particle.*; import de.dafuqs.spectrum.particle.effect.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPresentOpeningParticlesPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPresentOpeningParticlesPayload.java index 8ff7f37596..eafef0b9e8 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPresentOpeningParticlesPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPresentOpeningParticlesPayload.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.networking.s2c_payloads; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.present.*; import de.dafuqs.spectrum.networking.*; import it.unimi.dsi.fastutil.objects.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/UpdateBlockEntityInkPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/UpdateBlockEntityInkPayload.java index c8aec29586..93703075ba 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/UpdateBlockEntityInkPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/UpdateBlockEntityInkPayload.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.networking.s2c_payloads; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.networking.*; import net.minecraft.core.*; import net.minecraft.network.*; @@ -37,7 +37,7 @@ public static void execute(UpdateBlockEntityInkPayload payload, IPayloadContext Level level = context.player().level(); BlockEntity blockEntity = level.getBlockEntity(payload.pos); if (blockEntity instanceof InkStorageBlockEntity inkStorageBlockEntity) { - inkStorageBlockEntity.getEnergyStorage().setEnergy(payload.storage, payload.currentTotal); + inkStorageBlockEntity.getInkStorage().setEnergy(payload.storage, payload.currentTotal); } } diff --git a/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredCraftingParticleEffect.java b/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredCraftingParticleEffect.java index 2b00cece95..be5bfcbc35 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredCraftingParticleEffect.java +++ b/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredCraftingParticleEffect.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.*; import net.minecraft.core.particles.*; diff --git a/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredExplosionParticleEffect.java b/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredExplosionParticleEffect.java index 2586319469..fa0e26b0d0 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredExplosionParticleEffect.java +++ b/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredExplosionParticleEffect.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.*; import net.minecraft.core.particles.*; diff --git a/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredFallingSporeBlossomParticleEffect.java b/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredFallingSporeBlossomParticleEffect.java index 6fe3ad3538..8a0b13d933 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredFallingSporeBlossomParticleEffect.java +++ b/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredFallingSporeBlossomParticleEffect.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.*; import net.minecraft.core.particles.*; diff --git a/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredFluidRisingParticleEffect.java b/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredFluidRisingParticleEffect.java index 0f34e80396..aaf2286a0e 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredFluidRisingParticleEffect.java +++ b/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredFluidRisingParticleEffect.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.*; import net.minecraft.core.particles.*; diff --git a/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredSparkleRisingParticleEffect.java b/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredSparkleRisingParticleEffect.java index 3e2d204719..f0a53653fb 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredSparkleRisingParticleEffect.java +++ b/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredSparkleRisingParticleEffect.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.*; import net.minecraft.core.particles.*; diff --git a/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredSporeBlossomAirParticleEffect.java b/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredSporeBlossomAirParticleEffect.java index 45bbf48b7a..756ae588ae 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredSporeBlossomAirParticleEffect.java +++ b/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredSporeBlossomAirParticleEffect.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.*; import net.minecraft.core.particles.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/InkColorPredicate.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/InkColorPredicate.java index 6f90ac5ea8..e467a16130 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/InkColorPredicate.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/InkColorPredicate.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import org.jetbrains.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/InkContainerInteractionCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/InkContainerInteractionCriterion.java index ab27c07dd9..462dd37a8b 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/InkContainerInteractionCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/InkContainerInteractionCriterion.java @@ -2,8 +2,8 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.advancements.critereon.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/color_picker/InkConvertingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/color_picker/InkConvertingRecipe.java index 335a3e5fa7..5e4541b3f1 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/color_picker/InkConvertingRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/color_picker/InkConvertingRecipe.java @@ -3,7 +3,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.recipe.GatedSpectrumRecipe; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/ClearInkRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/ClearInkRecipe.java index 5e069c15cf..4e48421906 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/ClearInkRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/ClearInkRecipe.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.recipe.crafting.dynamic; -import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/WrapPresentRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/WrapPresentRecipe.java index ce4b7a0060..378547cf16 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/WrapPresentRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/WrapPresentRecipe.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.recipe.crafting.dynamic; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.present.*; import de.dafuqs.spectrum.items.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java index b5ac4b083a..c5e119b58e 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java @@ -4,7 +4,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.recipe.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionRecipeEffect.java b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionRecipeEffect.java index 65f14ed7f4..128e4081a7 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionRecipeEffect.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionRecipeEffect.java @@ -3,8 +3,8 @@ import com.google.gson.*; import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.helpers.*; import net.minecraft.core.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java index 90214f1a17..094128cedd 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java @@ -4,7 +4,7 @@ import com.google.common.collect.*; import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.ink.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.recipe.*; import de.dafuqs.spectrum.components.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java index c63dca9c27..f91c468837 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java @@ -6,8 +6,6 @@ import de.dafuqs.spectrum.blocks.block_flooder.*; import de.dafuqs.spectrum.blocks.bottomless_bundle.*; import de.dafuqs.spectrum.blocks.chests.*; -import de.dafuqs.spectrum.blocks.cinderhearth.*; -import de.dafuqs.spectrum.blocks.crystallarieum.*; import de.dafuqs.spectrum.blocks.decoration.*; import de.dafuqs.spectrum.blocks.deeper_down.*; import de.dafuqs.spectrum.blocks.enchanter.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index 872e2e0f92..2d24bf542f 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -1,20 +1,18 @@ package de.dafuqs.spectrum.registries; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.blocks.amphora.*; import de.dafuqs.spectrum.blocks.block_flooder.*; import de.dafuqs.spectrum.blocks.boom.*; import de.dafuqs.spectrum.blocks.bottomless_bundle.*; import de.dafuqs.spectrum.blocks.chests.*; -import de.dafuqs.spectrum.blocks.cinderhearth.*; import de.dafuqs.spectrum.blocks.conditional.*; import de.dafuqs.spectrum.blocks.conditional.amaranth.*; import de.dafuqs.spectrum.blocks.conditional.blood_orchid.*; import de.dafuqs.spectrum.blocks.conditional.colored_tree.*; import de.dafuqs.spectrum.blocks.conditional.resonant_lily.*; -import de.dafuqs.spectrum.blocks.crystallarieum.*; import de.dafuqs.spectrum.blocks.decay.*; import de.dafuqs.spectrum.blocks.decoration.*; import de.dafuqs.spectrum.blocks.deeper_down.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumDataComponentTypes.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumDataComponentTypes.java index 2314cb34ed..54597d1d8a 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumDataComponentTypes.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumDataComponentTypes.java @@ -2,10 +2,9 @@ import com.mojang.serialization.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.bottomless_bundle.*; import de.dafuqs.spectrum.components.*; -import de.dafuqs.spectrum.mixin.accessors.*; import net.minecraft.core.*; import net.minecraft.core.component.*; import net.minecraft.core.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityColorProcessors.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityColorProcessors.java index 0bbf827f89..7c35690eb4 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityColorProcessors.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityColorProcessors.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.registries; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.interaction.*; import de.dafuqs.spectrum.entity.*; import net.minecraft.world.entity.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java index fb5d1f4954..7fbaa8e860 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java @@ -3,8 +3,6 @@ import com.mojang.blaze3d.systems.*; import com.mojang.blaze3d.vertex.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.color.*; -import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.blocks.fluid.*; import de.dafuqs.spectrum.helpers.*; import net.minecraft.client.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java index 56ad3848ae..2e47fbc5b4 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java @@ -3,7 +3,7 @@ import de.dafuqs.fractal.api.*; import de.dafuqs.fractal.interfaces.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.item_group.*; import de.dafuqs.spectrum.blocks.boom.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java index fecd3e1681..ef957752bb 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java @@ -2,7 +2,7 @@ import com.klikli_dev.modonomicon.registry.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.blocks.conditional.*; import de.dafuqs.spectrum.blocks.jade_vines.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java index bd393633b1..ad69c8e17e 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.registries; import com.mojang.serialization.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.interaction.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.pastel_network.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java index 3078a1a2fa..4089da1e57 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.interaction.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.pastel_network.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java index 6dc41b64f4..7d9b5d95be 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java @@ -4,7 +4,7 @@ import com.mojang.blaze3d.vertex.*; import com.mojang.datafixers.util.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.*; +import de.dafuqs.spectrum.api.ink.*; import de.dafuqs.spectrum.api.interaction.*; import de.dafuqs.spectrum.blocks.pastel_network.*; import de.dafuqs.spectrum.config.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumColorProviders.java b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumColorProviders.java index 3f89bb191b..652349721b 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumColorProviders.java +++ b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumColorProviders.java @@ -1,17 +1,15 @@ package de.dafuqs.spectrum.registries.client; -import de.dafuqs.spectrum.api.energy.*; -import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.api.energy.storage.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.blocks.conditional.colored_tree.*; import de.dafuqs.spectrum.blocks.memory.*; import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.items.energy.*; import de.dafuqs.spectrum.progression.*; import de.dafuqs.spectrum.registries.*; -import net.minecraft.client.color.item.*; import net.minecraft.util.*; -import net.minecraft.world.item.*; import net.minecraft.world.level.block.*; import net.neoforged.neoforge.client.event.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumModelPredicateProviders.java b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumModelPredicateProviders.java index e56c386864..8b2b963751 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumModelPredicateProviders.java +++ b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumModelPredicateProviders.java @@ -1,8 +1,7 @@ package de.dafuqs.spectrum.registries.client; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.energy.storage.*; -import de.dafuqs.spectrum.api.entity.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.blocks.bottomless_bundle.*; import de.dafuqs.spectrum.components.*; From 0158b76e9880634176186ea9c705fd1ea6f32455 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 24 May 2026 14:51:26 +0200 Subject: [PATCH 036/477] wip sprites --- .../textures/gui/container/tinting_station.png | Bin 0 -> 11197 bytes .../textures/gui/sprites/widget/ink_list.png | Bin 0 -> 5908 bytes .../gui/sprites/widget/ink_list.png.mcmeta | 10 ++++++++++ .../textures/gui/sprites/widget/ink_text.png | Bin 0 -> 1418 bytes 4 files changed, 10 insertions(+) create mode 100644 src/main/resources/assets/spectrum/textures/gui/container/tinting_station.png create mode 100644 src/main/resources/assets/spectrum/textures/gui/sprites/widget/ink_list.png create mode 100644 src/main/resources/assets/spectrum/textures/gui/sprites/widget/ink_list.png.mcmeta create mode 100644 src/main/resources/assets/spectrum/textures/gui/sprites/widget/ink_text.png diff --git a/src/main/resources/assets/spectrum/textures/gui/container/tinting_station.png b/src/main/resources/assets/spectrum/textures/gui/container/tinting_station.png new file mode 100644 index 0000000000000000000000000000000000000000..10a233319f2e399574e809b1464c2434219a51ac GIT binary patch literal 11197 zcmeHscTki|^X|LkC>RJLVFe{Au)wn9Bp{*^l$?ZxU123GIfq3AK~zLVvLGsmAW5<$ ziGl=?93-hk5sn1!KerBoygP4C&-Bwz_w+Q8dODhnbR2XL1Tkt| zP`?U6Fz^V2XsEz13%6I-!LJ{F1|}X?(cW+uH~e*+BNp!A>w<-2eQ@BV&(OUqT8HZ4 z43#T)l-`@0JXK3npJUqEIrJWrsz+RJC+|<1UEX0 zd~UK`b=BzG&^11GNvAYZM7M%3^&?U%nOA^3N$+AoZRfcsh|ZU^y+x&&2)TQ;1JT)J z+J(YrLJZ$z_mrd?4bYx#RrM>op{8+jAygpX^r3T-rKa{DyMeXIfiX3g>Qy)!t@JNx2p=+Ho_+94Zty)%#B+lJ8rF;E z&kU&_T?$rx6n?6)@rsLx%%*L@-1uZpc4#)7W)E6sViwR~6I%AydZuxgx;fCtd(m~{ z5ObnoMxvrS;kD^`xx;MkL__h-J5V@t9R=?Z$u-P%ar(|>PbMC#MH_{W+asyZt%Twk zmLeP6FH4`DWSmUUzBFB_%XuBEby7)yTYBbZL$pPlWzbg(H z7az+Q>ys$+`W44_df7OZ4)f&R8!5$$EmrKp_GgagcHf1EoIVwEljgXmfnHb``x_1+ z{?A1`8%xnLd&kN#ZiclV3J4qq7w+@yFa>!#ux9dqd7;NiQ#r8SEXX`UX~sCbr&O}g zM>`%&m0NVbrjO#fvKHQ>Xyz~?pV7j?8|lkbHUbMz^=Ns(*`lj2$QrUCxs{=S@S$IQ zQ(jfP;kpH3va-LQ7$0Y5KXYZhqWPWwJOAyC%kOGSL7wFFNeX~;xKXt zkCI3!aap7|QbY!YMTsC~FybOIXjzm90ws<`W3D44#ig)+Q>EqX?tyl;#gbG3<)S#C zM_OD~0)>%4i`dvABt(!X;8Ix>Qbq)gl0eu3?I^62&EHh$y5RsT(T;!L6-gBas6yIc zQD}s?xCp{V0wIF5MWRJy5w=(nSs4sQ(pCzML}6tQRAFr8&g0#j(7>HIC$t?_%*EO6 z-~|bAIaNI^MP3O}#9t$Nj%bhTU;>B%oHGXR?f%y*1Dq39-vdp;Q(RhFR#HYrQdUY@ zMnYUx>MtQ9teZRFB1x+_LR1oY@P_0VIbaTe7ENL*P;f8~tdUc5!=gR#ZU%U~qarV9 zQ*hGEKVNHufWn|X(CTOpEKrJ&K*=Gb z?XVz!{6X0NjN|?XGDt{BNdo3biAYHT9w2ROY(!*`;x-}(2^m`i0(@gJ=znT=$6xpG zM!R8E?EsDdD?rc#tl)xwxJu}s^4|7Xk{BF_5}ICKUTK75;%2De3$_{QAQW{|{FHs{dW&zry!lxc-Ifze3=@68@K6 z|HAcOA@E-b|I4obYjDy1b(z9Cg9^wST$NP538jK-7M0Bg z6^h0ohu9$K1c#Qos)5hYLW+~4d4FIN&%=izSNcA(;JWXKOr6WXJPV3(pnr1gJ7dcO z9QVzfr*TCZ`W_!xPf3kme-^$nY2dju^XU(Pxw zOr>q=hI>@;&`}?MYEemVdghuIigU$+c-1#Zh1u+z`&dWSzW?Z6=dv~B(OZwHxUZ2F zvwaTOBTgSabQ=bFdU_6&;(0`^s_&}v!fM9EDBoK%gF*HaC*B5jU?i9{tZp>VHxR?? zC-4RdRog$`F_7I^f+2LDDnuqE9C!Ru!D5_i5z;wbZrBOcJ;7TT30f$k`RgZ7u7!n#fno^w z8j1%xnc^}sg27|M!}QwSKeKpvcr@+o1Z)aSy0+-qL`POi6E0J=x3_zLG1k?MUckTf ztA?r%W7j+67t`LnVZ6=6)AZp3O~+HkkBNjkkjt-cTI$cQB+GfywP22n5tD2$9G9fI zQOv$QM>jV|4xYg0_@@`iq4l52x6FcBu1k17Naobk%N8*Z5_Wiyl=Skc-^;Cy;5~W| z50CK_@6i}BVH9N#5;i(g?k?~;JKJ@4%X4RQ&G>-?=r$z~Dcd^RPr7;@i5-3oK`ZX= zGJZuTSiYMhVyh2Hz9X~+OehCqDcgRKt@WJgS6*S$z5bqH)lAn_Key2OGQ}V_WJUy zAq&JCLsK`A@A&9V^`^X+Jt{^}!3xV55G(a-k=IRMw@QBtAYPAfA^yTDRnZBO6J}>| z02%`WgMlI3=7;l9EI&!#{{xySW{ac4ohjnei%f^vdqymgxKG zmG?;PyLa#AGpT4W!jD9z6%-r}QGqn0y;{5yUOhDB^U%vKUi+MJ_xMN|`a|7~$fB#d zRknVX{o=~X(Zi+qm081HYJ{TVy@?4lQd-(pIMA}BOTGA`+3B|>z3T5x_@vf)~?!8(wJ}HM1roULUpze|R z)K6elTibtmcQH711u{UvAUNlt`o)cpQDW%@d4*KPd%~ARN(V8>pck%R&ZPtKHF9!t zdk2U5zBlH?)z=JAINI9Yo`(8RQF^YD^?X)Jfx&RjLRp&8yNq#l^Lu`CDW9mxV5=J& zwi`dc1o#Yh)SF0oGUK=9O>S{3tp73BIp{ee+smU)x{-fUKpc3FAzp9$)s!cN#`Hj&ZAu zehsTBBm-=`to!nr;r5l;yr#=jha}$O%p16Of6;x;5;8C}1p6hlv}ny`d0$Sg_B~p& zx0cs6Fc1-~ycZ9U=z;1c5b0fl9+su|8n=WUFc?-f$-cU`I=#mhP+-ngWf_?dIx4-e zw0G}LNaIHzR~4q)o<9~*taiQXK1T@qD6k@PwIcWHWMkBlkIYtP4(+F*p*t^Mo-Qga zD%_mR(_S34+(@wb+Q)BXVfXaJsvKux7Zt8ibIy{N!nI%F=hd}ifcM^{{H@G_V88S zQ*>kmm4Qp|KTCcL@RbMBh25Vd>|nXaP}!#FT9 za`$nJ4H$M<-T&3OPZ!*adQ1%XFy&@q5#KD?sSvfeyY!t=F=&Ej73}I4U?#24(zt5C zaw8iliLG>HSsCvSS4S`HtaLuFz80Dw?K<=6WaZx0{D-y->DA2|cH+_S@bCvM7#SuN zLq>S)Mb&O35`{{C^G3VmV|=vE?%Zo)Z#FGRk}7bh8!5fBNqL#pXoQyi&~0%fvH_UU z-)rYC`=T4iDeFc7!l>nh7V*n@?qCJ(xP)x=D~ymJhWySI!nbcSgt`}LTPmRX0iC;cIg=U))Eh&E?Y4Qg{9|0H7O89VX6`vemnlnd*Bac(eYy)NDmxYyfI< zv$?q$%}!-zX12NdnhxS+gCC;Ax^>6g_cI#gCqN| z`7ea5cLr>2_vcBE?!&QblVermAC@;ZHo6aA@PwGlAx1{Vl15IA_Y}ouwGUrn?+tWy zi9=_OqWZe~dwM1dnz_|PjmuQsi09-#Pp=K_F+xNOZejp8_M^0=QkbeP-X5D@ zX|09d4F6H-KE4SKk%muFLfpf1waY#uF#*o=Ne#%AUyKheTWvPG(LFsq<13xYaroW( z+chGdgWpR8t(BJc5_E(2xBO#cX()&Rqw7o4zkI*_B1&O3z$R%S8(jYV`-g_(UjHg@ z4=^g>b0=0-hNw@+n9P|P5Z$wf(lQb>mGD4Il;R%#;odc@;gu^PBHzvPJ?B|{0?(w} zOgGA}$eE$mJjH?vh$Dav!|gVK{tA0Or3+{_!~J)Zx2Ok67+VGB6}Ema zEWC$bV9Muhy%PkT?x7wp;;DV|CQQ0{@^gA+g1Z0m^JvkJV|&Zd`)8DSly;naC7%#m z$5)7s?oBlvdkLMt4Z`Ibtdu^+hjdbZ3-pb@9;9t5>$$T^?vhW7Kp^1sb&2UhS0(kE z?q2R;b}Ahi$+_Ft)m7lR7Dd1EtNluuE1luKt`f0fJ%deQw@1HZBEwPijJ_@pX1|ep zUs@};v{0hG(n*K#iqS+9mV^C1uq^Nh!JvjZ5qXn?&>aMQ|Bgkp*CDPdS^3yTlP!q5M;O7=f*7N?;y56H#YJn=V}wf zE_CrUB(p#bmy5_zY?_=_4Pj-2R~R0 zpZ2Sc@o_s=XTBigA zGVb_QaSzvMtaTx^eUBz&L>3kndJadnO&jMK8yfW~orrA?o~WbTg2{*<9fD3wP^&1e39q(b9+pFNgUrg%T$XW`ohV`QPtmBs*KL$~0~CTyOtnKL zM|)9o(nk9m%A4;w&fp=RsRTRM<;nfWJKmrkelVRoFPCdo(~(sxOioxL2le`e;~Xoq zmo8iB>qn)?dry9d;k)qCd2+6o!b|#RlS5urct}Xd!+lXuCUw?SRdGFk{+t2QLBizZ z^<}6aZJid8wZ)w2)E11%u6H^uNN@c7{4T5ZrH*mpsny8Uy4G!= z78DUu-%<76eJeFC6J+i%18T^+ktq%QanZE>nDjt@`*cQ-?HUAX|CeEYzs?`&Z^~;K zi`xS7Y=KZRb(#z$GfS;f_13RT-Z{~iB6Qf*X@}!Jr!4Oyw~M>)sI<2?SKa+O9m#!Nd?pArClViG@8HRW6Zrq{uf5m}o%pPoJJga%hkaAK&jRQ_thlf+U&9%{o(` zlgJ6QcXg?PEKAa^(slR-7wxzpfkOdmleFuwMx$ZC=H^k>z%Pbo=4O1q#%wC`XHtsq zTau@dN~y*D9X5#*F6Fef9R%L|)8tap(!4_Dhp1FQl#TInLSfKyg zbGs=vm+8K)|PhH#;3jh5goqu5$g(jzWpkaQLM-QCO{cz}=`E zSOg{w6vdUlTF(?(HU$LCeaT>=AhS4r!IMWthVu#6*_YMTifc*csXCeE5)bA$2qv5c zwIs3EJe-{B=H@5Zs11)p4U=il^dg9xJ@3r&=H(8URv=?9kznz*fqqI2`-G6 zNP}jImLXhot-2v#!tw=**jWji38Ee0juE58Lng*SF%iTSdkZQch?u4nXPDQ*)^qOplO!soxTEzuyPTU?jRJu|- z9C`oVXQtYdm6M?+>M<=P$pWFU=dbjzjgzG&)1_;EYjMoqLJQ~;2;CMnn>b!?N zJUs^)RE;{v_`ji5m7&|@1Q!Ypc6JkQ@r&oU`90TQ>g&jpuX=3)0yx9bh~pQqQ2u=~ zlm1MB2F8e<@yFt!9UVGF#l^1N1m3>8WG1^1jVrm4GQs5Rd1Xj|jKEHrpR21IaUzX} zP!FrEP>{)=q*jSIG4O7mc^69lLC$<%CB34NA96hkE=@$!e$P`!Xz$*;w_Nv%4*K%t z%O@lw@C+Z+;Ms=x`H88v1>Cek9=3c-3~)ThjjB_I7iQ8{RaGGv>Wv&uYfwQGG{>Tw ziAzWOC$e*5_6W(8Gb#`>dw57eUM_--P*z9<-yvO5reUubAaEZ@%y^cWsX1laZ_a5! zY(sQqZ;4XMkn$=Y&o?HMa<{x=zP7bLVW{@xj-@D!oKX2 z90affUXeNaDFm>eZM-K-AG8D$%hA4?%kWJF$`@s% zI@`rWD5J~ffsCo#(wMA^g#?qJ2JJs|LHR?+9y3d$*T|V&_|xhjC@22rXCTk`TOJOm z6^45gx$?L5WF8AT?W90=0H%uT5Z81UR{bvx%nzUw_x{NCe z0OR1|-{}c6pn?hz7u3|qd4eY80R3wVc~k_C)ip-3O)P(+QZa>SZr20%eDeIVemdnw z8JDypHKC1iW?>=B2NyHB3?Z!iW=~tZ^J2u;?4s67W+aG{Jz1&3<+L+C^$W+|rU;~- zJ!@)g%v1Za`s2*vVl&9WuIoQcU6~%)+<^Kl2#;e5+o@jYGnTI8mmcLhQA~s(4$PRX z1wDX)0yQt06t zATMRV=LM`7&fkLFjgGEIFz8Sk4N}bf{Mpo=Bz>4JYzFw?b}y+>!x|lta7IX(b&m!N#45eWd;pnv7 zr+{lIyAXtsk%=fNL7_;lm>(jnlEa;I!PT_G5nTLhD^O`Zn}ZB+=l65ewZ$a%0jko| z(}S*Fz-Ht;*lI*E%-qb(2Yt+1l5$~YW}M|@u6mp9#1P?750v9To?AVBOTp3Whl%e@ zIV#PMbcV%e>ZYRbqm{UzV_R;DNE&j%PA8Vb>SJO4z1o>a!Z z<=E-X0Hyeh$e5VJ5a@-v#z;Zdfy$8hzF8Y1I8^TB)b(y@4*-$aeE&q?En`fx0Vd6lRI9X&ENQJX}at3gpoL7)S;BrpdIgLx7bTFpbj8FFy03B@LYP&+5Xd0mvy3bG9bNH^Sjard~dF8?DfQoC|{ec@}^ z6+@D+t0V~8E`#qw1Ud(Z#1YNQ)U0m}6X?_O!MzolyxzA$K5k&$s7+{UIu9BbFBtAI zDZ8@twcvmW>|9(}$R(Zj)8L>`CRx-D=``S#lEJop@H`tiNjg|T@42??`Ilem;1C4C z0*+Wv`f@>pbLT#N`ozrPz4#z20R)`GBP45-E1Fq=tky3Gx>Xhe>Ow7Lg2#|baImu1 z;%Gbl^Vdu&McJSjCBi^7-qYRpzyq)u5J4AG~;{nR>iEl$vR> zHTFz=aI9-KD%dCY6(t2<~W5 zH;|WGaJIL92krQ!?Ok>bj&q=MR6Yp${Hei8cYGA?+cw{SRxKJaw!uVd)RG2Qrv062 zScXvyBZRQ!cpHm z@3WH?lw=|4YqLcm85wR2OiW|?V_jV#8>8D|tE;OYzOoH}Ncs+vZ;iuXAo?L1lI1#X6voq9Cu~l8IWS`j7qC&R~!M9-N&!1Jzl zhQYz=BEwLRz`(#0$a}=aylwx2fv=%I^VkE;&4)8&*;ux&%8uT-L)X*WJMm-i?GJLj zPZSWLG>G`os@fMc@c=a)2MZ}lP#PMtw6?Z>n=UVxZR_Z;adkbMflCKn@J_`I&Z(&> zJwwAV75Gwdu+@*fJ6-$4&frnxbox0f;bwWzvQFLoVHdE;(g#skIL17ltGYyU@)q;C g|9}5;B-`VuJB*r{+bUE7e@cV2G<4K+&spF6U;5i1egFUf literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/spectrum/textures/gui/sprites/widget/ink_list.png b/src/main/resources/assets/spectrum/textures/gui/sprites/widget/ink_list.png new file mode 100644 index 0000000000000000000000000000000000000000..38470fe2d53f56b22967c4b6cf062a285b2bed11 GIT binary patch literal 5908 zcmeHKX;f3!77kP<6&XYZMTsdWs38LhBq4y5K>`L45)cJ>m*fT_Lt+w0Ab>Jy`S%XjAl_mk+T=%kEC9%=de7-!w=>l|M>*1kzBc~X|Er=c&T z5zY1lRIJhTJRa4VvGG!WROHjK7BwRcrBhcb_Av{Bf2j-2JlFkakx6=To#r-b^@D=K z^Ak@sS3d6gb#coioHzLu@5jCaKQ(#zAKu=a(=oU@sKmI5;Bg?OT#0Tz#CT$`vi0te zOrt`u>}H19$XySWJoY9(<>D>=XM1S(`5S&PSJS(ort)j?c%Md%uI{bNBaPuFhw<%I zz>t>X_0PX=2YUHB@cUbxX_U7u!OF5P2D=4H%*X)EnludsQxr#>??9&7LXyOE0@L9`95=e=(z`YaYje#uHt9ri1-iGcZt0h}F9CKq`_ojcWWir0SF0;Vcf3ci&z>7t_V}^3;o40jl}%OBD(U#>#;O{VJ_|wT z&U?mnpgv=`pbj_FH&R%qk$g~~2n5wZ!iQMlum~9fhjOFrP{UO-Vv2?x@9L9Bv6TrT4o(xu8IE&0iIoQvqN+^IJ5*9&7Nn}KnkRq`|DR?R1T5iUm zkP3(>+zz#w?u~Tf31B3_l3Y_Lnv~I0VJ~v`i~w$254uD4=m(G3s|sA z3>+o;dM*W<_0gXnEr?Kr!)9UN2sjczg`-`1>?ezN1SH}B z2haoDC^kILThe|~23@c*0wiTpCjXX*Pz zt}k+ZmI9vz{!(3E-gz){etcO3+#(U2^Ty<$UVaK$Q*yK_vJvg5(CO&EC4O=Hj=~i8L1TwZ>0e>VZ6=?x7un@rgpuG2BGkuyo?dlQUhe*7x536#K2Pw_0it)UBkxuP(4U zF5AC!TUm8=`U&$z+Uc$u`|9-O?>*1zxl}WMI(*siH0xUB`NE#j8w)O)*u{Md2P|B) z$Y-7Y>$qxJ;$)uB+4_zSos%a|)`#HMwVq(C(Mfj=2o658t#om^YuUQg1qPPhYqGHm z`wa$mJ|BPEAKzYQeC_t5uPzqaC$tO>u0r_w`kLx$gp?U(yQ}OfDM9O|%quT1Ps_|K zm&wvja}ATPx3nDSoNh=pC@PLyH9hijD?WE&ety2)pY4SX4&|khJ%LvR1F54eobsTd z#F9T%+FnWrb-ZrH+qc)&DrdXzb(n&V6?1i%PI`&vx*1{4ceI(EA*CDyHsPi1H|~hm z-ZMUl9t=&T$8R%lZNF`XiS?IYewIA{&1}zgq^+&(#5*sovw8Z65yz|~*QA#wtz-MX zLKqX4K9G@{ZtYFIowoe`2KpaKUYG_4=kX$o*ygH6ErjQ;yqlaVKW`~9>0wYOS@mdv zoAN*IjXS7R6jo15vSd%C18Rs>t5yKCns0-&4U8#wQGyQN?ezh?yQGub?9#niL*zQQ=8ekby&%($4b4st)J{~ z9LXH8>}Ph?+J{}39;Vb?*Di6L^i_UaM7tWu5qH-Yb(wIDY`WwSAOt+e5)+d7&M&rb1D0Ft zY9pbFlRXXf%aWg(4XX|>uG;YC9W@6NJSeUyeBoZ;M^Ak=)Zd)K_K)XNciu5l_t^F( z>XrSj?G**R`z*DG5Twr9DSRth$4o8I4l z@0(-46M8M+lq-%PAz7nJH*Vg1JvAu}Wtu7bD~VKPXH+hnNcn3wSh)VMihd}EL!wgI zF)>H(UhZ!zc7Lr!&J3(+@5~lW-mE7qPSHqargwF$+(ZPW)U2iolGP20@u>SLbNy7% zC8t+MUp3kECZW#uoP^2rq6%t$oVR(zex=#1Y{pB5GJs!}gqFLN-(!b|d#o`!H0)qT z`$H{g^X7x@$xp|W%S>)#7oI+&>(hKNey0WPEaSl2x6vyc z5^rcV>|x+d9|gM~+T4)iZYGCMA2wYn9u$yQ*vFe^FKiyoIV5^{pJ<;r;dbs$-{stk zv-q*nww}v84>Q`EN&f)n!?$cpE+qYww(?zRv)2BH8;gr|QyV;qmTOsVQ{k`ecU4pn zL6c>>yZBu?7(dO_*Qv^F8NffvXu6s>Y1=Ea__am<&~Ro8>Iwg-o9Q>y6+;89IS9s@ zC4PQ>Zf80T^9J>nF!lDo)_ng0INDYLGwt^)Vg%Jb!wm7owGR7R)Xxx-{IUAm(;cCw|?We6ryLp7=G zk;CPhyMv=Oy`=_Ijp@sVIF?bbCP~|dL)9i*%R}4seb4G8L;Tl$E{%hqMx;_Zj7 zbcA`AcE5Y|EX>4Tx04R}tk-tmBKpe$iQ%glE4ptE9kfA!+!5@gDRIvyaN?V~-2a`*GL6e3g z#l=x@EjajNvFhOBtgC~oAPD{d@edFuMHeaYdr6^1j0eYkcz5q{_YM%6Ri>IfbAYN@ zMmiA}bNN*<_=*6A5W)l^5;OH=W-$xT@pTU$U+-c(%lq7)qhBeQ4DgA>b4)iZ;tk@N zO-tvzPaI}tNg+Nb9yjQM#E)E;U4G+Sa#-M*VI!NKCk_*fr7o7cn3WBcc$zq>s2b%9 zIhPgATb$Kuowe`DUl=NAD;ciSj39v}B$0v$8Ff@pg@qWc8Yw2yv>*5Ik2wAmxny!x zz{s(H8dOM*AN&t~cWV}>Cf%e^90_CX>@2HM@dakSAh-}000AFNkl%Z zX`(ZknPg_Zdyk8zNoMk+q+NJ+_n!N{_dP%F5mt$#9Bt{K>BA&9G)2~>$ObvG{k?oK z%6jAAmZxzKzQjb2$3(YbI(>q3eV?uc@m5Pji1-$>(_+=bR6N8*u`zBZtlUE=PhyOZ zSc`by{2RpZKM!xcz#o!wS7Taz+Xk)`x8pR~Lwh3T<=xf$o3^mIlH$fs7tCPa&am=d z`0kT$n_E=lX=X`Nq?HnRb9rjr0y{+C^DR%=27HZke*A3?GnIFcO>4poe>)mtbk`dI^*z}gL3cL5! zpBYuvc2#{S48yHJyXSd!HAdg}jWMR)T>9fEY3E!I&{40cRK$3mXHi|QRl;%6Fmvm% z0efgKpKo3esH){yEOrSPpMST>Irs1weE|Y7iR4UuTFx;+CQ^XS;i~^%TL#VX^ zfBjCooO9cm4K~z@a~H9hT@ft}EOuK`31UZH@ZT~EJ6I}}6c`tgA)pNSlVn@#1?H*5 zxhbr=;MDo}{u-S?E08rpSkvB{9hGI%wz-pxbzhB|3ug?$Z;Nx6XSymo`j(kQRSVYI zi@@}X$CTs*kOLxG_p`QUrssF+-cW11YYoB5CMhL>o~dwG8(crOq-cp@-yM+Ssbz;c z2!a5(>TtyjQ?D19G6nwD95dkvxp5$aNb?n^CmZMZ$`&y;hnAg;MWcSPTrO`MxyJk6 z9H*`q2r^mbn&NT^)Mv6BAy&+j|4S%M3f17OhzzM};tDVRvVjj?D=-(!QIbX~&exgr YKh|JJPaWKxwg3PC07*qoM6N<$g86ud^Z)<= literal 0 HcmV?d00001 From fa8ba49332146896c869ef04344ba83cf0894058 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 24 May 2026 16:04:21 +0200 Subject: [PATCH 037/477] rename block and item energy packages to ink --- disabled/datagen/java/de/dafuqs/spectrum/data/BlockDatagen.java | 2 +- .../datagen/java/de/dafuqs/spectrum/data/SpectrumItems.java | 2 +- .../spectrum/blocks/{energy => ink}/BaseInkTransferBlock.java | 2 +- .../blocks/{energy => ink}/BaseInkTransferBlockEntity.java | 2 +- .../spectrum/blocks/{energy => ink}/CinderhearthBlock.java | 2 +- .../blocks/{energy => ink}/CinderhearthBlockEntity.java | 2 +- .../spectrum/blocks/{energy => ink}/ColorPickerBlock.java | 2 +- .../spectrum/blocks/{energy => ink}/ColorPickerBlockEntity.java | 2 +- .../blocks/{energy => ink}/ColorPickerBlockEntityRenderer.java | 2 +- .../spectrum/blocks/{energy => ink}/CrystalApothecaryBlock.java | 2 +- .../blocks/{energy => ink}/CrystalApothecaryBlockEntity.java | 2 +- .../spectrum/blocks/{energy => ink}/CrystallarieumBlock.java | 2 +- .../blocks/{energy => ink}/CrystallarieumBlockEntity.java | 2 +- .../{energy => ink}/CrystallarieumBlockEntityRenderer.java | 2 +- .../spectrum/blocks/{energy => ink}/TintingStationBlock.java | 2 +- .../blocks/{energy => ink}/TintingStationBlockEntity.java | 2 +- .../de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java | 2 +- .../spectrum/compat/REI/plugins/CrystallarieumCategory.java | 2 +- .../compat/emi/recipes/CrystallarieumEmiRecipeGated.java | 2 +- .../client/pages/BookCrystallarieumGrowingPageRenderer.java | 2 +- .../dafuqs/spectrum/inventories/CinderhearthScreenHandler.java | 2 +- .../dafuqs/spectrum/inventories/ColorPickerScreenHandler.java | 2 +- .../java/de/dafuqs/spectrum/inventories/InkTransferScreen.java | 2 +- .../dafuqs/spectrum/inventories/InkTransferScreenHandler.java | 2 +- .../spectrum/inventories/TintingStationScreenHandler.java | 2 +- .../spectrum/inventories/widgets/ColorSelectionWidget.java | 2 +- .../spectrum/items/{energy => ink}/ArtistsPaletteItem.java | 2 +- .../items/{energy => ink}/CreativeInkAssortmentItem.java | 2 +- .../spectrum/items/{energy => ink}/InkAssortmentItem.java | 2 +- .../de/dafuqs/spectrum/items/{energy => ink}/InkFlaskItem.java | 2 +- .../spectrum/items/{energy => ink}/PigmentPaletteItem.java | 2 +- .../de/dafuqs/spectrum/registries/SpectrumBlockEntities.java | 2 +- src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java | 2 +- src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java | 2 +- .../spectrum/registries/client/SpectrumColorProviders.java | 2 +- 35 files changed, 35 insertions(+), 35 deletions(-) rename src/main/java/de/dafuqs/spectrum/blocks/{energy => ink}/BaseInkTransferBlock.java (98%) rename src/main/java/de/dafuqs/spectrum/blocks/{energy => ink}/BaseInkTransferBlockEntity.java (99%) rename src/main/java/de/dafuqs/spectrum/blocks/{energy => ink}/CinderhearthBlock.java (99%) rename src/main/java/de/dafuqs/spectrum/blocks/{energy => ink}/CinderhearthBlockEntity.java (99%) rename src/main/java/de/dafuqs/spectrum/blocks/{energy => ink}/ColorPickerBlock.java (97%) rename src/main/java/de/dafuqs/spectrum/blocks/{energy => ink}/ColorPickerBlockEntity.java (99%) rename src/main/java/de/dafuqs/spectrum/blocks/{energy => ink}/ColorPickerBlockEntityRenderer.java (97%) rename src/main/java/de/dafuqs/spectrum/blocks/{energy => ink}/CrystalApothecaryBlock.java (98%) rename src/main/java/de/dafuqs/spectrum/blocks/{energy => ink}/CrystalApothecaryBlockEntity.java (99%) rename src/main/java/de/dafuqs/spectrum/blocks/{energy => ink}/CrystallarieumBlock.java (99%) rename src/main/java/de/dafuqs/spectrum/blocks/{energy => ink}/CrystallarieumBlockEntity.java (99%) rename src/main/java/de/dafuqs/spectrum/blocks/{energy => ink}/CrystallarieumBlockEntityRenderer.java (99%) rename src/main/java/de/dafuqs/spectrum/blocks/{energy => ink}/TintingStationBlock.java (97%) rename src/main/java/de/dafuqs/spectrum/blocks/{energy => ink}/TintingStationBlockEntity.java (99%) rename src/main/java/de/dafuqs/spectrum/items/{energy => ink}/ArtistsPaletteItem.java (98%) rename src/main/java/de/dafuqs/spectrum/items/{energy => ink}/CreativeInkAssortmentItem.java (98%) rename src/main/java/de/dafuqs/spectrum/items/{energy => ink}/InkAssortmentItem.java (98%) rename src/main/java/de/dafuqs/spectrum/items/{energy => ink}/InkFlaskItem.java (98%) rename src/main/java/de/dafuqs/spectrum/items/{energy => ink}/PigmentPaletteItem.java (98%) diff --git a/disabled/datagen/java/de/dafuqs/spectrum/data/BlockDatagen.java b/disabled/datagen/java/de/dafuqs/spectrum/data/BlockDatagen.java index 995c97087e..f6c0652efc 100644 --- a/disabled/datagen/java/de/dafuqs/spectrum/data/BlockDatagen.java +++ b/disabled/datagen/java/de/dafuqs/spectrum/data/BlockDatagen.java @@ -24,7 +24,7 @@ import de.dafuqs.spectrum.blocks.enchanter.*; import de.dafuqs.spectrum.blocks.end_portal.*; import de.dafuqs.spectrum.blocks.ender.*; -import de.dafuqs.spectrum.blocks.energy.*; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.blocks.farming.*; import de.dafuqs.spectrum.blocks.fluid.*; import de.dafuqs.spectrum.blocks.fusion_shrine.*; diff --git a/disabled/datagen/java/de/dafuqs/spectrum/data/SpectrumItems.java b/disabled/datagen/java/de/dafuqs/spectrum/data/SpectrumItems.java index bab0a1d5af..a192ad4dc5 100644 --- a/disabled/datagen/java/de/dafuqs/spectrum/data/SpectrumItems.java +++ b/disabled/datagen/java/de/dafuqs/spectrum/data/SpectrumItems.java @@ -17,7 +17,7 @@ import de.dafuqs.spectrum.items.bundles.*; import de.dafuqs.spectrum.items.conditional.*; import de.dafuqs.spectrum.items.conditional.CloakedItem; -import de.dafuqs.spectrum.items.energy.*; +import de.dafuqs.spectrum.items.ink.*; import de.dafuqs.spectrum.items.food.*; import de.dafuqs.spectrum.items.food.beverages.*; import de.dafuqs.spectrum.items.item_frame.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlock.java similarity index 98% rename from src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlock.java index 0ebe86a106..9625fab24d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlock.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.energy; +package de.dafuqs.spectrum.blocks.ink; import net.minecraft.core.*; import net.minecraft.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlockEntity.java similarity index 99% rename from src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlockEntity.java index 5cf2541ede..cecf8c277a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/BaseInkTransferBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlockEntity.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.energy; +package de.dafuqs.spectrum.blocks.ink; import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.ink.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/CinderhearthBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/CinderhearthBlock.java similarity index 99% rename from src/main/java/de/dafuqs/spectrum/blocks/energy/CinderhearthBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/CinderhearthBlock.java index f756e7ef26..c26dd9faad 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/CinderhearthBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/CinderhearthBlock.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.energy; +package de.dafuqs.spectrum.blocks.ink; import com.klikli_dev.modonomicon.api.multiblock.*; import com.mojang.serialization.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/CinderhearthBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/CinderhearthBlockEntity.java similarity index 99% rename from src/main/java/de/dafuqs/spectrum/blocks/energy/CinderhearthBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/CinderhearthBlockEntity.java index 7b6dae58a0..ade838daac 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/CinderhearthBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/CinderhearthBlockEntity.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.energy; +package de.dafuqs.spectrum.blocks.ink; import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.ink.color.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlock.java similarity index 97% rename from src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlock.java index 2a6088f8b5..5ced2ec9ed 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlock.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.energy; +package de.dafuqs.spectrum.blocks.ink; import com.mojang.serialization.*; import de.dafuqs.spectrum.helpers.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntity.java similarity index 99% rename from src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntity.java index f094e36857..421da1195b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntity.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.energy; +package de.dafuqs.spectrum.blocks.ink; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.ink.storage.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntityRenderer.java similarity index 97% rename from src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntityRenderer.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntityRenderer.java index e31901b717..0b3067f743 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/ColorPickerBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntityRenderer.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.energy; +package de.dafuqs.spectrum.blocks.ink; import com.mojang.blaze3d.vertex.*; import com.mojang.math.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystalApothecaryBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystalApothecaryBlock.java similarity index 98% rename from src/main/java/de/dafuqs/spectrum/blocks/energy/CrystalApothecaryBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/CrystalApothecaryBlock.java index dd826c85aa..bfa2a341b5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystalApothecaryBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystalApothecaryBlock.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.energy; +package de.dafuqs.spectrum.blocks.ink; import com.mojang.serialization.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystalApothecaryBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystalApothecaryBlockEntity.java similarity index 99% rename from src/main/java/de/dafuqs/spectrum/blocks/energy/CrystalApothecaryBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/CrystalApothecaryBlockEntity.java index c31ee3de1c..c4d87ca9b4 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystalApothecaryBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystalApothecaryBlockEntity.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.energy; +package de.dafuqs.spectrum.blocks.ink; import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.data_loaders.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystallarieumBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystallarieumBlock.java similarity index 99% rename from src/main/java/de/dafuqs/spectrum/blocks/energy/CrystallarieumBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/CrystallarieumBlock.java index 02ed3da4cf..feb8cc999b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystallarieumBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystallarieumBlock.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.energy; +package de.dafuqs.spectrum.blocks.ink; import com.mojang.serialization.*; import de.dafuqs.spectrum.api.ink.color.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystallarieumBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystallarieumBlockEntity.java similarity index 99% rename from src/main/java/de/dafuqs/spectrum/blocks/energy/CrystallarieumBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/CrystallarieumBlockEntity.java index a28a5c76f4..6b825a08aa 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystallarieumBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystallarieumBlockEntity.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.energy; +package de.dafuqs.spectrum.blocks.ink; import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.ink.storage.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystallarieumBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystallarieumBlockEntityRenderer.java similarity index 99% rename from src/main/java/de/dafuqs/spectrum/blocks/energy/CrystallarieumBlockEntityRenderer.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/CrystallarieumBlockEntityRenderer.java index f1ffb71078..7bfb3bb649 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/CrystallarieumBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystallarieumBlockEntityRenderer.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.energy; +package de.dafuqs.spectrum.blocks.ink; import com.mojang.blaze3d.vertex.*; import com.mojang.math.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/TintingStationBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlock.java similarity index 97% rename from src/main/java/de/dafuqs/spectrum/blocks/energy/TintingStationBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlock.java index f7ffce14ea..86cb85d2df 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/TintingStationBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlock.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.energy; +package de.dafuqs.spectrum.blocks.ink; import com.mojang.serialization.*; import de.dafuqs.spectrum.helpers.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/energy/TintingStationBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java similarity index 99% rename from src/main/java/de/dafuqs/spectrum/blocks/energy/TintingStationBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java index d28541f767..b2508d1bda 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/energy/TintingStationBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.energy; +package de.dafuqs.spectrum.blocks.ink; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.ink.storage.*; diff --git a/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java b/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java index 26579da658..893f7ccfd6 100644 --- a/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java +++ b/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java @@ -5,7 +5,7 @@ import de.dafuqs.spectrum.blocks.bottomless_bundle.*; import de.dafuqs.spectrum.blocks.chests.*; import de.dafuqs.spectrum.blocks.enchanter.*; -import de.dafuqs.spectrum.blocks.energy.*; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.blocks.fusion_shrine.*; import de.dafuqs.spectrum.blocks.item_bowl.*; import de.dafuqs.spectrum.blocks.pedestal.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumCategory.java index 01e1f784a8..348f24ce3c 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumCategory.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.compat.REI.plugins; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.blocks.energy.*; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.compat.REI.*; import de.dafuqs.spectrum.recipe.crystallarieum.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java index 0a438540a2..32744517b0 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.compat.emi.recipes; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.blocks.energy.*; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.compat.emi.*; import de.dafuqs.spectrum.recipe.crystallarieum.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java index 14aa04223f..cc67b30ae4 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java @@ -5,7 +5,7 @@ import com.klikli_dev.modonomicon.data.*; import com.mojang.blaze3d.systems.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.blocks.energy.*; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.compat.modonomicon.pages.*; import de.dafuqs.spectrum.recipe.crystallarieum.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java index a8253e9be4..914809cbca 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.inventories; -import de.dafuqs.spectrum.blocks.energy.*; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.inventories.slots.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java index 2acba2ec24..4467b34887 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.api.ink.color.*; -import de.dafuqs.spectrum.blocks.energy.*; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.inventories.slots.*; import net.minecraft.core.*; import net.minecraft.network.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java index 1906352d97..164bcef870 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.api.ink.color.*; -import de.dafuqs.spectrum.blocks.energy.*; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.inventories.widgets.*; import de.dafuqs.spectrum.networking.c2s_payloads.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreenHandler.java index 27b615f1a4..3f03e10fc4 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreenHandler.java @@ -2,7 +2,7 @@ import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.ink.color.*; -import de.dafuqs.spectrum.blocks.energy.*; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java index 1adb15d930..5aba38972d 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.api.ink.color.*; -import de.dafuqs.spectrum.blocks.energy.*; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.inventories.slots.*; import net.minecraft.core.*; import net.minecraft.network.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java index bc344c0b31..e99c88c4b1 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java @@ -2,7 +2,7 @@ import de.dafuqs.revelationary.api.advancements.*; import de.dafuqs.spectrum.api.ink.color.*; -import de.dafuqs.spectrum.blocks.energy.*; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.client.*; import net.minecraft.client.gui.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/energy/ArtistsPaletteItem.java b/src/main/java/de/dafuqs/spectrum/items/ink/ArtistsPaletteItem.java similarity index 98% rename from src/main/java/de/dafuqs/spectrum/items/energy/ArtistsPaletteItem.java rename to src/main/java/de/dafuqs/spectrum/items/ink/ArtistsPaletteItem.java index a8d2ef014e..30b6aead5c 100644 --- a/src/main/java/de/dafuqs/spectrum/items/energy/ArtistsPaletteItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ink/ArtistsPaletteItem.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.items.energy; +package de.dafuqs.spectrum.items.ink; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.ink.color.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/energy/CreativeInkAssortmentItem.java b/src/main/java/de/dafuqs/spectrum/items/ink/CreativeInkAssortmentItem.java similarity index 98% rename from src/main/java/de/dafuqs/spectrum/items/energy/CreativeInkAssortmentItem.java rename to src/main/java/de/dafuqs/spectrum/items/ink/CreativeInkAssortmentItem.java index c9149736a6..9e06caf0d4 100644 --- a/src/main/java/de/dafuqs/spectrum/items/energy/CreativeInkAssortmentItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ink/CreativeInkAssortmentItem.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.items.energy; +package de.dafuqs.spectrum.items.ink; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.ink.storage.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/energy/InkAssortmentItem.java b/src/main/java/de/dafuqs/spectrum/items/ink/InkAssortmentItem.java similarity index 98% rename from src/main/java/de/dafuqs/spectrum/items/energy/InkAssortmentItem.java rename to src/main/java/de/dafuqs/spectrum/items/ink/InkAssortmentItem.java index 39feea1375..3852d5d9be 100644 --- a/src/main/java/de/dafuqs/spectrum/items/energy/InkAssortmentItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ink/InkAssortmentItem.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.items.energy; +package de.dafuqs.spectrum.items.ink; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.ink.storage.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/energy/InkFlaskItem.java b/src/main/java/de/dafuqs/spectrum/items/ink/InkFlaskItem.java similarity index 98% rename from src/main/java/de/dafuqs/spectrum/items/energy/InkFlaskItem.java rename to src/main/java/de/dafuqs/spectrum/items/ink/InkFlaskItem.java index 6877666c6c..af143606b1 100644 --- a/src/main/java/de/dafuqs/spectrum/items/energy/InkFlaskItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ink/InkFlaskItem.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.items.energy; +package de.dafuqs.spectrum.items.ink; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.ink.storage.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/energy/PigmentPaletteItem.java b/src/main/java/de/dafuqs/spectrum/items/ink/PigmentPaletteItem.java similarity index 98% rename from src/main/java/de/dafuqs/spectrum/items/energy/PigmentPaletteItem.java rename to src/main/java/de/dafuqs/spectrum/items/ink/PigmentPaletteItem.java index 200ceb02d9..d03410c48e 100644 --- a/src/main/java/de/dafuqs/spectrum/items/energy/PigmentPaletteItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ink/PigmentPaletteItem.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.items.energy; +package de.dafuqs.spectrum.items.ink; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.ink.color.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java index f91c468837..95476284be 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java @@ -10,7 +10,7 @@ import de.dafuqs.spectrum.blocks.deeper_down.*; import de.dafuqs.spectrum.blocks.enchanter.*; import de.dafuqs.spectrum.blocks.ender.*; -import de.dafuqs.spectrum.blocks.energy.*; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.blocks.fusion_shrine.*; import de.dafuqs.spectrum.blocks.item_bowl.*; import de.dafuqs.spectrum.blocks.item_roundel.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index 2d24bf542f..258f22ab66 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -21,7 +21,7 @@ import de.dafuqs.spectrum.blocks.enchanter.*; import de.dafuqs.spectrum.blocks.end_portal.*; import de.dafuqs.spectrum.blocks.ender.*; -import de.dafuqs.spectrum.blocks.energy.*; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.blocks.farming.*; import de.dafuqs.spectrum.blocks.flammable.*; import de.dafuqs.spectrum.blocks.fluid.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java index ef957752bb..ec5c72eb52 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java @@ -12,7 +12,7 @@ import de.dafuqs.spectrum.items.*; import de.dafuqs.spectrum.items.armor.*; import de.dafuqs.spectrum.items.conditional.*; -import de.dafuqs.spectrum.items.energy.*; +import de.dafuqs.spectrum.items.ink.*; import de.dafuqs.spectrum.items.food.*; import de.dafuqs.spectrum.items.food.beverages.*; import de.dafuqs.spectrum.items.item_frame.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumColorProviders.java b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumColorProviders.java index 652349721b..f496b539ff 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumColorProviders.java +++ b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumColorProviders.java @@ -6,7 +6,7 @@ import de.dafuqs.spectrum.blocks.conditional.colored_tree.*; import de.dafuqs.spectrum.blocks.memory.*; import de.dafuqs.spectrum.components.*; -import de.dafuqs.spectrum.items.energy.*; +import de.dafuqs.spectrum.items.ink.*; import de.dafuqs.spectrum.progression.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.util.*; From aa0583dfcd20c16fcc7b44533486ba360c9fd5ca Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 24 May 2026 16:18:35 +0200 Subject: [PATCH 038/477] potion tinting --- .../blocks/ink/TintingStationBlockEntity.java | 108 +++++++++++------- 1 file changed, 65 insertions(+), 43 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java index b2508d1bda..f7630c7711 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java @@ -22,6 +22,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; +import net.minecraft.world.item.alchemy.*; import net.minecraft.world.item.component.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; @@ -49,7 +50,7 @@ public static void serverTick(Level world, BlockPos pos, BlockState state, Tinti return; } - boolean didSomething = false; + boolean didSomething = true; Optional> inkColorHolder = blockEntity.getSelectedColor(); InkStorage inkStorage = blockEntity.getInkStorage(); @@ -65,16 +66,17 @@ public static void serverTick(Level world, BlockPos pos, BlockState state, Tinti if (resultStack.isEmpty()) { resultStack = tintStack(input, selectedInkColor); } + if (resultStack.isEmpty()) { + resultStack = tintPotion(input, selectedInkColor); + } if (!resultStack.isEmpty()) { if (output.isEmpty()) { input.shrink(1); blockEntity.setItem(OUTPUT_SLOT_ID, resultStack); - didSomething = true; } else if (ItemStack.isSameItemSameComponents(output, resultStack)) { input.shrink(1); output.grow(1); - didSomething = true; } if (didSomething) { @@ -92,8 +94,12 @@ public static void serverTick(Level world, BlockPos pos, BlockState state, Tinti ); } } + } else { + didSomething = false; } } + } else { + didSomething = false; } } } @@ -114,48 +120,64 @@ public static void serverTick(Level world, BlockPos pos, BlockState state, Tinti protected static ItemStack tintStack(ItemStack stack, InkColor inkColor) { if (!stack.is(ItemTags.DYEABLE)) { return ItemStack.EMPTY; - } else { - ItemStack result = stack.copyWithCount(1); - int i = 0; - int j = 0; - int k = 0; - int prevMax = 0; - int i1 = 0; - DyedItemColor dyeditemcolor = result.get(DataComponents.DYED_COLOR); - if (dyeditemcolor != null) { - int prevRed = FastColor.ARGB32.red(dyeditemcolor.rgb()); - int prevGreen = FastColor.ARGB32.green(dyeditemcolor.rgb()); - int prevBlue = FastColor.ARGB32.blue(dyeditemcolor.rgb()); - prevMax += Math.max(prevRed, Math.max(prevGreen, prevBlue)); - i += prevRed; - j += prevGreen; - k += prevBlue; - i1++; - } - - int j3 = inkColor.getColorInt(); - int i2 = FastColor.ARGB32.red(j3); - int j2 = FastColor.ARGB32.green(j3); - int k2 = FastColor.ARGB32.blue(j3); - prevMax += Math.max(i2, Math.max(j2, k2)); - i += i2; - j += j2; - k += k2; + } + + ItemStack result = stack.copyWithCount(1); + int i = 0; + int j = 0; + int k = 0; + int prevMax = 0; + int i1 = 0; + DyedItemColor dyeditemcolor = result.get(DataComponents.DYED_COLOR); + if (dyeditemcolor != null) { + int prevRed = FastColor.ARGB32.red(dyeditemcolor.rgb()); + int prevGreen = FastColor.ARGB32.green(dyeditemcolor.rgb()); + int prevBlue = FastColor.ARGB32.blue(dyeditemcolor.rgb()); + prevMax += Math.max(prevRed, Math.max(prevGreen, prevBlue)); + i += prevRed; + j += prevGreen; + k += prevBlue; i1++; - - int finalRed = i / i1; - int finalGreen = j / i1; - int finalBlue = k / i1; - float f = (float)prevMax / (float)i1; - float f1 = (float)Math.max(finalRed, Math.max(finalGreen, finalBlue)); - finalRed = (int)((float)finalRed * f / f1); - finalGreen = (int)((float)finalGreen * f / f1); - finalBlue = (int)((float)finalBlue * f / f1); - int finalColor = FastColor.ARGB32.color(0, finalRed, finalGreen, finalBlue); - boolean flag = dyeditemcolor == null || dyeditemcolor.showInTooltip(); - result.set(DataComponents.DYED_COLOR, new DyedItemColor(finalColor, flag)); - return result; } + + int j3 = inkColor.getColorInt(); + int i2 = FastColor.ARGB32.red(j3); + int j2 = FastColor.ARGB32.green(j3); + int k2 = FastColor.ARGB32.blue(j3); + prevMax += Math.max(i2, Math.max(j2, k2)); + i += i2; + j += j2; + k += k2; + i1++; + + int finalRed = i / i1; + int finalGreen = j / i1; + int finalBlue = k / i1; + float f = (float)prevMax / (float)i1; + float f1 = (float)Math.max(finalRed, Math.max(finalGreen, finalBlue)); + finalRed = (int)((float)finalRed * f / f1); + finalGreen = (int)((float)finalGreen * f / f1); + finalBlue = (int)((float)finalBlue * f / f1); + int finalColor = FastColor.ARGB32.color(0, finalRed, finalGreen, finalBlue); + boolean flag = dyeditemcolor == null || dyeditemcolor.showInTooltip(); + result.set(DataComponents.DYED_COLOR, new DyedItemColor(finalColor, flag)); + return result; + } + + protected static ItemStack tintPotion(ItemStack stack, InkColor inkColor) { + PotionContents pc = stack.get(DataComponents.POTION_CONTENTS); + if(pc == null) { + return ItemStack.EMPTY; + } + int newColor = inkColor.getColorInt(); + if(pc.customColor().isPresent() && pc.customColor().get() == newColor) { + return ItemStack.EMPTY; + } + + ItemStack result = stack.copyWithCount(1); + PotionContents newContents = new PotionContents(pc.potion(), Optional.of(newColor), pc.customEffects()); + result.set(DataComponents.POTION_CONTENTS, newContents); + return result; } public ItemStack colorStack(ItemStack stack, InkColor inkColor) { From daaa5a77961952ac78b7c1d1f10ef19fce9b56c1 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 25 May 2026 11:14:04 +0200 Subject: [PATCH 039/477] gui wips --- .../de/dafuqs/spectrum/SpectrumClient.java | 2 +- .../de/dafuqs/spectrum/SpectrumCommon.java | 2 +- .../api/block/FilterConfigurable.java | 6 +- .../chests/BlackHoleChestBlockEntity.java | 2 +- .../blocks/ink/BaseInkTransferBlock.java | 2 +- .../ink/BaseInkTransferBlockEntity.java | 6 +- .../blocks/ink/ColorPickerBlockEntity.java | 46 +++++---- .../spectrum/blocks/ink/DawnbrushBlock.java | 41 ++++++++ .../blocks/ink/DawnbrushBlockEntity.java | 26 +++++ .../blocks/ink/InkGeneratorBlock.java | 31 ++++++ .../blocks/ink/InkGeneratorBlockEntity.java | 79 +++++++++++++++ .../blocks/ink/TintingStationBlockEntity.java | 4 +- .../spectrum/blocks/ink/TwillBlock.java | 50 ++++++++++ .../spectrum/blocks/ink/TwillBlockEntity.java | 61 ++++++++++++ .../spectrum/blocks/ink/VantaclastBlock.java | 43 ++++++++ .../blocks/ink/VantaclastBlockEntity.java | 26 +++++ .../nodes/PastelNodeBlockEntity.java | 5 +- .../compat/emi/SpectrumEmiPlugin.java | 8 +- .../BagOfHoldingScreenHandler.java | 2 +- .../BedrockAnvilScreenHandler.java | 3 +- .../BlackHoleChestScreenHandler.java | 4 +- .../inventories/CinderhearthScreen.java | 2 +- .../CinderhearthScreenHandler.java | 2 +- .../inventories/ColorPickerScreen.java | 4 +- .../inventories/ColorPickerScreenHandler.java | 6 +- .../CompactingChestScreenHandler.java | 3 +- .../CraftingTabletScreenHandler.java | 2 +- .../FabricationChestScreenHandler.java | 4 +- .../inventories/FilteringScreenHandler.java | 4 +- ...GenericSpectrumContainerScreenHandler.java | 24 ++--- .../inventories/InkStorageScreen.java | 57 +++++++++++ ...dler.java => InkStorageScreenHandler.java} | 52 +++++----- ...torageWithColorSelectionScreenHandler.java | 42 ++++++++ .../inventories/InkTransferScreen.java | 31 +----- .../inventories/PaintbrushScreenHandler.java | 2 +- .../ParticleSpawnerScreenHandler.java | 2 +- .../inventories/PedestalScreenHandler.java | 2 +- .../PotionWorkshopScreenHandler.java | 4 +- .../Spectrum3x3ContainerScreenHandler.java | 8 +- ...ndlerIDs.java => SpectrumMenuTypeIDs.java} | 3 +- .../inventories/SpectrumMenuTypes.java | 98 +++++++++++++++++++ .../SpectrumScreenHandlerTypes.java | 96 ------------------ .../inventories/TintingStationScreen.java | 4 +- .../TintingStationScreenHandler.java | 6 +- .../inventories/WorkstaffScreenHandler.java | 2 +- .../registries/SpectrumBlockEntities.java | 12 ++- .../spectrum/registries/SpectrumBlocks.java | 13 ++- 47 files changed, 683 insertions(+), 251 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlock.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlock.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlockEntity.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/ink/TwillBlock.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/ink/TwillBlockEntity.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/ink/VantaclastBlock.java create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/ink/VantaclastBlockEntity.java create mode 100644 src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java rename src/main/java/de/dafuqs/spectrum/inventories/{InkTransferScreenHandler.java => InkStorageScreenHandler.java} (60%) create mode 100644 src/main/java/de/dafuqs/spectrum/inventories/InkStorageWithColorSelectionScreenHandler.java rename src/main/java/de/dafuqs/spectrum/inventories/{SpectrumScreenHandlerIDs.java => SpectrumMenuTypeIDs.java} (95%) create mode 100644 src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java delete mode 100644 src/main/java/de/dafuqs/spectrum/inventories/SpectrumScreenHandlerTypes.java diff --git a/src/main/java/de/dafuqs/spectrum/SpectrumClient.java b/src/main/java/de/dafuqs/spectrum/SpectrumClient.java index 0ea5fd9862..ff420ac3b7 100644 --- a/src/main/java/de/dafuqs/spectrum/SpectrumClient.java +++ b/src/main/java/de/dafuqs/spectrum/SpectrumClient.java @@ -58,7 +58,7 @@ public SpectrumClient(IEventBus modBus, ModContainer modContainer) { modBus.addListener(SpectrumFluids::registerClient); modBus.addListener(SpectrumBlockEntities::registerClient); - modBus.addListener(SpectrumScreenHandlerTypes::registerClient); + modBus.addListener(SpectrumMenuTypes::registerClient); modBus.addListener(SpectrumModelLayerLocations::register); modBus.addListener(BedrockCapeRenderer::registerLayers); diff --git a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java index 3f04f2a427..02fb44e449 100644 --- a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java +++ b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java @@ -148,7 +148,7 @@ public SpectrumCommon(ModContainer container, IEventBus modBus) { // GUI logInfo("Registering Screen Handler Types..."); - SpectrumScreenHandlerTypes.register(modBus); + SpectrumMenuTypes.register(modBus); logInfo("Registering Enchantment Drops..."); SpectrumGlobalLootModifierSerializers.register(modBus); diff --git a/src/main/java/de/dafuqs/spectrum/api/block/FilterConfigurable.java b/src/main/java/de/dafuqs/spectrum/api/block/FilterConfigurable.java index b752ed8584..2f6248ba30 100644 --- a/src/main/java/de/dafuqs/spectrum/api/block/FilterConfigurable.java +++ b/src/main/java/de/dafuqs/spectrum/api/block/FilterConfigurable.java @@ -240,7 +240,7 @@ default boolean hasEmptyFilter() { record ExtendedData(List filterItems, int rows, int slotsPerRow, int drawnSlots) { - public static final StreamCodec PACKET_CODEC = StreamCodec.composite( + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( ItemStack.OPTIONAL_STREAM_CODEC.apply(ByteBufCodecs.list()), ExtendedData::filterItems, ByteBufCodecs.VAR_INT, ExtendedData::rows, ByteBufCodecs.VAR_INT, ExtendedData::slotsPerRow, @@ -256,9 +256,9 @@ public ExtendedDataWithPos(BlockPos pos, FilterConfigurable configurable) { this(pos, new ExtendedData(configurable.getItemFilters(), configurable.getFilterRows(), configurable.getSlotsPerRow(), configurable.getDrawnSlots())); } - public static final StreamCodec PACKET_CODEC = StreamCodec.composite( + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( BlockPos.STREAM_CODEC, c -> c.pos, - ExtendedData.PACKET_CODEC, c -> c.data, + ExtendedData.STREAM_CODEC, c -> c.data, ExtendedDataWithPos::new ); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlockEntity.java index ad5ca96a56..907d76ac25 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlockEntity.java @@ -314,7 +314,7 @@ public SoundEvent getCloseSound() { @Override public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { - FilterConfigurable.ExtendedDataWithPos.PACKET_CODEC.encode(buffer, new ExtendedDataWithPos(worldPosition, this)); + FilterConfigurable.ExtendedDataWithPos.STREAM_CODEC.encode(buffer, new ExtendedDataWithPos(worldPosition, this)); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlock.java index 9625fab24d..7e782599ab 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlock.java @@ -65,7 +65,7 @@ public boolean hasAnalogOutputSignal(BlockState state) { @Override public int getAnalogOutputSignal(BlockState state, Level world, BlockPos pos) { - if (world.getBlockEntity(pos) instanceof ColorPickerBlockEntity blockEntity) { + if (world.getBlockEntity(pos) instanceof InkGeneratorBlockEntity blockEntity) { int i = 0; float f = 0.0f; for (int j = 0; j < blockEntity.inventory.size(); ++j) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlockEntity.java index cecf8c277a..8997d4c163 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlockEntity.java @@ -55,8 +55,8 @@ public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup ContainerHelper.loadAllItems(nbt, this.inventory, registryLookup); } this.ownerUUID = PlayerOwnedWithName.readOwnerUUID(nbt); - if (nbt.contains("SelectedColor", Tag.TAG_STRING)) { - this.selectedColor = Optional.of(SpectrumRegistries.INK_COLOR.wrapAsHolder(InkColor.ofIdString(nbt.getString("SelectedColor")).get())); + if (nbt.contains("selected_color", Tag.TAG_STRING)) { + this.selectedColor = Optional.of(SpectrumRegistries.INK_COLOR.wrapAsHolder(InkColor.ofIdString(nbt.getString("selected_color")).get())); } else { this.selectedColor = Optional.empty(); } @@ -69,7 +69,7 @@ protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLoo ContainerHelper.saveAllItems(nbt, this.inventory, registryLookup); } PlayerOwned.writeOwnerUUID(nbt, this.ownerUUID); - this.selectedColor.ifPresent(color -> nbt.putString("SelectedColor", color.getRegisteredName())); + this.selectedColor.ifPresent(color -> nbt.putString("selected_color", color.getRegisteredName())); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntity.java index 421da1195b..59fac61f29 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntity.java @@ -31,33 +31,31 @@ public class ColorPickerBlockEntity extends BaseInkTransferBlockEntity implements MenuProvider { public static final long TICKS_PER_CONVERSION = 5; - public static final long STORAGE_AMOUNT = (long) Math.pow(2, 16); + public static final long INK_CAPACITY = (long) Math.pow(256, 2); protected @Nullable InkConvertingRecipe cachedRecipe; public ColorPickerBlockEntity(BlockPos blockPos, BlockState blockState) { - super(SpectrumBlockEntities.COLOR_PICKER.get(), blockPos, blockState, new TotalCappedInkStorage(STORAGE_AMOUNT, Map.of())); + super(SpectrumBlockEntities.COLOR_PICKER.get(), blockPos, blockState, new TotalCappedInkStorage(INK_CAPACITY, Map.of())); } @SuppressWarnings("unused") public static void serverTick(Level world, BlockPos pos, BlockState state, ColorPickerBlockEntity blockEntity) { - if (!world.isClientSide) { - blockEntity.inkDirty = false; - if (!blockEntity.paused) { - boolean convertedPigment = false; - boolean shouldPause = true; - if (world.getGameTime() % TICKS_PER_CONVERSION == 0) { - convertedPigment = blockEntity.tryConvertPigmentToEnergy((ServerLevel) world); - } else { - shouldPause = false; - } - boolean filledContainer = blockEntity.tryFillInkContainer(); - - if (convertedPigment || filledContainer) { - blockEntity.updateInClientWorld(); - blockEntity.setInkDirty(); - } else if (shouldPause) { - blockEntity.paused = true; - } + blockEntity.inkDirty = false; + if (!blockEntity.paused) { + boolean convertedPigment = false; + boolean shouldPause = true; + if (world.getGameTime() % TICKS_PER_CONVERSION == 0) { + convertedPigment = blockEntity.tryConvertPigmentToEnergy((ServerLevel) world); + } else { + shouldPause = false; + } + boolean filledContainer = blockEntity.tryFillInkContainer(); + + if (convertedPigment || filledContainer) { + blockEntity.updateInClientWorld(); + blockEntity.setInkDirty(); + } else if (shouldPause) { + blockEntity.paused = true; } } } @@ -65,13 +63,13 @@ public static void serverTick(Level world, BlockPos pos, BlockState state, Color @Override public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { super.loadAdditional(nbt, registryLookup); - CodecHelper.fromNbt(InkStorageComponent.CODEC, nbt.get("InkStorage")).ifPresent(storage -> this.inkStorage = new TotalCappedInkStorage(storage.maxEnergyTotal(), storage.storedEnergy())); + CodecHelper.fromNbt(InkStorageComponent.CODEC, nbt.get("ink_storage")).ifPresent(storage -> this.inkStorage = new TotalCappedInkStorage(storage.maxEnergyTotal(), storage.storedEnergy())); } @Override protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { super.saveAdditional(nbt, registryLookup); - CodecHelper.writeNbt(nbt, "InkStorage", InkStorageComponent.CODEC, new InkStorageComponent(this.inkStorage)); + CodecHelper.writeNbt(nbt, "ink_storage", InkStorageComponent.CODEC, new InkStorageComponent(this.inkStorage)); } @Override @@ -81,12 +79,12 @@ protected Component getDefaultName() { @Override protected AbstractContainerMenu createMenu(int syncId, Inventory playerInventory) { - return new ColorPickerScreenHandler(syncId, playerInventory, playerInventory.player.level().getBlockEntity(new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor).pos(), SpectrumBlockEntities.COLOR_PICKER.get()).orElseThrow(), new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor).inkColor()); + return new ColorPickerScreenHandler(syncId, playerInventory, playerInventory.player.level().getBlockEntity(getBlockPos(), SpectrumBlockEntities.COLOR_PICKER.get()).orElseThrow(), this.selectedColor); } @Override public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { - ColorPickerScreenHandler.ScreenOpeningData.PACKET_CODEC.encode(buffer, new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); + ColorPickerScreenHandler.ScreenOpeningData.STREAM_CODEC.encode(buffer, new ColorPickerScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); } protected boolean tryConvertPigmentToEnergy(ServerLevel world) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlock.java new file mode 100644 index 0000000000..817afdf1b7 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlock.java @@ -0,0 +1,41 @@ +package de.dafuqs.spectrum.blocks.ink; + +import com.mojang.serialization.*; +import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.*; +import net.minecraft.core.*; +import net.minecraft.network.chat.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.entity.*; +import net.minecraft.world.level.block.state.*; +import org.jetbrains.annotations.*; + +import java.util.*; + +public class DawnbrushBlock extends InkGeneratorBlock { + + public static final MapCodec CODEC = simpleCodec(DawnbrushBlock::new); + + public DawnbrushBlock(Properties settings) { + super(settings); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipFlag type) { + super.appendHoverText(stack, context, tooltip, type); + tooltip.add(Component.translatable("block.spectrum.dawnbrush.tooltip").withStyle(ChatFormatting.GRAY)); + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new DawnbrushBlockEntity(pos, state); + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java new file mode 100644 index 0000000000..6493dd82d3 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java @@ -0,0 +1,26 @@ +package de.dafuqs.spectrum.blocks.ink; + +import de.dafuqs.spectrum.registries.*; +import net.minecraft.core.*; +import net.minecraft.network.chat.*; +import net.minecraft.server.level.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.state.*; + +public class DawnbrushBlockEntity extends InkGeneratorBlockEntity { + + public DawnbrushBlockEntity(BlockPos blockPos, BlockState blockState) { + super(SpectrumBlockEntities.DAWNBRUSH.get(), blockPos, blockState, 3); + } + + @Override + protected Component getDefaultName() { + return Component.translatable("block.spectrum.dawnbrush"); + } + + @Override + protected boolean tickLogic(Level level) { + return false; + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlock.java new file mode 100644 index 0000000000..45444d1f68 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlock.java @@ -0,0 +1,31 @@ +package de.dafuqs.spectrum.blocks.ink; + +import de.dafuqs.spectrum.helpers.*; +import net.minecraft.core.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.entity.*; +import net.minecraft.world.level.block.state.*; +import org.jetbrains.annotations.*; + +public abstract class InkGeneratorBlock extends BaseInkTransferBlock { + + public InkGeneratorBlock(Properties settings) { + super(settings); + } + + @Nullable + protected static BlockEntityTicker createInkGeneratorTicker(Level level, BlockEntityType serverType, BlockEntityType clientType) { + return level.isClientSide ? null : Support.checkType(serverType, clientType, InkGeneratorBlockEntity::serverTick); + } + + @Override + protected void openScreen(Level world, BlockPos pos, Player player) { + BlockEntity blockEntity = world.getBlockEntity(pos); + if (blockEntity instanceof InkGeneratorBlockEntity inkGeneratorBlockEntity) { + inkGeneratorBlockEntity.setOwner(player); + player.openMenu(inkGeneratorBlockEntity); + } + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlockEntity.java new file mode 100644 index 0000000000..5ba13dc5f9 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlockEntity.java @@ -0,0 +1,79 @@ +package de.dafuqs.spectrum.blocks.ink; + +import de.dafuqs.spectrum.api.ink.capability.*; +import de.dafuqs.spectrum.api.ink.storage.*; +import de.dafuqs.spectrum.components.*; +import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.inventories.*; +import net.minecraft.core.*; +import net.minecraft.nbt.*; +import net.minecraft.network.*; +import net.minecraft.world.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.inventory.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.entity.*; +import net.minecraft.world.level.block.state.*; + +import java.util.*; + +public abstract class InkGeneratorBlockEntity extends BaseInkTransferBlockEntity implements MenuProvider { + + public static final long RUN_LOGIC_EVERY_X_TICKS = 20; + + public InkGeneratorBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos, BlockState blockState, int tier) { + super(blockEntityType, blockPos, blockState, new TotalCappedInkStorage((long) Math.pow(256, tier), Map.of())); + } + + @SuppressWarnings("unused") + public static void serverTick(Level level, BlockPos pos, BlockState state, InkGeneratorBlockEntity blockEntity) { + blockEntity.inkDirty = false; + if (!blockEntity.paused) { + boolean logicSuccess = false; + if (shouldTickLogic(level)) { + logicSuccess = blockEntity.tickLogic(level); + } + boolean filledContainer = blockEntity.tryFillInkContainer(); + + if (logicSuccess || filledContainer) { + //blockEntity.updateInClientWorld(); + blockEntity.setInkDirty(); + } + } + } + + @Override + public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { + super.loadAdditional(nbt, registryLookup); + CodecHelper.fromNbt(InkStorageComponent.CODEC, nbt.get("ink_storage")).ifPresent(storage -> this.inkStorage = new TotalCappedInkStorage(storage.maxEnergyTotal(), storage.storedEnergy())); + } + + @Override + protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { + super.saveAdditional(nbt, registryLookup); + CodecHelper.writeNbt(nbt, "ink_storage", InkStorageComponent.CODEC, new InkStorageComponent(this.inkStorage)); + } + + @Override + protected AbstractContainerMenu createMenu(int syncId, Inventory playerInventory) { + return new InkStorageScreenHandler(syncId, playerInventory, this.worldPosition); + } + + @Override + public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { + BlockPos.STREAM_CODEC.encode(buffer, this.worldPosition); + } + + protected static boolean shouldTickLogic(Level world) { + return world.getGameTime() % RUN_LOGIC_EVERY_X_TICKS == 0; + } + + protected abstract boolean tickLogic(Level level); + + @Override + public boolean canPlaceItem(int slot, ItemStack stack) { + return stack.getCapability(InkCapabilities.ITEM) != null; + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java index f7630c7711..a6e4aee959 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java @@ -210,12 +210,12 @@ protected Component getDefaultName() { @Override protected AbstractContainerMenu createMenu(int syncId, Inventory playerInventory) { - return new TintingStationScreenHandler(syncId, playerInventory, this, new InkTransferScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor).inkColor()); + return new TintingStationScreenHandler(syncId, playerInventory, this, new InkStorageWithColorSelectionScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor).inkColor()); } @Override public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { - InkTransferScreenHandler.ScreenOpeningData.PACKET_CODEC.encode(buffer, new InkTransferScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); + InkStorageWithColorSelectionScreenHandler.ScreenOpeningData.STREAM_CODEC.encode(buffer, new InkStorageWithColorSelectionScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/TwillBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/TwillBlock.java new file mode 100644 index 0000000000..1b284dee2d --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/TwillBlock.java @@ -0,0 +1,50 @@ +package de.dafuqs.spectrum.blocks.ink; + +import com.mojang.serialization.*; +import de.dafuqs.spectrum.api.ink.storage.*; +import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.*; +import net.minecraft.core.*; +import net.minecraft.network.chat.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.entity.*; +import net.minecraft.world.level.block.state.*; +import org.jetbrains.annotations.*; + +import javax.annotation.Nullable; +import java.util.*; + +public class TwillBlock extends InkGeneratorBlock { + + public static final MapCodec CODEC = simpleCodec(TwillBlock::new); + + public TwillBlock(Properties settings) { + super(settings); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipFlag type) { + super.appendHoverText(stack, context, tooltip, type); + tooltip.add(Component.translatable("block.spectrum.twill.tooltip").withStyle(ChatFormatting.GRAY)); + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new TwillBlockEntity(pos, state); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + return createInkGeneratorTicker(level, blockEntityType, SpectrumBlockEntities.TWILL.get()); + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/TwillBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/TwillBlockEntity.java new file mode 100644 index 0000000000..dd6f2e09dd --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/TwillBlockEntity.java @@ -0,0 +1,61 @@ +package de.dafuqs.spectrum.blocks.ink; + +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.blocks.conditional.colored_tree.*; +import de.dafuqs.spectrum.config.*; +import de.dafuqs.spectrum.mixin.*; +import de.dafuqs.spectrum.networking.s2c_payloads.*; +import de.dafuqs.spectrum.particle.effect.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.core.*; +import net.minecraft.network.chat.*; +import net.minecraft.server.level.*; +import net.minecraft.sounds.*; +import net.minecraft.util.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.state.*; +import net.minecraft.world.phys.*; + +public class TwillBlockEntity extends InkGeneratorBlockEntity { + + public static final int MAX_BLOCK_CHECK_DISTANCE_HORIZONTAL = 8; + public static final int MAX_BLOCK_CHECK_DISTANCE_UP = 4; + public static final long GENERATED_INK_PER_VALID_BLOCK = 1; + + public TwillBlockEntity(BlockPos blockPos, BlockState blockState) { + super(SpectrumBlockEntities.TWILL.get(), blockPos, blockState, 1); + } + + @Override + protected Component getDefaultName() { + return Component.translatable("block.spectrum.twill"); + } + + + @Override + protected boolean tickLogic(Level level) { + RandomSource random = level.getRandom(); + BlockPos posToTest = this.worldPosition.offset(random.nextIntBetweenInclusive(-MAX_BLOCK_CHECK_DISTANCE_HORIZONTAL, MAX_BLOCK_CHECK_DISTANCE_HORIZONTAL), random.nextInt(MAX_BLOCK_CHECK_DISTANCE_UP), random.nextIntBetweenInclusive(-MAX_BLOCK_CHECK_DISTANCE_HORIZONTAL, MAX_BLOCK_CHECK_DISTANCE_HORIZONTAL)); + BlockState statetoTest = level.getBlockState(posToTest); + + if(statetoTest.getBlock() instanceof ColoredLeavesBlock coloredLeavesBlock) { + InkColor inkColor = coloredLeavesBlock.getColor(); + this.inkStorage.addEnergy(inkColor, GENERATED_INK_PER_VALID_BLOCK); + + if (SpectrumConfig.CONFIG.BlockSoundVolume.get() > 0) { + level.playSound(null, worldPosition, SpectrumSoundEvents.COLOR_PICKER_PROCESSING, SoundSource.BLOCKS, SpectrumConfig.CONFIG.BlockSoundVolume.get().floatValue() / 3F, 1.0F); + } + PlayParticleWithRandomOffsetAndVelocityPayload.playParticleWithRandomOffsetAndVelocity((ServerLevel) level, + new Vec3(worldPosition.getX() + 0.5, worldPosition.getY() + 0.7, worldPosition.getZ() + 0.5), + ColoredFluidRisingParticleEffect.of(inkColor.getColorInt()), + 5, + new Vec3(0.22, 0.0, 0.22), + new Vec3(0.0, 0.1, 0.0) + ); + + return true; + } + return false; + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/VantaclastBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/VantaclastBlock.java new file mode 100644 index 0000000000..26ce747d76 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/VantaclastBlock.java @@ -0,0 +1,43 @@ +package de.dafuqs.spectrum.blocks.ink; + +import com.mojang.serialization.*; +import de.dafuqs.spectrum.api.ink.storage.*; +import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.*; +import net.minecraft.core.*; +import net.minecraft.network.chat.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.entity.*; +import net.minecraft.world.level.block.state.*; +import org.jetbrains.annotations.*; + +import java.util.*; + +public class VantaclastBlock extends InkGeneratorBlock { + + public static final MapCodec CODEC = simpleCodec(VantaclastBlock::new); + + public VantaclastBlock(Properties settings) { + super(settings); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipFlag type) { + super.appendHoverText(stack, context, tooltip, type); + tooltip.add(Component.translatable("block.spectrum.vantaclast.tooltip").withStyle(ChatFormatting.GRAY)); + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new VantaclastBlockEntity(pos, state); + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/VantaclastBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/VantaclastBlockEntity.java new file mode 100644 index 0000000000..eeca05e8b3 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/VantaclastBlockEntity.java @@ -0,0 +1,26 @@ +package de.dafuqs.spectrum.blocks.ink; + +import de.dafuqs.spectrum.registries.*; +import net.minecraft.core.*; +import net.minecraft.network.chat.*; +import net.minecraft.server.level.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.state.*; + +public class VantaclastBlockEntity extends InkGeneratorBlockEntity { + + public VantaclastBlockEntity(BlockPos blockPos, BlockState blockState) { + super(SpectrumBlockEntities.VANTACLAST.get(), blockPos, blockState, 2); + } + + @Override + protected Component getDefaultName() { + return Component.translatable("block.spectrum.vantaclast"); + } + + @Override + protected boolean tickLogic(Level level) { + return false; + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java index 6a3d6f5bbc..a87138c1e2 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.blocks.pastel_network.nodes; import com.google.common.base.*; -import com.mojang.serialization.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.pastel_network.*; @@ -34,8 +33,6 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; -import net.neoforged.neoforge.capabilities.*; -import net.neoforged.neoforge.items.*; import org.jetbrains.annotations.*; import java.util.*; @@ -505,7 +502,7 @@ public int getDrawnSlots() { @Override public void writeClientSideData(@NotNull AbstractContainerMenu menu, @NotNull RegistryFriendlyByteBuf buffer) { - FilterConfigurable.ExtendedDataWithPos.PACKET_CODEC.encode(buffer, new FilterConfigurable.ExtendedDataWithPos(this.getBlockPos(), this)); + FilterConfigurable.ExtendedDataWithPos.STREAM_CODEC.encode(buffer, new FilterConfigurable.ExtendedDataWithPos(this.getBlockPos(), this)); } public boolean equals(Object obj) { diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiPlugin.java b/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiPlugin.java index b1b7f05cf1..3e6f347765 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiPlugin.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiPlugin.java @@ -310,10 +310,10 @@ public void registerRecipes(EmiRegistry registry) { } public void registerRecipeHandlers(EmiRegistry registry) { - registry.addRecipeHandler(SpectrumScreenHandlerTypes.PEDESTAL, new PedestalRecipeHandler()); - registry.addRecipeHandler(SpectrumScreenHandlerTypes.CRAFTING_TABLET, new CraftingTabletRecipeHandler()); - registry.addRecipeHandler(SpectrumScreenHandlerTypes.CINDERHEARTH, new CinderhearthRecipeHandler()); - registry.addRecipeHandler(SpectrumScreenHandlerTypes.POTION_WORKSHOP, new PotionWorkshopRecipeHandler()); + registry.addRecipeHandler(SpectrumMenuTypes.PEDESTAL, new PedestalRecipeHandler()); + registry.addRecipeHandler(SpectrumMenuTypes.CRAFTING_TABLET, new CraftingTabletRecipeHandler()); + registry.addRecipeHandler(SpectrumMenuTypes.CINDERHEARTH, new CinderhearthRecipeHandler()); + registry.addRecipeHandler(SpectrumMenuTypes.POTION_WORKSHOP, new PotionWorkshopRecipeHandler()); } public static ResourceLocation syntheticId(String type, Block block) { diff --git a/src/main/java/de/dafuqs/spectrum/inventories/BagOfHoldingScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/BagOfHoldingScreenHandler.java index f1c74a17eb..78f1641d76 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/BagOfHoldingScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/BagOfHoldingScreenHandler.java @@ -14,7 +14,7 @@ public BagOfHoldingScreenHandler(int syncId, Inventory playerInventory) { } public BagOfHoldingScreenHandler(int syncId, Inventory playerInventory, Container inventory) { - super(SpectrumScreenHandlerTypes.BAG_OF_HOLDING, syncId, playerInventory, inventory, 3); + super(SpectrumMenuTypes.BAG_OF_HOLDING, syncId, playerInventory, inventory, 3); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/inventories/BedrockAnvilScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/BedrockAnvilScreenHandler.java index 131e119aaf..378d266055 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/BedrockAnvilScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/BedrockAnvilScreenHandler.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.inventories; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.items.*; @@ -39,7 +38,7 @@ public BedrockAnvilScreenHandler(int syncId, Inventory inventory) { } public BedrockAnvilScreenHandler(int syncId, Inventory inventory, ContainerLevelAccess context) { - super(SpectrumScreenHandlerTypes.BEDROCK_ANVIL, syncId, inventory, context); + super(SpectrumMenuTypes.BEDROCK_ANVIL, syncId, inventory, context); this.levelCost = DataSlot.standalone(); this.addDataSlot(this.levelCost); } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/BlackHoleChestScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/BlackHoleChestScreenHandler.java index f90dfa4ec2..58598b6974 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/BlackHoleChestScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/BlackHoleChestScreenHandler.java @@ -22,7 +22,7 @@ public class BlackHoleChestScreenHandler extends AbstractContainerMenu { // clientside public BlackHoleChestScreenHandler(int syncId, Inventory playerInventory, RegistryFriendlyByteBuf buf) { - this(syncId, playerInventory, FilterConfigurable.ExtendedDataWithPos.PACKET_CODEC.decode(buf)); + this(syncId, playerInventory, FilterConfigurable.ExtendedDataWithPos.STREAM_CODEC.decode(buf)); } protected BlackHoleChestScreenHandler(int syncId, Inventory playerInventory, FilterConfigurable.ExtendedDataWithPos data) { @@ -31,7 +31,7 @@ protected BlackHoleChestScreenHandler(int syncId, Inventory playerInventory, Fil // serverside public BlackHoleChestScreenHandler(int syncId, Inventory playerInventory, BlackHoleChestBlockEntity blockEntity, FilterConfigurable.ExtendedDataWithPos data) { - super(SpectrumScreenHandlerTypes.BLACK_HOLE_CHEST, syncId); + super(SpectrumMenuTypes.BLACK_HOLE_CHEST, syncId); this.world = playerInventory.player.level(); this.filterInventory = FilterConfigurable.getFilterInventoryFromExtendedData(syncId, playerInventory, data.data(), this); this.blockEntity = blockEntity; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java index 294ac01fbd..5fce144cf1 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java @@ -36,7 +36,7 @@ protected void renderLabels(GuiGraphics drawContext, int mouseX, int mouseY) { Component title = this.title; drawContext.drawString(this.font, title, titleX, titleY, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); - drawContext.drawString(this.font, this.playerInventoryTitle, InkTransferScreenHandler.PLAYER_INVENTORY_START_X, InkTransferScreenHandler.PLAYER_INVENTORY_START_Y - 10, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); + drawContext.drawString(this.font, this.playerInventoryTitle, InkStorageWithColorSelectionScreenHandler.PLAYER_INVENTORY_START_X, InkStorageWithColorSelectionScreenHandler.PLAYER_INVENTORY_START_Y - 10, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java index 914809cbca..0c49da29b2 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java @@ -30,7 +30,7 @@ public CinderhearthScreenHandler(int syncId, Inventory playerInventory, Registry // serverside public CinderhearthScreenHandler(int syncId, Inventory playerInventory, CinderhearthBlockEntity blockEntity, ContainerData propertyDelegate) { - super(SpectrumScreenHandlerTypes.CINDERHEARTH, syncId); + super(SpectrumMenuTypes.CINDERHEARTH, syncId); this.player = playerInventory.player instanceof ServerPlayer serverPlayerEntity ? serverPlayerEntity : null; this.world = playerInventory.player.level(); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java index c852c7c237..b7af1c3a36 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java @@ -9,14 +9,14 @@ import net.minecraft.world.entity.player.*; import org.jetbrains.annotations.*; -public class ColorPickerScreen extends InkTransferScreen { +public class ColorPickerScreen extends InkTransferScreen { protected static final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); protected StackedInkBarWidget stackedInkBarWidget; protected InkPieWidget inkPieWidget; - public ColorPickerScreen(InkTransferScreenHandler handler, Inventory playerInventory, Component title) { + public ColorPickerScreen(ColorPickerScreenHandler handler, Inventory playerInventory, Component title) { super(handler, playerInventory, title, BACKGROUND); this.imageHeight = 166; } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java index 4467b34887..6011095f78 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java @@ -9,16 +9,16 @@ import java.util.*; -public class ColorPickerScreenHandler extends InkTransferScreenHandler { +public class ColorPickerScreenHandler extends InkStorageWithColorSelectionScreenHandler { // clientside public ColorPickerScreenHandler(int syncId, Inventory playerInventory, RegistryFriendlyByteBuf buf) { - super(SpectrumScreenHandlerTypes.COLOR_PICKER, syncId, playerInventory, ScreenOpeningData.PACKET_CODEC.decode(buf)); + super(SpectrumMenuTypes.COLOR_PICKER, syncId, playerInventory, ScreenOpeningData.STREAM_CODEC.decode(buf)); } // serverside public ColorPickerScreenHandler(int syncId, Inventory playerInventory, BaseInkTransferBlockEntity blockEntity, Optional> selectedColor) { - super(SpectrumScreenHandlerTypes.COLOR_PICKER, syncId, playerInventory, blockEntity, selectedColor); + super(SpectrumMenuTypes.COLOR_PICKER, syncId, playerInventory, blockEntity, selectedColor); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CompactingChestScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/CompactingChestScreenHandler.java index e2f0f05a1a..baf3a722d1 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CompactingChestScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CompactingChestScreenHandler.java @@ -2,7 +2,6 @@ import de.dafuqs.spectrum.blocks.chests.*; import de.dafuqs.spectrum.networking.c2s_payloads.*; -import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.network.*; import net.minecraft.world.*; @@ -24,7 +23,7 @@ public CompactingChestScreenHandler(int syncId, Inventory playerInventory, Regis // serverside public CompactingChestScreenHandler(int syncId, Inventory playerInventory, CompactingChestBlockEntity blockEntity, ContainerData propertyDelegate) { - super(SpectrumScreenHandlerTypes.COMPACTING_CHEST, syncId); + super(SpectrumMenuTypes.COMPACTING_CHEST, syncId); this.blockEntity = blockEntity; this.propertyDelegate = propertyDelegate; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CraftingTabletScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/CraftingTabletScreenHandler.java index 204752a8ed..b5d8f0edee 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CraftingTabletScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CraftingTabletScreenHandler.java @@ -36,7 +36,7 @@ public CraftingTabletScreenHandler(int syncId, Inventory playerInventory) { } public CraftingTabletScreenHandler(int syncId, Inventory playerInventory, ContainerLevelAccess context, ItemStack craftingTabletItemStack) { - super(SpectrumScreenHandlerTypes.CRAFTING_TABLET, syncId); + super(SpectrumMenuTypes.CRAFTING_TABLET, syncId); this.craftingInventory = new CraftingTabletInventory(this); this.craftingResultInventory = new ResultContainer(); this.context = context; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/FabricationChestScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/FabricationChestScreenHandler.java index 4b2f865dd2..ba83002906 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/FabricationChestScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/FabricationChestScreenHandler.java @@ -15,7 +15,7 @@ public class FabricationChestScreenHandler extends AbstractContainerMenu { private final Container inventory; public FabricationChestScreenHandler(int syncId, Inventory playerInventory) { - this(SpectrumScreenHandlerTypes.FABRICATION_CHEST, syncId, playerInventory); + this(SpectrumMenuTypes.FABRICATION_CHEST, syncId, playerInventory); } protected FabricationChestScreenHandler(MenuType type, int i, Inventory playerInventory) { @@ -23,7 +23,7 @@ protected FabricationChestScreenHandler(MenuType type, int i, Inventory playe } public FabricationChestScreenHandler(int syncId, Inventory playerInventory, Container inventory) { - this(SpectrumScreenHandlerTypes.FABRICATION_CHEST, syncId, playerInventory, inventory); + this(SpectrumMenuTypes.FABRICATION_CHEST, syncId, playerInventory, inventory); } protected FabricationChestScreenHandler(MenuType type, int syncId, Inventory playerInventory, Container inventory) { diff --git a/src/main/java/de/dafuqs/spectrum/inventories/FilteringScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/FilteringScreenHandler.java index 2f4c07377e..f0fb0f7663 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/FilteringScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/FilteringScreenHandler.java @@ -21,11 +21,11 @@ public class FilteringScreenHandler extends AbstractContainerMenu { // clientside public FilteringScreenHandler(int syncId, Inventory playerInventory, RegistryFriendlyByteBuf buf) { - this(syncId, playerInventory, FilterConfigurable.ExtendedDataWithPos.PACKET_CODEC.decode(buf)); + this(syncId, playerInventory, FilterConfigurable.ExtendedDataWithPos.STREAM_CODEC.decode(buf)); } public FilteringScreenHandler(int syncId, Inventory playerInventory, FilterConfigurable.ExtendedDataWithPos data) { - this(SpectrumScreenHandlerTypes.FILTERING, syncId, playerInventory, data, + this(SpectrumMenuTypes.FILTERING, syncId, playerInventory, data, (handler) -> new Tuple<>(FilterConfigurable.getFilterInventoryFromItemsHandler(syncId, playerInventory, data.data().filterItems(), handler), new Integer[]{ data.data().rows(), data.data().slotsPerRow(), diff --git a/src/main/java/de/dafuqs/spectrum/inventories/GenericSpectrumContainerScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/GenericSpectrumContainerScreenHandler.java index 7bf04af5af..54011500cd 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/GenericSpectrumContainerScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/GenericSpectrumContainerScreenHandler.java @@ -20,45 +20,45 @@ public GenericSpectrumContainerScreenHandler(MenuType type, int syncId, Inven @Contract("_, _ -> new") public static @NotNull GenericSpectrumContainerScreenHandler createGeneric9x3_Tier1(int syncId, Inventory playerInventory) { - return new GenericSpectrumContainerScreenHandler(SpectrumScreenHandlerTypes.GENERIC_TIER1_9X3, syncId, playerInventory, 9, 3, ScreenBackgroundVariant.EARLYGAME); + return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER1_9X3, syncId, playerInventory, 9, 3, ScreenBackgroundVariant.EARLYGAME); } @Contract("_, _ -> new") public static @NotNull GenericSpectrumContainerScreenHandler createGeneric9x3_Tier2(int syncId, Inventory playerInventory) { - return new GenericSpectrumContainerScreenHandler(SpectrumScreenHandlerTypes.GENERIC_TIER2_9X3, syncId, playerInventory, 9, 3, ScreenBackgroundVariant.MIDGAME); + return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER2_9X3, syncId, playerInventory, 9, 3, ScreenBackgroundVariant.MIDGAME); } @Contract("_, _ -> new") public static @NotNull GenericSpectrumContainerScreenHandler createGeneric9x3_Tier3(int syncId, Inventory playerInventory) { - return new GenericSpectrumContainerScreenHandler(SpectrumScreenHandlerTypes.GENERIC_TIER3_9X3, syncId, playerInventory, 9, 3, ScreenBackgroundVariant.LATEGAME); + return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER3_9X3, syncId, playerInventory, 9, 3, ScreenBackgroundVariant.LATEGAME); } @Contract("_, _ -> new") public static @NotNull GenericSpectrumContainerScreenHandler createGeneric9x6_Tier1(int syncId, Inventory playerInventory) { - return new GenericSpectrumContainerScreenHandler(SpectrumScreenHandlerTypes.GENERIC_TIER1_9X6, syncId, playerInventory, 9, 6, ScreenBackgroundVariant.EARLYGAME); + return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER1_9X6, syncId, playerInventory, 9, 6, ScreenBackgroundVariant.EARLYGAME); } @Contract("_, _ -> new") public static @NotNull GenericSpectrumContainerScreenHandler createGeneric9x6_Tier2(int syncId, Inventory playerInventory) { - return new GenericSpectrumContainerScreenHandler(SpectrumScreenHandlerTypes.GENERIC_TIER2_9X6, syncId, playerInventory, 9, 6, ScreenBackgroundVariant.MIDGAME); + return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER2_9X6, syncId, playerInventory, 9, 6, ScreenBackgroundVariant.MIDGAME); } @Contract("_, _ -> new") public static @NotNull GenericSpectrumContainerScreenHandler createGeneric9x6_Tier3(int syncId, Inventory playerInventory) { - return new GenericSpectrumContainerScreenHandler(SpectrumScreenHandlerTypes.GENERIC_TIER3_9X6, syncId, playerInventory, 9, 6, ScreenBackgroundVariant.LATEGAME); + return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER3_9X6, syncId, playerInventory, 9, 6, ScreenBackgroundVariant.LATEGAME); } @Contract("_, _, _, _ -> new") public static @NotNull GenericSpectrumContainerScreenHandler createGeneric9x3(int syncId, Inventory playerInventory, Container inventory, @NotNull ScreenBackgroundVariant tier) { switch (tier) { case EARLYGAME -> { - return new GenericSpectrumContainerScreenHandler(SpectrumScreenHandlerTypes.GENERIC_TIER1_9X3, syncId, playerInventory, inventory, 3, tier); + return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER1_9X3, syncId, playerInventory, inventory, 3, tier); } case MIDGAME -> { - return new GenericSpectrumContainerScreenHandler(SpectrumScreenHandlerTypes.GENERIC_TIER2_9X3, syncId, playerInventory, inventory, 3, tier); + return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER2_9X3, syncId, playerInventory, inventory, 3, tier); } default -> { - return new GenericSpectrumContainerScreenHandler(SpectrumScreenHandlerTypes.GENERIC_TIER3_9X3, syncId, playerInventory, inventory, 3, tier); + return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER3_9X3, syncId, playerInventory, inventory, 3, tier); } } } @@ -67,13 +67,13 @@ public GenericSpectrumContainerScreenHandler(MenuType type, int syncId, Inven public static @NotNull GenericSpectrumContainerScreenHandler createGeneric9x6(int syncId, Inventory playerInventory, Container inventory, @NotNull ScreenBackgroundVariant tier) { switch (tier) { case EARLYGAME -> { - return new GenericSpectrumContainerScreenHandler(SpectrumScreenHandlerTypes.GENERIC_TIER1_9X6, syncId, playerInventory, inventory, 6, tier); + return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER1_9X6, syncId, playerInventory, inventory, 6, tier); } case MIDGAME -> { - return new GenericSpectrumContainerScreenHandler(SpectrumScreenHandlerTypes.GENERIC_TIER2_9X6, syncId, playerInventory, inventory, 6, tier); + return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER2_9X6, syncId, playerInventory, inventory, 6, tier); } default -> { - return new GenericSpectrumContainerScreenHandler(SpectrumScreenHandlerTypes.GENERIC_TIER3_9X6, syncId, playerInventory, inventory, 6, tier); + return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER3_9X6, syncId, playerInventory, inventory, 6, tier); } } } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java new file mode 100644 index 0000000000..a8ca53564e --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java @@ -0,0 +1,57 @@ +package de.dafuqs.spectrum.inventories; + +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.blocks.ink.*; +import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.inventories.widgets.*; +import de.dafuqs.spectrum.networking.c2s_payloads.*; +import net.minecraft.client.gui.*; +import net.minecraft.client.gui.screens.inventory.*; +import net.minecraft.core.*; +import net.minecraft.network.chat.*; +import net.minecraft.resources.*; +import net.minecraft.world.entity.player.*; +import net.neoforged.neoforge.network.*; +import org.jetbrains.annotations.*; + +import java.util.*; +import java.util.function.*; + +public class InkStorageScreen extends AbstractContainerScreen { + + protected static final ResourceLocation DEFAULT_BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); + + protected final ResourceLocation background; + + public InkStorageScreen(T handler, Inventory playerInventory, Component title) { + this(handler, playerInventory, title, DEFAULT_BACKGROUND); + } + + public InkStorageScreen(T handler, Inventory playerInventory, Component title, ResourceLocation background) { + super(handler, playerInventory, title); + this.background = background; + this.imageHeight = 166; + } + + @Override + protected void renderLabels(GuiGraphics drawContext, int mouseX, int mouseY) { + int titleX = (imageWidth - font.width(title)) / 2; + int titleY = 6; + drawContext.drawString(this.font, this.title.getVisualOrderText(), titleX, titleY, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); + drawContext.drawString(this.font, this.playerInventoryTitle, InkStorageScreenHandler.PLAYER_INVENTORY_START_X, InkStorageScreenHandler.PLAYER_INVENTORY_START_Y - 10, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); + } + + @Override + protected void renderBg(GuiGraphics guiGraphics, float partialTick, int mouseX, int mouseY) { + guiGraphics.blit(background, getGuiLeft(), getGuiTop(), 0, 0, imageWidth, imageHeight); + } + + @Override + public void render(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { + super.render(guiGraphics, mouseX, mouseY, delta); + guiGraphics.blit(background, getGuiLeft() + 52, getGuiTop() + 18, 176, 0, 46, 46); // gauge blanket + renderTooltip(guiGraphics, mouseX, mouseY); + } + +} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreenHandler.java similarity index 60% rename from src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreenHandler.java rename to src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreenHandler.java index 3f03e10fc4..80c6f4223f 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreenHandler.java @@ -1,13 +1,10 @@ package de.dafuqs.spectrum.inventories; -import de.dafuqs.spectrum.api.block.*; -import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.ink.*; +import de.dafuqs.spectrum.inventories.slots.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; -import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.network.*; -import net.minecraft.network.codec.*; import net.minecraft.server.level.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.inventory.*; @@ -15,17 +12,8 @@ import net.minecraft.world.level.*; import javax.annotation.*; -import java.util.*; -public abstract class InkTransferScreenHandler extends AbstractContainerMenu implements InkColorSelectedPacketReceiver { - - public record ScreenOpeningData(BlockPos pos, Optional> inkColor) { - public static final StreamCodec PACKET_CODEC = StreamCodec.composite( - BlockPos.STREAM_CODEC, ScreenOpeningData::pos, - ByteBufCodecs.optional(ByteBufCodecs.holderRegistry(SpectrumRegistryKeys.INK_COLOR)), ScreenOpeningData::inkColor, - ScreenOpeningData::new - ); - } +public class InkStorageScreenHandler extends AbstractContainerMenu { public static final int PLAYER_INVENTORY_START_X = 8; public static final int PLAYER_INVENTORY_START_Y = 84; @@ -33,22 +21,30 @@ public record ScreenOpeningData(BlockPos pos, Optional> inkColo protected final Level world; public final ServerPlayer serverPlayer; protected BaseInkTransferBlockEntity blockEntity; + protected int inventorySize; // clientside - protected InkTransferScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, ScreenOpeningData screenOpeningData) { - this(menuType, syncId, playerInventory, (BaseInkTransferBlockEntity) playerInventory.player.level().getBlockEntity(screenOpeningData.pos()), screenOpeningData.inkColor()); + public InkStorageScreenHandler(int syncId, Inventory playerInventory, RegistryFriendlyByteBuf buf) { + this(SpectrumMenuTypes.INK_STORAGE, syncId, playerInventory, BlockPos.STREAM_CODEC.decode(buf), 1); } // serverside - protected InkTransferScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, BaseInkTransferBlockEntity blockEntity, Optional> selectedColor) { + public InkStorageScreenHandler(int syncId, Inventory playerInventory, BlockPos pos) { + this(SpectrumMenuTypes.INK_STORAGE, syncId, playerInventory, pos, 1); + } + + protected InkStorageScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, BlockPos pos, int inventorySize) { + this(menuType, syncId, playerInventory, (BaseInkTransferBlockEntity) playerInventory.player.level().getBlockEntity(pos), inventorySize); + } + + protected InkStorageScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, BaseInkTransferBlockEntity blockEntity, int inventorySize) { super(menuType, syncId); + this.blockEntity = blockEntity; this.serverPlayer = playerInventory.player instanceof ServerPlayer serverPlayerEntity ? serverPlayerEntity : null; this.world = playerInventory.player.level(); - this.blockEntity = blockEntity; - this.blockEntity.setSelectedColor(selectedColor); - checkContainerSize(blockEntity, ColorPickerBlockEntity.INVENTORY_SIZE); + checkContainerSize(blockEntity, inventorySize); blockEntity.startOpen(playerInventory.player); addBlockEntitySlots(); @@ -70,9 +66,10 @@ protected InkTransferScreenHandler(@Nullable MenuType menuType, int syncId, I } } - public abstract void addBlockEntitySlots(); + public void addBlockEntitySlots() { + this.addSlot(new InkStorageSlot(blockEntity, 0, 133, 33)); + } - @Override public BaseInkTransferBlockEntity getBlockEntity() { return this.blockEntity; } @@ -95,11 +92,11 @@ public ItemStack quickMoveStack(Player player, int index) { if (slot.hasItem()) { ItemStack itemStack2 = slot.getItem(); itemStack = itemStack2.copy(); - if (index < ColorPickerBlockEntity.INVENTORY_SIZE) { - if (!this.moveItemStackTo(itemStack2, ColorPickerBlockEntity.INVENTORY_SIZE, this.slots.size(), true)) { + if (index < inventorySize) { + if (!this.moveItemStackTo(itemStack2, inventorySize, this.slots.size(), true)) { return ItemStack.EMPTY; } - } else if (!this.moveItemStackTo(itemStack2, 0, ColorPickerBlockEntity.INVENTORY_SIZE, false)) { + } else if (!this.moveItemStackTo(itemStack2, 0, inventorySize, false)) { return ItemStack.EMPTY; } @@ -113,11 +110,6 @@ public ItemStack quickMoveStack(Player player, int index) { return itemStack; } - @Override - public void onInkColorSelectedPacket(Optional> inkColor) { - this.blockEntity.setSelectedColor(inkColor); - } - @Override public void broadcastChanges() { super.broadcastChanges(); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageWithColorSelectionScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageWithColorSelectionScreenHandler.java new file mode 100644 index 0000000000..8eb7b86150 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageWithColorSelectionScreenHandler.java @@ -0,0 +1,42 @@ +package de.dafuqs.spectrum.inventories; + +import de.dafuqs.spectrum.api.block.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.blocks.ink.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.core.*; +import net.minecraft.network.*; +import net.minecraft.network.codec.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.inventory.*; + +import javax.annotation.*; +import java.util.*; + +public abstract class InkStorageWithColorSelectionScreenHandler extends InkStorageScreenHandler implements InkColorSelectedPacketReceiver { + + public record ScreenOpeningData(BlockPos pos, Optional> inkColor) { + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + BlockPos.STREAM_CODEC, ScreenOpeningData::pos, + ByteBufCodecs.optional(ByteBufCodecs.holderRegistry(SpectrumRegistryKeys.INK_COLOR)), ScreenOpeningData::inkColor, + ScreenOpeningData::new + ); + } + + // clientside + protected InkStorageWithColorSelectionScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, ScreenOpeningData screenOpeningData) { + this(menuType, syncId, playerInventory, (BaseInkTransferBlockEntity) playerInventory.player.level().getBlockEntity(screenOpeningData.pos()), screenOpeningData.inkColor()); + } + + // serverside + protected InkStorageWithColorSelectionScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, BaseInkTransferBlockEntity blockEntity, Optional> selectedColor) { + super(menuType, syncId, playerInventory, blockEntity, 2); + this.blockEntity.setSelectedColor(selectedColor); + } + + @Override + public void onInkColorSelectedPacket(Optional> inkColor) { + this.blockEntity.setSelectedColor(inkColor); + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java index 164bcef870..f281b4e25d 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java @@ -2,11 +2,9 @@ import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.ink.*; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.inventories.widgets.*; import de.dafuqs.spectrum.networking.c2s_payloads.*; import net.minecraft.client.gui.*; -import net.minecraft.client.gui.screens.inventory.*; import net.minecraft.core.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; @@ -17,15 +15,12 @@ import java.util.*; import java.util.function.*; -public class InkTransferScreen extends AbstractContainerScreen implements Consumer>> { +public abstract class InkTransferScreen extends InkStorageScreen implements Consumer>> { - protected final ResourceLocation background; protected ColorSelectionWidget colorSelectionWidget; - public InkTransferScreen(InkTransferScreenHandler handler, Inventory playerInventory, Component title, ResourceLocation background) { - super(handler, playerInventory, title); - this.background = background; - this.imageHeight = 166; + public InkTransferScreen(T handler, Inventory playerInventory, Component title, ResourceLocation background) { + super(handler, playerInventory, title, background); } @Override @@ -36,26 +31,6 @@ protected void init() { addRenderableWidget(this.colorSelectionWidget); } - @Override - protected void renderLabels(GuiGraphics drawContext, int mouseX, int mouseY) { - int titleX = (imageWidth - font.width(title)) / 2; - int titleY = 6; - drawContext.drawString(this.font, this.title.getVisualOrderText(), titleX, titleY, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); - drawContext.drawString(this.font, this.playerInventoryTitle, InkTransferScreenHandler.PLAYER_INVENTORY_START_X, InkTransferScreenHandler.PLAYER_INVENTORY_START_Y - 10, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); - } - - @Override - protected void renderBg(GuiGraphics guiGraphics, float partialTick, int mouseX, int mouseY) { - guiGraphics.blit(background, getGuiLeft(), getGuiTop(), 0, 0, imageWidth, imageHeight); - } - - @Override - public void render(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { - super.render(guiGraphics, mouseX, mouseY, delta); - guiGraphics.blit(background, getGuiLeft() + 52, getGuiTop() + 18, 176, 0, 46, 46); // gauge blanket - renderTooltip(guiGraphics, mouseX, mouseY); - } - @Override protected void renderTooltip(@NotNull GuiGraphics guiGraphics, int x, int y) { super.renderTooltip(guiGraphics, x, y); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreenHandler.java index ff195aa700..af4484beef 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreenHandler.java @@ -22,7 +22,7 @@ public PaintbrushScreenHandler(int syncId, Inventory playerInventory) { } public PaintbrushScreenHandler(int syncId, Inventory playerInventory, ItemStack paintBrushStack) { - super(SpectrumScreenHandlerTypes.PAINTBRUSH, syncId); + super(SpectrumMenuTypes.PAINTBRUSH, syncId); this.player = playerInventory.player; this.paintBrushStack = paintBrushStack; this.hasAccessToWhites = AdvancementHelper.hasAdvancement(playerInventory.player, InkColors.WHITE.getRequiredAdvancement()); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/ParticleSpawnerScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/ParticleSpawnerScreenHandler.java index bbcc300ffe..e0b2e499f0 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/ParticleSpawnerScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/ParticleSpawnerScreenHandler.java @@ -20,7 +20,7 @@ public ParticleSpawnerScreenHandler(int syncId, Inventory inventory, RegistryFri // serverside public ParticleSpawnerScreenHandler(int syncId, Inventory playerInventory, ParticleSpawnerBlockEntity blockEntity) { - super(SpectrumScreenHandlerTypes.PARTICLE_SPAWNER, syncId); + super(SpectrumMenuTypes.PARTICLE_SPAWNER, syncId); this.player = playerInventory.player; this.blockEntity = blockEntity; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/PedestalScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/PedestalScreenHandler.java index c28a0b10d1..f1b301f9a5 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/PedestalScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/PedestalScreenHandler.java @@ -45,7 +45,7 @@ private PedestalScreenHandler(int syncId, Inventory playerInventory, ScreenOpeni // serverside public PedestalScreenHandler(int syncId, Inventory playerInventory, PedestalBlockEntity blockEntity, ContainerData propertyDelegate, PedestalRecipeTier pedestalRecipeTier, PedestalRecipeTier maxRecipeTier) { - super(SpectrumScreenHandlerTypes.PEDESTAL, syncId); + super(SpectrumMenuTypes.PEDESTAL, syncId); this.category = RecipeBookType.CRAFTING; this.propertyDelegate = propertyDelegate; this.world = playerInventory.player.level(); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/PotionWorkshopScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/PotionWorkshopScreenHandler.java index 486d13914d..2dd198fa6e 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/PotionWorkshopScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/PotionWorkshopScreenHandler.java @@ -17,11 +17,11 @@ public class PotionWorkshopScreenHandler extends AbstractContainerMenu { private final ContainerData propertyDelegate; public PotionWorkshopScreenHandler(int syncId, Inventory playerInventory) { - this(SpectrumScreenHandlerTypes.POTION_WORKSHOP, syncId, playerInventory); + this(SpectrumMenuTypes.POTION_WORKSHOP, syncId, playerInventory); } public PotionWorkshopScreenHandler(int syncId, Inventory playerInventory, PotionWorkshopBlockEntity potionWorkshopBlockEntity, ContainerData propertyDelegate) { - this(SpectrumScreenHandlerTypes.POTION_WORKSHOP, syncId, playerInventory, potionWorkshopBlockEntity, propertyDelegate); + this(SpectrumMenuTypes.POTION_WORKSHOP, syncId, playerInventory, potionWorkshopBlockEntity, propertyDelegate); } public PotionWorkshopScreenHandler(MenuType type, int i, Inventory playerInventory) { diff --git a/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreenHandler.java index 0045b6c629..bd03303f00 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreenHandler.java @@ -13,7 +13,7 @@ public class Spectrum3x3ContainerScreenHandler extends AbstractContainerMenu { private final Container inventory; public Spectrum3x3ContainerScreenHandler(int syncId, Inventory playerInventory, ScreenBackgroundVariant screenBackgroundVariant) { - this(SpectrumScreenHandlerTypes.GENERIC_TIER1_3X3, syncId, playerInventory, new SimpleContainer(9), screenBackgroundVariant); + this(SpectrumMenuTypes.GENERIC_TIER1_3X3, syncId, playerInventory, new SimpleContainer(9), screenBackgroundVariant); } public Spectrum3x3ContainerScreenHandler(MenuType screenHandlerType, int syncId, Inventory playerInventory, Container inventory, ScreenBackgroundVariant screenBackgroundVariant) { @@ -49,7 +49,7 @@ public Spectrum3x3ContainerScreenHandler(MenuType new") public static @NotNull AbstractContainerMenu createTier1(int syncId, Inventory playerInventory, BlockPlacerBlockEntity blockEntity) { - return new Spectrum3x3ContainerScreenHandler(SpectrumScreenHandlerTypes.GENERIC_TIER1_3X3, syncId, playerInventory, blockEntity, ScreenBackgroundVariant.EARLYGAME); + return new Spectrum3x3ContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER1_3X3, syncId, playerInventory, blockEntity, ScreenBackgroundVariant.EARLYGAME); } @Contract("_, _ -> new") @@ -59,7 +59,7 @@ public Spectrum3x3ContainerScreenHandler(MenuType new") public static @NotNull AbstractContainerMenu createTier2(int syncId, Inventory playerInventory, BlockPlacerBlockEntity blockEntity) { - return new Spectrum3x3ContainerScreenHandler(SpectrumScreenHandlerTypes.GENERIC_TIER1_3X3, syncId, playerInventory, blockEntity, ScreenBackgroundVariant.MIDGAME); + return new Spectrum3x3ContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER1_3X3, syncId, playerInventory, blockEntity, ScreenBackgroundVariant.MIDGAME); } @Contract("_, _ -> new") @@ -69,7 +69,7 @@ public Spectrum3x3ContainerScreenHandler(MenuType new") public static @NotNull AbstractContainerMenu createTier3(int syncId, Inventory playerInventory, BlockPlacerBlockEntity blockEntity) { - return new Spectrum3x3ContainerScreenHandler(SpectrumScreenHandlerTypes.GENERIC_TIER1_3X3, syncId, playerInventory, blockEntity, ScreenBackgroundVariant.LATEGAME); + return new Spectrum3x3ContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER1_3X3, syncId, playerInventory, blockEntity, ScreenBackgroundVariant.LATEGAME); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumScreenHandlerIDs.java b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypeIDs.java similarity index 95% rename from src/main/java/de/dafuqs/spectrum/inventories/SpectrumScreenHandlerIDs.java rename to src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypeIDs.java index d649f14ac3..25e2989c3a 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumScreenHandlerIDs.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypeIDs.java @@ -3,7 +3,7 @@ import de.dafuqs.spectrum.*; import net.minecraft.resources.*; -public class SpectrumScreenHandlerIDs { +public class SpectrumMenuTypeIDs { public static final ResourceLocation PAINTBRUSH = SpectrumCommon.locate("paintbrush"); public static final ResourceLocation WORKSTAFF = SpectrumCommon.locate("workstaff"); @@ -17,6 +17,7 @@ public class SpectrumScreenHandlerIDs { public static final ResourceLocation BLACK_HOLE_CHEST = SpectrumCommon.locate("black_hole_chest"); public static final ResourceLocation POTION_WORKSHOP = SpectrumCommon.locate("potion_workshop"); public static final ResourceLocation COLOR_PICKER = SpectrumCommon.locate("color_picker"); + public static final ResourceLocation INK_STORAGE = SpectrumCommon.locate("ink_storage"); public static final ResourceLocation TINTING_STATION = SpectrumCommon.locate("tinting_station"); public static final ResourceLocation CINDERHEARTH = SpectrumCommon.locate("cinderhearth"); public static final ResourceLocation FILTERING = SpectrumCommon.locate("filtering"); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java new file mode 100644 index 0000000000..547dff672d --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java @@ -0,0 +1,98 @@ +package de.dafuqs.spectrum.inventories; + +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.block.*; +import net.minecraft.client.gui.screens.inventory.*; +import net.minecraft.core.*; +import net.minecraft.core.registries.*; +import net.minecraft.network.*; +import net.minecraft.network.codec.*; +import net.minecraft.resources.*; +import net.minecraft.world.flag.*; +import net.minecraft.world.inventory.*; +import net.neoforged.bus.api.*; +import net.neoforged.neoforge.client.event.*; +import net.neoforged.neoforge.common.extensions.*; +import net.neoforged.neoforge.network.*; +import net.neoforged.neoforge.registries.*; + +public class SpectrumMenuTypes { + + private static final DeferredRegister> REGISTRAR = DeferredRegister.create(Registries.MENU, SpectrumCommon.MOD_ID); + + public static MenuType PAINTBRUSH = registerSimple(SpectrumMenuTypeIDs.PAINTBRUSH, PaintbrushScreenHandler::new); + public static MenuType WORKSTAFF = registerSimple(SpectrumMenuTypeIDs.WORKSTAFF, WorkstaffScreenHandler::new); + public static MenuType PEDESTAL = registerExtended(SpectrumMenuTypeIDs.PEDESTAL, PedestalScreenHandler::new, PedestalScreenHandler.ScreenOpeningData.PACKET_CODEC); + public static MenuType CRAFTING_TABLET = registerSimple(SpectrumMenuTypeIDs.CRAFTING_TABLET, CraftingTabletScreenHandler::new); + public static MenuType FABRICATION_CHEST = registerSimple(SpectrumMenuTypeIDs.FABRICATION_CHEST, FabricationChestScreenHandler::new); + public static MenuType BEDROCK_ANVIL = registerSimple(SpectrumMenuTypeIDs.BEDROCK_ANVIL, BedrockAnvilScreenHandler::new); + public static MenuType PARTICLE_SPAWNER = registerExtended(SpectrumMenuTypeIDs.PARTICLE_SPAWNER, ParticleSpawnerScreenHandler::new, BlockPos.STREAM_CODEC); + public static MenuType COMPACTING_CHEST = registerExtended(SpectrumMenuTypeIDs.COMPACTING_CHEST, CompactingChestScreenHandler::new, BlockPos.STREAM_CODEC); + public static MenuType BLACK_HOLE_CHEST = registerExtended(SpectrumMenuTypeIDs.BLACK_HOLE_CHEST, BlackHoleChestScreenHandler::new, FilterConfigurable.ExtendedDataWithPos.STREAM_CODEC); + public static MenuType POTION_WORKSHOP = registerSimple(SpectrumMenuTypeIDs.POTION_WORKSHOP, PotionWorkshopScreenHandler::new); + public static MenuType COLOR_PICKER = registerExtended(SpectrumMenuTypeIDs.COLOR_PICKER, ColorPickerScreenHandler::new, ColorPickerScreenHandler.ScreenOpeningData.STREAM_CODEC); + public static MenuType INK_STORAGE = registerExtended(SpectrumMenuTypeIDs.INK_STORAGE, InkStorageScreenHandler::new, BlockPos.STREAM_CODEC); + public static MenuType TINTING_STATION = registerExtended(SpectrumMenuTypeIDs.TINTING_STATION, TintingStationScreenHandler::new, ColorPickerScreenHandler.ScreenOpeningData.STREAM_CODEC); + public static MenuType CINDERHEARTH = registerExtended(SpectrumMenuTypeIDs.CINDERHEARTH, CinderhearthScreenHandler::new, BlockPos.STREAM_CODEC); + public static MenuType FILTERING = registerExtended(SpectrumMenuTypeIDs.FILTERING, FilteringScreenHandler::new, FilterConfigurable.ExtendedData.STREAM_CODEC); + public static MenuType BAG_OF_HOLDING = registerSimple(SpectrumMenuTypeIDs.BAG_OF_HOLDING, BagOfHoldingScreenHandler::new); + + public static MenuType GENERIC_TIER1_9X3 = registerSimple(SpectrumMenuTypeIDs.GENERIC_TIER1_9x3, GenericSpectrumContainerScreenHandler::createGeneric9x3_Tier1); + public static MenuType GENERIC_TIER2_9X3 = registerSimple(SpectrumMenuTypeIDs.GENERIC_TIER2_9x3, GenericSpectrumContainerScreenHandler::createGeneric9x3_Tier2); + public static MenuType GENERIC_TIER3_9X3 = registerSimple(SpectrumMenuTypeIDs.GENERIC_TIER3_9x3, GenericSpectrumContainerScreenHandler::createGeneric9x3_Tier3); + + public static MenuType GENERIC_TIER1_9X6 = registerSimple(SpectrumMenuTypeIDs.GENERIC_TIER1_9x6, GenericSpectrumContainerScreenHandler::createGeneric9x6_Tier1); + public static MenuType GENERIC_TIER2_9X6 = registerSimple(SpectrumMenuTypeIDs.GENERIC_TIER2_9x6, GenericSpectrumContainerScreenHandler::createGeneric9x6_Tier2); + public static MenuType GENERIC_TIER3_9X6 = registerSimple(SpectrumMenuTypeIDs.GENERIC_TIER3_9x6, GenericSpectrumContainerScreenHandler::createGeneric9x6_Tier3); + + public static MenuType GENERIC_TIER1_3X3 = registerSimple(SpectrumMenuTypeIDs.GENERIC_TIER1_3X3, Spectrum3x3ContainerScreenHandler::createTier1); + public static MenuType GENERIC_TIER2_3X3 = registerSimple(SpectrumMenuTypeIDs.GENERIC_TIER2_3X3, Spectrum3x3ContainerScreenHandler::createTier2); + public static MenuType GENERIC_TIER3_3X3 = registerSimple(SpectrumMenuTypeIDs.GENERIC_TIER3_3X3, Spectrum3x3ContainerScreenHandler::createTier3); + + public static MenuType registerSimple(ResourceLocation id, MenuType.MenuSupplier factory) { + MenuType type = new MenuType<>(factory, FeatureFlags.VANILLA_SET); + REGISTRAR.register(id.getPath(), () -> type); + return type; + } + + public static MenuType registerExtended(ResourceLocation id, IContainerFactory factory, StreamCodec packetCodec) { + MenuType type = IMenuTypeExtension.create(factory); + REGISTRAR.register(id.getPath(), () -> type); + return type; + } + + public static void register(IEventBus eventBus) { + REGISTRAR.register(eventBus); + } + + public static void registerClient(RegisterMenuScreensEvent event) { + event.register(SpectrumMenuTypes.PAINTBRUSH, PaintbrushScreen::new); + event.register(SpectrumMenuTypes.WORKSTAFF, WorkstaffScreen::new); + + event.register(SpectrumMenuTypes.PEDESTAL, PedestalScreen::new); + event.register(SpectrumMenuTypes.CRAFTING_TABLET, CraftingTabletScreen::new); + event.register(SpectrumMenuTypes.FABRICATION_CHEST, FabricationChestScreen::new); + event.register(SpectrumMenuTypes.BEDROCK_ANVIL, BedrockAnvilScreen::new); + event.register(SpectrumMenuTypes.PARTICLE_SPAWNER, ParticleSpawnerScreen::new); + event.register(SpectrumMenuTypes.COMPACTING_CHEST, CompactingChestScreen::new); + event.register(SpectrumMenuTypes.BLACK_HOLE_CHEST, BlackHoleChestScreen::new); + event.register(SpectrumMenuTypes.POTION_WORKSHOP, PotionWorkshopScreen::new); + event.register(SpectrumMenuTypes.COLOR_PICKER, ColorPickerScreen::new); + event.register(SpectrumMenuTypes.INK_STORAGE, InkStorageScreen::new); + event.register(SpectrumMenuTypes.TINTING_STATION, TintingStationScreen::new); + event.register(SpectrumMenuTypes.CINDERHEARTH, CinderhearthScreen::new); + event.register(SpectrumMenuTypes.FILTERING, FilteringScreen::new); + event.register(SpectrumMenuTypes.BAG_OF_HOLDING, ContainerScreen::new); + + event.register(SpectrumMenuTypes.GENERIC_TIER1_9X3, SpectrumGenericContainerScreen::new); + event.register(SpectrumMenuTypes.GENERIC_TIER2_9X3, SpectrumGenericContainerScreen::new); + event.register(SpectrumMenuTypes.GENERIC_TIER3_9X3, SpectrumGenericContainerScreen::new); + event.register(SpectrumMenuTypes.GENERIC_TIER1_9X6, SpectrumGenericContainerScreen::new); + event.register(SpectrumMenuTypes.GENERIC_TIER2_9X6, SpectrumGenericContainerScreen::new); + event.register(SpectrumMenuTypes.GENERIC_TIER3_9X6, SpectrumGenericContainerScreen::new); + event.register(SpectrumMenuTypes.GENERIC_TIER1_3X3, Spectrum3x3ContainerScreen::new); + event.register(SpectrumMenuTypes.GENERIC_TIER2_3X3, Spectrum3x3ContainerScreen::new); + event.register(SpectrumMenuTypes.GENERIC_TIER3_3X3, Spectrum3x3ContainerScreen::new); + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumScreenHandlerTypes.java b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumScreenHandlerTypes.java deleted file mode 100644 index b3c658a276..0000000000 --- a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumScreenHandlerTypes.java +++ /dev/null @@ -1,96 +0,0 @@ -package de.dafuqs.spectrum.inventories; - -import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.block.*; -import net.minecraft.client.gui.screens.inventory.*; -import net.minecraft.core.*; -import net.minecraft.core.registries.*; -import net.minecraft.network.*; -import net.minecraft.network.codec.*; -import net.minecraft.resources.*; -import net.minecraft.world.flag.*; -import net.minecraft.world.inventory.*; -import net.neoforged.bus.api.*; -import net.neoforged.neoforge.client.event.*; -import net.neoforged.neoforge.common.extensions.*; -import net.neoforged.neoforge.network.*; -import net.neoforged.neoforge.registries.*; - -public class SpectrumScreenHandlerTypes { - - private static final DeferredRegister> REGISTRAR = DeferredRegister.create(Registries.MENU, SpectrumCommon.MOD_ID); - - public static MenuType PAINTBRUSH = registerSimple(SpectrumScreenHandlerIDs.PAINTBRUSH, PaintbrushScreenHandler::new); - public static MenuType WORKSTAFF = registerSimple(SpectrumScreenHandlerIDs.WORKSTAFF, WorkstaffScreenHandler::new); - public static MenuType PEDESTAL = registerExtended(SpectrumScreenHandlerIDs.PEDESTAL, PedestalScreenHandler::new, PedestalScreenHandler.ScreenOpeningData.PACKET_CODEC); - public static MenuType CRAFTING_TABLET = registerSimple(SpectrumScreenHandlerIDs.CRAFTING_TABLET, CraftingTabletScreenHandler::new); - public static MenuType FABRICATION_CHEST = registerSimple(SpectrumScreenHandlerIDs.FABRICATION_CHEST, FabricationChestScreenHandler::new); - public static MenuType BEDROCK_ANVIL = registerSimple(SpectrumScreenHandlerIDs.BEDROCK_ANVIL, BedrockAnvilScreenHandler::new); - public static MenuType PARTICLE_SPAWNER = registerExtended(SpectrumScreenHandlerIDs.PARTICLE_SPAWNER, ParticleSpawnerScreenHandler::new, BlockPos.STREAM_CODEC); - public static MenuType COMPACTING_CHEST = registerExtended(SpectrumScreenHandlerIDs.COMPACTING_CHEST, CompactingChestScreenHandler::new, BlockPos.STREAM_CODEC); - public static MenuType BLACK_HOLE_CHEST = registerExtended(SpectrumScreenHandlerIDs.BLACK_HOLE_CHEST, BlackHoleChestScreenHandler::new, FilterConfigurable.ExtendedDataWithPos.PACKET_CODEC); - public static MenuType POTION_WORKSHOP = registerSimple(SpectrumScreenHandlerIDs.POTION_WORKSHOP, PotionWorkshopScreenHandler::new); - public static MenuType COLOR_PICKER = registerExtended(SpectrumScreenHandlerIDs.COLOR_PICKER, ColorPickerScreenHandler::new, ColorPickerScreenHandler.ScreenOpeningData.PACKET_CODEC); - public static MenuType TINTING_STATION = registerExtended(SpectrumScreenHandlerIDs.TINTING_STATION, TintingStationScreenHandler::new, ColorPickerScreenHandler.ScreenOpeningData.PACKET_CODEC); - public static MenuType CINDERHEARTH = registerExtended(SpectrumScreenHandlerIDs.CINDERHEARTH, CinderhearthScreenHandler::new, BlockPos.STREAM_CODEC); - public static MenuType FILTERING = registerExtended(SpectrumScreenHandlerIDs.FILTERING, FilteringScreenHandler::new, FilterConfigurable.ExtendedData.PACKET_CODEC); - public static MenuType BAG_OF_HOLDING = registerSimple(SpectrumScreenHandlerIDs.BAG_OF_HOLDING, BagOfHoldingScreenHandler::new); - - public static MenuType GENERIC_TIER1_9X3 = registerSimple(SpectrumScreenHandlerIDs.GENERIC_TIER1_9x3, GenericSpectrumContainerScreenHandler::createGeneric9x3_Tier1); - public static MenuType GENERIC_TIER2_9X3 = registerSimple(SpectrumScreenHandlerIDs.GENERIC_TIER2_9x3, GenericSpectrumContainerScreenHandler::createGeneric9x3_Tier2); - public static MenuType GENERIC_TIER3_9X3 = registerSimple(SpectrumScreenHandlerIDs.GENERIC_TIER3_9x3, GenericSpectrumContainerScreenHandler::createGeneric9x3_Tier3); - - public static MenuType GENERIC_TIER1_9X6 = registerSimple(SpectrumScreenHandlerIDs.GENERIC_TIER1_9x6, GenericSpectrumContainerScreenHandler::createGeneric9x6_Tier1); - public static MenuType GENERIC_TIER2_9X6 = registerSimple(SpectrumScreenHandlerIDs.GENERIC_TIER2_9x6, GenericSpectrumContainerScreenHandler::createGeneric9x6_Tier2); - public static MenuType GENERIC_TIER3_9X6 = registerSimple(SpectrumScreenHandlerIDs.GENERIC_TIER3_9x6, GenericSpectrumContainerScreenHandler::createGeneric9x6_Tier3); - - public static MenuType GENERIC_TIER1_3X3 = registerSimple(SpectrumScreenHandlerIDs.GENERIC_TIER1_3X3, Spectrum3x3ContainerScreenHandler::createTier1); - public static MenuType GENERIC_TIER2_3X3 = registerSimple(SpectrumScreenHandlerIDs.GENERIC_TIER2_3X3, Spectrum3x3ContainerScreenHandler::createTier2); - public static MenuType GENERIC_TIER3_3X3 = registerSimple(SpectrumScreenHandlerIDs.GENERIC_TIER3_3X3, Spectrum3x3ContainerScreenHandler::createTier3); - - public static MenuType registerSimple(ResourceLocation id, MenuType.MenuSupplier factory) { - MenuType type = new MenuType<>(factory, FeatureFlags.VANILLA_SET); - REGISTRAR.register(id.getPath(), () -> type); - return type; - } - - public static MenuType registerExtended(ResourceLocation id, IContainerFactory factory, StreamCodec packetCodec) { - MenuType type = IMenuTypeExtension.create(factory); - REGISTRAR.register(id.getPath(), () -> type); - return type; - } - - public static void register(IEventBus eventBus) { - REGISTRAR.register(eventBus); - } - - public static void registerClient(RegisterMenuScreensEvent event) { - event.register(SpectrumScreenHandlerTypes.PAINTBRUSH, PaintbrushScreen::new); - event.register(SpectrumScreenHandlerTypes.WORKSTAFF, WorkstaffScreen::new); - - event.register(SpectrumScreenHandlerTypes.PEDESTAL, PedestalScreen::new); - event.register(SpectrumScreenHandlerTypes.CRAFTING_TABLET, CraftingTabletScreen::new); - event.register(SpectrumScreenHandlerTypes.FABRICATION_CHEST, FabricationChestScreen::new); - event.register(SpectrumScreenHandlerTypes.BEDROCK_ANVIL, BedrockAnvilScreen::new); - event.register(SpectrumScreenHandlerTypes.PARTICLE_SPAWNER, ParticleSpawnerScreen::new); - event.register(SpectrumScreenHandlerTypes.COMPACTING_CHEST, CompactingChestScreen::new); - event.register(SpectrumScreenHandlerTypes.BLACK_HOLE_CHEST, BlackHoleChestScreen::new); - event.register(SpectrumScreenHandlerTypes.POTION_WORKSHOP, PotionWorkshopScreen::new); - event.register(SpectrumScreenHandlerTypes.COLOR_PICKER, ColorPickerScreen::new); - event.register(SpectrumScreenHandlerTypes.TINTING_STATION, TintingStationScreen::new); - event.register(SpectrumScreenHandlerTypes.CINDERHEARTH, CinderhearthScreen::new); - event.register(SpectrumScreenHandlerTypes.FILTERING, FilteringScreen::new); - event.register(SpectrumScreenHandlerTypes.BAG_OF_HOLDING, ContainerScreen::new); - - event.register(SpectrumScreenHandlerTypes.GENERIC_TIER1_9X3, SpectrumGenericContainerScreen::new); - event.register(SpectrumScreenHandlerTypes.GENERIC_TIER2_9X3, SpectrumGenericContainerScreen::new); - event.register(SpectrumScreenHandlerTypes.GENERIC_TIER3_9X3, SpectrumGenericContainerScreen::new); - event.register(SpectrumScreenHandlerTypes.GENERIC_TIER1_9X6, SpectrumGenericContainerScreen::new); - event.register(SpectrumScreenHandlerTypes.GENERIC_TIER2_9X6, SpectrumGenericContainerScreen::new); - event.register(SpectrumScreenHandlerTypes.GENERIC_TIER3_9X6, SpectrumGenericContainerScreen::new); - event.register(SpectrumScreenHandlerTypes.GENERIC_TIER1_3X3, Spectrum3x3ContainerScreen::new); - event.register(SpectrumScreenHandlerTypes.GENERIC_TIER2_3X3, Spectrum3x3ContainerScreen::new); - event.register(SpectrumScreenHandlerTypes.GENERIC_TIER3_3X3, Spectrum3x3ContainerScreen::new); - } - -} diff --git a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java index a960da4456..feb3598c41 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java @@ -8,13 +8,13 @@ import net.minecraft.world.entity.player.*; import org.jetbrains.annotations.*; -public class TintingStationScreen extends InkTransferScreen { +public class TintingStationScreen extends InkTransferScreen { protected static final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/tinting_station.png"); protected InkListWidget inkListWidget; - public TintingStationScreen(InkTransferScreenHandler handler, Inventory playerInventory, Component title) { + public TintingStationScreen(TintingStationScreenHandler handler, Inventory playerInventory, Component title) { super(handler, playerInventory, title, BACKGROUND); } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java index 5aba38972d..322e8419cb 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java @@ -10,16 +10,16 @@ import java.util.*; -public class TintingStationScreenHandler extends InkTransferScreenHandler { +public class TintingStationScreenHandler extends InkStorageWithColorSelectionScreenHandler { // clientside public TintingStationScreenHandler(int syncId, Inventory playerInventory, RegistryFriendlyByteBuf buf) { - super(SpectrumScreenHandlerTypes.TINTING_STATION, syncId, playerInventory, ScreenOpeningData.PACKET_CODEC.decode(buf)); + super(SpectrumMenuTypes.TINTING_STATION, syncId, playerInventory, ScreenOpeningData.STREAM_CODEC.decode(buf)); } // serverside public TintingStationScreenHandler(int syncId, Inventory playerInventory, BaseInkTransferBlockEntity blockEntity, Optional> selectedColor) { - super(SpectrumScreenHandlerTypes.TINTING_STATION, syncId, playerInventory, blockEntity, selectedColor); + super(SpectrumMenuTypes.TINTING_STATION, syncId, playerInventory, blockEntity, selectedColor); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/inventories/WorkstaffScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/WorkstaffScreenHandler.java index c4a3b6af18..b4f8cec65c 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/WorkstaffScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/WorkstaffScreenHandler.java @@ -14,7 +14,7 @@ public WorkstaffScreenHandler(int syncId, Inventory playerInventory) { } public WorkstaffScreenHandler(int syncId, Inventory playerInventory, ItemStack workstaffStack) { - super(SpectrumScreenHandlerTypes.WORKSTAFF, syncId); + super(SpectrumMenuTypes.WORKSTAFF, syncId); this.workstaffStack = workstaffStack; this.player = playerInventory.player; } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java index 95476284be..baf57761b3 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java @@ -63,11 +63,17 @@ public class SpectrumBlockEntities { public static DeferredHolder, BlockEntityType> SKULL = register("skull", SpectrumSkullBlockEntity::new); // supported blocks are added in addBlockEntityTypeBlocks() public static DeferredHolder, BlockEntityType> BOTTOMLESS_BUNDLE = register("bottomless_bundle", BottomlessBundleBlockEntity::new, SpectrumBlocks.BOTTOMLESS_BUNDLE); public static DeferredHolder, BlockEntityType> POTION_WORKSHOP = register("potion_workshop", PotionWorkshopBlockEntity::new, SpectrumBlocks.POTION_WORKSHOP); - public static DeferredHolder, BlockEntityType> CRYSTALLARIEUM = register("crystallarieum", CrystallarieumBlockEntity::new, SpectrumBlocks.CRYSTALLARIEUM); - public static DeferredHolder, BlockEntityType> CINDERHEARTH = register("cinderhearth", CinderhearthBlockEntity::new, SpectrumBlocks.CINDERHEARTH); - public static DeferredHolder, BlockEntityType> CRYSTAL_APOTHECARY = register("crystal_apothecary", CrystalApothecaryBlockEntity::new, SpectrumBlocks.CRYSTAL_APOTHECARY); + + // Ink Generators public static DeferredHolder, BlockEntityType> COLOR_PICKER = register("color_picker", ColorPickerBlockEntity::new, SpectrumBlocks.COLOR_PICKER); + public static DeferredHolder, BlockEntityType> TWILL = register("twill", TwillBlockEntity::new, SpectrumBlocks.TWILL); + public static DeferredHolder, BlockEntityType> VANTACLAST = register("vantaclast", VantaclastBlockEntity::new, SpectrumBlocks.VANTACLAST); + public static DeferredHolder, BlockEntityType> DAWNBRUSH = register("dawnbrush", DawnbrushBlockEntity::new, SpectrumBlocks.DAWNBRUSH); + + // Ink Sinks + public static DeferredHolder, BlockEntityType> CRYSTALLARIEUM = register("crystallarieum", CrystallarieumBlockEntity::new, SpectrumBlocks.CRYSTALLARIEUM); + public static DeferredHolder, BlockEntityType> CINDERHEARTH = register("cinderhearth", CinderhearthBlockEntity::new, SpectrumBlocks.CINDERHEARTH); public static DeferredHolder, BlockEntityType> TINTING_STATION = register("tinting_station", TintingStationBlockEntity::new, SpectrumBlocks.TINTING_STATION); public static DeferredHolder, BlockEntityType> COMPACTING_CHEST = register("compacting_chest", CompactingChestBlockEntity::new, SpectrumBlocks.COMPACTING_CHEST); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index 258f22ab66..ddde908f8d 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -133,13 +133,20 @@ private static BlockBehaviour.Properties craftingBlock(MapColor mapColor, SoundT public static final DeferredBlock ITEM_BOWL_CALCITE = register(singleton(blockWithItem("item_bowl_calcite", () -> new ItemBowlBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.PINK), TexturedModel.createDefault(b -> new TextureMapping().put(TextureSlot.TEXTURE, SpectrumCommon.locate("block/item_bowl_calcite")).put(TextureSlot.SIDE, SpectrumCommon.locate("block/polished_calcite_pillar_side")).put(SpectrumTextureSlots.BASE, SpectrumCommon.locate("block/polished_calcite")), SpectrumModelTemplates.BOWL))); public static final DeferredBlock ITEM_ROUNDEL = register(singleton(blockWithItem("item_roundel", () -> new ItemRoundelBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.PINK), SpectrumTexturedModelProviders.ROUNDEL)); public static final DeferredBlock POTION_WORKSHOP = register(defaultNorthHorizontalFacing(blockWithItem("potion_workshop", () -> new PotionWorkshopBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.PURPLE), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock CRYSTAL_APOTHECARY = register(singletonWithSoup(blockWithItem("crystal_apothecary", () -> new CrystalApothecaryBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); + + // Ink Generators + public static final DeferredBlock COLOR_PICKER = register(defaultWestHorizontalFacing(blockWithItem("color_picker", () -> new ColorPickerBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock TWILL = register(defaultWestHorizontalFacing(blockWithItem("twill", () -> new TwillBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock VANTACLAST = register(defaultWestHorizontalFacing(blockWithItem("vantaclast", () -> new VantaclastBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock DAWNBRUSH = register(defaultWestHorizontalFacing(blockWithItem("dawnbrush", () -> new DawnbrushBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); + + // Ink Sinks + public static final DeferredBlock TINTING_STATION = register(defaultWestHorizontalFacing(blockWithItem("tinting_station", () -> new TintingStationBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); public static final DeferredBlock SPIRIT_INSTILLER = register(singletonWithSoup(blockWithItem("spirit_instiller", () -> new SpiritInstillerBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.WHITE), ModelLocationUtils::getModelLocation).withPredefinedItemModel()); public static final DeferredBlock CRYSTALLARIEUM = register(singletonWithSoup(blockWithItem("crystallarieum", () -> new CrystallarieumBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.BROWN), ModelLocationUtils::getModelLocation).withPredefinedItemModel()); public static final DeferredBlock CINDERHEARTH = register(defaultNorthHorizontalFacing(blockWithItem("cinderhearth", () -> new CinderhearthBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of().fireResistant(), InkColors.ORANGE), ModelLocationUtils::getModelLocation)); - public static final DeferredBlock COLOR_PICKER = register(defaultWestHorizontalFacing(blockWithItem("color_picker", () -> new ColorPickerBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); - public static final DeferredBlock TINTING_STATION = register(defaultWestHorizontalFacing(blockWithItem("tinting_station", () -> new TintingStationBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); - public static final DeferredBlock CRYSTAL_APOTHECARY = register(singletonWithSoup(blockWithItem("crystal_apothecary", () -> new CrystalApothecaryBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); private static BlockBehaviour.Properties gemstone(MapColor mapColor, SoundType blockSoundGroup, int luminance) { return settings(mapColor, blockSoundGroup, 1.5F).forceSolidOn().noOcclusion().lightLevel((state) -> luminance).pushReaction(PushReaction.DESTROY); From 606e3db3cbcc7f9766a808c0a147652226ef9865 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 25 May 2026 11:16:49 +0200 Subject: [PATCH 040/477] inline screen ids --- .../inventories/SpectrumMenuTypeIDs.java | 38 -------------- .../inventories/SpectrumMenuTypes.java | 50 +++++++++---------- 2 files changed, 25 insertions(+), 63 deletions(-) delete mode 100644 src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypeIDs.java diff --git a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypeIDs.java b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypeIDs.java deleted file mode 100644 index 25e2989c3a..0000000000 --- a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypeIDs.java +++ /dev/null @@ -1,38 +0,0 @@ -package de.dafuqs.spectrum.inventories; - -import de.dafuqs.spectrum.*; -import net.minecraft.resources.*; - -public class SpectrumMenuTypeIDs { - - public static final ResourceLocation PAINTBRUSH = SpectrumCommon.locate("paintbrush"); - public static final ResourceLocation WORKSTAFF = SpectrumCommon.locate("workstaff"); - - public static final ResourceLocation PEDESTAL = SpectrumCommon.locate("pedestal"); - public static final ResourceLocation CRAFTING_TABLET = SpectrumCommon.locate("crafting_tablet"); - public static final ResourceLocation FABRICATION_CHEST = SpectrumCommon.locate("fabrication_chest"); - public static final ResourceLocation BEDROCK_ANVIL = SpectrumCommon.locate("bedrock_anvil"); - public static final ResourceLocation PARTICLE_SPAWNER = SpectrumCommon.locate("particle_spawner"); - public static final ResourceLocation COMPACTING_CHEST = SpectrumCommon.locate("compacting_chest"); - public static final ResourceLocation BLACK_HOLE_CHEST = SpectrumCommon.locate("black_hole_chest"); - public static final ResourceLocation POTION_WORKSHOP = SpectrumCommon.locate("potion_workshop"); - public static final ResourceLocation COLOR_PICKER = SpectrumCommon.locate("color_picker"); - public static final ResourceLocation INK_STORAGE = SpectrumCommon.locate("ink_storage"); - public static final ResourceLocation TINTING_STATION = SpectrumCommon.locate("tinting_station"); - public static final ResourceLocation CINDERHEARTH = SpectrumCommon.locate("cinderhearth"); - public static final ResourceLocation FILTERING = SpectrumCommon.locate("filtering"); - public static final ResourceLocation BAG_OF_HOLDING = SpectrumCommon.locate("bag_of_holding"); - - public static final ResourceLocation GENERIC_TIER1_9x3 = SpectrumCommon.locate("generic_tier1_9x3"); - public static final ResourceLocation GENERIC_TIER2_9x3 = SpectrumCommon.locate("generic_tier2_9x3"); - public static final ResourceLocation GENERIC_TIER3_9x3 = SpectrumCommon.locate("generic_tier3_9x3"); - - public static final ResourceLocation GENERIC_TIER1_9x6 = SpectrumCommon.locate("generic_tier1_9x6"); - public static final ResourceLocation GENERIC_TIER2_9x6 = SpectrumCommon.locate("generic_tier2_9x6"); - public static final ResourceLocation GENERIC_TIER3_9x6 = SpectrumCommon.locate("generic_tier3_9x6"); - - public static final ResourceLocation GENERIC_TIER1_3X3 = SpectrumCommon.locate("generic_tier1_3x3"); - public static final ResourceLocation GENERIC_TIER2_3X3 = SpectrumCommon.locate("generic_tier2_3x3"); - public static final ResourceLocation GENERIC_TIER3_3X3 = SpectrumCommon.locate("generic_tier3_3x3"); - -} diff --git a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java index 547dff672d..05e619e59e 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java @@ -20,34 +20,34 @@ public class SpectrumMenuTypes { private static final DeferredRegister> REGISTRAR = DeferredRegister.create(Registries.MENU, SpectrumCommon.MOD_ID); - public static MenuType PAINTBRUSH = registerSimple(SpectrumMenuTypeIDs.PAINTBRUSH, PaintbrushScreenHandler::new); - public static MenuType WORKSTAFF = registerSimple(SpectrumMenuTypeIDs.WORKSTAFF, WorkstaffScreenHandler::new); - public static MenuType PEDESTAL = registerExtended(SpectrumMenuTypeIDs.PEDESTAL, PedestalScreenHandler::new, PedestalScreenHandler.ScreenOpeningData.PACKET_CODEC); - public static MenuType CRAFTING_TABLET = registerSimple(SpectrumMenuTypeIDs.CRAFTING_TABLET, CraftingTabletScreenHandler::new); - public static MenuType FABRICATION_CHEST = registerSimple(SpectrumMenuTypeIDs.FABRICATION_CHEST, FabricationChestScreenHandler::new); - public static MenuType BEDROCK_ANVIL = registerSimple(SpectrumMenuTypeIDs.BEDROCK_ANVIL, BedrockAnvilScreenHandler::new); - public static MenuType PARTICLE_SPAWNER = registerExtended(SpectrumMenuTypeIDs.PARTICLE_SPAWNER, ParticleSpawnerScreenHandler::new, BlockPos.STREAM_CODEC); - public static MenuType COMPACTING_CHEST = registerExtended(SpectrumMenuTypeIDs.COMPACTING_CHEST, CompactingChestScreenHandler::new, BlockPos.STREAM_CODEC); - public static MenuType BLACK_HOLE_CHEST = registerExtended(SpectrumMenuTypeIDs.BLACK_HOLE_CHEST, BlackHoleChestScreenHandler::new, FilterConfigurable.ExtendedDataWithPos.STREAM_CODEC); - public static MenuType POTION_WORKSHOP = registerSimple(SpectrumMenuTypeIDs.POTION_WORKSHOP, PotionWorkshopScreenHandler::new); - public static MenuType COLOR_PICKER = registerExtended(SpectrumMenuTypeIDs.COLOR_PICKER, ColorPickerScreenHandler::new, ColorPickerScreenHandler.ScreenOpeningData.STREAM_CODEC); - public static MenuType INK_STORAGE = registerExtended(SpectrumMenuTypeIDs.INK_STORAGE, InkStorageScreenHandler::new, BlockPos.STREAM_CODEC); - public static MenuType TINTING_STATION = registerExtended(SpectrumMenuTypeIDs.TINTING_STATION, TintingStationScreenHandler::new, ColorPickerScreenHandler.ScreenOpeningData.STREAM_CODEC); - public static MenuType CINDERHEARTH = registerExtended(SpectrumMenuTypeIDs.CINDERHEARTH, CinderhearthScreenHandler::new, BlockPos.STREAM_CODEC); - public static MenuType FILTERING = registerExtended(SpectrumMenuTypeIDs.FILTERING, FilteringScreenHandler::new, FilterConfigurable.ExtendedData.STREAM_CODEC); - public static MenuType BAG_OF_HOLDING = registerSimple(SpectrumMenuTypeIDs.BAG_OF_HOLDING, BagOfHoldingScreenHandler::new); + public static MenuType PAINTBRUSH = registerSimple(SpectrumCommon.locate("paintbrush"), PaintbrushScreenHandler::new); + public static MenuType WORKSTAFF = registerSimple(SpectrumCommon.locate("workstaff"), WorkstaffScreenHandler::new); + public static MenuType PEDESTAL = registerExtended(SpectrumCommon.locate("pedestal"), PedestalScreenHandler::new, PedestalScreenHandler.ScreenOpeningData.PACKET_CODEC); + public static MenuType CRAFTING_TABLET = registerSimple(SpectrumCommon.locate("crafting_tablet"), CraftingTabletScreenHandler::new); + public static MenuType FABRICATION_CHEST = registerSimple(SpectrumCommon.locate("fabrication_chest"), FabricationChestScreenHandler::new); + public static MenuType BEDROCK_ANVIL = registerSimple(SpectrumCommon.locate("bedrock_anvil"), BedrockAnvilScreenHandler::new); + public static MenuType PARTICLE_SPAWNER = registerExtended(SpectrumCommon.locate("particle_spawner"), ParticleSpawnerScreenHandler::new, BlockPos.STREAM_CODEC); + public static MenuType COMPACTING_CHEST = registerExtended(SpectrumCommon.locate("compacting_chest"), CompactingChestScreenHandler::new, BlockPos.STREAM_CODEC); + public static MenuType BLACK_HOLE_CHEST = registerExtended(SpectrumCommon.locate("black_hole_chest"), BlackHoleChestScreenHandler::new, FilterConfigurable.ExtendedDataWithPos.STREAM_CODEC); + public static MenuType POTION_WORKSHOP = registerSimple(SpectrumCommon.locate("potion_workshop"), PotionWorkshopScreenHandler::new); + public static MenuType COLOR_PICKER = registerExtended(SpectrumCommon.locate("color_picker"), ColorPickerScreenHandler::new, ColorPickerScreenHandler.ScreenOpeningData.STREAM_CODEC); + public static MenuType INK_STORAGE = registerExtended(SpectrumCommon.locate("ink_storage"), InkStorageScreenHandler::new, BlockPos.STREAM_CODEC); + public static MenuType TINTING_STATION = registerExtended(SpectrumCommon.locate("tinting_station"), TintingStationScreenHandler::new, ColorPickerScreenHandler.ScreenOpeningData.STREAM_CODEC); + public static MenuType CINDERHEARTH = registerExtended(SpectrumCommon.locate("cinderhearth"), CinderhearthScreenHandler::new, BlockPos.STREAM_CODEC); + public static MenuType FILTERING = registerExtended(SpectrumCommon.locate("filtering"), FilteringScreenHandler::new, FilterConfigurable.ExtendedData.STREAM_CODEC); + public static MenuType BAG_OF_HOLDING = registerSimple(SpectrumCommon.locate("bag_of_holding"), BagOfHoldingScreenHandler::new); - public static MenuType GENERIC_TIER1_9X3 = registerSimple(SpectrumMenuTypeIDs.GENERIC_TIER1_9x3, GenericSpectrumContainerScreenHandler::createGeneric9x3_Tier1); - public static MenuType GENERIC_TIER2_9X3 = registerSimple(SpectrumMenuTypeIDs.GENERIC_TIER2_9x3, GenericSpectrumContainerScreenHandler::createGeneric9x3_Tier2); - public static MenuType GENERIC_TIER3_9X3 = registerSimple(SpectrumMenuTypeIDs.GENERIC_TIER3_9x3, GenericSpectrumContainerScreenHandler::createGeneric9x3_Tier3); + public static MenuType GENERIC_TIER1_9X3 = registerSimple(SpectrumCommon.locate("generic_tier1_9x3"), GenericSpectrumContainerScreenHandler::createGeneric9x3_Tier1); + public static MenuType GENERIC_TIER2_9X3 = registerSimple(SpectrumCommon.locate("generic_tier2_9x3"), GenericSpectrumContainerScreenHandler::createGeneric9x3_Tier2); + public static MenuType GENERIC_TIER3_9X3 = registerSimple(SpectrumCommon.locate("generic_tier3_9x3"), GenericSpectrumContainerScreenHandler::createGeneric9x3_Tier3); - public static MenuType GENERIC_TIER1_9X6 = registerSimple(SpectrumMenuTypeIDs.GENERIC_TIER1_9x6, GenericSpectrumContainerScreenHandler::createGeneric9x6_Tier1); - public static MenuType GENERIC_TIER2_9X6 = registerSimple(SpectrumMenuTypeIDs.GENERIC_TIER2_9x6, GenericSpectrumContainerScreenHandler::createGeneric9x6_Tier2); - public static MenuType GENERIC_TIER3_9X6 = registerSimple(SpectrumMenuTypeIDs.GENERIC_TIER3_9x6, GenericSpectrumContainerScreenHandler::createGeneric9x6_Tier3); + public static MenuType GENERIC_TIER1_9X6 = registerSimple(SpectrumCommon.locate("generic_tier1_9x6"), GenericSpectrumContainerScreenHandler::createGeneric9x6_Tier1); + public static MenuType GENERIC_TIER2_9X6 = registerSimple(SpectrumCommon.locate("generic_tier2_9x6"), GenericSpectrumContainerScreenHandler::createGeneric9x6_Tier2); + public static MenuType GENERIC_TIER3_9X6 = registerSimple(SpectrumCommon.locate("generic_tier3_9x6"), GenericSpectrumContainerScreenHandler::createGeneric9x6_Tier3); - public static MenuType GENERIC_TIER1_3X3 = registerSimple(SpectrumMenuTypeIDs.GENERIC_TIER1_3X3, Spectrum3x3ContainerScreenHandler::createTier1); - public static MenuType GENERIC_TIER2_3X3 = registerSimple(SpectrumMenuTypeIDs.GENERIC_TIER2_3X3, Spectrum3x3ContainerScreenHandler::createTier2); - public static MenuType GENERIC_TIER3_3X3 = registerSimple(SpectrumMenuTypeIDs.GENERIC_TIER3_3X3, Spectrum3x3ContainerScreenHandler::createTier3); + public static MenuType GENERIC_TIER1_3X3 = registerSimple(SpectrumCommon.locate("generic_tier1_3x3"), Spectrum3x3ContainerScreenHandler::createTier1); + public static MenuType GENERIC_TIER2_3X3 = registerSimple(SpectrumCommon.locate("generic_tier2_3x3"), Spectrum3x3ContainerScreenHandler::createTier2); + public static MenuType GENERIC_TIER3_3X3 = registerSimple(SpectrumCommon.locate("generic_tier3_3x3"), Spectrum3x3ContainerScreenHandler::createTier3); public static MenuType registerSimple(ResourceLocation id, MenuType.MenuSupplier factory) { MenuType type = new MenuType<>(factory, FeatureFlags.VANILLA_SET); From 8d0f62bff227b756ae52570ed02e6002beb52ced Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 25 May 2026 18:56:43 +0200 Subject: [PATCH 041/477] =?UTF-8?q?screen=20w=C3=B6rk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/ink/ColorPickerBlockEntity.java | 2 +- ...erBlockEntity.java => InkBlockEntity.java} | 4 +- .../blocks/ink/InkGeneratorBlockEntity.java | 6 +-- .../blocks/ink/TintingStationBlockEntity.java | 6 +-- .../inventories/CinderhearthScreen.java | 2 +- .../inventories/ColorPickerScreen.java | 4 +- .../inventories/ColorPickerScreenHandler.java | 8 +-- .../inventories/InkStorageScreen.java | 27 +++++++++- .../inventories/InkStorageScreenHandler.java | 39 +++++++++++---- ...torageWithColorSelectionScreenHandler.java | 42 ---------------- .../inventories/InkTransferScreen.java | 50 ------------------- .../inventories/SpectrumMenuTypes.java | 35 +++++++------ .../inventories/TintingStationScreen.java | 7 ++- .../TintingStationScreenHandler.java | 8 +-- .../widgets/ColorSelectionWidget.java | 6 +-- 15 files changed, 103 insertions(+), 143 deletions(-) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{BaseInkTransferBlockEntity.java => InkBlockEntity.java} (94%) delete mode 100644 src/main/java/de/dafuqs/spectrum/inventories/InkStorageWithColorSelectionScreenHandler.java delete mode 100644 src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntity.java index 59fac61f29..32e8b9b6d1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntity.java @@ -28,7 +28,7 @@ import java.util.*; -public class ColorPickerBlockEntity extends BaseInkTransferBlockEntity implements MenuProvider { +public class ColorPickerBlockEntity extends InkBlockEntity implements MenuProvider { public static final long TICKS_PER_CONVERSION = 5; public static final long INK_CAPACITY = (long) Math.pow(256, 2); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/InkBlockEntity.java similarity index 94% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/InkBlockEntity.java index 8997d4c163..e7ef24102f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/InkBlockEntity.java @@ -20,7 +20,7 @@ import java.util.*; -public abstract class BaseInkTransferBlockEntity extends RandomizableContainerBlockEntity implements PlayerOwned, InkStorageBlockEntity, MenuProvider { +public abstract class InkBlockEntity extends RandomizableContainerBlockEntity implements PlayerOwned, InkStorageBlockEntity, MenuProvider { public static final int INVENTORY_SIZE = 2; // input & output slots public static final int INPUT_SLOT_ID = 0; @@ -33,7 +33,7 @@ public abstract class BaseInkTransferBlockEntity extends R protected Optional> selectedColor = Optional.empty(); private UUID ownerUUID; - public BaseInkTransferBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos, BlockState blockState, T inkStorage) { + public InkBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos, BlockState blockState, T inkStorage) { super(blockEntityType, blockPos, blockState); this.inkStorage = inkStorage; } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlockEntity.java index 5ba13dc5f9..b72d8b4255 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlockEntity.java @@ -18,7 +18,7 @@ import java.util.*; -public abstract class InkGeneratorBlockEntity extends BaseInkTransferBlockEntity implements MenuProvider { +public abstract class InkGeneratorBlockEntity extends InkBlockEntity implements MenuProvider { public static final long RUN_LOGIC_EVERY_X_TICKS = 20; @@ -57,12 +57,12 @@ protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLoo @Override protected AbstractContainerMenu createMenu(int syncId, Inventory playerInventory) { - return new InkStorageScreenHandler(syncId, playerInventory, this.worldPosition); + return new InkStorageScreenHandler(syncId, playerInventory, this, this.selectedColor); } @Override public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { - BlockPos.STREAM_CODEC.encode(buffer, this.worldPosition); + InkStorageScreenHandler.ScreenOpeningData.STREAM_CODEC.encode(buffer, new InkStorageScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); } protected static boolean shouldTickLogic(Level world) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java index a6e4aee959..e74a55cf58 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java @@ -30,7 +30,7 @@ import java.util.*; -public class TintingStationBlockEntity extends BaseInkTransferBlockEntity implements MenuProvider { +public class TintingStationBlockEntity extends InkBlockEntity implements MenuProvider { public static final int INPUT_SLOT_ID = 0; public static final int OUTPUT_SLOT_ID = 1; @@ -210,12 +210,12 @@ protected Component getDefaultName() { @Override protected AbstractContainerMenu createMenu(int syncId, Inventory playerInventory) { - return new TintingStationScreenHandler(syncId, playerInventory, this, new InkStorageWithColorSelectionScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor).inkColor()); + return new TintingStationScreenHandler(syncId, playerInventory, this, this.selectedColor); } @Override public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { - InkStorageWithColorSelectionScreenHandler.ScreenOpeningData.STREAM_CODEC.encode(buffer, new InkStorageWithColorSelectionScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); + InkStorageScreenHandler.ScreenOpeningData.STREAM_CODEC.encode(buffer, new InkStorageScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java index 5fce144cf1..e8e687467d 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java @@ -36,7 +36,7 @@ protected void renderLabels(GuiGraphics drawContext, int mouseX, int mouseY) { Component title = this.title; drawContext.drawString(this.font, title, titleX, titleY, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); - drawContext.drawString(this.font, this.playerInventoryTitle, InkStorageWithColorSelectionScreenHandler.PLAYER_INVENTORY_START_X, InkStorageWithColorSelectionScreenHandler.PLAYER_INVENTORY_START_Y - 10, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); + drawContext.drawString(this.font, this.playerInventoryTitle, InkStorageScreenHandler.PLAYER_INVENTORY_START_X, InkStorageScreenHandler.PLAYER_INVENTORY_START_Y - 10, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java index b7af1c3a36..d368ae0609 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java @@ -1,15 +1,15 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.inventories.widgets.*; import de.dafuqs.spectrum.inventories.widgets.ink.*; -import net.minecraft.client.*; import net.minecraft.client.gui.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; import org.jetbrains.annotations.*; -public class ColorPickerScreen extends InkTransferScreen { +public class ColorPickerScreen extends InkStorageScreen { protected static final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java index 6011095f78..db3b7cf344 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java @@ -9,16 +9,16 @@ import java.util.*; -public class ColorPickerScreenHandler extends InkStorageWithColorSelectionScreenHandler { +public class ColorPickerScreenHandler extends InkStorageScreenHandler { // clientside public ColorPickerScreenHandler(int syncId, Inventory playerInventory, RegistryFriendlyByteBuf buf) { - super(SpectrumMenuTypes.COLOR_PICKER, syncId, playerInventory, ScreenOpeningData.STREAM_CODEC.decode(buf)); + super(SpectrumMenuTypes.COLOR_PICKER, syncId, playerInventory, ScreenOpeningData.STREAM_CODEC.decode(buf), 2); } // serverside - public ColorPickerScreenHandler(int syncId, Inventory playerInventory, BaseInkTransferBlockEntity blockEntity, Optional> selectedColor) { - super(SpectrumMenuTypes.COLOR_PICKER, syncId, playerInventory, blockEntity, selectedColor); + public ColorPickerScreenHandler(int syncId, Inventory playerInventory, ColorPickerBlockEntity blockEntity, Optional> selectedColor) { + super(SpectrumMenuTypes.COLOR_PICKER, syncId, playerInventory, blockEntity, selectedColor, 2); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java index a8ca53564e..b83eb85710 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java @@ -18,10 +18,11 @@ import java.util.*; import java.util.function.*; -public class InkStorageScreen extends AbstractContainerScreen { +public class InkStorageScreen extends AbstractContainerScreen implements Consumer>> { protected static final ResourceLocation DEFAULT_BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); + protected ColorSelectionWidget colorSelectionWidget; protected final ResourceLocation background; public InkStorageScreen(T handler, Inventory playerInventory, Component title) { @@ -34,6 +35,14 @@ public InkStorageScreen(T handler, Inventory playerInventory, Component title, R this.imageHeight = 166; } + @Override + protected void init() { + super.init(); + this.colorSelectionWidget = new ColorSelectionWidget(getGuiLeft() + 113, getGuiTop() + 55, getGuiLeft() + 139, getGuiTop() + 25, this.menu.getBlockEntity()); + this.colorSelectionWidget.setChangedListener(this); + addRenderableWidget(this.colorSelectionWidget); + } + @Override protected void renderLabels(GuiGraphics drawContext, int mouseX, int mouseY) { int titleX = (imageWidth - font.width(title)) / 2; @@ -54,4 +63,20 @@ public void render(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, flo renderTooltip(guiGraphics, mouseX, mouseY); } + @Override + protected void renderTooltip(@NotNull GuiGraphics guiGraphics, int x, int y) { + super.renderTooltip(guiGraphics, x, y); + + if (this.colorSelectionWidget.isMouseOver(x, y)) { + this.colorSelectionWidget.drawMouseoverTooltip(guiGraphics, x, y); + } + } + + @Override + public void accept(Optional> inkColor) { + InkBlockEntity inkBlockEntity = this.menu.getBlockEntity(); + inkBlockEntity.setSelectedColor(inkColor); + PacketDistributor.sendToServer(new InkColorSelectedC2SPayload(inkColor)); + } + } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreenHandler.java index 80c6f4223f..a2d9068257 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreenHandler.java @@ -1,10 +1,14 @@ package de.dafuqs.spectrum.inventories; +import de.dafuqs.spectrum.api.block.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.inventories.slots.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.network.*; +import net.minecraft.network.codec.*; import net.minecraft.server.level.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.inventory.*; @@ -12,35 +16,45 @@ import net.minecraft.world.level.*; import javax.annotation.*; +import java.util.*; -public class InkStorageScreenHandler extends AbstractContainerMenu { +public class InkStorageScreenHandler extends AbstractContainerMenu implements InkColorSelectedPacketReceiver { + + public record ScreenOpeningData(BlockPos pos, Optional> inkColor) { + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + BlockPos.STREAM_CODEC, ScreenOpeningData::pos, + ByteBufCodecs.optional(ByteBufCodecs.holderRegistry(SpectrumRegistryKeys.INK_COLOR)), ScreenOpeningData::inkColor, + ScreenOpeningData::new + ); + } public static final int PLAYER_INVENTORY_START_X = 8; public static final int PLAYER_INVENTORY_START_Y = 84; protected final Level world; public final ServerPlayer serverPlayer; - protected BaseInkTransferBlockEntity blockEntity; + protected InkBlockEntity blockEntity; protected int inventorySize; // clientside public InkStorageScreenHandler(int syncId, Inventory playerInventory, RegistryFriendlyByteBuf buf) { - this(SpectrumMenuTypes.INK_STORAGE, syncId, playerInventory, BlockPos.STREAM_CODEC.decode(buf), 1); + this(SpectrumMenuTypes.INK_STORAGE, syncId, playerInventory, ScreenOpeningData.STREAM_CODEC.decode(buf), 1); } - // serverside - public InkStorageScreenHandler(int syncId, Inventory playerInventory, BlockPos pos) { - this(SpectrumMenuTypes.INK_STORAGE, syncId, playerInventory, pos, 1); + protected InkStorageScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, ScreenOpeningData screenOpeningData, int inventorySize) { + this(menuType, syncId, playerInventory, (InkBlockEntity) playerInventory.player.level().getBlockEntity(screenOpeningData.pos()), screenOpeningData.inkColor, inventorySize); } - protected InkStorageScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, BlockPos pos, int inventorySize) { - this(menuType, syncId, playerInventory, (BaseInkTransferBlockEntity) playerInventory.player.level().getBlockEntity(pos), inventorySize); + // serverside + public InkStorageScreenHandler(int syncId, Inventory playerInventory, InkBlockEntity blockEntity, Optional> selectedColor) { + this(SpectrumMenuTypes.INK_STORAGE, syncId, playerInventory, blockEntity, selectedColor, 1); } - protected InkStorageScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, BaseInkTransferBlockEntity blockEntity, int inventorySize) { + protected InkStorageScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, InkBlockEntity blockEntity, Optional> selectedColor, int inventorySize) { super(menuType, syncId); this.blockEntity = blockEntity; + this.blockEntity.setSelectedColor(selectedColor); this.serverPlayer = playerInventory.player instanceof ServerPlayer serverPlayerEntity ? serverPlayerEntity : null; this.world = playerInventory.player.level(); @@ -70,7 +84,7 @@ public void addBlockEntitySlots() { this.addSlot(new InkStorageSlot(blockEntity, 0, 133, 33)); } - public BaseInkTransferBlockEntity getBlockEntity() { + public InkBlockEntity getBlockEntity() { return this.blockEntity; } @@ -119,4 +133,9 @@ public void broadcastChanges() { } } + @Override + public void onInkColorSelectedPacket(Optional> inkColor) { + this.blockEntity.setSelectedColor(inkColor); + } + } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageWithColorSelectionScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageWithColorSelectionScreenHandler.java deleted file mode 100644 index 8eb7b86150..0000000000 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageWithColorSelectionScreenHandler.java +++ /dev/null @@ -1,42 +0,0 @@ -package de.dafuqs.spectrum.inventories; - -import de.dafuqs.spectrum.api.block.*; -import de.dafuqs.spectrum.api.ink.color.*; -import de.dafuqs.spectrum.blocks.ink.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.core.*; -import net.minecraft.network.*; -import net.minecraft.network.codec.*; -import net.minecraft.world.entity.player.*; -import net.minecraft.world.inventory.*; - -import javax.annotation.*; -import java.util.*; - -public abstract class InkStorageWithColorSelectionScreenHandler extends InkStorageScreenHandler implements InkColorSelectedPacketReceiver { - - public record ScreenOpeningData(BlockPos pos, Optional> inkColor) { - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - BlockPos.STREAM_CODEC, ScreenOpeningData::pos, - ByteBufCodecs.optional(ByteBufCodecs.holderRegistry(SpectrumRegistryKeys.INK_COLOR)), ScreenOpeningData::inkColor, - ScreenOpeningData::new - ); - } - - // clientside - protected InkStorageWithColorSelectionScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, ScreenOpeningData screenOpeningData) { - this(menuType, syncId, playerInventory, (BaseInkTransferBlockEntity) playerInventory.player.level().getBlockEntity(screenOpeningData.pos()), screenOpeningData.inkColor()); - } - - // serverside - protected InkStorageWithColorSelectionScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, BaseInkTransferBlockEntity blockEntity, Optional> selectedColor) { - super(menuType, syncId, playerInventory, blockEntity, 2); - this.blockEntity.setSelectedColor(selectedColor); - } - - @Override - public void onInkColorSelectedPacket(Optional> inkColor) { - this.blockEntity.setSelectedColor(inkColor); - } - -} diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java deleted file mode 100644 index f281b4e25d..0000000000 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkTransferScreen.java +++ /dev/null @@ -1,50 +0,0 @@ -package de.dafuqs.spectrum.inventories; - -import de.dafuqs.spectrum.api.ink.color.*; -import de.dafuqs.spectrum.blocks.ink.*; -import de.dafuqs.spectrum.inventories.widgets.*; -import de.dafuqs.spectrum.networking.c2s_payloads.*; -import net.minecraft.client.gui.*; -import net.minecraft.core.*; -import net.minecraft.network.chat.*; -import net.minecraft.resources.*; -import net.minecraft.world.entity.player.*; -import net.neoforged.neoforge.network.*; -import org.jetbrains.annotations.*; - -import java.util.*; -import java.util.function.*; - -public abstract class InkTransferScreen extends InkStorageScreen implements Consumer>> { - - protected ColorSelectionWidget colorSelectionWidget; - - public InkTransferScreen(T handler, Inventory playerInventory, Component title, ResourceLocation background) { - super(handler, playerInventory, title, background); - } - - @Override - protected void init() { - super.init(); - this.colorSelectionWidget = new ColorSelectionWidget(getGuiLeft() + 113, getGuiTop() + 55, getGuiLeft() + 139, getGuiTop() + 25, this.menu.getBlockEntity()); - this.colorSelectionWidget.setChangedListener(this); - addRenderableWidget(this.colorSelectionWidget); - } - - @Override - protected void renderTooltip(@NotNull GuiGraphics guiGraphics, int x, int y) { - super.renderTooltip(guiGraphics, x, y); - - if (this.colorSelectionWidget.isMouseOver(x, y)) { - this.colorSelectionWidget.drawMouseoverTooltip(guiGraphics, x, y); - } - } - - @Override - public void accept(Optional> inkColor) { - BaseInkTransferBlockEntity colorPicker = this.menu.getBlockEntity(); - colorPicker.setSelectedColor(inkColor); - PacketDistributor.sendToServer(new InkColorSelectedC2SPayload(inkColor)); - } - -} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java index 05e619e59e..42adc88778 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java @@ -22,29 +22,30 @@ public class SpectrumMenuTypes { public static MenuType PAINTBRUSH = registerSimple(SpectrumCommon.locate("paintbrush"), PaintbrushScreenHandler::new); public static MenuType WORKSTAFF = registerSimple(SpectrumCommon.locate("workstaff"), WorkstaffScreenHandler::new); - public static MenuType PEDESTAL = registerExtended(SpectrumCommon.locate("pedestal"), PedestalScreenHandler::new, PedestalScreenHandler.ScreenOpeningData.PACKET_CODEC); + public static MenuType PEDESTAL = registerExtended(SpectrumCommon.locate("pedestal"), PedestalScreenHandler::new); public static MenuType CRAFTING_TABLET = registerSimple(SpectrumCommon.locate("crafting_tablet"), CraftingTabletScreenHandler::new); public static MenuType FABRICATION_CHEST = registerSimple(SpectrumCommon.locate("fabrication_chest"), FabricationChestScreenHandler::new); public static MenuType BEDROCK_ANVIL = registerSimple(SpectrumCommon.locate("bedrock_anvil"), BedrockAnvilScreenHandler::new); - public static MenuType PARTICLE_SPAWNER = registerExtended(SpectrumCommon.locate("particle_spawner"), ParticleSpawnerScreenHandler::new, BlockPos.STREAM_CODEC); - public static MenuType COMPACTING_CHEST = registerExtended(SpectrumCommon.locate("compacting_chest"), CompactingChestScreenHandler::new, BlockPos.STREAM_CODEC); - public static MenuType BLACK_HOLE_CHEST = registerExtended(SpectrumCommon.locate("black_hole_chest"), BlackHoleChestScreenHandler::new, FilterConfigurable.ExtendedDataWithPos.STREAM_CODEC); + public static MenuType PARTICLE_SPAWNER = registerExtended(SpectrumCommon.locate("particle_spawner"), ParticleSpawnerScreenHandler::new); + public static MenuType COMPACTING_CHEST = registerExtended(SpectrumCommon.locate("compacting_chest"), CompactingChestScreenHandler::new); + public static MenuType BLACK_HOLE_CHEST = registerExtended(SpectrumCommon.locate("black_hole_chest"), BlackHoleChestScreenHandler::new); public static MenuType POTION_WORKSHOP = registerSimple(SpectrumCommon.locate("potion_workshop"), PotionWorkshopScreenHandler::new); - public static MenuType COLOR_PICKER = registerExtended(SpectrumCommon.locate("color_picker"), ColorPickerScreenHandler::new, ColorPickerScreenHandler.ScreenOpeningData.STREAM_CODEC); - public static MenuType INK_STORAGE = registerExtended(SpectrumCommon.locate("ink_storage"), InkStorageScreenHandler::new, BlockPos.STREAM_CODEC); - public static MenuType TINTING_STATION = registerExtended(SpectrumCommon.locate("tinting_station"), TintingStationScreenHandler::new, ColorPickerScreenHandler.ScreenOpeningData.STREAM_CODEC); - public static MenuType CINDERHEARTH = registerExtended(SpectrumCommon.locate("cinderhearth"), CinderhearthScreenHandler::new, BlockPos.STREAM_CODEC); - public static MenuType FILTERING = registerExtended(SpectrumCommon.locate("filtering"), FilteringScreenHandler::new, FilterConfigurable.ExtendedData.STREAM_CODEC); + public static MenuType FILTERING = registerExtended(SpectrumCommon.locate("filtering"), FilteringScreenHandler::new); public static MenuType BAG_OF_HOLDING = registerSimple(SpectrumCommon.locate("bag_of_holding"), BagOfHoldingScreenHandler::new); + // Ink + public static MenuType INK_STORAGE = registerExtended(SpectrumCommon.locate("ink_storage"), InkStorageScreenHandler::new); + public static MenuType COLOR_PICKER = registerExtended(SpectrumCommon.locate("color_picker"), ColorPickerScreenHandler::new); + public static MenuType TINTING_STATION = registerExtended(SpectrumCommon.locate("tinting_station"), TintingStationScreenHandler::new); + public static MenuType CINDERHEARTH = registerExtended(SpectrumCommon.locate("cinderhearth"), CinderhearthScreenHandler::new); + + // Generic public static MenuType GENERIC_TIER1_9X3 = registerSimple(SpectrumCommon.locate("generic_tier1_9x3"), GenericSpectrumContainerScreenHandler::createGeneric9x3_Tier1); public static MenuType GENERIC_TIER2_9X3 = registerSimple(SpectrumCommon.locate("generic_tier2_9x3"), GenericSpectrumContainerScreenHandler::createGeneric9x3_Tier2); public static MenuType GENERIC_TIER3_9X3 = registerSimple(SpectrumCommon.locate("generic_tier3_9x3"), GenericSpectrumContainerScreenHandler::createGeneric9x3_Tier3); - public static MenuType GENERIC_TIER1_9X6 = registerSimple(SpectrumCommon.locate("generic_tier1_9x6"), GenericSpectrumContainerScreenHandler::createGeneric9x6_Tier1); public static MenuType GENERIC_TIER2_9X6 = registerSimple(SpectrumCommon.locate("generic_tier2_9x6"), GenericSpectrumContainerScreenHandler::createGeneric9x6_Tier2); public static MenuType GENERIC_TIER3_9X6 = registerSimple(SpectrumCommon.locate("generic_tier3_9x6"), GenericSpectrumContainerScreenHandler::createGeneric9x6_Tier3); - public static MenuType GENERIC_TIER1_3X3 = registerSimple(SpectrumCommon.locate("generic_tier1_3x3"), Spectrum3x3ContainerScreenHandler::createTier1); public static MenuType GENERIC_TIER2_3X3 = registerSimple(SpectrumCommon.locate("generic_tier2_3x3"), Spectrum3x3ContainerScreenHandler::createTier2); public static MenuType GENERIC_TIER3_3X3 = registerSimple(SpectrumCommon.locate("generic_tier3_3x3"), Spectrum3x3ContainerScreenHandler::createTier3); @@ -55,7 +56,7 @@ public static MenuType registerSimple(Resou return type; } - public static MenuType registerExtended(ResourceLocation id, IContainerFactory factory, StreamCodec packetCodec) { + public static MenuType registerExtended(ResourceLocation id, IContainerFactory factory) { MenuType type = IMenuTypeExtension.create(factory); REGISTRAR.register(id.getPath(), () -> type); return type; @@ -68,7 +69,6 @@ public static void register(IEventBus eventBus) { public static void registerClient(RegisterMenuScreensEvent event) { event.register(SpectrumMenuTypes.PAINTBRUSH, PaintbrushScreen::new); event.register(SpectrumMenuTypes.WORKSTAFF, WorkstaffScreen::new); - event.register(SpectrumMenuTypes.PEDESTAL, PedestalScreen::new); event.register(SpectrumMenuTypes.CRAFTING_TABLET, CraftingTabletScreen::new); event.register(SpectrumMenuTypes.FABRICATION_CHEST, FabricationChestScreen::new); @@ -77,13 +77,16 @@ public static void registerClient(RegisterMenuScreensEvent event) { event.register(SpectrumMenuTypes.COMPACTING_CHEST, CompactingChestScreen::new); event.register(SpectrumMenuTypes.BLACK_HOLE_CHEST, BlackHoleChestScreen::new); event.register(SpectrumMenuTypes.POTION_WORKSHOP, PotionWorkshopScreen::new); - event.register(SpectrumMenuTypes.COLOR_PICKER, ColorPickerScreen::new); + event.register(SpectrumMenuTypes.FILTERING, FilteringScreen::new); + event.register(SpectrumMenuTypes.BAG_OF_HOLDING, ContainerScreen::new); + + // Ink event.register(SpectrumMenuTypes.INK_STORAGE, InkStorageScreen::new); + event.register(SpectrumMenuTypes.COLOR_PICKER, ColorPickerScreen::new); event.register(SpectrumMenuTypes.TINTING_STATION, TintingStationScreen::new); event.register(SpectrumMenuTypes.CINDERHEARTH, CinderhearthScreen::new); - event.register(SpectrumMenuTypes.FILTERING, FilteringScreen::new); - event.register(SpectrumMenuTypes.BAG_OF_HOLDING, ContainerScreen::new); + // Generic event.register(SpectrumMenuTypes.GENERIC_TIER1_9X3, SpectrumGenericContainerScreen::new); event.register(SpectrumMenuTypes.GENERIC_TIER2_9X3, SpectrumGenericContainerScreen::new); event.register(SpectrumMenuTypes.GENERIC_TIER3_9X3, SpectrumGenericContainerScreen::new); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java index feb3598c41..c39fcb09c8 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java @@ -1,14 +1,19 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.inventories.widgets.ink.*; import net.minecraft.client.gui.*; +import net.minecraft.core.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; import org.jetbrains.annotations.*; -public class TintingStationScreen extends InkTransferScreen { +import java.util.*; +import java.util.function.*; + +public class TintingStationScreen extends InkStorageScreen { protected static final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/tinting_station.png"); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java index 322e8419cb..493506a816 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java @@ -10,16 +10,16 @@ import java.util.*; -public class TintingStationScreenHandler extends InkStorageWithColorSelectionScreenHandler { +public class TintingStationScreenHandler extends InkStorageScreenHandler { // clientside public TintingStationScreenHandler(int syncId, Inventory playerInventory, RegistryFriendlyByteBuf buf) { - super(SpectrumMenuTypes.TINTING_STATION, syncId, playerInventory, ScreenOpeningData.STREAM_CODEC.decode(buf)); + super(SpectrumMenuTypes.TINTING_STATION, syncId, playerInventory, ScreenOpeningData.STREAM_CODEC.decode(buf), 2); } // serverside - public TintingStationScreenHandler(int syncId, Inventory playerInventory, BaseInkTransferBlockEntity blockEntity, Optional> selectedColor) { - super(SpectrumMenuTypes.TINTING_STATION, syncId, playerInventory, blockEntity, selectedColor); + public TintingStationScreenHandler(int syncId, Inventory playerInventory, TintingStationBlockEntity blockEntity, Optional> selectedColor) { + super(SpectrumMenuTypes.TINTING_STATION, syncId, playerInventory, blockEntity, selectedColor, 2); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java index e99c88c4b1..0f424c6dc4 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java @@ -21,7 +21,7 @@ public class ColorSelectionWidget extends AbstractWidget { - protected final BaseInkTransferBlockEntity blockEntity; + protected final InkBlockEntity blockEntity; @Nullable private Consumer>> changedListener; @@ -31,11 +31,11 @@ public class ColorSelectionWidget extends AbstractWidget { final int selectedIndexX; final int selectedIndexY; - public ColorSelectionWidget(int x, int y, int selectedIndexX, int selectedIndexY, BaseInkTransferBlockEntity blockEntity) { + public ColorSelectionWidget(int x, int y, int selectedIndexX, int selectedIndexY, InkBlockEntity blockEntity) { this(x, y, selectedIndexX, selectedIndexY, blockEntity, blockEntity.getInkStorage().acceptedColors()); } - public ColorSelectionWidget(int x, int y, int selectedIndexX, int selectedIndexY, BaseInkTransferBlockEntity blockEntity, Iterable availableColors) { + public ColorSelectionWidget(int x, int y, int selectedIndexX, int selectedIndexY, InkBlockEntity blockEntity, Iterable availableColors) { super(x, y, 56, 14, Component.literal("")); this.blockEntity = blockEntity; this.selectedIndexX = selectedIndexX; From e7ed7fdb77a0dffecab925e0704a5712fa185ce9 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 25 May 2026 21:51:18 +0200 Subject: [PATCH 042/477] update gradle --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ca025c83a7..aaaabb3cb9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.4-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 9bd17bb7b409b53a080517358aa797b98b18a900 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 25 May 2026 21:51:43 +0200 Subject: [PATCH 043/477] screeeeens --- .../spectrum/inventories/InkStorageScreen.java | 14 +++++++------- .../spectrum/inventories/SpectrumMenuTypes.java | 4 +++- .../spectrum/registries/SpectrumItemGroups.java | 9 +++++++-- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java index b83eb85710..7da582e114 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java @@ -63,6 +63,13 @@ public void render(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, flo renderTooltip(guiGraphics, mouseX, mouseY); } + @Override + public void accept(Optional> inkColor) { + InkBlockEntity inkBlockEntity = this.menu.getBlockEntity(); + inkBlockEntity.setSelectedColor(inkColor); + PacketDistributor.sendToServer(new InkColorSelectedC2SPayload(inkColor)); + } + @Override protected void renderTooltip(@NotNull GuiGraphics guiGraphics, int x, int y) { super.renderTooltip(guiGraphics, x, y); @@ -72,11 +79,4 @@ protected void renderTooltip(@NotNull GuiGraphics guiGraphics, int x, int y) { } } - @Override - public void accept(Optional> inkColor) { - InkBlockEntity inkBlockEntity = this.menu.getBlockEntity(); - inkBlockEntity.setSelectedColor(inkColor); - PacketDistributor.sendToServer(new InkColorSelectedC2SPayload(inkColor)); - } - } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java index 42adc88778..c940ed7996 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java @@ -2,6 +2,7 @@ import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.block.*; +import net.minecraft.client.gui.screens.*; import net.minecraft.client.gui.screens.inventory.*; import net.minecraft.core.*; import net.minecraft.core.registries.*; @@ -81,7 +82,8 @@ public static void registerClient(RegisterMenuScreensEvent event) { event.register(SpectrumMenuTypes.BAG_OF_HOLDING, ContainerScreen::new); // Ink - event.register(SpectrumMenuTypes.INK_STORAGE, InkStorageScreen::new); + MenuScreens.ScreenConstructor> inkStorageScreenConstructor = InkStorageScreen::new; // tricking generics with this simple trick + event.register(SpectrumMenuTypes.INK_STORAGE, inkStorageScreenConstructor); event.register(SpectrumMenuTypes.COLOR_PICKER, ColorPickerScreen::new); event.register(SpectrumMenuTypes.TINTING_STATION, TintingStationScreen::new); event.register(SpectrumMenuTypes.CINDERHEARTH, CinderhearthScreen::new); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java index 2e47fbc5b4..ebbe772933 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java @@ -226,11 +226,16 @@ public static void registerSubTabs() { entries.accept(SpectrumBlocks.ITEM_ROUNDEL); entries.accept(SpectrumBlocks.POTION_WORKSHOP); entries.accept(SpectrumBlocks.SPIRIT_INSTILLER); - entries.accept(SpectrumBlocks.CRYSTALLARIEUM); - entries.accept(SpectrumBlocks.CINDERHEARTH); entries.accept(SpectrumBlocks.CRYSTAL_APOTHECARY); + entries.accept(SpectrumBlocks.COLOR_PICKER); + entries.accept(SpectrumBlocks.DAWNBRUSH); + entries.accept(SpectrumBlocks.TWILL); + entries.accept(SpectrumBlocks.VANTACLAST); + entries.accept(SpectrumBlocks.TINTING_STATION); + entries.accept(SpectrumBlocks.CINDERHEARTH); + entries.accept(SpectrumBlocks.CRYSTALLARIEUM); entries.accept(SpectrumBlocks.UPGRADE_SPEED); entries.accept(SpectrumBlocks.UPGRADE_SPEED2); From 39b153eee6f08b76b30b68f5a254f6ac9838b0ca Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 1 Jun 2026 22:10:01 +0200 Subject: [PATCH 044/477] generify all the ink things --- .../de/dafuqs/spectrum/api/ink/InkAmount.java | 2 +- ...nkTransferBlock.java => BaseInkBlock.java} | 13 +- ...ockEntity.java => BaseInkBlockEntity.java} | 4 +- .../spectrum/blocks/ink/ColorPickerBlock.java | 12 +- .../blocks/ink/ColorPickerBlockEntity.java | 4 +- .../spectrum/blocks/ink/DawnbrushBlock.java | 7 + .../blocks/ink/DawnbrushBlockEntity.java | 4 + .../blocks/ink/InkGeneratorBlock.java | 14 +- .../blocks/ink/InkGeneratorBlockEntity.java | 6 +- .../blocks/ink/TintingStationBlock.java | 12 +- .../blocks/ink/TintingStationBlockEntity.java | 4 +- .../spectrum/blocks/ink/TwillBlockEntity.java | 4 +- .../spectrum/blocks/ink/VantaclastBlock.java | 7 + .../spectrum/inventories/BaseInkScreen.java | 82 ++++++++++ .../inventories/BaseInkScreenHandler.java | 141 ++++++++++++++++++ .../inventories/CinderhearthScreen.java | 2 +- .../inventories/ColorPickerScreen.java | 3 +- .../inventories/ColorPickerScreenHandler.java | 4 +- .../inventories/InkStorageScreen.java | 71 +++------ .../inventories/InkStorageScreenHandler.java | 123 +-------------- .../inventories/SpectrumMenuTypes.java | 7 +- .../inventories/TintingStationScreen.java | 7 +- .../TintingStationScreenHandler.java | 2 +- .../widgets/ColorSelectionWidget.java | 6 +- 24 files changed, 299 insertions(+), 242 deletions(-) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{BaseInkTransferBlock.java => BaseInkBlock.java} (84%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{InkBlockEntity.java => BaseInkBlockEntity.java} (94%) create mode 100644 src/main/java/de/dafuqs/spectrum/inventories/BaseInkScreen.java create mode 100644 src/main/java/de/dafuqs/spectrum/inventories/BaseInkScreenHandler.java diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/InkAmount.java b/src/main/java/de/dafuqs/spectrum/api/ink/InkAmount.java index ed85a2bd5b..583d35d9dd 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/InkAmount.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/InkAmount.java @@ -6,7 +6,7 @@ import io.netty.buffer.*; import net.minecraft.network.codec.*; -public record InkAmount(InkColor color, long amount) { + public record InkAmount(InkColor color, long amount) { public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group( InkColor.CODEC.fieldOf("color").forGetter(InkAmount::color), diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlock.java similarity index 84% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlock.java index 7e782599ab..f262e7c182 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkTransferBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlock.java @@ -8,16 +8,17 @@ import net.minecraft.world.item.context.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.pathfinder.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -public abstract class BaseInkTransferBlock extends HorizontalDirectionalBlock implements EntityBlock { +public abstract class BaseInkBlock extends HorizontalDirectionalBlock implements EntityBlock { protected static final VoxelShape SHAPE = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 13.0D, 15.0D); - public BaseInkTransferBlock(Properties settings) { + public BaseInkBlock(Properties settings) { super(settings); } @@ -56,7 +57,13 @@ public InteractionResult useWithoutItem(BlockState state, Level world, BlockPos } } - protected abstract void openScreen(Level world, BlockPos pos, Player player); + protected void openScreen(Level world, BlockPos pos, Player player) { + BlockEntity blockEntity = world.getBlockEntity(pos); + if (blockEntity instanceof BaseInkBlockEntity inkBlockEntity) { + inkBlockEntity.setOwner(player); + player.openMenu(inkBlockEntity); + } + } @Override public boolean hasAnalogOutputSignal(BlockState state) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/InkBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlockEntity.java similarity index 94% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/InkBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlockEntity.java index e7ef24102f..714883fd2b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/InkBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlockEntity.java @@ -20,7 +20,7 @@ import java.util.*; -public abstract class InkBlockEntity extends RandomizableContainerBlockEntity implements PlayerOwned, InkStorageBlockEntity, MenuProvider { +public abstract class BaseInkBlockEntity extends RandomizableContainerBlockEntity implements PlayerOwned, InkStorageBlockEntity, MenuProvider { public static final int INVENTORY_SIZE = 2; // input & output slots public static final int INPUT_SLOT_ID = 0; @@ -33,7 +33,7 @@ public abstract class InkBlockEntity extends RandomizableC protected Optional> selectedColor = Optional.empty(); private UUID ownerUUID; - public InkBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos, BlockState blockState, T inkStorage) { + public BaseInkBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos, BlockState blockState, T inkStorage) { super(blockEntityType, blockPos, blockState); this.inkStorage = inkStorage; } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlock.java index 5ced2ec9ed..f18e839667 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlock.java @@ -6,7 +6,6 @@ import net.minecraft.*; import net.minecraft.core.*; import net.minecraft.network.chat.*; -import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.entity.*; @@ -15,7 +14,7 @@ import java.util.*; -public class ColorPickerBlock extends BaseInkTransferBlock { +public class ColorPickerBlock extends BaseInkBlock { public static final MapCodec CODEC = simpleCodec(ColorPickerBlock::new); @@ -45,13 +44,4 @@ public BlockEntityTicker getTicker(Level world, Block return world.isClientSide ? null : Support.checkType(type, SpectrumBlockEntities.COLOR_PICKER.get(), ColorPickerBlockEntity::serverTick); } - @Override - protected void openScreen(Level world, BlockPos pos, Player player) { - BlockEntity blockEntity = world.getBlockEntity(pos); - if (blockEntity instanceof ColorPickerBlockEntity colorPickerBlockEntity) { - colorPickerBlockEntity.setOwner(player); - player.openMenu(colorPickerBlockEntity); - } - } - } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntity.java index 32e8b9b6d1..90eaa98647 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntity.java @@ -28,7 +28,7 @@ import java.util.*; -public class ColorPickerBlockEntity extends InkBlockEntity implements MenuProvider { +public class ColorPickerBlockEntity extends BaseInkBlockEntity implements MenuProvider { public static final long TICKS_PER_CONVERSION = 5; public static final long INK_CAPACITY = (long) Math.pow(256, 2); @@ -79,7 +79,7 @@ protected Component getDefaultName() { @Override protected AbstractContainerMenu createMenu(int syncId, Inventory playerInventory) { - return new ColorPickerScreenHandler(syncId, playerInventory, playerInventory.player.level().getBlockEntity(getBlockPos(), SpectrumBlockEntities.COLOR_PICKER.get()).orElseThrow(), this.selectedColor); + return new ColorPickerScreenHandler(syncId, playerInventory, this, this.selectedColor); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlock.java index 817afdf1b7..da14823695 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlock.java @@ -12,6 +12,7 @@ import net.minecraft.world.level.block.state.*; import org.jetbrains.annotations.*; +import javax.annotation.Nullable; import java.util.*; public class DawnbrushBlock extends InkGeneratorBlock { @@ -37,5 +38,11 @@ public void appendHoverText(ItemStack stack, Item.TooltipContext context, List BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + return createInkGeneratorTicker(level, blockEntityType, SpectrumBlockEntities.DAWNBRUSH.get()); + } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java index 6493dd82d3..8d0bb8824c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java @@ -1,5 +1,7 @@ package de.dafuqs.spectrum.blocks.ink; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.network.chat.*; @@ -7,6 +9,8 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; +import java.util.*; + public class DawnbrushBlockEntity extends InkGeneratorBlockEntity { public DawnbrushBlockEntity(BlockPos blockPos, BlockState blockState) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlock.java index 45444d1f68..f67f68eaae 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlock.java @@ -1,14 +1,11 @@ package de.dafuqs.spectrum.blocks.ink; import de.dafuqs.spectrum.helpers.*; -import net.minecraft.core.*; -import net.minecraft.world.entity.player.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.entity.*; -import net.minecraft.world.level.block.state.*; import org.jetbrains.annotations.*; -public abstract class InkGeneratorBlock extends BaseInkTransferBlock { +public abstract class InkGeneratorBlock extends BaseInkBlock { public InkGeneratorBlock(Properties settings) { super(settings); @@ -19,13 +16,4 @@ protected static BlockEntityTicker createInkGenerator return level.isClientSide ? null : Support.checkType(serverType, clientType, InkGeneratorBlockEntity::serverTick); } - @Override - protected void openScreen(Level world, BlockPos pos, Player player) { - BlockEntity blockEntity = world.getBlockEntity(pos); - if (blockEntity instanceof InkGeneratorBlockEntity inkGeneratorBlockEntity) { - inkGeneratorBlockEntity.setOwner(player); - player.openMenu(inkGeneratorBlockEntity); - } - } - } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlockEntity.java index b72d8b4255..517e0e73f8 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlockEntity.java @@ -18,7 +18,7 @@ import java.util.*; -public abstract class InkGeneratorBlockEntity extends InkBlockEntity implements MenuProvider { +public abstract class InkGeneratorBlockEntity extends BaseInkBlockEntity implements MenuProvider { public static final long RUN_LOGIC_EVERY_X_TICKS = 20; @@ -57,12 +57,12 @@ protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLoo @Override protected AbstractContainerMenu createMenu(int syncId, Inventory playerInventory) { - return new InkStorageScreenHandler(syncId, playerInventory, this, this.selectedColor); + return new BaseInkScreenHandler(syncId, playerInventory, this, this.selectedColor); } @Override public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { - InkStorageScreenHandler.ScreenOpeningData.STREAM_CODEC.encode(buffer, new InkStorageScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); + BaseInkScreenHandler.ScreenOpeningData.STREAM_CODEC.encode(buffer, new BaseInkScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); } protected static boolean shouldTickLogic(Level world) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlock.java index 86cb85d2df..6db5a63306 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlock.java @@ -6,7 +6,6 @@ import net.minecraft.*; import net.minecraft.core.*; import net.minecraft.network.chat.*; -import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.entity.*; @@ -15,7 +14,7 @@ import java.util.*; -public class TintingStationBlock extends BaseInkTransferBlock { +public class TintingStationBlock extends BaseInkBlock { public static final MapCodec CODEC = simpleCodec(TintingStationBlock::new); @@ -45,13 +44,4 @@ public BlockEntityTicker getTicker(Level world, Block return world.isClientSide ? null : Support.checkType(type, SpectrumBlockEntities.TINTING_STATION.get(), TintingStationBlockEntity::serverTick); } - @Override - protected void openScreen(Level world, BlockPos pos, Player player) { - BlockEntity blockEntity = world.getBlockEntity(pos); - if (blockEntity instanceof TintingStationBlockEntity tintingStationBlockEntity) { - tintingStationBlockEntity.setOwner(player); - player.openMenu(tintingStationBlockEntity); - } - } - } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java index e74a55cf58..f120bd5fbc 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java @@ -30,7 +30,7 @@ import java.util.*; -public class TintingStationBlockEntity extends InkBlockEntity implements MenuProvider { +public class TintingStationBlockEntity extends BaseInkBlockEntity implements MenuProvider { public static final int INPUT_SLOT_ID = 0; public static final int OUTPUT_SLOT_ID = 1; @@ -215,7 +215,7 @@ protected AbstractContainerMenu createMenu(int syncId, Inventory playerInventory @Override public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { - InkStorageScreenHandler.ScreenOpeningData.STREAM_CODEC.encode(buffer, new InkStorageScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); + BaseInkScreenHandler.ScreenOpeningData.STREAM_CODEC.encode(buffer, new BaseInkScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/TwillBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/TwillBlockEntity.java index dd6f2e09dd..00fd01f87f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/TwillBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/TwillBlockEntity.java @@ -18,8 +18,8 @@ public class TwillBlockEntity extends InkGeneratorBlockEntity { - public static final int MAX_BLOCK_CHECK_DISTANCE_HORIZONTAL = 8; - public static final int MAX_BLOCK_CHECK_DISTANCE_UP = 4; + public static final int MAX_BLOCK_CHECK_DISTANCE_HORIZONTAL = 16; + public static final int MAX_BLOCK_CHECK_DISTANCE_UP = 6; public static final long GENERATED_INK_PER_VALID_BLOCK = 1; public TwillBlockEntity(BlockPos blockPos, BlockState blockState) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/VantaclastBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/VantaclastBlock.java index 26ce747d76..abead52187 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/VantaclastBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/VantaclastBlock.java @@ -14,6 +14,7 @@ import net.minecraft.world.level.block.state.*; import org.jetbrains.annotations.*; +import javax.annotation.Nullable; import java.util.*; public class VantaclastBlock extends InkGeneratorBlock { @@ -40,4 +41,10 @@ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { return new VantaclastBlockEntity(pos, state); } + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + return createInkGeneratorTicker(level, blockEntityType, SpectrumBlockEntities.VANTACLAST.get()); + } + } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/BaseInkScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/BaseInkScreen.java new file mode 100644 index 0000000000..bef5913e78 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/inventories/BaseInkScreen.java @@ -0,0 +1,82 @@ +package de.dafuqs.spectrum.inventories; + +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.blocks.ink.*; +import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.inventories.widgets.*; +import de.dafuqs.spectrum.networking.c2s_payloads.*; +import net.minecraft.client.gui.*; +import net.minecraft.client.gui.screens.inventory.*; +import net.minecraft.core.*; +import net.minecraft.network.chat.*; +import net.minecraft.resources.*; +import net.minecraft.world.entity.player.*; +import net.neoforged.neoforge.network.*; +import org.jetbrains.annotations.*; + +import java.util.*; +import java.util.function.*; + +public class BaseInkScreen extends AbstractContainerScreen implements Consumer>> { + + protected static final ResourceLocation DEFAULT_BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); + + protected ColorSelectionWidget colorSelectionWidget; + protected final ResourceLocation background; + + public BaseInkScreen(T handler, Inventory playerInventory, Component title) { + this(handler, playerInventory, title, DEFAULT_BACKGROUND); + } + + public BaseInkScreen(T handler, Inventory playerInventory, Component title, ResourceLocation background) { + super(handler, playerInventory, title); + this.background = background; + this.imageHeight = 166; + } + + @Override + protected void init() { + super.init(); + this.colorSelectionWidget = new ColorSelectionWidget(getGuiLeft() + 113, getGuiTop() + 55, getGuiLeft() + 139, getGuiTop() + 25, this.menu.getBlockEntity()); + this.colorSelectionWidget.setChangedListener(this); + addRenderableWidget(this.colorSelectionWidget); + } + + @Override + protected void renderLabels(GuiGraphics drawContext, int mouseX, int mouseY) { + int titleX = (imageWidth - font.width(title)) / 2; + int titleY = 6; + drawContext.drawString(this.font, this.title.getVisualOrderText(), titleX, titleY, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); + drawContext.drawString(this.font, this.playerInventoryTitle, BaseInkScreenHandler.PLAYER_INVENTORY_START_X, BaseInkScreenHandler.PLAYER_INVENTORY_START_Y - 10, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); + } + + @Override + protected void renderBg(GuiGraphics guiGraphics, float partialTick, int mouseX, int mouseY) { + guiGraphics.blit(background, getGuiLeft(), getGuiTop(), 0, 0, imageWidth, imageHeight); + } + + @Override + public void render(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { + super.render(guiGraphics, mouseX, mouseY, delta); + guiGraphics.blit(background, getGuiLeft() + 52, getGuiTop() + 18, 176, 0, 46, 46); // gauge blanket + renderTooltip(guiGraphics, mouseX, mouseY); + } + + @Override + public void accept(Optional> inkColor) { + BaseInkBlockEntity inkBlockEntity = this.menu.getBlockEntity(); + inkBlockEntity.setSelectedColor(inkColor); + PacketDistributor.sendToServer(new InkColorSelectedC2SPayload(inkColor)); + } + + @Override + protected void renderTooltip(@NotNull GuiGraphics guiGraphics, int x, int y) { + super.renderTooltip(guiGraphics, x, y); + + if (this.colorSelectionWidget.isMouseOver(x, y)) { + this.colorSelectionWidget.drawMouseoverTooltip(guiGraphics, x, y); + } + } + +} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/inventories/BaseInkScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/BaseInkScreenHandler.java new file mode 100644 index 0000000000..865422788c --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/inventories/BaseInkScreenHandler.java @@ -0,0 +1,141 @@ +package de.dafuqs.spectrum.inventories; + +import de.dafuqs.spectrum.api.block.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.blocks.ink.*; +import de.dafuqs.spectrum.inventories.slots.*; +import de.dafuqs.spectrum.networking.s2c_payloads.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.core.*; +import net.minecraft.network.*; +import net.minecraft.network.codec.*; +import net.minecraft.server.level.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.inventory.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; + +import javax.annotation.*; +import java.util.*; + +public class BaseInkScreenHandler extends AbstractContainerMenu implements InkColorSelectedPacketReceiver { + + public record ScreenOpeningData(BlockPos pos, Optional> inkColor) { + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + BlockPos.STREAM_CODEC, ScreenOpeningData::pos, + ByteBufCodecs.optional(ByteBufCodecs.holderRegistry(SpectrumRegistryKeys.INK_COLOR)), ScreenOpeningData::inkColor, + ScreenOpeningData::new + ); + } + + public static final int PLAYER_INVENTORY_START_X = 8; + public static final int PLAYER_INVENTORY_START_Y = 84; + + protected final Level world; + public final ServerPlayer serverPlayer; + protected BaseInkBlockEntity blockEntity; + protected int inventorySize; + + // clientside + public BaseInkScreenHandler(int syncId, Inventory playerInventory, RegistryFriendlyByteBuf buf) { + this(SpectrumMenuTypes.INK_STORAGE, syncId, playerInventory, ScreenOpeningData.STREAM_CODEC.decode(buf), 1); + } + + protected BaseInkScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, ScreenOpeningData screenOpeningData, int inventorySize) { + this(menuType, syncId, playerInventory, (BaseInkBlockEntity) playerInventory.player.level().getBlockEntity(screenOpeningData.pos()), screenOpeningData.inkColor, inventorySize); + } + + // serverside + public BaseInkScreenHandler(int syncId, Inventory playerInventory, BaseInkBlockEntity blockEntity, Optional> selectedColor) { + this(SpectrumMenuTypes.INK_STORAGE, syncId, playerInventory, blockEntity, selectedColor, 1); + } + + protected BaseInkScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, BaseInkBlockEntity blockEntity, Optional> selectedColor, int inventorySize) { + super(menuType, syncId); + + this.blockEntity = blockEntity; + this.blockEntity.setSelectedColor(selectedColor); + this.serverPlayer = playerInventory.player instanceof ServerPlayer serverPlayerEntity ? serverPlayerEntity : null; + this.world = playerInventory.player.level(); + + checkContainerSize(blockEntity, inventorySize); + blockEntity.startOpen(playerInventory.player); + + addBlockEntitySlots(); + + // player inventory + for (int j = 0; j < 3; ++j) { + for (int k = 0; k < 9; ++k) { + this.addSlot(new Slot(playerInventory, k + j * 9 + 9, PLAYER_INVENTORY_START_X + k * 18, PLAYER_INVENTORY_START_Y + j * 18)); + } + } + + // player hotbar + for (int j = 0; j < 9; ++j) { + this.addSlot(new Slot(playerInventory, j, PLAYER_INVENTORY_START_X + j * 18, PLAYER_INVENTORY_START_Y + 58)); + } + + if (this.serverPlayer != null) { + UpdateBlockEntityInkPayload.updateBlockEntityInk(blockEntity.getBlockPos(), this.blockEntity.getInkStorage(), serverPlayer); + } + } + + public void addBlockEntitySlots() { + this.addSlot(new InkStorageSlot(blockEntity, 0, 133, 33)); + } + + public BaseInkBlockEntity getBlockEntity() { + return this.blockEntity; + } + + @Override + public boolean stillValid(Player player) { + return this.blockEntity.stillValid(player); + } + + @Override + public void removed(Player player) { + super.removed(player); + this.blockEntity.stopOpen(player); + } + + @Override + public ItemStack quickMoveStack(Player player, int index) { + ItemStack itemStack = ItemStack.EMPTY; + Slot slot = this.slots.get(index); + if (slot.hasItem()) { + ItemStack itemStack2 = slot.getItem(); + itemStack = itemStack2.copy(); + if (index < inventorySize) { + if (!this.moveItemStackTo(itemStack2, inventorySize, this.slots.size(), true)) { + return ItemStack.EMPTY; + } + } else if (!this.moveItemStackTo(itemStack2, 0, inventorySize, false)) { + return ItemStack.EMPTY; + } + + if (itemStack2.isEmpty()) { + slot.setByPlayer(ItemStack.EMPTY); + } else { + slot.setChanged(); + } + } + + return itemStack; + } + + @Override + public void broadcastChanges() { + super.broadcastChanges(); + + if (this.serverPlayer != null && this.blockEntity.getInkDirty()) { + UpdateBlockEntityInkPayload.updateBlockEntityInk(blockEntity.getBlockPos(), blockEntity.getInkStorage(), serverPlayer); + } + } + + @Override + public void onInkColorSelectedPacket(Optional> inkColor) { + this.blockEntity.setSelectedColor(inkColor); + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java index e8e687467d..d5d9509c63 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java @@ -36,7 +36,7 @@ protected void renderLabels(GuiGraphics drawContext, int mouseX, int mouseY) { Component title = this.title; drawContext.drawString(this.font, title, titleX, titleY, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); - drawContext.drawString(this.font, this.playerInventoryTitle, InkStorageScreenHandler.PLAYER_INVENTORY_START_X, InkStorageScreenHandler.PLAYER_INVENTORY_START_Y - 10, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); + drawContext.drawString(this.font, this.playerInventoryTitle, BaseInkScreenHandler.PLAYER_INVENTORY_START_X, BaseInkScreenHandler.PLAYER_INVENTORY_START_Y - 10, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java index d368ae0609..ff7d8a5fe1 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.inventories.widgets.*; import de.dafuqs.spectrum.inventories.widgets.ink.*; import net.minecraft.client.gui.*; import net.minecraft.network.chat.*; @@ -9,7 +8,7 @@ import net.minecraft.world.entity.player.*; import org.jetbrains.annotations.*; -public class ColorPickerScreen extends InkStorageScreen { +public class ColorPickerScreen extends BaseInkScreen { protected static final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java index db3b7cf344..26e81b6a65 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreenHandler.java @@ -9,7 +9,7 @@ import java.util.*; -public class ColorPickerScreenHandler extends InkStorageScreenHandler { +public class ColorPickerScreenHandler extends BaseInkScreenHandler { // clientside public ColorPickerScreenHandler(int syncId, Inventory playerInventory, RegistryFriendlyByteBuf buf) { @@ -17,7 +17,7 @@ public ColorPickerScreenHandler(int syncId, Inventory playerInventory, RegistryF } // serverside - public ColorPickerScreenHandler(int syncId, Inventory playerInventory, ColorPickerBlockEntity blockEntity, Optional> selectedColor) { + public ColorPickerScreenHandler(int syncId, Inventory playerInventory, BaseInkBlockEntity blockEntity, Optional> selectedColor) { super(SpectrumMenuTypes.COLOR_PICKER, syncId, playerInventory, blockEntity, selectedColor, 2); } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java index 7da582e114..8059d29319 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java @@ -1,81 +1,44 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.ink.color.*; -import de.dafuqs.spectrum.blocks.ink.*; -import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.inventories.widgets.*; -import de.dafuqs.spectrum.networking.c2s_payloads.*; +import de.dafuqs.spectrum.inventories.widgets.ink.*; import net.minecraft.client.gui.*; -import net.minecraft.client.gui.screens.inventory.*; -import net.minecraft.core.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; -import net.neoforged.neoforge.network.*; import org.jetbrains.annotations.*; -import java.util.*; -import java.util.function.*; - -public class InkStorageScreen extends AbstractContainerScreen implements Consumer>> { - - protected static final ResourceLocation DEFAULT_BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); +public class InkStorageScreen extends BaseInkScreen { - protected ColorSelectionWidget colorSelectionWidget; - protected final ResourceLocation background; + protected static final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); - public InkStorageScreen(T handler, Inventory playerInventory, Component title) { - this(handler, playerInventory, title, DEFAULT_BACKGROUND); - } + protected StackedInkBarWidget stackedInkBarWidget; + protected InkPieWidget inkPieWidget; - public InkStorageScreen(T handler, Inventory playerInventory, Component title, ResourceLocation background) { - super(handler, playerInventory, title); - this.background = background; + public InkStorageScreen(InkStorageScreenHandler handler, Inventory playerInventory, Component title) { + super(handler, playerInventory, title, BACKGROUND); this.imageHeight = 166; } @Override protected void init() { super.init(); - this.colorSelectionWidget = new ColorSelectionWidget(getGuiLeft() + 113, getGuiTop() + 55, getGuiLeft() + 139, getGuiTop() + 25, this.menu.getBlockEntity()); - this.colorSelectionWidget.setChangedListener(this); - addRenderableWidget(this.colorSelectionWidget); - } - - @Override - protected void renderLabels(GuiGraphics drawContext, int mouseX, int mouseY) { - int titleX = (imageWidth - font.width(title)) / 2; - int titleY = 6; - drawContext.drawString(this.font, this.title.getVisualOrderText(), titleX, titleY, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); - drawContext.drawString(this.font, this.playerInventoryTitle, InkStorageScreenHandler.PLAYER_INVENTORY_START_X, InkStorageScreenHandler.PLAYER_INVENTORY_START_Y - 10, RenderHelper.SPECTRUM_CONTAINER_TEXT_COLOR, false); - } - - @Override - protected void renderBg(GuiGraphics guiGraphics, float partialTick, int mouseX, int mouseY) { - guiGraphics.blit(background, getGuiLeft(), getGuiTop(), 0, 0, imageWidth, imageHeight); - } - - @Override - public void render(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { - super.render(guiGraphics, mouseX, mouseY, delta); - guiGraphics.blit(background, getGuiLeft() + 52, getGuiTop() + 18, 176, 0, 46, 46); // gauge blanket - renderTooltip(guiGraphics, mouseX, mouseY); - } - - @Override - public void accept(Optional> inkColor) { - InkBlockEntity inkBlockEntity = this.menu.getBlockEntity(); - inkBlockEntity.setSelectedColor(inkColor); - PacketDistributor.sendToServer(new InkColorSelectedC2SPayload(inkColor)); + + this.inkPieWidget = new InkPieWidget(getGuiLeft() + 54, getGuiTop() + 21, 42, 42, this.menu.getBlockEntity()); + addRenderableWidget(this.inkPieWidget); + this.stackedInkBarWidget = new StackedInkBarWidget(getGuiLeft() + 100, getGuiTop() + 21, 4, 40, this.menu.getBlockEntity()); + addRenderableWidget(stackedInkBarWidget); } @Override protected void renderTooltip(@NotNull GuiGraphics guiGraphics, int x, int y) { super.renderTooltip(guiGraphics, x, y); - if (this.colorSelectionWidget.isMouseOver(x, y)) { - this.colorSelectionWidget.drawMouseoverTooltip(guiGraphics, x, y); + if (this.inkPieWidget.isHoveredOrFocused()) { + guiGraphics.renderTooltip(this.font, this.inkPieWidget.getTooltip().toCharSequence(this.minecraft), x, y); + } + if (this.stackedInkBarWidget.isHoveredOrFocused()) { + guiGraphics.renderTooltip(this.font, this.stackedInkBarWidget.getTooltip().toCharSequence(this.minecraft), x, y); } } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreenHandler.java index a2d9068257..8c98b663f9 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreenHandler.java @@ -1,141 +1,30 @@ package de.dafuqs.spectrum.inventories; -import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.inventories.slots.*; -import de.dafuqs.spectrum.networking.s2c_payloads.*; -import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.network.*; -import net.minecraft.network.codec.*; -import net.minecraft.server.level.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.inventory.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.*; -import javax.annotation.*; import java.util.*; -public class InkStorageScreenHandler extends AbstractContainerMenu implements InkColorSelectedPacketReceiver { - - public record ScreenOpeningData(BlockPos pos, Optional> inkColor) { - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - BlockPos.STREAM_CODEC, ScreenOpeningData::pos, - ByteBufCodecs.optional(ByteBufCodecs.holderRegistry(SpectrumRegistryKeys.INK_COLOR)), ScreenOpeningData::inkColor, - ScreenOpeningData::new - ); - } - - public static final int PLAYER_INVENTORY_START_X = 8; - public static final int PLAYER_INVENTORY_START_Y = 84; - - protected final Level world; - public final ServerPlayer serverPlayer; - protected InkBlockEntity blockEntity; - protected int inventorySize; +public class InkStorageScreenHandler extends BaseInkScreenHandler { // clientside public InkStorageScreenHandler(int syncId, Inventory playerInventory, RegistryFriendlyByteBuf buf) { - this(SpectrumMenuTypes.INK_STORAGE, syncId, playerInventory, ScreenOpeningData.STREAM_CODEC.decode(buf), 1); - } - - protected InkStorageScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, ScreenOpeningData screenOpeningData, int inventorySize) { - this(menuType, syncId, playerInventory, (InkBlockEntity) playerInventory.player.level().getBlockEntity(screenOpeningData.pos()), screenOpeningData.inkColor, inventorySize); + super(SpectrumMenuTypes.INK_STORAGE, syncId, playerInventory, ScreenOpeningData.STREAM_CODEC.decode(buf), 2); } // serverside - public InkStorageScreenHandler(int syncId, Inventory playerInventory, InkBlockEntity blockEntity, Optional> selectedColor) { - this(SpectrumMenuTypes.INK_STORAGE, syncId, playerInventory, blockEntity, selectedColor, 1); - } - - protected InkStorageScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, InkBlockEntity blockEntity, Optional> selectedColor, int inventorySize) { - super(menuType, syncId); - - this.blockEntity = blockEntity; - this.blockEntity.setSelectedColor(selectedColor); - this.serverPlayer = playerInventory.player instanceof ServerPlayer serverPlayerEntity ? serverPlayerEntity : null; - this.world = playerInventory.player.level(); - - checkContainerSize(blockEntity, inventorySize); - blockEntity.startOpen(playerInventory.player); - - addBlockEntitySlots(); - - // player inventory - for (int j = 0; j < 3; ++j) { - for (int k = 0; k < 9; ++k) { - this.addSlot(new Slot(playerInventory, k + j * 9 + 9, PLAYER_INVENTORY_START_X + k * 18, PLAYER_INVENTORY_START_Y + j * 18)); - } - } - - // player hotbar - for (int j = 0; j < 9; ++j) { - this.addSlot(new Slot(playerInventory, j, PLAYER_INVENTORY_START_X + j * 18, PLAYER_INVENTORY_START_Y + 58)); - } - - if (this.serverPlayer != null) { - UpdateBlockEntityInkPayload.updateBlockEntityInk(blockEntity.getBlockPos(), this.blockEntity.getInkStorage(), serverPlayer); - } - } - - public void addBlockEntitySlots() { - this.addSlot(new InkStorageSlot(blockEntity, 0, 133, 33)); - } - - public InkBlockEntity getBlockEntity() { - return this.blockEntity; + public InkStorageScreenHandler(int syncId, Inventory playerInventory, TintingStationBlockEntity blockEntity, Optional> selectedColor) { + super(SpectrumMenuTypes.INK_STORAGE, syncId, playerInventory, blockEntity, selectedColor, 2); } @Override - public boolean stillValid(Player player) { - return this.blockEntity.stillValid(player); - } - - @Override - public void removed(Player player) { - super.removed(player); - this.blockEntity.stopOpen(player); - } - - @Override - public ItemStack quickMoveStack(Player player, int index) { - ItemStack itemStack = ItemStack.EMPTY; - Slot slot = this.slots.get(index); - if (slot.hasItem()) { - ItemStack itemStack2 = slot.getItem(); - itemStack = itemStack2.copy(); - if (index < inventorySize) { - if (!this.moveItemStackTo(itemStack2, inventorySize, this.slots.size(), true)) { - return ItemStack.EMPTY; - } - } else if (!this.moveItemStackTo(itemStack2, 0, inventorySize, false)) { - return ItemStack.EMPTY; - } - - if (itemStack2.isEmpty()) { - slot.setByPlayer(ItemStack.EMPTY); - } else { - slot.setChanged(); - } - } - - return itemStack; - } - - @Override - public void broadcastChanges() { - super.broadcastChanges(); - - if (this.serverPlayer != null && this.blockEntity.getInkDirty()) { - UpdateBlockEntityInkPayload.updateBlockEntityInk(blockEntity.getBlockPos(), blockEntity.getInkStorage(), serverPlayer); - } - } - - @Override - public void onInkColorSelectedPacket(Optional> inkColor) { - this.blockEntity.setSelectedColor(inkColor); + public void addBlockEntitySlots() { + this.addSlot(new InkStorageSlot(blockEntity, 1, 133, 33)); } } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java index c940ed7996..84f1dc182d 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java @@ -1,13 +1,9 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.block.*; import net.minecraft.client.gui.screens.*; import net.minecraft.client.gui.screens.inventory.*; -import net.minecraft.core.*; import net.minecraft.core.registries.*; -import net.minecraft.network.*; -import net.minecraft.network.codec.*; import net.minecraft.resources.*; import net.minecraft.world.flag.*; import net.minecraft.world.inventory.*; @@ -82,8 +78,7 @@ public static void registerClient(RegisterMenuScreensEvent event) { event.register(SpectrumMenuTypes.BAG_OF_HOLDING, ContainerScreen::new); // Ink - MenuScreens.ScreenConstructor> inkStorageScreenConstructor = InkStorageScreen::new; // tricking generics with this simple trick - event.register(SpectrumMenuTypes.INK_STORAGE, inkStorageScreenConstructor); + event.register(SpectrumMenuTypes.INK_STORAGE, InkStorageScreen::new); event.register(SpectrumMenuTypes.COLOR_PICKER, ColorPickerScreen::new); event.register(SpectrumMenuTypes.TINTING_STATION, TintingStationScreen::new); event.register(SpectrumMenuTypes.CINDERHEARTH, CinderhearthScreen::new); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java index c39fcb09c8..e61a8e8978 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java @@ -1,19 +1,14 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.inventories.widgets.ink.*; import net.minecraft.client.gui.*; -import net.minecraft.core.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; import org.jetbrains.annotations.*; -import java.util.*; -import java.util.function.*; - -public class TintingStationScreen extends InkStorageScreen { +public class TintingStationScreen extends BaseInkScreen { protected static final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/tinting_station.png"); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java index 493506a816..318c7cfdb8 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java @@ -10,7 +10,7 @@ import java.util.*; -public class TintingStationScreenHandler extends InkStorageScreenHandler { +public class TintingStationScreenHandler extends BaseInkScreenHandler { // clientside public TintingStationScreenHandler(int syncId, Inventory playerInventory, RegistryFriendlyByteBuf buf) { diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java index 0f424c6dc4..c713e06fa6 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java @@ -21,7 +21,7 @@ public class ColorSelectionWidget extends AbstractWidget { - protected final InkBlockEntity blockEntity; + protected final BaseInkBlockEntity blockEntity; @Nullable private Consumer>> changedListener; @@ -31,11 +31,11 @@ public class ColorSelectionWidget extends AbstractWidget { final int selectedIndexX; final int selectedIndexY; - public ColorSelectionWidget(int x, int y, int selectedIndexX, int selectedIndexY, InkBlockEntity blockEntity) { + public ColorSelectionWidget(int x, int y, int selectedIndexX, int selectedIndexY, BaseInkBlockEntity blockEntity) { this(x, y, selectedIndexX, selectedIndexY, blockEntity, blockEntity.getInkStorage().acceptedColors()); } - public ColorSelectionWidget(int x, int y, int selectedIndexX, int selectedIndexY, InkBlockEntity blockEntity, Iterable availableColors) { + public ColorSelectionWidget(int x, int y, int selectedIndexX, int selectedIndexY, BaseInkBlockEntity blockEntity, Iterable availableColors) { super(x, y, 56, 14, Component.literal("")); this.blockEntity = blockEntity; this.selectedIndexX = selectedIndexX; From 4da2029224301078ae7162bd7d32e82bebb2d057 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 1 Jun 2026 22:10:18 +0200 Subject: [PATCH 045/477] dawnbrush ink generation logic --- .../blocks/ink/DawnbrushBlockEntity.java | 73 ++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java index 8d0bb8824c..8b2d130442 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java @@ -24,7 +24,78 @@ protected Component getDefaultName() { @Override protected boolean tickLogic(Level level) { - return false; + List generatedEnergy = generateInk(level, 16.0F); + for(InkAmount inkAmount : generatedEnergy) { + this.inkStorage.addEnergy(inkAmount.color(), inkAmount.amount()); + } + return true; + } + + public static List generateInk(Level level, float multiplier) { + boolean raining = level.isRaining(); + boolean thundering = level.isThundering(); + + float rain = raining ? 1f : 0f; + float storm = thundering ? 1f : 0f; + + float timeOfDay = level.getTimeOfDay(1f); + float sunrise = ease(cosine(timeOfDay, 0.75f, 0.15f)); // sunrise peak + float noon = ease(cosine(timeOfDay, 0.0f, 0.3f) + cosine(timeOfDay, 1.0f, 0.3f)); // noon peak + float sunset = ease(cosine(timeOfDay, 0.25f, 0.15f)); // sunset peak + float midnight = ease(cosine(timeOfDay, 0.5f, 0.3f)); // midnight peak + + Map weights = new HashMap<>(); + + // Thunder exclusive + weights.put(InkColors.BLACK, thundering ? 1f + midnight * 3f + storm * 6f : 0f); + + // Rain exclusive + weights.put(InkColors.BROWN, (raining || thundering) ? 1f + rain * 2f + storm * 2f : 0f); + + // Weather independent colors + // partially suppressed with active weather + float weatherWeight = 1.0F; + if (raining) weatherWeight *= 0.25f; + if (thundering) weatherWeight *= 0.25f; + + // sunrise + weights.put(InkColors.ORANGE, (midnight * 0.25f + sunrise * 3) * weatherWeight); + weights.put(InkColors.LIME, (sunrise * 4f) * weatherWeight); + weights.put(InkColors.GREEN, (sunrise * 2f + noon * 0.25f) * weatherWeight); + + // noon + weights.put(InkColors.LIGHT_BLUE, (noon * 2.5f + rain) * weatherWeight); + weights.put(InkColors.CYAN, (noon * 2.5f - rain) * weatherWeight); + + // sunset + weights.put(InkColors.YELLOW, (noon * 0.25f + sunset * 3f) * weatherWeight); + weights.put(InkColors.RED, (sunset * 4f) * weatherWeight); + weights.put(InkColors.PINK, (sunset * 3f + midnight * 0.25f) * weatherWeight); + + // night + weights.put(InkColors.PURPLE, (sunset * 2 + midnight * 0.5f) * weatherWeight); + weights.put(InkColors.BLUE, (midnight * 2f) * weatherWeight); + weights.put(InkColors.MAGENTA, (midnight * 0.5f + sunrise * 2) * weatherWeight); + + // build output + List result = new ArrayList<>(); + for (var e : weights.entrySet()) { + float w = e.getValue(); + if (w <= 0f) continue; + result.add(new InkAmount(e.getKey(), (long) (w * multiplier))); + } + + return result; + } + + private static float cosine(float x, float center, float width) { + float d = Math.abs(x - center); + if (d > width) return 0f; + return (float) ((Math.cos(Math.PI * d / width) + 1) * 0.5); + } + + private static float ease(float x) { + return x * x * (3 - 2 * x); } } From 6de73c7a2958cb105c8acac09dc3688c9ae3831e Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 1 Jun 2026 22:21:08 +0200 Subject: [PATCH 046/477] dawnbrush tweaks --- .../de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java index 8b2d130442..dfe14c015a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java @@ -59,11 +59,12 @@ public static List generateInk(Level level, float multiplier) { if (thundering) weatherWeight *= 0.25f; // sunrise + weights.put(InkColors.MAGENTA, (sunrise * 2) * weatherWeight); weights.put(InkColors.ORANGE, (midnight * 0.25f + sunrise * 3) * weatherWeight); - weights.put(InkColors.LIME, (sunrise * 4f) * weatherWeight); - weights.put(InkColors.GREEN, (sunrise * 2f + noon * 0.25f) * weatherWeight); + weights.put(InkColors.LIME, (sunrise * 4f + noon * 0.5f) * weatherWeight); // noon + weights.put(InkColors.GREEN, (sunrise * 0.5f + noon * 2.0f) * weatherWeight); weights.put(InkColors.LIGHT_BLUE, (noon * 2.5f + rain) * weatherWeight); weights.put(InkColors.CYAN, (noon * 2.5f - rain) * weatherWeight); @@ -75,7 +76,6 @@ public static List generateInk(Level level, float multiplier) { // night weights.put(InkColors.PURPLE, (sunset * 2 + midnight * 0.5f) * weatherWeight); weights.put(InkColors.BLUE, (midnight * 2f) * weatherWeight); - weights.put(InkColors.MAGENTA, (midnight * 0.5f + sunrise * 2) * weatherWeight); // build output List result = new ArrayList<>(); From c0cd04ea91ce28405544e9b582af5bd5b88c5a50 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 19 Jun 2026 13:14:51 +0200 Subject: [PATCH 047/477] fix SingleInkStorages (ty, SaphireLattice!) --- .../ink/storage/FixedSingleInkStorage.java | 9 ------- .../spectrum/api/ink/storage/InkStorage.java | 7 ++++- .../api/ink/storage/SingleInkStorage.java | 27 ++++++++++--------- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/storage/FixedSingleInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/FixedSingleInkStorage.java index ef8abcb767..131ece0fea 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/storage/FixedSingleInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/FixedSingleInkStorage.java @@ -18,13 +18,4 @@ public boolean accepts(InkColor color) { return this.storedColor == color; } - @Override - public long getRoom(InkColor color) { - if (this.storedColor == color) { - return this.maxEnergy - this.storedEnergy; - } else { - return 0; - } - } - } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorage.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorage.java index 96aa2b1776..dce9549058 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorage.java @@ -76,7 +76,12 @@ public Collection acceptedColors() { return colors; } - // returns the amount of energy that could not be added + /** + * Adds energy to the storage + * @param color the color to add to + * @param amount the amount to add + * @return the amount of energy that could not be added + */ public abstract long addEnergy(InkColor color, long amount); // Drains energy from the storage. Returns the amount of energy that could be drained diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/storage/SingleInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/SingleInkStorage.java index efa9f7b420..4fcc052106 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/storage/SingleInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/SingleInkStorage.java @@ -40,20 +40,21 @@ public boolean accepts(InkColor color) { @Override public long addEnergy(InkColor color, long amount) { - if (color == storedColor) { - long resultingAmount = this.storedEnergy + amount; - this.storedEnergy = resultingAmount; - if (resultingAmount > this.maxEnergy) { - long overflow = this.storedEnergy - this.maxEnergy; - this.storedEnergy = this.maxEnergy; - return overflow; - } - return 0; - } else if (this.storedEnergy == 0) { + if (!this.accepts(color)) { + return amount; + } + + if (this.storedEnergy == 0) { this.storedColor = color; - this.storedEnergy = amount; } - return amount; + long resultingAmount = this.storedEnergy + amount; + this.storedEnergy = resultingAmount; + if (resultingAmount > this.maxEnergy) { + long overflow = this.storedEnergy - this.maxEnergy; + this.storedEnergy = this.maxEnergy; + return overflow; + } + return 0; } @Override @@ -133,7 +134,7 @@ public List getTooltip() { @Override public long getRoom(InkColor color) { - if (this.storedEnergy == 0 || this.storedColor == color) { + if (this.accepts(color)) { return this.maxEnergy - this.storedEnergy; } else { return 0; From 6fb84d26e31a535a3e418169a1c12cfeb4c15411 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 19 Jun 2026 13:19:25 +0200 Subject: [PATCH 048/477] ink gen/sink packages; redstone output signal tweak --- .../java/de/dafuqs/spectrum/blocks/ink/BaseInkBlock.java | 2 +- .../blocks/ink/{ => gen}/CrystalApothecaryBlock.java | 2 +- .../ink/{ => gen}/CrystalApothecaryBlockEntity.java | 2 +- .../spectrum/blocks/ink/{ => gen}/DawnbrushBlock.java | 8 +++----- .../blocks/ink/{ => gen}/DawnbrushBlockEntity.java | 3 +-- .../spectrum/blocks/ink/{ => gen}/InkGeneratorBlock.java | 3 ++- .../blocks/ink/{ => gen}/InkGeneratorBlockEntity.java | 3 ++- .../dafuqs/spectrum/blocks/ink/{ => gen}/TwillBlock.java | 6 +----- .../spectrum/blocks/ink/{ => gen}/TwillBlockEntity.java | 3 +-- .../spectrum/blocks/ink/{ => gen}/VantaclastBlock.java | 6 +----- .../blocks/ink/{ => gen}/VantaclastBlockEntity.java | 3 +-- .../spectrum/blocks/ink/{ => sink}/CinderhearthBlock.java | 2 +- .../blocks/ink/{ => sink}/CinderhearthBlockEntity.java | 2 +- .../spectrum/blocks/ink/{ => sink}/ColorPickerBlock.java | 3 ++- .../blocks/ink/{ => sink}/ColorPickerBlockEntity.java | 3 ++- .../ink/{ => sink}/ColorPickerBlockEntityRenderer.java | 2 +- .../blocks/ink/{ => sink}/CrystallarieumBlock.java | 2 +- .../blocks/ink/{ => sink}/CrystallarieumBlockEntity.java | 2 +- .../ink/{ => sink}/CrystallarieumBlockEntityRenderer.java | 2 +- .../blocks/ink/{ => sink}/TintingStationBlock.java | 3 ++- .../blocks/ink/{ => sink}/TintingStationBlockEntity.java | 3 ++- .../spectrum/capabilities/SpectrumCapabilities.java | 3 ++- .../compat/REI/plugins/CrystallarieumCategory.java | 2 +- .../compat/emi/recipes/CrystallarieumEmiRecipeGated.java | 2 +- .../pages/BookCrystallarieumGrowingPageRenderer.java | 2 +- .../spectrum/inventories/CinderhearthScreenHandler.java | 2 +- .../spectrum/inventories/InkStorageScreenHandler.java | 3 +-- .../spectrum/inventories/TintingStationScreenHandler.java | 2 +- .../dafuqs/spectrum/registries/SpectrumBlockEntities.java | 3 ++- .../de/dafuqs/spectrum/registries/SpectrumBlocks.java | 3 ++- 30 files changed, 41 insertions(+), 46 deletions(-) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => gen}/CrystalApothecaryBlock.java (98%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => gen}/CrystalApothecaryBlockEntity.java (99%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => gen}/DawnbrushBlock.java (83%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => gen}/DawnbrushBlockEntity.java (97%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => gen}/InkGeneratorBlock.java (88%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => gen}/InkGeneratorBlockEntity.java (97%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => gen}/TwillBlock.java (87%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => gen}/TwillBlockEntity.java (96%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => gen}/VantaclastBlock.java (87%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => gen}/VantaclastBlockEntity.java (88%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => sink}/CinderhearthBlock.java (99%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => sink}/CinderhearthBlockEntity.java (99%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => sink}/ColorPickerBlock.java (94%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => sink}/ColorPickerBlockEntity.java (98%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => sink}/ColorPickerBlockEntityRenderer.java (97%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => sink}/CrystallarieumBlock.java (99%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => sink}/CrystallarieumBlockEntity.java (99%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => sink}/CrystallarieumBlockEntityRenderer.java (99%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => sink}/TintingStationBlock.java (94%) rename src/main/java/de/dafuqs/spectrum/blocks/ink/{ => sink}/TintingStationBlockEntity.java (98%) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlock.java index f262e7c182..6b134d61ff 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlock.java @@ -72,7 +72,7 @@ public boolean hasAnalogOutputSignal(BlockState state) { @Override public int getAnalogOutputSignal(BlockState state, Level world, BlockPos pos) { - if (world.getBlockEntity(pos) instanceof InkGeneratorBlockEntity blockEntity) { + if (world.getBlockEntity(pos) instanceof BaseInkBlockEntity blockEntity) { int i = 0; float f = 0.0f; for (int j = 0; j < blockEntity.inventory.size(); ++j) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystalApothecaryBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/CrystalApothecaryBlock.java similarity index 98% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/CrystalApothecaryBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/gen/CrystalApothecaryBlock.java index bfa2a341b5..52acf39047 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystalApothecaryBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/CrystalApothecaryBlock.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.gen; import com.mojang.serialization.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystalApothecaryBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/CrystalApothecaryBlockEntity.java similarity index 99% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/CrystalApothecaryBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/gen/CrystalApothecaryBlockEntity.java index c4d87ca9b4..88f0bfdd27 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystalApothecaryBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/CrystalApothecaryBlockEntity.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.gen; import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.data_loaders.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/DawnbrushBlock.java similarity index 83% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/gen/DawnbrushBlock.java index da14823695..2ffd2d51c5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/DawnbrushBlock.java @@ -1,7 +1,6 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.gen; import com.mojang.serialization.*; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; import net.minecraft.core.*; @@ -10,16 +9,15 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jetbrains.annotations.*; import javax.annotation.Nullable; import java.util.*; public class DawnbrushBlock extends InkGeneratorBlock { - public static final MapCodec CODEC = simpleCodec(DawnbrushBlock::new); + public static final MapCodec CODEC = BlockBehaviour.simpleCodec(DawnbrushBlock::new); - public DawnbrushBlock(Properties settings) { + public DawnbrushBlock(BlockBehaviour.Properties settings) { super(settings); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/DawnbrushBlockEntity.java similarity index 97% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/gen/DawnbrushBlockEntity.java index dfe14c015a..e51c8e9810 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/DawnbrushBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/DawnbrushBlockEntity.java @@ -1,11 +1,10 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.gen; import de.dafuqs.spectrum.api.ink.*; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.network.chat.*; -import net.minecraft.server.level.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/InkGeneratorBlock.java similarity index 88% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/gen/InkGeneratorBlock.java index f67f68eaae..f3dfc666aa 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/InkGeneratorBlock.java @@ -1,5 +1,6 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.gen; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.helpers.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.entity.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/InkGeneratorBlockEntity.java similarity index 97% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/gen/InkGeneratorBlockEntity.java index 517e0e73f8..613c3c55d6 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/InkGeneratorBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/InkGeneratorBlockEntity.java @@ -1,7 +1,8 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.gen; import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.api.ink.storage.*; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.inventories.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/TwillBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlock.java similarity index 87% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/TwillBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlock.java index 1b284dee2d..f4ce7b622f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/TwillBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlock.java @@ -1,18 +1,14 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.gen; import com.mojang.serialization.*; -import de.dafuqs.spectrum.api.ink.storage.*; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; import net.minecraft.core.*; import net.minecraft.network.chat.*; -import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jetbrains.annotations.*; import javax.annotation.Nullable; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/TwillBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlockEntity.java similarity index 96% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/TwillBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlockEntity.java index 00fd01f87f..889be34fbf 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/TwillBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlockEntity.java @@ -1,9 +1,8 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.gen; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.conditional.colored_tree.*; import de.dafuqs.spectrum.config.*; -import de.dafuqs.spectrum.mixin.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.particle.effect.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/VantaclastBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlock.java similarity index 87% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/VantaclastBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlock.java index abead52187..f0cbb4a6e7 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/VantaclastBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlock.java @@ -1,18 +1,14 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.gen; import com.mojang.serialization.*; -import de.dafuqs.spectrum.api.ink.storage.*; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; import net.minecraft.core.*; import net.minecraft.network.chat.*; -import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jetbrains.annotations.*; import javax.annotation.Nullable; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/VantaclastBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlockEntity.java similarity index 88% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/VantaclastBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlockEntity.java index eeca05e8b3..17d0805120 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/VantaclastBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlockEntity.java @@ -1,9 +1,8 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.gen; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.network.chat.*; -import net.minecraft.server.level.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/CinderhearthBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlock.java similarity index 99% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/CinderhearthBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlock.java index c26dd9faad..93caa08218 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/CinderhearthBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlock.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.sink; import com.klikli_dev.modonomicon.api.multiblock.*; import com.mojang.serialization.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/CinderhearthBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java similarity index 99% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/CinderhearthBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java index ade838daac..a4728d0e7b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/CinderhearthBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.sink; import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.ink.color.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlock.java similarity index 94% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlock.java index f18e839667..1c52e9558b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlock.java @@ -1,6 +1,7 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.sink; import com.mojang.serialization.*; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlockEntity.java similarity index 98% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlockEntity.java index 90eaa98647..78fb3accba 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlockEntity.java @@ -1,7 +1,8 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.sink; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.ink.storage.*; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.helpers.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlockEntityRenderer.java similarity index 97% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntityRenderer.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlockEntityRenderer.java index 0b3067f743..f7e072c1d5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/ColorPickerBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlockEntityRenderer.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.sink; import com.mojang.blaze3d.vertex.*; import com.mojang.math.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystallarieumBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlock.java similarity index 99% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/CrystallarieumBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlock.java index feb8cc999b..df2c26b422 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystallarieumBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlock.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.sink; import com.mojang.serialization.*; import de.dafuqs.spectrum.api.ink.color.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystallarieumBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java similarity index 99% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/CrystallarieumBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java index 6b825a08aa..a9c8b0d25f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystallarieumBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.sink; import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.ink.storage.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystallarieumBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntityRenderer.java similarity index 99% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/CrystallarieumBlockEntityRenderer.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntityRenderer.java index 7bfb3bb649..2e3dfc8495 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/CrystallarieumBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntityRenderer.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.sink; import com.mojang.blaze3d.vertex.*; import com.mojang.math.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/TintingStationBlock.java similarity index 94% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/sink/TintingStationBlock.java index 6db5a63306..750312a254 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/TintingStationBlock.java @@ -1,6 +1,7 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.sink; import com.mojang.serialization.*; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/TintingStationBlockEntity.java similarity index 98% rename from src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java rename to src/main/java/de/dafuqs/spectrum/blocks/ink/sink/TintingStationBlockEntity.java index f120bd5fbc..646ccdb02e 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/TintingStationBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/TintingStationBlockEntity.java @@ -1,7 +1,8 @@ -package de.dafuqs.spectrum.blocks.ink; +package de.dafuqs.spectrum.blocks.ink.sink; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.ink.storage.*; +import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.helpers.*; diff --git a/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java b/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java index 893f7ccfd6..6312798f22 100644 --- a/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java +++ b/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java @@ -5,8 +5,9 @@ import de.dafuqs.spectrum.blocks.bottomless_bundle.*; import de.dafuqs.spectrum.blocks.chests.*; import de.dafuqs.spectrum.blocks.enchanter.*; -import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.blocks.fusion_shrine.*; +import de.dafuqs.spectrum.blocks.ink.gen.*; +import de.dafuqs.spectrum.blocks.ink.sink.*; import de.dafuqs.spectrum.blocks.item_bowl.*; import de.dafuqs.spectrum.blocks.pedestal.*; import de.dafuqs.spectrum.blocks.potion_workshop.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumCategory.java index 348f24ce3c..4e72029e6f 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumCategory.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.compat.REI.plugins; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.blocks.ink.*; +import de.dafuqs.spectrum.blocks.ink.sink.*; import de.dafuqs.spectrum.compat.REI.*; import de.dafuqs.spectrum.recipe.crystallarieum.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java index 32744517b0..7c934f4b01 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.compat.emi.recipes; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.blocks.ink.*; +import de.dafuqs.spectrum.blocks.ink.sink.*; import de.dafuqs.spectrum.compat.emi.*; import de.dafuqs.spectrum.recipe.crystallarieum.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java index cc67b30ae4..2b662e1188 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java @@ -5,7 +5,7 @@ import com.klikli_dev.modonomicon.data.*; import com.mojang.blaze3d.systems.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.blocks.ink.*; +import de.dafuqs.spectrum.blocks.ink.sink.*; import de.dafuqs.spectrum.compat.modonomicon.pages.*; import de.dafuqs.spectrum.recipe.crystallarieum.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java index 0c49da29b2..07fc1efb55 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.inventories; -import de.dafuqs.spectrum.blocks.ink.*; +import de.dafuqs.spectrum.blocks.ink.sink.*; import de.dafuqs.spectrum.inventories.slots.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreenHandler.java index 8c98b663f9..5d3176f330 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreenHandler.java @@ -1,12 +1,11 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.api.ink.color.*; -import de.dafuqs.spectrum.blocks.ink.*; +import de.dafuqs.spectrum.blocks.ink.sink.*; import de.dafuqs.spectrum.inventories.slots.*; import net.minecraft.core.*; import net.minecraft.network.*; import net.minecraft.world.entity.player.*; -import net.minecraft.world.inventory.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java index 318c7cfdb8..8528072219 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreenHandler.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.api.ink.color.*; -import de.dafuqs.spectrum.blocks.ink.*; +import de.dafuqs.spectrum.blocks.ink.sink.*; import de.dafuqs.spectrum.inventories.slots.*; import net.minecraft.core.*; import net.minecraft.network.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java index baf57761b3..fc46ab466f 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java @@ -10,8 +10,9 @@ import de.dafuqs.spectrum.blocks.deeper_down.*; import de.dafuqs.spectrum.blocks.enchanter.*; import de.dafuqs.spectrum.blocks.ender.*; -import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.blocks.fusion_shrine.*; +import de.dafuqs.spectrum.blocks.ink.gen.*; +import de.dafuqs.spectrum.blocks.ink.sink.*; import de.dafuqs.spectrum.blocks.item_bowl.*; import de.dafuqs.spectrum.blocks.item_roundel.*; import de.dafuqs.spectrum.blocks.jade_vines.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index ddde908f8d..170d884290 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -21,7 +21,6 @@ import de.dafuqs.spectrum.blocks.enchanter.*; import de.dafuqs.spectrum.blocks.end_portal.*; import de.dafuqs.spectrum.blocks.ender.*; -import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.blocks.farming.*; import de.dafuqs.spectrum.blocks.flammable.*; import de.dafuqs.spectrum.blocks.fluid.*; @@ -29,6 +28,8 @@ import de.dafuqs.spectrum.blocks.gemstone.*; import de.dafuqs.spectrum.blocks.geology.*; import de.dafuqs.spectrum.blocks.idols.*; +import de.dafuqs.spectrum.blocks.ink.gen.*; +import de.dafuqs.spectrum.blocks.ink.sink.*; import de.dafuqs.spectrum.blocks.item_bowl.*; import de.dafuqs.spectrum.blocks.item_roundel.*; import de.dafuqs.spectrum.blocks.jade_vines.*; From 7308cb5f75603919e2588fc864702f52c3663e44 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 19 Jun 2026 14:10:09 +0200 Subject: [PATCH 049/477] vantaclast logic --- .../blocks/ink/gen/TwillBlockEntity.java | 5 ++- .../blocks/ink/gen/VantaclastBlockEntity.java | 43 ++++++++++++++++++- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlockEntity.java index 889be34fbf..7717cda8d1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlockEntity.java @@ -2,6 +2,7 @@ import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.conditional.colored_tree.*; +import de.dafuqs.spectrum.blocks.decay.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.particle.effect.*; @@ -12,6 +13,7 @@ import net.minecraft.sounds.*; import net.minecraft.util.*; import net.minecraft.world.level.*; +import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; @@ -19,7 +21,7 @@ public class TwillBlockEntity extends InkGeneratorBlockEntity { public static final int MAX_BLOCK_CHECK_DISTANCE_HORIZONTAL = 16; public static final int MAX_BLOCK_CHECK_DISTANCE_UP = 6; - public static final long GENERATED_INK_PER_VALID_BLOCK = 1; + public static final long GENERATED_INK_PER_VALID_BLOCK = (long) Math.pow(2, 2); public TwillBlockEntity(BlockPos blockPos, BlockState blockState) { super(SpectrumBlockEntities.TWILL.get(), blockPos, blockState, 1); @@ -51,7 +53,6 @@ protected boolean tickLogic(Level level) { new Vec3(0.22, 0.0, 0.22), new Vec3(0.0, 0.1, 0.0) ); - return true; } return false; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlockEntity.java index 17d0805120..1da4335c6c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlockEntity.java @@ -1,15 +1,32 @@ package de.dafuqs.spectrum.blocks.ink.gen; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.blocks.conditional.colored_tree.*; +import de.dafuqs.spectrum.blocks.decay.*; +import de.dafuqs.spectrum.config.*; +import de.dafuqs.spectrum.events.*; +import de.dafuqs.spectrum.networking.s2c_payloads.*; +import de.dafuqs.spectrum.particle.effect.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; +import net.minecraft.core.particles.*; import net.minecraft.network.chat.*; +import net.minecraft.server.level.*; +import net.minecraft.sounds.*; +import net.minecraft.util.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; +import net.minecraft.world.level.gameevent.*; +import net.minecraft.world.phys.*; public class VantaclastBlockEntity extends InkGeneratorBlockEntity { + public static final int MAX_BLOCK_CHECK_DISTANCE_HORIZONTAL = 16; + public static final int MAX_BLOCK_CHECK_DISTANCE_UP = 6; + public static final long GENERATED_INK_PER_VALID_BLOCK = (long) Math.pow(2, 16); + public VantaclastBlockEntity(BlockPos blockPos, BlockState blockState) { - super(SpectrumBlockEntities.VANTACLAST.get(), blockPos, blockState, 2); + super(SpectrumBlockEntities.VANTACLAST.get(), blockPos, blockState, 3); } @Override @@ -19,6 +36,30 @@ protected Component getDefaultName() { @Override protected boolean tickLogic(Level level) { + RandomSource random = level.getRandom(); + BlockPos posToTest = this.worldPosition.offset(random.nextIntBetweenInclusive(-MAX_BLOCK_CHECK_DISTANCE_HORIZONTAL, MAX_BLOCK_CHECK_DISTANCE_HORIZONTAL), random.nextInt(MAX_BLOCK_CHECK_DISTANCE_UP), random.nextIntBetweenInclusive(-MAX_BLOCK_CHECK_DISTANCE_HORIZONTAL, MAX_BLOCK_CHECK_DISTANCE_HORIZONTAL)); + BlockState statetoTest = level.getBlockState(posToTest); + + if(statetoTest.getBlock() instanceof ColoredLeavesBlock coloredLeavesBlock) { + InkColor inkColor = coloredLeavesBlock.getColor(); + this.inkStorage.addEnergy(inkColor, GENERATED_INK_PER_VALID_BLOCK); + + if (SpectrumConfig.CONFIG.BlockSoundVolume.get() > 0) { + level.playSound(null, worldPosition, SpectrumSoundEvents.COLOR_PICKER_PROCESSING, SoundSource.BLOCKS, SpectrumConfig.CONFIG.BlockSoundVolume.get().floatValue() / 3F, 1.0F); + } + + ColorTransmissionPayload.playColorTransmissionParticle( + (ServerLevel) level, + new ColoredTransmission( + new Vec3(posToTest.getX() + 0.5D, posToTest.getY() + 0.5D, posToTest.getZ() + 0.5D), + new BlockPositionSource(worldPosition), 8, + inkColor.getColorInt()) + ); + + level.setBlockAndUpdate(posToTest, SpectrumBlocks.BLACK_MATERIA.get().defaultBlockState()); + + return true; + } return false; } From 2e5428acc07c8467ff138d49dd897d50ddc57e02 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 19 Jun 2026 14:36:10 +0200 Subject: [PATCH 050/477] weather weights --- .../blocks/ink/gen/DawnbrushBlockEntity.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/DawnbrushBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/DawnbrushBlockEntity.java index e51c8e9810..93abb7d000 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/DawnbrushBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/DawnbrushBlockEntity.java @@ -58,22 +58,22 @@ public static List generateInk(Level level, float multiplier) { if (thundering) weatherWeight *= 0.25f; // sunrise - weights.put(InkColors.MAGENTA, (sunrise * 2) * weatherWeight); + weights.put(InkColors.MAGENTA, (sunrise * 3) * weatherWeight); weights.put(InkColors.ORANGE, (midnight * 0.25f + sunrise * 3) * weatherWeight); weights.put(InkColors.LIME, (sunrise * 4f + noon * 0.5f) * weatherWeight); // noon weights.put(InkColors.GREEN, (sunrise * 0.5f + noon * 2.0f) * weatherWeight); - weights.put(InkColors.LIGHT_BLUE, (noon * 2.5f + rain) * weatherWeight); - weights.put(InkColors.CYAN, (noon * 2.5f - rain) * weatherWeight); + weights.put(InkColors.LIGHT_BLUE, (noon * 2.0f + rain) * weatherWeight); + weights.put(InkColors.CYAN, (noon * 2.0f - rain) * weatherWeight); // sunset - weights.put(InkColors.YELLOW, (noon * 0.25f + sunset * 3f) * weatherWeight); - weights.put(InkColors.RED, (sunset * 4f) * weatherWeight); - weights.put(InkColors.PINK, (sunset * 3f + midnight * 0.25f) * weatherWeight); + weights.put(InkColors.YELLOW, (noon * 0.25f + sunset * 4f) * weatherWeight); + weights.put(InkColors.RED, (sunset * 5f) * weatherWeight); + weights.put(InkColors.PINK, (sunset * 4f + midnight * 0.5f) * weatherWeight); // night - weights.put(InkColors.PURPLE, (sunset * 2 + midnight * 0.5f) * weatherWeight); + weights.put(InkColors.PURPLE, (sunset * 2 + midnight * 0.75f) * weatherWeight); weights.put(InkColors.BLUE, (midnight * 2f) * weatherWeight); // build output From 9fc88b324f343872f6c62d3565ce59fb1b9fecb9 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 19 Jun 2026 15:35:02 +0200 Subject: [PATCH 051/477] pastel node tweaks, omni nodes, tooltips --- .../blocks/ink/gen/DawnbrushBlockEntity.java | 1 + .../spectrum/blocks/ink/gen/TwillBlock.java | 1 + .../blocks/ink/gen/VantaclastBlock.java | 1 + .../network/PastelTransmissionLogic.java | 18 ++++++++ .../pastel_network/nodes/PastelNodeBlock.java | 6 ++- .../pastel_network/nodes/PastelNodeType.java | 18 +++----- .../payloads/InkPastelPayloadType.java | 10 +++-- .../capabilities/SpectrumCapabilities.java | 4 ++ .../registries/SpectrumBlockEntities.java | 3 +- .../spectrum/registries/SpectrumBlocks.java | 28 +++++++----- .../registries/SpectrumItemGroups.java | 4 ++ .../resources/assets/spectrum/lang/en_us.json | 44 ++++++++++++++++--- 12 files changed, 103 insertions(+), 35 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/DawnbrushBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/DawnbrushBlockEntity.java index 93abb7d000..6c5be0ba05 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/DawnbrushBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/DawnbrushBlockEntity.java @@ -10,6 +10,7 @@ import java.util.*; +// produces roughly ~10k Ink / ingame day public class DawnbrushBlockEntity extends InkGeneratorBlockEntity { public DawnbrushBlockEntity(BlockPos blockPos, BlockState blockState) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlock.java index f4ce7b622f..7d9b3a1696 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlock.java @@ -30,6 +30,7 @@ public MapCodec codec() { public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipFlag type) { super.appendHoverText(stack, context, tooltip, type); tooltip.add(Component.translatable("block.spectrum.twill.tooltip").withStyle(ChatFormatting.GRAY)); + tooltip.add(Component.translatable("block.spectrum.twill.tooltip2").withStyle(ChatFormatting.GRAY)); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlock.java index f0cbb4a6e7..6a70b23b96 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlock.java @@ -30,6 +30,7 @@ public MapCodec codec() { public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipFlag type) { super.appendHoverText(stack, context, tooltip, type); tooltip.add(Component.translatable("block.spectrum.vantaclast.tooltip").withStyle(ChatFormatting.GRAY)); + tooltip.add(Component.translatable("block.spectrum.vantaclast.tooltip2").withStyle(ChatFormatting.GRAY)); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index bfd430def3..aaef0422eb 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -6,6 +6,7 @@ import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.resources.*; +import net.neoforged.neoforge.registries.*; import org.jetbrains.annotations.*; import org.jgrapht.*; import org.jgrapht.alg.interfaces.*; @@ -13,6 +14,7 @@ import org.jgrapht.graph.*; import java.util.*; +import java.util.function.*; @SuppressWarnings("UnstableApiUsage") public class PastelTransmissionLogic { @@ -81,6 +83,22 @@ public Set getLoadedNodes(PastelNodeType type) { return this.network.getLoadedNodes(type, PastelNetwork.NodePriority.GENERIC); } + public Set getLoadedNodes(DeferredHolder payloadType) { + Set nodes = new HashSet<>(); + for(PastelNodeType type : PastelNodeType.values()) { + var loaded = this.getLoadedNodes(type); + for(PastelNodeBlockEntity entity : loaded) { + for(Supplier typeSupplier : entity.getSupportedPayloads()) { + if(typeSupplier.get().equals(payloadType.get())) { + nodes.add(entity); + break; + } + } + } + } + return nodes; + } + public void addTransmission(PastelNodeBlockEntity sourceNode, PastelNodeBlockEntity destinationNode, PastelTransmissionLogic.TransferMode transferMode, PastelTransmission transmission) { PastelNodeStatusUpdatePayload.sendPastelNodeStatusUpdate(List.of(sourceNode), true); destinationNode.markTransferred(transferMode != PastelTransmissionLogic.TransferMode.PUSH); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java index ce29212631..0ae1d79235 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java @@ -54,11 +54,13 @@ public class PastelNodeBlock extends SpectrumFacingBlock implements EntityBlock, protected final PastelNodeType pastelNodeType; protected final Set> supportedPayloads; + protected final List tooltips; - public PastelNodeBlock(Properties settings, PastelNodeType pastelNodeType, Set> supportedPayloads) { + public PastelNodeBlock(Properties settings, PastelNodeType pastelNodeType, Set> supportedPayloads, List tooltips) { super(settings.lightLevel(s -> s.getValue(LIT) ? 13 : 0)); this.pastelNodeType = pastelNodeType; this.supportedPayloads = supportedPayloads; + this.tooltips = tooltips; registerDefaultState(defaultBlockState().setValue(LIT, false).setValue(REDSTONE_EMITTING, false)); } @@ -120,7 +122,7 @@ public void setPlacedBy(Level world, BlockPos pos, BlockState state, @Nullable L @Override public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipFlag type) { super.appendHoverText(stack, context, tooltip, type); - tooltip.addAll(this.pastelNodeType.getTooltips()); + tooltip.addAll(this.tooltips); tooltip.add(Component.translatable("block.spectrum.pastel_network_nodes.tooltip.range", PastelNodeBlockEntity.RANGE).withStyle(ChatFormatting.GRAY)); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeType.java index eee8c4ce48..0b19d9888b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeType.java @@ -7,25 +7,19 @@ import java.util.*; public enum PastelNodeType implements StringRepresentable { - CONNECTION(List.of(Component.translatable("block.spectrum.connection_node.tooltip")), false, false), - STORAGE(List.of(Component.translatable("block.spectrum.storage_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY)), true, true), - PROVIDER(List.of(Component.translatable("block.spectrum.provider_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY)), false, true), - SENDER(List.of(Component.translatable("block.spectrum.sender_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY)), false, true), - GATHER(List.of(Component.translatable("block.spectrum.gather_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY)), true, false); + CONNECTION(false, false), + STORAGE(true, true), + PROVIDER(false, true), + SENDER(false, true), + GATHER(true, false); - private final List tooltips; private final boolean usesFilters, hasOuterRing; - PastelNodeType(List tooltips, boolean usesFilters, boolean hasOuterRing) { - this.tooltips = tooltips; + PastelNodeType(boolean usesFilters, boolean hasOuterRing) { this.usesFilters = usesFilters; this.hasOuterRing = hasOuterRing; } - public List getTooltips() { - return this.tooltips; - } - public boolean usesFilters() { return usesFilters; } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java index 5bbc778bb0..2a9f2bbc72 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java @@ -6,6 +6,7 @@ import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import de.dafuqs.spectrum.networking.s2c_payloads.*; import net.minecraft.core.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; @@ -30,8 +31,8 @@ public InkPastelPayloadType() { @Override public void tick(PastelTransmissionLogic logic, PastelNetwork.NodePriority priority) { - Set nodes = logic.getLoadedNodes(PastelNodeType.SENDER); - if (nodes.isEmpty()) return; + Set nodes = logic.getLoadedNodes(SpectrumPastelPayloadTypes.INK); + if (nodes.size() < 2) return; List targets = new ArrayList<>(nodes.size()); for (PastelNodeBlockEntity node : nodes) { @@ -41,7 +42,10 @@ public void tick(PastelTransmissionLogic logic, PastelNetwork.NodePriority prior } } - if (targets.isEmpty()) return; + if (targets.size() < 2) { + return; + } + InkTransferHelper.equalizeInk(targets); } diff --git a/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java b/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java index 6312798f22..bf54e65e02 100644 --- a/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java +++ b/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java @@ -64,6 +64,10 @@ public static void register(RegisterCapabilitiesEvent event) { event.registerItem(Capabilities.FluidHandler.ITEM, (stack, v) -> new FluidHandlerItemStackSimple.Consumable(SpectrumDataComponentTypes.FLUID_CONTENT, stack, 1000), SpectrumItems.MERMAIDS_GEM.get()); // Ink Blocks + event.registerBlockEntity(InkCapabilities.BLOCK, SpectrumBlockEntities.TWILL.get(), (blockEntity, context) -> BlockEntityInkCapability.of(blockEntity)); + event.registerBlockEntity(InkCapabilities.BLOCK, SpectrumBlockEntities.VANTACLAST.get(), (blockEntity, context) -> BlockEntityInkCapability.of(blockEntity)); + event.registerBlockEntity(InkCapabilities.BLOCK, SpectrumBlockEntities.DAWNBRUSH.get(), (blockEntity, context) -> BlockEntityInkCapability.of(blockEntity)); + event.registerBlockEntity(InkCapabilities.BLOCK, SpectrumBlockEntities.COLOR_PICKER.get(), (blockEntity, context) -> BlockEntityInkCapability.of(blockEntity)); event.registerBlockEntity(InkCapabilities.BLOCK, SpectrumBlockEntities.TINTING_STATION.get(), (blockEntity, context) -> BlockEntityInkCapability.of(blockEntity)); event.registerBlockEntity(InkCapabilities.BLOCK, SpectrumBlockEntities.CINDERHEARTH.get(), (blockEntity, context) -> BlockEntityInkCapability.of(blockEntity)); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java index fc46ab466f..456380d687 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java @@ -100,7 +100,8 @@ public class SpectrumBlockEntities { public static DeferredHolder, BlockEntityType> PASTEL_NODE = register("pastel_node", PastelNodeBlockEntity::new, SpectrumBlocks.CONNECTION_NODE, SpectrumBlocks.INK_NODE, SpectrumBlocks.ITEM_PROVIDER_NODE, SpectrumBlocks.ITEM_STORAGE_NODE, SpectrumBlocks.ITEM_SENDER_NODE, SpectrumBlocks.ITEM_GATHER_NODE, - SpectrumBlocks.FLUID_PROVIDER_NODE, SpectrumBlocks.FLUID_STORAGE_NODE, SpectrumBlocks.FLUID_SENDER_NODE, SpectrumBlocks.FLUID_GATHER_NODE); + SpectrumBlocks.FLUID_PROVIDER_NODE, SpectrumBlocks.FLUID_STORAGE_NODE, SpectrumBlocks.FLUID_SENDER_NODE, SpectrumBlocks.FLUID_GATHER_NODE, + SpectrumBlocks.OMNI_PROVIDER_NODE, SpectrumBlocks.OMNI_STORAGE_NODE, SpectrumBlocks.OMNI_SENDER_NODE, SpectrumBlocks.OMNI_GATHER_NODE); public static DeferredHolder, BlockEntityType> HUMMINGSTONE = register("hummingstone", HummingstoneBlockEntity::new, SpectrumBlocks.HUMMINGSTONE); public static DeferredHolder, BlockEntityType> PLACED_ITEM = register("placed_item", PlacedItemBlockEntity::new, SpectrumBlocks.INCANDESCENT_AMALGAM, SpectrumBlocks.THREAT_CONFLUX, SpectrumBlocks.PARAMETRIC_MINING_DEVICE, SpectrumBlocks.COLORFUL_SHOOTING_STAR, SpectrumBlocks.FIERY_SHOOTING_STAR, SpectrumBlocks.GEMSTONE_SHOOTING_STAR, SpectrumBlocks.GLISTERING_SHOOTING_STAR, SpectrumBlocks.PRISTINE_SHOOTING_STAR); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index 170d884290..f99679a8e3 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -58,6 +58,7 @@ import de.dafuqs.spectrum.particle.*; import de.dafuqs.spectrum.particle.effect.*; import de.dafuqs.spectrum.registries.client.*; +import net.minecraft.*; import net.minecraft.client.renderer.*; import net.minecraft.core.*; import net.minecraft.core.component.*; @@ -574,20 +575,25 @@ private static BlockBehaviour.Properties pastelNode(SoundType soundGroup) { return settings(MapColor.NONE, soundGroup, 1.0F).pushReaction(PushReaction.DESTROY).noOcclusion(); } - public static final DeferredBlock CONNECTION_NODE = register(blockWithItem("connection_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.CONNECTION, Set.of()), () -> IS.of(), InkColors.LIGHT_GRAY).withPredefinedItemModel()); + public static final DeferredBlock CONNECTION_NODE = register(blockWithItem("connection_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.CONNECTION, Set.of(), List.of(Component.translatable("block.spectrum.connection_node.tooltip"))), () -> IS.of(), InkColors.LIGHT_GRAY).withPredefinedItemModel()); - public static final DeferredBlock INK_NODE = register(blockWithItem("ink_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.INK)), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); + public static final DeferredBlock INK_NODE = register(blockWithItem("ink_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.ink_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); // TODO: rename ids to "item_*" with next major update - public static final DeferredBlock ITEM_PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.ITEM)), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); - public static final DeferredBlock ITEM_STORAGE_NODE = register(blockWithItem("storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.ITEM)), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); - public static final DeferredBlock ITEM_SENDER_NODE = register(blockWithItem("sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.ITEM)), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); - public static final DeferredBlock ITEM_GATHER_NODE = register(blockWithItem("gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(SpectrumPastelPayloadTypes.ITEM)), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); - - public static final DeferredBlock FLUID_PROVIDER_NODE = register(blockWithItem("fluid_provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.FLUID)), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); - public static final DeferredBlock FLUID_STORAGE_NODE = register(blockWithItem("fluid_storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.FLUID)), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); - public static final DeferredBlock FLUID_SENDER_NODE = register(blockWithItem("fluid_sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.FLUID)), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); - public static final DeferredBlock FLUID_GATHER_NODE = register(blockWithItem("fluid_gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(SpectrumPastelPayloadTypes.FLUID)), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); + public static final DeferredBlock ITEM_PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.provider_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); + public static final DeferredBlock ITEM_STORAGE_NODE = register(blockWithItem("storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.storage_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); + public static final DeferredBlock ITEM_SENDER_NODE = register(blockWithItem("sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.sender_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); + public static final DeferredBlock ITEM_GATHER_NODE = register(blockWithItem("gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.gather_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); + + public static final DeferredBlock FLUID_PROVIDER_NODE = register(blockWithItem("fluid_provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_provider_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); + public static final DeferredBlock FLUID_STORAGE_NODE = register(blockWithItem("fluid_storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_storage_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); + public static final DeferredBlock FLUID_SENDER_NODE = register(blockWithItem("fluid_sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_sender_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); + public static final DeferredBlock FLUID_GATHER_NODE = register(blockWithItem("fluid_gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_gather_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); + + public static final DeferredBlock OMNI_PROVIDER_NODE = register(blockWithItem("omni_provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_provider_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); + public static final DeferredBlock OMNI_STORAGE_NODE = register(blockWithItem("omni_storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_storage_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); + public static final DeferredBlock OMNI_SENDER_NODE = register(blockWithItem("omni_sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_sender_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); + public static final DeferredBlock OMNI_GATHER_NODE = register(blockWithItem("omni_gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_gather_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); // COLORED BLOCK FAMILIES diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java index ebbe772933..15b7e23fc3 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java @@ -257,6 +257,10 @@ public static void registerSubTabs() { entries.accept(SpectrumBlocks.FLUID_SENDER_NODE); entries.accept(SpectrumBlocks.FLUID_STORAGE_NODE); entries.accept(SpectrumBlocks.FLUID_GATHER_NODE); + entries.accept(SpectrumBlocks.OMNI_PROVIDER_NODE); + entries.accept(SpectrumBlocks.OMNI_SENDER_NODE); + entries.accept(SpectrumBlocks.OMNI_STORAGE_NODE); + entries.accept(SpectrumBlocks.OMNI_GATHER_NODE); entries.accept(SpectrumBlocks.LIGHT_LEVEL_DETECTOR); entries.accept(SpectrumBlocks.WEATHER_DETECTOR); diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 64c775be48..08efcce524 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -1112,7 +1112,7 @@ "block.spectrum.colorful_shooting_star": "Colorful Shooting Star", "block.spectrum.compacting_chest": "Compacting Chest", "block.spectrum.compacting_chest.toggle_crafting_mode": "Toggle Crafting Mode", - "block.spectrum.connection_node": "§7Pastel Network Connection Node", + "block.spectrum.connection_node": "§7Pastel Connection Node", "block.spectrum.connection_node.tooltip": "Extends the range of your Network", "block.spectrum.copper_cluster": "Copper Cluster", "block.spectrum.courier_statue": "Ancient Statue", @@ -1269,7 +1269,7 @@ "block.spectrum.fusion_shrine": "Fusion Shrine", "block.spectrum.fusion_shrine_basalt": "Fusion Shrine", "block.spectrum.fusion_shrine_calcite": "Fusion Shrine", - "block.spectrum.gather_node": "§8Pastel Network Gather Node", + "block.spectrum.gather_node": "§8Pastel Gather Node", "block.spectrum.gather_node.tooltip": "Gathers items from Sender, Provider and Storage Nodes", "block.spectrum.gemstone_shooting_star": "Gemstone Shooting Star", "block.spectrum.ghast_head": "Ghast Head", @@ -1732,7 +1732,7 @@ "block.spectrum.prismarine_cluster": "Prismarine Cluster", "block.spectrum.pristine_shooting_star": "Pristine Shooting Star", "block.spectrum.projectile_idol.tooltip": "§7Shoots a %s", - "block.spectrum.provider_node": "§dPastel Network Provider Node", + "block.spectrum.provider_node": "§dPastel Provider Node", "block.spectrum.provider_node.tooltip": "Supplies Gather Nodes with items", "block.spectrum.pufferfish_head": "Pufferfish Head", "block.spectrum.pufferfish_idol": "Inconspicuous Idol", @@ -1847,7 +1847,7 @@ "block.spectrum.sawblade_grass": "Sawblade Grass", "block.spectrum.sawblade_holly_bush": "Sawblade Holly Bush", "block.spectrum.semi_permeable_glass": "Semi-Permeable Glass", - "block.spectrum.sender_node": "§ePastel Network Sender Node", + "block.spectrum.sender_node": "§ePastel Sender Node", "block.spectrum.sender_node.tooltip": "Sends items to Gather and Storage Nodes", "block.spectrum.shale_clay": "Shale Clay", "block.spectrum.shale_clay_brick_slab": "Shale Clay Brick Slab", @@ -1962,7 +1962,7 @@ "block.spectrum.squid_idol": "Clumsy Idol", "block.spectrum.stardust_block": "Block of Stardust", "block.spectrum.stone_shimmerstone_light": "Stone Shimmerstone Light", - "block.spectrum.storage_node": "§bPastel Network Storage Node", + "block.spectrum.storage_node": "§bPastel Storage Node", "block.spectrum.storage_node.tooltip": "Serves as storage for Sender and Gather Nodes", "block.spectrum.stratine_floatblock": "Stratine Floatblock", "block.spectrum.stratine_ore": "Stratine Ore", @@ -6040,5 +6040,37 @@ "book.spectrum.guidebook.mysterious_locket.page5.title": "The unidentified Note", "block.spectrum.tinting_station": "Tinting Station", - "block.spectrum.tinting_station.tooltip": "Fills Ink equipment and recolors items that have color variants" + "block.spectrum.tinting_station.tooltip": "Fills Ink equipment and recolors items that have color variants", + "block.spectrum.twill": "Twill", + "block.spectrum.twill.tooltip": "Generates Ink by fishing tiny fragments of Pigment out of the air", + "block.spectrum.twill.tooltip2": "Place in the vicinity of colored trees", + "block.spectrum.vantaclast": "Vantaclast", + "block.spectrum.vantaclast.tooltip": "Generates Ink by consuming colored blocks", + "block.spectrum.vantaclast.tooltip2": "Place in the vicinity of colored trees", + "block.spectrum.dawnbrush": "Dawnbrush", + "block.spectrum.dawnbrush.tooltip": "Generates Ink based on weather and time of day", + + "block.spectrum.ink_node": "Pastel Ink Node", + "block.spectrum.ink_node.tooltip": "Balances out Ink between all connected blocks", + "block.spectrum.ink_pastel_network_nodes.tooltip.placing": "Place against magical machinery", + + "block.spectrum.fluid_provider_node": "§dPastel Fluid Provider Node", + "block.spectrum.fluid_provider_node.tooltip": "Supplies Gather Nodes with fluids", + "block.spectrum.fluid_sender_node": "§ePastel Fluid Sender Node", + "block.spectrum.fluid_sender_node.tooltip": "Sends fluids to Gather and Storage Nodes", + "block.spectrum.fluid_storage_node": "§bPastel Fluid Storage Node", + "block.spectrum.fluid_storage_node.tooltip": "Serves as storage for Sender and Gather Nodes", + "block.spectrum.fluid_gather_node": "§8Pastel Fluid Gather Node", + "block.spectrum.fluid_gather_node.tooltip": "Gathers fluids from Sender, Provider and Storage Nodes", + "block.spectrum.fluid_pastel_network_nodes.tooltip.placing": "Place against some form of tank", + + "block.spectrum.omni_provider_node": "§dPastel Omni Provider Node", + "block.spectrum.omni_provider_node.tooltip": "Supplies Gather Nodes with items and fluids", + "block.spectrum.omni_sender_node": "§ePastel Omni Sender Node", + "block.spectrum.omni_sender_node.tooltip": "Sends items and fluids to Gather and Storage Nodes", + "block.spectrum.omni_storage_node": "§bPastel Omni Storage Node", + "block.spectrum.omni_storage_node.tooltip": "Serves as storage for Sender and Gather Nodes", + "block.spectrum.omni_gather_node": "§8Pastel Omni Gather Node", + "block.spectrum.omni_gather_node.tooltip": "Gathers items and fluids from Sender, Provider and Storage Nodes", + "block.spectrum.omni_pastel_network_nodes.tooltip.placing": "Place against things. It will probably work." } From a896788739fa6edbdd4a7304a2d1d6148635e715 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 19 Jun 2026 15:46:07 +0200 Subject: [PATCH 052/477] ink transfer fix --- .../java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java b/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java index cbe1012eee..ea89fed25f 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java @@ -110,7 +110,8 @@ private static void equalizeInk(List targets, InkColor color) { for (InkStorage s : accepting) { long room = s.getRoom(color); if (room > 0) { - long added = room - s.addEnergy(color, room); + long toAdd = Math.min(pooled, room); + long added = -s.addEnergy(color, toAdd); pooled -= added; } if (pooled <= 0) break; From b124c9d96d971a7a742342bf5bdf197ee72c7430 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 22 Jun 2026 18:47:17 +0200 Subject: [PATCH 053/477] make wither heads explosion proof --- .../de/dafuqs/spectrum/registries/SpectrumBlocks.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index f99679a8e3..096ed8a592 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -100,6 +100,7 @@ import static de.dafuqs.spectrum.SpectrumCommon.*; import static de.dafuqs.spectrum.data.SpectrumModelHelper.*; import static de.dafuqs.spectrum.registries.SpectrumItems.*; +import static me.shedaniel.rei.api.common.entry.comparison.EntryComparator.component; import static net.minecraft.world.level.block.Blocks.*; @SuppressWarnings({"unused"}) @@ -1910,7 +1911,14 @@ public static void register(IEventBus eventBus) { for (SpectrumSkullType type : SpectrumSkullType.values()) { BlockRegistrar head = block(type.getSerializedName() + "_head", () -> new SpectrumSkullBlock(type, BlockBehaviour.Properties.ofFullCopy(SKELETON_SKULL).instrument(NoteBlockInstrument.CUSTOM_HEAD))).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerParentedItemModel(ctx, block, SpectrumModelTemplates.SKULL_ITEM)).withBlockModel((ctx, block) -> SpectrumModelHelper.createVariantsSupplier(block, SpectrumModelTemplates.MOB_HEAD)); DeferredBlock wallHead = register(block(type.getSerializedName() + "_wall_head", () -> new SpectrumWallSkullBlock(type, BlockBehaviour.Properties.ofFullCopy(SKELETON_SKULL).dropsLike(head.holder.get()))).withBlockModel((ctx, block) -> SpectrumModelHelper.createVariantsSupplier(block, SpectrumModelTemplates.MOB_HEAD))); - register(head.withItem(block -> new SpectrumSkullBlockItem(block, wallHead.get(), IS.of(), type))); + + register(head.withItem(block -> { + Item.Properties itemProperies = IS.of(); + if (type == SpectrumSkullType.WITHER) { + itemProperies = itemProperies.component(SpectrumDataComponentTypes.DAMAGE_IMMUNE, List.of(DamageTypeTags.IS_EXPLOSION)); + } + return new SpectrumSkullBlockItem(block, wallHead.get(), itemProperies, type); + })); } REGISTRAR.register(eventBus); From 65050dab03a5ace8df70052ded3c685841147d71 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 4 Jul 2026 07:40:59 +0200 Subject: [PATCH 054/477] make fluid colors more expressive; configs for fluid drip speed --- .../spectrum/config/SpectrumConfig.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java b/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java index 4f5adcb6db..2a3d9736e0 100644 --- a/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java +++ b/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java @@ -1,6 +1,7 @@ package de.dafuqs.spectrum.config; import net.minecraft.resources.*; +import net.minecraft.world.level.*; import net.neoforged.neoforge.common.*; import org.apache.commons.lang3.tuple.*; @@ -147,6 +148,11 @@ public class SpectrumConfig { public final ModConfigSpec.ConfigValue DecayIsStoppedBySupportedClaimMods; public final ModConfigSpec.ConfigValue REIListsUnrevealedRecipesAsNotUnlocked; + public final ModConfigSpec.ConfigValue DragonrotDripstoneDripChance; + public final ModConfigSpec.ConfigValue LiquidCrystalDripstoneDripChance; + public final ModConfigSpec.ConfigValue MidnightSolutionDripstoneDripChance; + public final ModConfigSpec.ConfigValue SludgeDripstoneDripChance; + private SpectrumConfig(ModConfigSpec.Builder builder) { ToastTimeMilliseconds = builder .translation("config.spectrum.toast_milliseconds") @@ -644,6 +650,23 @@ private SpectrumConfig(ModConfigSpec.Builder builder) { Setting this value to false will instead not show this screen, showing no recipes whatsoever, until unlocked """) .define("rei_lists_unrevealed_recipes_as_not_unlocked", true); + + DragonrotDripstoneDripChance = builder + .translation("config.spectrum.dragonrot_dripstone_drip_chance") + .comment("The chance for Dripstone to fill a Cauldron with Dragonrot") + .define("dragonrot_dripstone_drip_chance", 0.01D); + LiquidCrystalDripstoneDripChance = builder + .translation("config.spectrum.liquid_crystal_dripstone_drip_chance") + .comment("The chance for Dripstone to fill a Cauldron with Liquid Crystal") + .define("liquid_crystal_dripstone_drip_chance", 0.01D); + MidnightSolutionDripstoneDripChance = builder + .translation("config.spectrum.midnight_solution_dripstone_drip_chance") + .comment("The chance for Dripstone to fill a Cauldron with Midnight Solution") + .define("midnight_solution_dripstone_drip_chance", 0.01D); + SludgeDripstoneDripChance = builder + .translation("config.spectrum.sludge_dripstone_drip_chance") + .comment("The chance for Dripstone to fill a Cauldron with Sludge") + .define("sludge_dripstone_drip_chance", 0.01D); } public final boolean canPedestalCraftVanillaRecipes() { From cda8adde6b99818470502aaa4c25ad4ca13a536e Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 4 Jul 2026 07:45:12 +0200 Subject: [PATCH 055/477] make fluid colors more expressive; configs for fluid drip speed --- .../spectrum/registries/SpectrumFluids.java | 38 +++++++++---------- .../resources/assets/spectrum/lang/en_us.json | 4 ++ 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java index 2d4c009596..f8b3cb4e2f 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java @@ -4,6 +4,7 @@ import com.mojang.blaze3d.vertex.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.blocks.fluid.*; +import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.*; import net.minecraft.client.*; @@ -13,7 +14,6 @@ import net.minecraft.resources.*; import net.minecraft.sounds.*; import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; import net.minecraft.world.level.material.*; import net.minecraft.world.level.pathfinder.*; import net.neoforged.bus.api.*; @@ -39,7 +39,7 @@ public class SpectrumFluids { .pathType(PathType.WATER).adjacentPathType(PathType.WATER_BORDER) .density(800).viscosity(1000).temperature(200) .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL).sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY) - .addDripstoneDripping(PointedDripstoneBlock.LAVA_TRANSFER_PROBABILITY_PER_RANDOM_TICK, SpectrumParticleTypes.DRIPPING_LIQUID_CRYSTAL, SpectrumBlocks.LIQUID_CRYSTAL_CAULDRON.get(), SoundEvents.POINTED_DRIPSTONE_DRIP_WATER_INTO_CAULDRON)) { + .addDripstoneDripping(SpectrumConfig.CONFIG.LiquidCrystalDripstoneDripChance.get().floatValue(), SpectrumParticleTypes.DRIPPING_LIQUID_CRYSTAL, SpectrumBlocks.LIQUID_CRYSTAL_CAULDRON.get(), SoundEvents.POINTED_DRIPSTONE_DRIP_WATER_INTO_CAULDRON)) { @Override public boolean isVaporizedOnPlacement(Level level, BlockPos pos, FluidStack stack) { @@ -56,8 +56,8 @@ public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos }); public static final DeferredHolder LIQUID_CRYSTAL = registerFluid("liquid_crystal", LiquidCrystalFluid.Still::new); public static final DeferredHolder FLOWING_LIQUID_CRYSTAL = registerFluid("flowing_liquid_crystal", LiquidCrystalFluid.Flowing::new); - public static final int LIQUID_CRYSTAL_TINT = 0xFFcbbbcb; - public static final Vector3f LIQUID_CRYSTAL_COLOR_VEC = SpectrumColorHelper.colorIntToVec(LIQUID_CRYSTAL_TINT); + public static final int LIQUID_CRYSTAL_COLOR = 0xFFcbbbcb; + public static final Vector3f LIQUID_CRYSTAL_COLOR_VEC = SpectrumColorHelper.colorIntToVec(LIQUID_CRYSTAL_COLOR); public static final float LIQUID_CRYSTAL_OVERLAY_ALPHA = 0.6F; // SLUDGE @@ -69,7 +69,7 @@ public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos .pathType(PathType.WATER).adjacentPathType(PathType.WATER_BORDER) .density(5000).viscosity(8000).temperature(350) .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL).sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY) - .addDripstoneDripping(PointedDripstoneBlock.LAVA_TRANSFER_PROBABILITY_PER_RANDOM_TICK, SpectrumParticleTypes.DRIPPING_SLUDGE, SpectrumBlocks.SLUDGE_CAULDRON.get(), SoundEvents.POINTED_DRIPSTONE_DRIP_WATER_INTO_CAULDRON)) { + .addDripstoneDripping(SpectrumConfig.CONFIG.SludgeDripstoneDripChance.get().floatValue(), SpectrumParticleTypes.DRIPPING_SLUDGE, SpectrumBlocks.SLUDGE_CAULDRON.get(), SoundEvents.POINTED_DRIPSTONE_DRIP_WATER_INTO_CAULDRON)) { @Override public boolean isVaporizedOnPlacement(Level level, BlockPos pos, FluidStack stack) { @@ -86,8 +86,8 @@ public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos }); public static final DeferredHolder SLUDGE = registerFluid("sludge", SludgeFluid.StillSludge::new); public static final DeferredHolder FLOWING_SLUDGE = registerFluid("flowing_sludge", SludgeFluid.FlowingSludge::new); - public static final int SLUDGE_TINT = 0xFF4e2e0a; - public static final Vector3f SLUDGE_COLOR_VEC = SpectrumColorHelper.colorIntToVec(SLUDGE_TINT); + public static final int SLUDGE_COLOR = 0xFF4e2e0a; + public static final Vector3f SLUDGE_COLOR_VEC = SpectrumColorHelper.colorIntToVec(SLUDGE_COLOR); public static final float SLUDGE_OVERLAY_ALPHA = 0.995F; // MIDNIGHT SOLUTION @@ -99,7 +99,7 @@ public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos .pathType(PathType.LAVA).adjacentPathType(null) .density(1500).viscosity(2000).temperature(300) .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL).sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY) - .addDripstoneDripping(PointedDripstoneBlock.LAVA_TRANSFER_PROBABILITY_PER_RANDOM_TICK, SpectrumParticleTypes.DRIPPING_MIDNIGHT_SOLUTION, SpectrumBlocks.MIDNIGHT_SOLUTION_CAULDRON.get(), SoundEvents.POINTED_DRIPSTONE_DRIP_WATER_INTO_CAULDRON)) { + .addDripstoneDripping(SpectrumConfig.CONFIG.MidnightSolutionDripstoneDripChance.get().floatValue(), SpectrumParticleTypes.DRIPPING_MIDNIGHT_SOLUTION, SpectrumBlocks.MIDNIGHT_SOLUTION_CAULDRON.get(), SoundEvents.POINTED_DRIPSTONE_DRIP_WATER_INTO_CAULDRON)) { @Override public boolean isVaporizedOnPlacement(Level level, BlockPos pos, FluidStack stack) { @@ -116,8 +116,8 @@ public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos }); public static final DeferredHolder MIDNIGHT_SOLUTION = registerFluid("midnight_solution", MidnightSolutionFluid.Still::new); public static final DeferredHolder FLOWING_MIDNIGHT_SOLUTION = registerFluid("flowing_midnight_solution", MidnightSolutionFluid.Flowing::new); - public static final int MIDNIGHT_SOLUTION_TINT = 0xFF11183b; - public static final Vector3f MIDNIGHT_SOLUTION_COLOR_VEC = SpectrumColorHelper.colorIntToVec(MIDNIGHT_SOLUTION_TINT); + public static final int MIDNIGHT_SOLUTION_COLOR = 0xFF11183b; + public static final Vector3f MIDNIGHT_SOLUTION_COLOR_VEC = SpectrumColorHelper.colorIntToVec(MIDNIGHT_SOLUTION_COLOR); public static final float MIDNIGHT_SOLUTION_OVERLAY_ALPHA = 0.995F; // DRAGONROT @@ -129,7 +129,7 @@ public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos .pathType(PathType.LAVA).adjacentPathType(null) .density(2000).viscosity(3000).temperature(650) .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL).sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY) - .addDripstoneDripping(PointedDripstoneBlock.LAVA_TRANSFER_PROBABILITY_PER_RANDOM_TICK, SpectrumParticleTypes.DRIPPING_DRAGONROT, SpectrumBlocks.DRAGONROT_CAULDRON.get(), SoundEvents.POINTED_DRIPSTONE_DRIP_WATER_INTO_CAULDRON)) { + .addDripstoneDripping(SpectrumConfig.CONFIG.DragonrotDripstoneDripChance.get().floatValue(), SpectrumParticleTypes.DRIPPING_DRAGONROT, SpectrumBlocks.DRAGONROT_CAULDRON.get(), SoundEvents.POINTED_DRIPSTONE_DRIP_WATER_INTO_CAULDRON)) { @Override public boolean isVaporizedOnPlacement(Level level, BlockPos pos, FluidStack stack) { @@ -146,8 +146,8 @@ public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos }); public static final DeferredHolder DRAGONROT = registerFluid("dragonrot", DragonrotFluid.Still::new); public static final DeferredHolder FLOWING_DRAGONROT = registerFluid("flowing_dragonrot", DragonrotFluid.Flowing::new); - public static final int DRAGONROT_TINT = 0xFFe3772f; - public static final Vector3f DRAGONROT_COLOR_VEC = SpectrumColorHelper.colorIntToVec(DRAGONROT_TINT); + public static final int DRAGONROT_COLOR = 0xFFe3772f; + public static final Vector3f DRAGONROT_COLOR_VEC = SpectrumColorHelper.colorIntToVec(DRAGONROT_COLOR); public static final float DRAGONROT_OVERLAY_ALPHA = 0.98F; public static void register(IEventBus eventBus) { @@ -164,16 +164,16 @@ private static DeferredHolder registerFluid(String name, S } public static void registerClient(RegisterClientExtensionsEvent event) { - setupFluidRendering(event, LIQUID_CRYSTAL_TYPE.get(), "liquid_crystal", LIQUID_CRYSTAL_TINT, LIQUID_CRYSTAL_OVERLAY_ALPHA); - setupFluidRendering(event, SLUDGE_TYPE.get(), "sludge", SLUDGE_TINT, SLUDGE_OVERLAY_ALPHA); - setupFluidRendering(event, MIDNIGHT_SOLUTION_TYPE.get(), "midnight_solution", MIDNIGHT_SOLUTION_TINT, MIDNIGHT_SOLUTION_OVERLAY_ALPHA); - setupFluidRendering(event, DRAGONROT_TYPE.get(), "dragonrot", DRAGONROT_TINT, DRAGONROT_OVERLAY_ALPHA); + setupFluidRendering(event, LIQUID_CRYSTAL_TYPE.get(), "liquid_crystal", LIQUID_CRYSTAL_OVERLAY_ALPHA); + setupFluidRendering(event, SLUDGE_TYPE.get(), "sludge", SLUDGE_OVERLAY_ALPHA); + setupFluidRendering(event, MIDNIGHT_SOLUTION_TYPE.get(), "midnight_solution", MIDNIGHT_SOLUTION_OVERLAY_ALPHA); + setupFluidRendering(event, DRAGONROT_TYPE.get(), "dragonrot", DRAGONROT_OVERLAY_ALPHA); ItemBlockRenderTypes.setRenderLayer(LIQUID_CRYSTAL.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(FLOWING_LIQUID_CRYSTAL.get(), RenderType.translucent()); } - private static void setupFluidRendering(RegisterClientExtensionsEvent event, final FluidType fluidType, final String name, int tint, float overlayAlpha) { + private static void setupFluidRendering(RegisterClientExtensionsEvent event, final FluidType fluidType, final String name, float overlayAlpha) { ResourceLocation overlay = SpectrumCommon.locate("textures/misc/" + name + "_overlay.png"); ResourceLocation still = SpectrumCommon.locate("block/" + name + "_still"); ResourceLocation flowing = SpectrumCommon.locate("block/" + name + "_flow"); @@ -197,7 +197,7 @@ public void renderOverlay(Minecraft mc, PoseStack stack) { @Override public int getTintColor() { - return tint; + return -1; } }, fluidType); } diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 3cd8214a9d..0933099bb8 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -5880,6 +5880,10 @@ "config.spectrum.nightfalls_blade_mining_speed": "Mining speed of the Nightfalls Blade", "config.spectrum.nightfalls_blade_attack_damage": "Attack damage of the Nightfalls Blade", "config.spectrum.nightfalls_blade_enchantability": "Enchantability of the Nightfalls Blade", + "config.spectrum.dragonrot_dripstone_drip_chance": "Dragonrot Dripstone Drip Chance", + "config.spectrum.liquid_crystal_dripstone_drip_chance": "Liquid Crystal Dripstone Drip Chance", + "config.spectrum.midnight_solution_dripstone_drip_chance": "Midnight Solution Dripstone Drip Chance", + "config.spectrum.sludge_dripstone_drip_chance": "Sludge Dripstone Drip Chance", "trinkets.slot.chest.pin": "Pin", "trinkets.slot.head.crown": "Crown", From 11a80968c4bcb3ccaa1605d7b245d8f95e46c1dc Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 4 Jul 2026 07:51:34 +0200 Subject: [PATCH 056/477] tweak fluid colors and overlays --- .../spectrum/registries/SpectrumFluids.java | 6 +++--- .../textures/block/midnight_solution_flow.png | Bin 362 -> 4465 bytes .../block/midnight_solution_still.png | Bin 219 -> 4327 bytes .../spectrum/textures/block/sludge_flow.png | Bin 3277 -> 6721 bytes .../spectrum/textures/block/sludge_still.png | Bin 3657 -> 7464 bytes .../textures/misc/dragonrot_overlay.png | Bin 185 -> 4287 bytes .../textures/misc/liquid_crystal_overlay.png | Bin 1310 -> 4210 bytes .../misc/midnight_solution_overlay.png | Bin 581 -> 4287 bytes .../spectrum/textures/misc/sludge_overlay.png | Bin 1310 -> 4209 bytes 9 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java index f8b3cb4e2f..168fa12617 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java @@ -88,7 +88,7 @@ public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos public static final DeferredHolder FLOWING_SLUDGE = registerFluid("flowing_sludge", SludgeFluid.FlowingSludge::new); public static final int SLUDGE_COLOR = 0xFF4e2e0a; public static final Vector3f SLUDGE_COLOR_VEC = SpectrumColorHelper.colorIntToVec(SLUDGE_COLOR); - public static final float SLUDGE_OVERLAY_ALPHA = 0.995F; + public static final float SLUDGE_OVERLAY_ALPHA = 1.0F; // MIDNIGHT SOLUTION public static final int MIDNIGHT_SOLUTION_LIGHT_LEVEL = 0; @@ -118,7 +118,7 @@ public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos public static final DeferredHolder FLOWING_MIDNIGHT_SOLUTION = registerFluid("flowing_midnight_solution", MidnightSolutionFluid.Flowing::new); public static final int MIDNIGHT_SOLUTION_COLOR = 0xFF11183b; public static final Vector3f MIDNIGHT_SOLUTION_COLOR_VEC = SpectrumColorHelper.colorIntToVec(MIDNIGHT_SOLUTION_COLOR); - public static final float MIDNIGHT_SOLUTION_OVERLAY_ALPHA = 0.995F; + public static final float MIDNIGHT_SOLUTION_OVERLAY_ALPHA = 1.0F; // DRAGONROT public static final int DRAGONROT_LIGHT_LEVEL = 15; @@ -148,7 +148,7 @@ public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos public static final DeferredHolder FLOWING_DRAGONROT = registerFluid("flowing_dragonrot", DragonrotFluid.Flowing::new); public static final int DRAGONROT_COLOR = 0xFFe3772f; public static final Vector3f DRAGONROT_COLOR_VEC = SpectrumColorHelper.colorIntToVec(DRAGONROT_COLOR); - public static final float DRAGONROT_OVERLAY_ALPHA = 0.98F; + public static final float DRAGONROT_OVERLAY_ALPHA = 1.0F; public static void register(IEventBus eventBus) { FLUID_REGISTRAR.register(eventBus); diff --git a/src/main/resources/assets/spectrum/textures/block/midnight_solution_flow.png b/src/main/resources/assets/spectrum/textures/block/midnight_solution_flow.png index e6643cf7718a8d204efa96e5c622e49aa24c7450..330704d0bfc22ac7e2ac28083a900c42759027dd 100644 GIT binary patch literal 4465 zcmeHKe{dAl9bZBq;gS=T9}P~1?ko`@c5nCg_I|B7e%%Ff)x$J7F=0@AyZiQ7b9cMk zZtgA#ffghXf+$*X1g9dyFPXs^bfgF(zoL=WAT3%nHBBoxfl_LvPN9WL-|i*hGIhqu zjQ-=~Zf^Iz@B4f|@B96{?|XBvwQ~MEtK}{WhGEuVMW713aSY4B@<*fAxnTSfdL3&F z*XUIsg{uiglA{pU8&rtHv@Bs*x+_+B%z6SZywS971GayJ<2HHshgNR6HM#BdS0(TN z#oqxgymYl-^2nk|o(U(Ny<7kMn+aR)9Mj^eD=fQ|dvJU2jDBQd1U?hi^um{p7Z_UMo~k_U9F>gx_2ME=$+E~piH zPL=Qa^*zmNZojYGvat2zoYOUvc2A%F`fHD}r%F5D-g0r)*PR!!Wg|ZMxb}{lC1euA zMy!_o{>q@=-=7Rh;l<{SNA5o{tN5M8XEv=17yk|4_Vmk^m5+qmf3~M4w_wNK(|cB( z+;L=U(ErS5pG`Y3vG~TmntFBVA3i$v(CxV^ets=)?X%n3etGTi_S3|>tIo}M>(JE$ zO?mm9rPZBBi?=?$Y2*C%cNQ&wsPHiH1h%rMV{Q8bz87lWKdvq7KGAXZP|*ihW?b#P zP;HqyavAYu@fmAddR1CF^Ly_X}{RW z&cD+3xlMxpyMHxxL+PHm|DJOSuKwr5$QuhImz%EqsHLFmr!AM*H5-rK`Ao&^C)RVN zyN}OVzu?L7%#c_ z%Q<^nVk>_9$K<8lf6N^D@WPJ8bvduUwB5}u{3`!K&uH7L_icVFZ_(eeRSzB%D>j_p zHGO>B(d(0%t0xy77}a?8(?4}x_cUX#efZH8tE%R&e{Nb+_qlFg_u>CG?dS(-xxF{lGP9gD^_F6|>sUJkVlGezJgM6dG^ zHK9t}uOuMO+E^P+mZ#+;L(H(?WeHK@sseNSC{WKwEYWq9qo`CWWlK41N+LqpyVrK+H&)F%X3o`i9IN;ZWk4EU?{iKv;5C{Qp8 zV+g9DS?z_CwF0Pi4lf9@t2p+X@p zpa}Iwc)@^=Fy`k(MUX|#YE!J!$+{Ux@=lMJbV@WMxM=8xz@9}FjB7fG z3(%lK7P?86g)R~}fR|)l9@YbCC*yI@SriW@WK@+PnjMuvB_b-j zC@~W6b&w9P2T_S04+#XjM0!~dfPiNK;}T6OQQ+n(i5Ni3DaSwrQffS64j6)Svnzu> zg0W?0H7%7rvOOF%pV(fQF=u>E%V8;U{nNG#)IB$9TBcB7sgq{r^%NlD@Xstgy; zGlHqY0K2A0dI}`q>k`Yv2vXpUR^k-W} z{huCXCLrsGL4Fw=x))i-s1>yuh82u6 zej~8WFBTzVo*oR9=lwM=cT{QKz9;7h=rTPy7?>SScU?ZU&x&EW7+sRQIrF!ZHvMa* l)Eh0^lb$-H=znlvb-~h66Yie1#ZVLrmd_8oI_I&K{{zhp1?&I- literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^3JeTP3><7g)??4S*FcJ~ILO_JVcj{Imq50Pr;B4q z#hkb23w4hxMBpiuC1 L^>bP0l+XkKyB{E( diff --git a/src/main/resources/assets/spectrum/textures/block/midnight_solution_still.png b/src/main/resources/assets/spectrum/textures/block/midnight_solution_still.png index 17f072d7919e840288bb8c4258fed179c9c2483d..e39e8bd247874b67b576a349f476bb2c95f9335e 100644 GIT binary patch literal 4327 zcmeHKYj6`)6kbXnp{0USuxbZ)wu(^L>}HcR$L`fAt5Yn+!i*IV6{*(FAX-LVf)4T!^ls9Yback)jQXqTB)fa= zcfNbhch5P~T~SmxE;;e>LDccpZo!F^DD}-qjwwd`9a(%*@_%CTW2;f zhgavXt)FmoY}&DzXEwg*O1q5iShGEG@eEhv||->Q4#6!uBY_hSwp`fY!8f~Gm6r1?nNw&ymk zEo?kizFXxi)BAX<6~|lPjL-e-OQ%eim$MGjB>85)vAZ?`&U@-pKB%{Xr`L+taTNTa~dp z|90+YV975--20}xuT+58EZ?{`-;sE#m@BH2N4SD^r?hqs^JLG4$*+4;A;1+#W?AoDv3>A4RHqGcHoqijbB^Fc#KuJ}hi>sQ= zS$HgaOk!4uh6G-qFlfl@@yT?^iiLS;c(0lX3=Kn+*;cI7S%li806+~|gO}OZ zgu@PGE+G09QSzZGC&Nk=iWS4)I@%eZ*Y9+8(fi~M6`&qOi18CTElGI2M6`#jJVyWz@It5zchz;TL&}#djS&>685M{Xk+^{LqQzc+ddr1pf)Zo` zAjb`Lgj&G@4QquC?>MRv-SNR$Ks^U28BUt;D9JFQBUwV77@gT>5r5GmD-4JlG0-n! zgQE*hLZWLFcIc%Jo&WIDaSs3C4v@NclOE~YD_5^vJyM`Y;NI%$m8(Yz^a$KrUH_U~ zi4R_;fDir$6ojuzBZj#9!Pl&KcEUJ2LaBevTgi54>E|yflMy6okoxU|Y<)Eq8WR+U zGcVz%gxI)@6r;Xx9Wv5Hs<-U g=s?Z?b@?{FZ}!Bv!TcqD0}Kyw<7gR`;$qmw^;xage(c!@6@aFM*t?o-U3d z6?5L6St!V0z`^rTfwW)=%RF=6_xJwXpYP|pJkMj7lfxVeJgAXaqt9p{5GH#U9%52wZN5ySPi7nIUMQNWkF+Kxj#r5JE$tTn+*e z+Q4(N)Vz&WE9y;LuB0;KC@Vv9()@LA(h6FBch%0bYmAo&i!xEyG_aZ}UImw(YtZ(d zZ&zy1jdERaCJod9zJU?sP3QV@Mg2m<$Fu@V(%D88yQE| zpL=vY{clsThS8k6rKU$>sg1!NIxa^u8xaVlZCooWCtEA4F?WCyhoknDuDNZYTkie% zK%$H8JM^)XZ1wn!E@f+T+*Kx@IA4>KP%hoEjwRO?8nYzRI?m@!9Cv`X1Pg9AB z{fylC$FZce&&9`UFck@}mKWU^xE6s_duXukp;R|(%Yl6kW#wMc>!%cBwj$zn?(8hH zqaX5ka7!H7c>7NM4V`M)@`29R>(m!2M`AweKGsMIO$g;Yt~Kq^TIKHHyt8`O?^6oV zANA{@gH0v}b!Uch%I==*+@)XUb0(=B&w;EKWG>uekh5}dMHRHIccyQFr*C(JY}WS4 z4Xd|zk$3EqYNj$Qw5awz zM4W7FLLG`0UAa4@VFJjzU@pincY8Y;OTfc3*#aL3AIcMg#6uv=%tM7tmOmsx`#`>2 zJ{{9@qZEVYvgsH%iapU@Xa)Ik8Q~&mUATh_E8L%D%Ep*4S2qi#0RSE(VWLBM0emqn zl#Y?((!h6knt(yeO(gzwjJv%P+DagT&}2LrPsG`Ta)U{jwW{J2$30J^J z!_BNmlqOd=Umi5$amP_}%rgvnf-s7xG@%pu~)6cAP>hsDHE*v1s155#11SjOWZ97SA^mCS(gtY9cMfFd!eK5Rn@ zgkwW&9~_xuM8Ww`$y6LfA(M#|GKEO-VacJ`EZRzeh{pus!b;y8N&o68CNPu6hxpv@FPXK=;f{4n{HqNdhC zfr^o07{HYm6B;cq3mTK9a6!xrhS+kR086pN@?-LSA<#cY6LxH#`)`tg0#QkZY$6qB zVnhP@L?$zFJ`fASF)79@HkD&&WWu5Th%OdzBq2-@Wa$fZ1X_Uvm1~7wG#aYKKiY@* zL2w*^WH@llILR=CQD+Ho#~Ab0jPQT-Fq0dMYcXJ-Vh*$}&HABrUvmAF0zYN^E4zNl^-~J`l<}|Z`mf2Q{{3YN;)5rk5b&yG=6I9< zUb9qv)~vEdkl^2k8N^O7GfBws5F-$iwctM`M8;tqFo~4d+S?%CB2^|Dm1)dm*k?UMVJ*4_4BFdluxc003(&PA zgF|^S_bVI=oX@4nJ~$8mSz79`xU@)nf%pBkqcy6ZtD1T$>jSQ(Ilt&7j6A6SllN75 z@^I&t67vbUb6;&LDI{*yA1N_t!IXr4UTV@umNaEDvOVw}e~P8$Oub+=J6+BnROw|6 z|MnBM?&aBMihU$)H8C`mmy1t5+oe-kFN-ODS>*b>|4rX;L2BMAR3L#6wz+J9hfHeK zCsjr@E1AV2KS)V>PYX|)cZCUzmkd%~W>TA$Zy0e&ZsR)DWFfGzDk%s}ixmm+suMNT zVRM9@RQc1nUOEN&;PP7H46KccE!KPgirVwRagleG@l~kmOxq{V%6D8{H9s})iIR=K zPH``0-|!dvoWJs>`|p)5#>gt{_QYFP)<02PF6F$e)_#P$2Az+5th}%)cpXX!91)68 z&~xaO_C1~kbC|$DOhPLGLZiH4BKO0aFHfA(7=w*J&au=yVt218FF(!SBjs>l@VVmS zy`1j*T!F1GmVnzX`bY#AwN0@J2m3~pc3nVjDY=rfzE69dtlrOQI1+W(@cHvOHHEGl zVye?3*Z0?yO}{nD!Rg-mk|-3zZ=4+QNO+_m8D~Y`Y_nm{sSf|M=T`R6v)j%h2SomU zb&~9*n+byV*m5vGwWqR9a?6E=&;0!WrUnIrOF2M84TlXyJagr_qU+wSYPeq zgJ{#gT3eJre5dxtCg}<5loy7hH|;@rweE%^KAHxzwaJS>3~nlD!6UGil9RoQz=yUC zr7YD*UB@t#w$I}FjcLj)}`0Hk}Aq` zUdOT*r`VOwcjoYV?!@GEbUm{g>E@;vD;*2M+wF^tVjo~ff4-Elm;S7~J>7i3#2FP1 z80V;^8YEyp-`Y3KPhn?ho*(X0-PRWOu4{+gPDT9+Ud7!=x_zeOjaKf4%$~*ml%K{o2`#=&x#1N+fx8^Yf2Hd<@qig-yb~pUo&~ zqX#ani+oEXrUnLm!9IBL;@zi{?yE~YE6p!;47RS09*L^NWchVxXXNe6^NAd;=JyY3 zyY!y%B+B+g*AGcCZ{z$n$t*gQlj_Yzvp+6~e&N&5h7XtG{i3_CcE0yCO#J^k(?AEe z^<&F}j;;rFY4z_=$+>fqNRr7Jxq(Mq-$Z$WFj z>q9q3J?|#;0MIMAImq(W8}x7C3m%-Cb5*)5%WqS}l_N<47kc2bEV}u=$i|_xiux9} zUVBtz2=m#iI7ajUa^_!Ms^7|$*rfcpQ(BA8wp1ExS@JxMQ-}|eCt$8`Q&>ZR?9A`9 zXH_0e_Xtxp^DU=W5=Q1~JyO{hsg7N3%XhuqKJ{iHditR&rpUA*b*Q)3QiQ#ZI<#GL6?|A54xH=$>ctMVsggP9^t$=H^=oB)y_vMF0Dev$r z$&28)W+^BgnyLv({ac_92hVSaNQ??|Sc{3-Z7N*EAZ_5qB{`G5tKBa@HB-T7#%~!Z z2@&m%Zsx$D?eX9L>V8TO|1Q6>LD#ZB?BJbW;qa$~|wCX6@ni-K5RL-?_Q5ady95 zNmcsbjZTZcbYGc&qbhsl#uN)5AKrxrYUxi27f73J+DUrCz?WOAD*pC?~zCn}%wRJKC)T z-&-m@&>x>^s1MRC;Cmh5C@*rjX8oL+4lFLy52VSD+|x*@b9P%H|nlk z8gqyJ+8OV7x+5rWe3H@35Oa7UtxU)WeasLBv#m3Xy7seky=oq%S8acCgxPUGUjcNYJ z3^AHaKr*iw#? z<^3n~*17HhJ!-n9j$7I$*?U{G#PoYTtUu%%i(}qmgwVd z?Q>=@Tv9xbgq%9j_BHNF#n%sBnP=PTO(tKda+{o4y}Beq4O6|uSvJehNxR!}O>q%< zf<7O$eYDCp@4nRBGPJ!ao-#kRXOGl=SlSvqh+6tY)%L@hyf=<^eohF*GliltgCHxs g(@4Au9tcz~?vMqz$5$)|kAetW8wcy$6`SM#1&lm_NdN!< literal 3277 zcmZ`+c_7mbAD^bQQERR)nK5ESNff!(Wb!_u#}Pu02h}U4^wi8T^Ozj<4iCwFB#Kap zkvVdfTyvG&SIDuMo0<2w$@9Gbynp@n+y41}Ki|)_Fmp5Geb6IN5D2u-1c$u>JY_&2 zLD1ekz^A}?dj<$35@Uijv?P3+O|~cYYK!h6KS`oAU2@wpO~B4947JI12)0c+iB65S z|5|ZXo?PO-GmRD?NX5B|zy+42geQmRT(Yn>NZz~vBWQ`BBuNj88f)IO`^AWP zD69Ku0bX+B0EMJh)t)jw@JctSd&`>OTj$a-Dvt=QAkvqDniNyE9M=ue)mr{(p?U|# z=LP&gh$;#LH(=*6_BRh`>!47*YJs5w^N)P2Wy_P~(70u@lI9S9m*Q@N<445R83QW^|R5l!jUCV-%OoA<> z`3w0CN$Giw2?Mj^%p=nbwm0|yY$_^_Qe^SgK1+kqZwu5Y=2z~fplV2>(RS;w47*lZ{V>bf2zQaQ z7F-J+Ejx}Xq>q8;5@5lab;RYn`EwO6jnM;&Bupu*OwCWVA44FHDQ=t(8WVE|ltfb#iahy#8J6xBhhxeVQ9Ksq&^8$l@guIPjzdqrx>cq0*)JKgZpW0`0haNNiZcW3fw$jLR zw8%#a(NO@QyoF8hh0kvGnqo5Ekz({6agOkL{uEEyWOaC}f13#0kxfRg8=RHW_ZI%( ztv?bqPqyU|;Xh9LfqXb2(49H?^x(bV%!k0)%Vc<8*?UF&C5f`H*tzFl6A#@TOi@Cq znJ}bOQPKy(J#+?{r!v{;V#&pBVvqO12PB!yr|qKQR&|!#_vHyoGMNLc_ghzDE8oYx zefO{IM-|=001kUwbz* zpN@6y7Lo8?!XCR6)Vtp1JTubhv+DolPYFJ6Qc?_E)* z8)bD`$X*(57Wy#K-@j7Hnq_nGluFNug*@|_qLqgGPUF*?!z%drP5HR03Kt7Kd6e}T ziRg%1n78a($Xgy8nxB7eHUxeW-z7*D#9AuoGv zx>0?O?@XgQuwmonbIPQOYo~S?&ZqlNw(zM_M`M#oq#$Q}eeTj$_M%GICZw3Nc;8^U zMfsp`QlI2dL3}AED);t-$GA0)t)qGdI(UR?%bv}!%5HQjOz-z^@w4O1W7M_tZV}{V z@kLDq$I6{da@os2(1XW9nwPfDEPsIFeKDtkn3b2uFJSJHuzj2A6M;C3boObkb@aPGB2QYO&M%fB< zQ22luV=?Ef`Wkk1>Ih+RSm(1Pw7oUL=y_`a0YOic!Wyv`5kBXazxzR+**#3j@4grEb^`KP}pxo*pUxE z4R++ir}Pl`%UsMki)7mXqS&LJt{6G4Z_4Do$3ftgjYd+01bs(POR`{<8$ZCLQW(YmcF$I8Voyj$qoF2Nlrff|(ew|`zZ$}q zRxN`tc5PSp*kjjgRh}@4vS0+(g(p==_tTuEfZN@b)2DP9`L+YZ3oZ&du4|(d?EGf8 z$uFnru8(McbR7oN^Gxkkk3tEgVRs9w-@Y)OAe|fP0x>d7nwz$EBV|VeZP~;seew=MP0T9d4*-(g{R|!8U0CNDW zEua|IXmQ=W7p<(u33EVh-sY`ka?n;KC2`!UR!o;iE2 zc5kWra7jb9X5E!V|Iev-8`Xo!_$M@*e`)@PxO)82%=&8)k|Q!q%OxORj#%chqa)v?)Fus6TjBkFj*4?mXnap% z^OE4f*in?5>bP%Cr@Asu=&3!BV(yJr(x(iu8s-=Sr`p z6aXd=VGpUhfT;~}KqhGEpEbNwnRjxBP5fluRyT`0>Tkf9_3(8gL`Xq8e5s9zVc(Gp zaoYN|b3h`T=ty*s+Lu}kW+xAv|J@Lcr#dES_6uPq%+7QNU-VCFNEF80IWxR}O)a$r z))`Gp_Z^V^>!a*fW+*~3ZN>HTSWvevcSBxL+TrBqJyAVgn=wZSC1L@#!E@gvd~Zfq zZ?j~t^@5|$MLd>BcU6dr*GYq?vdMt1FLG9v$=Nq>0V%NUUh%gIc*Tz&)jUb8#zVqA zGjm2^7Hh-jSu>TXWw2LbxMDRd!Pm&x^oxOeb?Mi>Rpz`Ba>}U6cA!{3ymL~Mj;5Dq zB$p+(`Kw6uDmxC6)~3PG)D$7V-)n6L-ZE4RZJMR^Uy&n<#6+T)$L8BDIiZ{A6YMN& z31jHV5qZR+BL85-dZ0$V98h=otuhd%IL}cyzgohMhG886E7>quG;N23$E{WkGYF zC;mDja2nGdZk@N>Tj4Z3+uuA9Jkmi9ligB9S>+NbK+BNr>V98i8#jTbyFN>ZuwXFV zuOD9QW*k)Hw1wJjv>Ba7$#FTYM~M?qx!yk?6Fv#a@*aFd0bqdw+Lq8^Z$;ZAQ4q^y zr?^eQ3;UK=;UunL-AjrKoZ@olZ&%t2`N^Z5J}xT$oC6Nf5{at2ruGB)n*uU1GQ;L$ Ht_S@WQF0gr diff --git a/src/main/resources/assets/spectrum/textures/block/sludge_still.png b/src/main/resources/assets/spectrum/textures/block/sludge_still.png index 4e439ec0cd216ca55b54cdb0129b59cd63c44b63..933c56a0a47bfe7f8611b0e233e6cb06485ea388 100644 GIT binary patch literal 7464 zcmeHKcT`hZw+{rp2*?FdVFnB_N|iteEyN3iB7#%_5m1nj1dNc-f+X}1P!Oc4G#jAU zu%Ke2NHKzqW_gxt@r&mH|3tY&)&bY_iyjBlauUdzj?XX z?_vl9V!5@Ig%f<2LLh_@qD$dXO8Lk$_*NU?;>L0!hogf+0)6QLG&GA7L_^cqbYBF5 z-NA6&DtQkrIzPB_qp}%HAs;qMOVQ{Up2B);(`~#-|l}OXj4<|n-q&V+6b2BB=_*ChYMD>`gZ*rfnKcEy9 zrsFP<`F)8imo`=>-q~{}hCF`T%*Z=qh&a<-^=c-qv5Q>Pl-!!@9)&<7ddh{wl#;+W!2P3IswZk#278Xl-u(M=)>*$D%WHPO!rywqO+>u-Qp*M2!{X`!Yx69DK=t-&g|AoL!h(WdzNp%o;W^p5n%Px}>O5A4L>QTOh1BP~~7-vE9Csw?zToDVUb2$CYZ z0=`gIijE3j+Q*1he7$#AWWofw-J@Zbzwq^wrwxc6A4G?`mug<#m|qF(97FIN%Bfaq zeP`8Hrqq1-E!r6+cY8@h+ncVAFNA2swdXIUmInoirXEp^?Ck9{>a3cNJk!|?=Ea2E zd?3*w3|HM=I$T|DcD6)HAVZT(4fLUDvKc{e*&z^+2|I{P@u#uSJ~Tf%(+D$OQH?>< zsYaOXdUiOwAamMox>ZC7%{ju}g%aUUF{ENljKv@}5e8t;SY$Mt5x@*3vW+l{xI}oo zAlAa57gbpPMi@6cN3?lh2o0^PsjG>@Zer8-;xWczXefm0OLVfZ{0RX+8DVy_SV2TB zt?=-0&2Syfzz{zzZ9_vtEgW78kH^9q*ia6WMP_4}q3aePeqdP8LMb8iAQnB4iC(}Y z`viuuj4&8@9{q=Zj37I^KjE37KUskJ&|;H=w6ryGS`3EPuNI-KO?zRGpAP*;i%=JM zlWIB9LIcA>D6~y`X-w9-Um>WJKkb9ULIM`Up;EMH0W=1z8Vawf{kJ7ITiZGQX|X_o zADt1jXa$q~H%%7Z_b;;k=G(%|VmQA#0-OJd`#0@BVqa8-we0MO7J-zo1^28ij4%u9 z6RCj|I+eIMq*2L+R02T{t4)Pdp-aJ0u|9gfIIKQRN1KKt(6qJj+P^?qGecQqCWW>D z1%qqSVH{syLtg`&j}MmOqeI5(QVBX(Lqlym7EdQ z0u&X7($UA`3@HRdtN}p}hNAiEVh!;=6s)$Mfvz^$N6)}l+jkL)N+DVXhA_x*I_V6u zA5ANW>9;tsKseFV(b@=u*TnrLaSR}{d|?B4573#^!0^z&rd;R@nlp>Mz^AqWK}TCx z$ADmf*VWV4)%{D!l@<~T*Wv=IHcnIL$IL=vh;TSCwd93Lg#i{V;An{EAv7{8FvKM= zFu(}2;1qhn^3Q2IctcUiEV2ceMT0?cczq(yfQZv|fxmTi;PD0=o{0NJKafiI<@{gT z3)=?`{YbhMJrrJ_vncwpr<`fQKc0R(2GAEb6B@m^Er?{wj}Su1duh}~KVhsNQ|om6oY{QjiyJyYh!gNdU{x0oDWLE)DPwn<_a#*MXu1QKU1alcm43)w1qstlwolO*k35aX#EUUYoTNO5iO+kzxaR_ z6@FYQ;2$afTV4Os z^^X|%N6Pz5cq{xV?J&WmMjahat}oy z#AOyfLWulhagi$A37^6~kB#ffOPw`phW=VaY?*9JOA)!g}<8~j9*xbS9FKY+H6JqPz z_)*o@=Y`+O=!f}c&dw6c8NN|^^X-IPvO&W`S3meU%fA|=hRM!J=FfSatR9Z_4l0?M zJ&(0qm*#hZc_>&ubv%_4@x0*!aaoB;vscD=#XE<>4}(#AKb|wQaL7}9sCTBd)UNaG zr;9e;VR@_Y(t7i?vdxUF&h~ckUcN)&=01yF)vcpa#=^WV^0#lZlY~x><9df%Y5d#E z%k^^4Ql>H0^5Br>!rSt77Uid&>GcY)?)fP0-aV@z zG2d2S>rmJr>)h-k^5xm*`|-h9Yf!e?=eSP&To;b__q!7{q1&1Z>en2Hyro_il$4KM z1j`U)o#*Wv-*=&Xs)ADh5drr#OL%6{(Mx%S!Z zY@DPIhA06lhtEJ;H>S^D_Yc1rdxbB0OTbG6wl?)_x{?9t`^f><8+h;XUd`686V!eZ zY-ZO)C{)%Vv%rbC+HJSk=!Y#g8&96c|34oo#N3&yu^H+&^`lro@Y9&GF`1vPD;oAFy?3!hu zs2e?Biw(tf4kha6B{GMBKEC~HsMO1Sfa@AuR%Ltem2mH^^(!1UKN9dRwdNi2k}e{Y zT^SNR$Q$B`+vf5KLZZ{h_Cz%>EU1M=b4wL zo$fuoP9UTNWmG_=>38lUg_f7!M}B(?O{9uW_OO=|I>j_EE1;(n>pOMTrbuywsz&5^ zYmCG~?MS&b9VYa0+j93GkcPQv5@{Ud6h!ynLH=(pPAK%_$1ca6#VDZ}{ag`&NNT1A zNJs%4iKm`LUA=RtUntMD>G?%93k`<*h6$)h>%8Hx61S>7LYrTGUS5 z6=YRO?qWZhyEqz_wF1lzvy2a1H5td@14~e%Ru&ddTIv&HZY{5Z`57&}&zpIfk0M`u z6IbhoIo_ExAeHb&TTtj%p^UOBcph~a$WPB>Q`pv{$cZ_gBVTQLej3>;%!> zq)W!b5G36@alP01t~V#H+-ABb#q@4aA~5)XwI4ViLn?@rMd_+s(wauNW1h-*UVZsk zHh_9zb3bm^Z9Z~+7=17^6(F|U4;bUk_ zf(Vg?c{H;;qn!d%)>Ee_@6InyQE}_>2D@6^-($=sp-;CVlB+D-QnIc#@&e4%`%U+S zD0R$c0MDT7pM?AM!RO=YS}$5?sMMjp7dp{y!Fd4B@`_62u}L)0gtz}*G@jP!H-;0-<6v>+$W?0m6osAVTwNh1~k=(O)8;UR5*@l zU`yY@k%_qVpuP&KRHx#FoQdRuYJsgu5*uwv-1oUo303eL!}{slWFYDg&{=`mxTmQO zDaQ7e(K2Z1vtTn)!;dVRvb1NT!#UoHVMhTfyCs~B_{b}P;^u0{8<2a?h&iE#xC1M| z%KGc#3Y=C@p{*+oyvZhU_l-?@uOOdTF}$QJ<}96^V-gRz?&us4atiNGFVJtWetGV_ ztJX9ra=f`;DC7(lRp3?5M;fj45^%@nPz;Hi+J$KBXhxX-%z9hpy69x!>+2~}j2g(7 zKi;~`9F>}wx|5~u@9nw6m3ICuXLIaQ@QnLd5+JaZc^LSZ_fERc$N^K+_K}o-7xKH-DTu*@r6<3Q?Fer_K=g3cMmTEgp?t|oHJ|q-R-s-Y1 zNVunjqVAozHQke8WbiT_t+?Z4?qp5c66YqkzOOw-3QyK`KjQi7KZ$^((g6#9PYFJ9 zh8=Y7(uMe^T_@|1I|>7i0v>UL8=$zY!)q3jSn#?>r(fLB^{HICcm_aIirf#3e2V=f ziUKPc2fEWAZ3x3puI=LnUpNNrjUj8OsZJx#A1PPAuMgJOQe^J*b6Ga-KV&7LC$GC1~Dz&#AV6hThLrROLq52U9&MgZ;d7Vt}Cb&eqj05Lcnn zaIt+740io(4}OLHjjo9z$RK*>M`pyZUO8>>51Olk!z9-evFoXfe6Lk>3UFoZW&hY_0TMq~`|c5iYoZ{adG33YxqgJX z)ofDeoRBtl2s>Sqf34m%8R)`(Kg#ZLKXF#&TO%|fKng*h%%IZk8>UI?UHu`{huxCN zsrlTZ+;6Nc3Poy8ZdVxx_=gm(@{zA|l~AuPxcmkVkV&4>?IJ)n#~vJ+Ahmp`(RwSi z&MzOzY_oWLyntlLbK#(mLT(@U70{4ZvWd&OhL=5oEH3bJG$*TcBP6wB#mz^^H4im* z;4mfTt6IoWac({H6_1f+e#ogB*O4{fVpeim!oG({S=kE8dv`Gg7F4s$g-UAr#yTSW`u|4EIuGc6sdMXic-JG;%tQ?wnU(6}?vDtQEWFw&L zY4vi%fJ(2fxd7b=?&_vf2a@$Zue>8DLm*@8E8(VK>g9T$% z&AcJSx5kQ*fLByObZxKDHg-({2hmnc8_pDA1u^>1!7|k@Ojz<7(**yqWw+ zB`L+E=j@5n<=!fcn>n%`N6xlxDmcsuA`}NJJp;==+Wq#`KFWI=qfe%@q;KZ{ca27l zo?7h}S!ER4IEb(fcpxv&(6fmt`IZX|d5_zp!OB-8b#wVmACHVr)ueGzU_Le*c{u;_ zV@RR=guv|y#ozqqY}d@z#NzZPc9d8T=E#V1UY9$ydxur|-D?d?Hs(E+25;9Oli590 z^SyY`iqtkX6-P48n~FQGQ1pcNE-gkKY>AO7k01st||JJVVhF?`ITn0a{MGjWNu zc%M*j<=dS(LcP4zId@0j*BGno*nP><0Iw+>Im=RQiu@u4mhEtOF|7XhU}w&n(f5Er zL}0W7$PzSSTU5stkOO6X+*6yr3Egl_Ngf`Oty(6H0>~6DO1Tw89GP6x)vPSyEoWK0^=M`mbiKuNTsFLhu zut)99_lQlZ5~aHYre!`C{o+sQO=iXP)F#GV_PCtx5_7Vo0eOWQkq4Zx`WzV5{Y43N ztY~FKcSS{#9($L3U+vSxJ#x3&HP)g;?~jN31_`!ANu}jrHu)WpxTrz8&0~DLV4FBw q6$w1m1esOi(Hu|9sk^h^ku+u3<&OqinedqhVZF)T;zqHs_k}?BuF1Z2(kRn2)s($)>hg(MHoL|l_@4oIX^;(bTJE}(r{#Dol zh2URo;Kex?9=q$lQUj*HsU04>b6yD!f0r6BH6(r)Sa6guSyH$x)COO-r(jtxu33zy zD5pC-cDJ>Z2*o&E*L;L5uAqT;|Lnpf7a_^MB`DkReB*CQy;;itco;ID@5nsZk3YnN zT)o-}&o6M&|Qcon| zy8A&MaN{Bm3T47p?u}3t){`nfcDGqPP=$E+#;f2#V!=mwfKvBy9;DCV?n?pc@c?fk zg*1 z4+=>{pp5b$3sR2<{O^hf*k%u73{>MsmILfIe123QB@cxpqN1n*bCsz^o~>`CeW~@; z<9NIi+X$%MsKQd26qWF9_=wmxK|z$&77M!hr{?DQLNf7Fm9k+i?4)=y1Lq52IZIkj z{l6{RKFBxd@nAR9dj)wx9u(?qX(Dzn{|%_l{O=JP;Vt{1;z4W9U|Fw{2RvuM9*{i1 zm&F6ijtp#Ze1r$-qRTwM(YeQiU>TL%HWm-0eP9WWvJZxN!0JB5gQk6ux+HaFW}<(o zZPPwL9^4z6fumEpS;YfO6BQ4VWcrcWy5d14NG*kG@_?L+mq#{`ce zibf?~$g^3zf!T;kLWk@F78JY~eMpiAYJRMYi-JxM;ysG4^>|Glth@Fjv88JAz?x`& zj0dSU$7y&^@j&@ir+ARu0yqB#5BBKXVe!BcBE^IC9B=|7+-f);SkhzpUW+RS4L;Ts z57c+x#{+(pX&xxB9C45bRbxT{N4&s;D3s}Ycz`-^nFp-iEIcL;l;riiI@uM5UJS(p zmW!^9)UppG4|pvVtH|0adBFaGYEW5fR%C`;yUb8ZWsc%T+){|k9wjmX11XpK&-dE}6NfQ`o8 z8(OOwYNElo_e_}7x>*L!!2}mClSCFgP@@t)-frmvuOrUzAox=bMtGoRuG>LFTW_YS z8hVNcSa9V(7~#R)XVKp>4_Z@wg9mOs0BO92u)z4wJV+zZHq5qY@8gI1x#JV5on!~=H!H0^_AwWG~A z&4cJB?1KeN*cK1=_>7d1Jm@V*B_5!X6+Gyn9Gv!{$pa3VupE?K90ltJm~on zFY^EmiWU#5_=CbpO&4G=LpClyWmMs1GKEo#fL_?Bw(s(8eaX@&>fR(?HwA8 z+>|7a@W7n8j_{!JCyw|{QOr|Y`1754psMbSHHHWS&X9e;W_|#ZZ-@unkZ%4`9#{=&@__Gv0r2b^GrG0RT2WmxIb*;&RyGSO zGz8=IcT+qF{v22yyIhQV&pw#qfou5CEgs-fs<{=X#e<=U=^x{PSA(ZjSoUP%erMkJ z5PVyy?zdMhaxVm5?`gIgl^^924~l|*ln2t|J;MX3u~&G2L*XSJpp=Hz#$dJyqw=M# zd%ZO~f;*t+xF6yHhhqO89>gfN?z2*<@VX+H;VKWJH9D&TnFm{m`z@A*{`|BG|Z zM^`$ctaoLx-~z?((v$h0$eV zYw0lX)*F_*C>pZpMrHq6GgZ~)zUy%GIxEdI5AczucwoWgHTi~-W`+le2}Axw#e=F5 zqkDO^A!z5N14p@Bl1C=RgS0@;HBs9ULeJ4K#Dkt3{Ovqg_c=AjN7#-}#V7W7z+*x2 zNbm3E@UJS(pGu796ytb;M3*={cfUe<7Jiq`x z_TmijKv}Jd2j+aCW%6v0we1oQP>?>8zCg`Nl=8?O`PQzfw|T(R+@VLXcwptyT9(s~ z6ogN)<$P%JfRw7w172T9`Z3G{6>5)JDVPT-yvpQ3x;SkjXCCk}qU1pWisC_)cTWB*Wrzp7 z-Y6Z@S9##v=?YVK8R5bGcD4bE>}4Jx3plZamt`1E$uU7G_hf3cu=?lN0{()JW!Hn z@t~Rh&`Lr$>_5Ofvfs-CPAZ16cP$dSo@uo)rLF>MVLe*@5O3ZF+p{gN&~BSkbA+3F}TD7ZpNgB!#c`?mIF%hpql0X2oItwbK$(j z1CCee=09lhph^il%7enQ&08>9Ql~N=OZz~vz>I6Qc%b%hNgi;<-qb7WAP)kvPCYM2 zRC8NQ@j&kN9p!=5JK=2}m~n>#JTNmfSv=rDWmy_L$d<~j9+}J<^mw4sniMC2a7@-B z)>s@^={MiuK`RIM9-n(2D;`++(yUam#Ss!#tO=hvP>Aw=j4cHun}KB_SfZ+I11WG; zHl7h4tcTzMI3vb*pjIxJ2P)-FrH!+hX>y@6lML0p@AIJbpK6~^#RJPeKwW4Bgm-zM z(uLzqf^vtpOn&a(V5I;~`2oFHXDim7Egqx`_QRelbnOFfm-ArvJcRURb?oN6xgN~DOrhly|Ll}XXR1$L6Zl3cu&i_UFd?c4~oM~4EsQ4 zv6QQPhu*p!)?Kqe?J$$^2ctYtj;O+apm45uVCGw2kG88r?PtnU9*YNe|6F@zamK@b zdOX-z|Eoot+3-U4^7z>cr+Kg%sd4k@+~NW5<>}^Iw*-fE<=%@=Q~}OS99U(-Pqzmbsmdw&<0HNfcu#W z9w_T0@gV&*d0;tVoh#2Q;@=kel`SstVlE%*;zvl_vee8)8cPqRcwps~p5g(&hIl~1 zJ@Y*1wZr%EK<(#19;8QFkA`2_N|C)Dr3pO60}SNh--MQ~tC}@=pe%EY%aHcLy`B0t z5AP}Pv)b?6;(_IJFL=;7udO<>2<2iZ+}JwoC{KOgu?&eor+Gjp>4oUrCXbrwCD>yD zGS733u6c&-#u0NP=eed>=6nd+d82KV2b(p_W1|k4`(L+bTk*jKO?7S=8QuAUatkY; zv*|yu;NpZc!nd~LVP@~NtCUT`pdx`359GLUg$MsX@4XRbid{EyzH>3Ks0JL)x86J7 zxjLVT3NAK*Sm(VL+Q&Y{ne$w^f!BRdnVO^2r~|?Z!SZG11n?EFb{ZY^A-P-N zA_asHK-F3qpdc;;5G3C5)U5Ex!)V6OS0+VMQ*-MK-5W2Z-T%v@fB35A!*zdKezmo2 z{j$qHoH~4#JZ4Z|-#UGI>dEa*_b!>ydG1_}(6#MEh8U+uWv`jHdE2;X!_d`q-J=IQ zh94R)T=L!QZ7HUg$rxL)!&xSL%!kMCd-&Z=D;I1j zqnauvyx|)ioM8P}aV}l?*1w)v8@sLLNYNzM80nU#ZwlYswSl|))h~9}W=*`b;>@nS zX!z>Vs$s)W<8$#pt0TJTCr5=~7H*J{g)`e>i zJ#cu6;r*(Un^yV^m(cBNUd&wbh_7|l&dSu`FYP|Dv+={14!z)UtvhpO;@)wFf4^2) zBQN;;v%fqzI(6~m*VC7;-`>38`oSG1un!u~PCl^z$G!FG8Ao%=kG2?Icx=kQ|!vp;@MY3MxM*1kXc__fJDp1)9@Ibmo6_Pya`R&%^D9ys}l zdCb&x2!8JSh|YI{nL9>S3UI9*fB!K)AiS%G%Q{@ z*ZfZIyl*R~WaZw~HtLu3L;J1GVdSq%`?nlOpZgD_appe0c=flhOd8wV(tYc~@;_$py{WGK)Yl!| z^g`tIPd~esCCeGBHcqVXJlpB)Jot0{%bll3J-aCK_K^`CDX>1H0<6PI?+k{M!bX;t z{Jx7n8r6wmupRAdo}gzvdH5t?eowi2nu0Y z_kv>gL#jgHhFJY#(^~X&k^_P6eZ2k9y}9dPi1KQEN}C(yv0G%0WOJRW<-Eh$%c}n(x`Yy#nEOzFxfbq_EQ=aMdB=Jb-*{k z`7L(JWU-obDxPDeNs%xMhf@f%K|si2P;bx#X9`L^PRwjf1g=|3L#!Hr4sZ?#A}__1 z8(^Oh2IVTN>1ndl787Nmtrps5x7er~poc(2fwicynn*%KQqpW=NIOGPK6s}n#$>sdG&5upUgCv7 z?f*k-(+AB<40^Gk!2WA>Q({h)g9VAN#Ais*CliY5(}H2SL<$NU1-u?7o4Ko}rr5A0Mj*+BiVTaMF$^Nrn+U$r9R%(VJ}^@jrUx>42mq2KpszaOr|8 zAXV9w7B#Cj-)VP_99_2Bg4%z=PE_DA#}#7!Y`{x_&dcGH)EF zfCzU$F?dw!q{WZmF)PjgK#?0UYyYEL$n(%LOfH_SAjt4B+BF2(vNanT(^ZeRF#Yf8 zsW;u1m7X%98=7ua3oBKZ6xR0Sh`vz-JQ@?!YE;`ORy;9sJOthDaToaLzjCL}wRSZ< qkIU;wda~@0mJp$$tT)tpW-F delta 131 zcmdn5xRY^$3O`$tx4R3&e-K=-clqSWwgPe)&zZ%94LE)GCX_QUFvwoU649-QVi6yBi3gww484B*6z5ywEsq7$yo-U3d7N?W%yj%LKwUOz-5eG#H(}XJx dfy`{(j0`8|FJq diff --git a/src/main/resources/assets/spectrum/textures/misc/liquid_crystal_overlay.png b/src/main/resources/assets/spectrum/textures/misc/liquid_crystal_overlay.png index a4efb6caf7c5bb4a1f8ba52d6fae18efd82e956b..45cb8826b0f3c206c121e8c3a23ef3bb9be08104 100644 GIT binary patch literal 4210 zcmeHLdu$VR9KW%#&cXm4vZ)i#Lvc*6cWrNdoa)t;irVaJ~CocdYH5z1!Mt z4g_Ql2Ixd25~4r=g#;q_LdG(L;Xp-+px|U;Py@j?Xhgxs@2-1v(Znp#|JLSS-^b_o z{eHgR?=QWsESXu9s=r;2AV{ja*i{OzW7H!h8J_RD`X>V~hwHrMN+}aTrLf2g0e~vC z5_`Uu&5B!{w%> zOUqg+@m8>gJ5zTDj))gcENcuGn5tbaqt5-8Gxj*0(e?o~tq(Xmjjz8^@1L zS-m%h98j$;UtutIP;OWaOpZ#FQ8 zO${yW(~nHaJi6f2v#Y$B-=JHc+M-|fu(xCOuJWW2+jpPbwfy+@_RVhR(-$se?H`wU zV{du2^vK5_y)|b{(vrun>6+GUZGPrj+qRR~+snVmJJ|Zm{(4=?iR`iyhcY)WdbVX| z$I*(#b4Ipdk0Z-6I-5FXIG&sL-eLLC?jxONS~EVllK0ESOJ(|riH~AGW}ZrIjxLY# zr#`fQpH@^pue9ldmG_N2fc`k)4A^kqwjpy|liIzjRJYAgs_-Z=)rNdKKKeT3Sn$Y!R{k11D zm#nHVy_vo6%kn9y+4ppg{zKQ^n$ujiE>vn8m9!vmogJI~Pl2TT$&#LeKqTA8k_Iv$~?(?IcTO5A<*vPJ7u4s33YhxABJP$?AGg+W=}OfOqk z#o9S+a-KdnN<)AkP#82C41{Dl>cBKy8s4j70z)+urOJVodrDBJ7zQY1pbR8l5EW`n zSe_ou4RbtQ>MHDkfKLvrQc)zDAR>{7A!0U&VLxHC+wBBtB1|S6THtbRNMWLQNS>fV z#4ubyX2XJ{2x16TF&Up&tvE0Y>e1f#f|AG62OpAqSb%&GQAQ$+29gK{iFglLDX4)U zJpuirhwOz@N|XXwtPZoFpaz7L3Gomd+vhJ;hXYzV97})z2trdCu4){xWRcrb(&wR4 z;1`0D<^{i`&gPJWg6k8^hUbq}A?=gK~#tg$c1hg@WJ)0pi#>(nOkl zEKXVMJWiQ_9cSz$i37%NvGA-V$Ko@`LCgvZuq&BBd{inF2cgVXYYt^MGPsT6U^F%} zi`z&Wz$wy9^1#Z#a7-E$$I^vjILN?q3PHvX2r1;(6e{6#eu>+GnG9sVq$I#7Jam9F zAcQzEBKNDjLJ*WGjLN6cYBL)tvz;_sC?jdL^cy_{!ZPed71c-@%#@~43q!+nAhnFz zsSrSu!)$107%++$_KIS_fvG{Es%M|t0|$y@6vo9U0D_Vx3r$*SlJdecl|z%}`$-c` z#@UOUz}NnpwK_g%Zmj6Vf(+NM)kLwGDg%$io??#yK^rC%)y9Hm*jNfOQv*0HPKXs# zv6W2758(dM)3CjA;UAj8Xybf<<$X9~F={nUppi@XwH z!XV!dd4ycS2GzJivwBK3X<#&wN}$#OQU;q8kE0ADdXgp79iunfT;gwh7!ncS53XE9~J5#`=GLdg}0hE`g#$iwuh2A-aa>8WaPAG9K!#A-V>|z@UtWy6Zoq zOW*%81w!x_Pz1gz5mI9oe9cPsO)qjGCiQz_BY6=@Zjy@U$p|tcO+6Bjjhix{P^Y*( z1-i?+q~UntuUp2nLD6`(E8lB-m%UN<)jNE$9!X1FvGDX`vl9zbGai8dAnf}tQOaDe RONW+-yI`hk&(wv>{sJyI;dB51 delta 1292 zcmV+n1@rpyAf5`4BYy(%dQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+U=KZlH?`~ zhW~Sl905rPiQ`~Cs`dsseqONK(>=4B>~2z(KW)ke3oOa+Bhxcs{P}H$KX6dV9Fm&n zl5@n7N-A72@OU0&Un!=2y>8-T@L~`51j8ig<-E0et*@}_$A1Hl7<9bagI_c3mm|6z z??YDPHSW(z!p^6i(&ea(bC8SMbE?PXs9g(pD%Y9rw9anbhZloErLG7h%tJ`xzNRw+ zInN3U@2g=Qp;g>#*d1NYAjr$>-2%pEfnG#@jKXL2@6jjmxn6epq-DM|!r;3Tq@V0^ zhvDbIa%aS^6MrTTS6@Y*v-_Ome7l-56wOyfZLuE;t%V09m;G2qGn|UC?N-n{*4Ti& z#}*H?MuiwuW}rl!Doq-@Z`6=t;=y3T%nc-#&B3T}lf@~mMw3m7baB9HJc0dla_fp!07CQPrd!}gyYR=S z`a!9Jpl+ERFIeMox;T_RYD+d}!8%2MenJ$iUk)GJM*RpcvWyanF5Gq*=Y>HICN=Z>amK-%yRWzw;R#OjJ zv}VaEYk$t!^4jF8i6v9ZX69C`x_EN+?B?#pYvCf;1GVI0#Y-u*a;OMY;j3bOh2`Kw zj&$ge4?FxQM{OvdmYTNQta&S~cJ9)#P4wKYdoR5X3IjXENJB>+Hhh#(Cu(iVOjBo` zHhq>^Z)z9SFYOno(M63nskP2-YOn^ghYMQUiGMC;AjXM6+!g^8G%se+DJ5Ry7PD9w zAB8fK)Ws%rTEu`b4Pu>iv-=?TQ{003PjTaaA{Q3A|AJfqy06^6L#?mhxweU&U*Xa; z3ckK^WJeu&9g|!s>H3BG{XYC#2X9AjM{h@OM{h@OM{h^}za#vi-tkXt_zNBjJIho; zqJJs?00D$)LqkwWLqi~Na&Km7Y-Iodc$|HaJxIeq9K~N##VQpMJBT=Bs7@9{r8r6z zi(sL&6nNgNw7S4z7YA_yOYN=%nZ(CH^ldw21NGxF7HC zJ?`ECLZiY|vuhGiHOolFV`4V9D)zi0h<`!!B8q^-Og)ia%)oPe-NVP%y9m$nKKJM7 zSMnwUd?N82(+!JwgE+cr>74h8L#!kz#OK5l23?T&k?XR{Z=8z`3p_JqWK#3QA!4!E z!Ey()lA#jM5Qi02qkJLjvch?bvs$UK);;+PgL!Qw&2^fih+_!}Bq2gZ4P{hdA%8-v zMv93P?Z-U)BaS~wE}2|qFmf!Q3Kf#$2mgcL-I|5zDK{w?1G-;q`(q5~*#(+)+x|Yb z?dA#Ke+I6!w!hi{WoO54hX`hM#oFkQ~WRQz#UG_cQvY958eX z^sTwQwf1rP0A#4E-w%XZa<2S3s)_&r00v@9M??Vs z0RI60puMM)00009a7bBm000XU000XU0RWnu7ytkO2XskIMF->z5egX_H9Ohkd%y4Z zzVG*a@6GPg+)3G~DFagw1W9$}IP>7OxAIR;gy%um{$$|gLYb#f&SN5IC@k`VAE0t+ z2%sP;@CXuZUNJe)vmQd18vVU>q(5g#6e^q~$ zJgSx7s2M+A)3mvA#KMU!=gy@G*LoIdESWWTBo02gwZ87Cc>2!l#zW6F%$e7h9y!I? zw08UP8#j&~o3Zj*?#I$A5FUNM*-8(q5ctJR0@p=SFs1zKIT$jVqmNrbbX6~wk6Y586 z56x^^x6Grxh;Cl_Qp&=|JPng~6l%I}-TCp3io;tEZgM$RpE)yZPe1K%uNM}F=6rtq zy(zsl^A}uCTJp^1>NVF7y!sC!_I5d6UlpY7L zMaaSdjY}FP+BZ!7s7`vKrM~gRz5&OsX8wBqyZn?Pw>^RVsBKEEj#fnZrcZ5``(zhR z&0BJ8>Chf~(I3-Jfc2-W>$Ux&e8UIZ&M!@C@V;98t&Rtd!7mJXDt*Ve8)J`x%4_|6 zyQldsm0#^&)xCLq)dgzts@l6&=ZsmjoKD|fH+K0WEBf{knx8JezF0ed*>uA@>9f8m z9G#l}U}LX8k`C@ORp&nw%(M2?%=F)6`zBxNwzDcQf6$jD7c^H!-BvKIapvr9Z@&1l zg`W0P@^_~ab-PAx+@Cc42c+WRyd*IFU_XvZ$^JBXnIXU7UmZqglcfFdEMEDZ9?CVAMh*{qGjMrEdC zL}^G605XF{1OA{yN9~x(OT&A`Okk)Ak!RbnLU%6e5W@habd-+7v!X(Y0n1E5Gr}BC z=Q+o|2nsz;}psOKi%BnofKm(7m1a7Ia(gDj1^NZrUlb#Y%WCryWz~r#X=oI9k2+n#_!u zwHk4onF2Va*IRKLXQglx!|O@j0yu-o8%N~|N-`5Rg0JpLX zN0|-q;7lqN$I|1(aDaj36atJ75TT$?9Z&?P$K<-~m_bK&SaSW0%tHsb2819dMx>4* zj}QR)GNb6Jw^)sO%4jv4O?t{k**ZXvfUpF6QDN1SIwPfyD21V6I#60h=~PId+F>@d zBMcZ>40}Y;Z^x9NP{p%-*bNsH$H+8HX1+fiL|x zw6c8Aj9Afg1PRVxs+wYJDj&>=J;fgVg1VScR9zM{!^TpOm=X{x7vzc!u|-VK2jKqE z+OTbQ;UAiTV;Pf$*L!h;*=WKkjHsCfNedn)8Ah}wODH==Teca*-}J~(0dZRl^o!Zx)&+M$ zqJ1lD)eFx3fBstQ@PAH$qFs}8O5ZNIy5#DV0-XYPbyt^Mol>Av;I8ia&*Vz!_?QAg z_y!b#pGv1aTh77HtVHjGY$sw+jw2h%^U!ifC}*mKAl>^Y{{&=X%>Zajl3nhsr0QC}1Rheias2vuGb3!d!RAA;_4ImdXcAF`e)#(52+ o6J~ig^EX>4Tx04R}tkv&MmKpe$iQ>CI6K|2(2 z$WWauh>AE$6^me@v=v%)FuC*#nlvOSE{=k0!NHHks)LKOt`4q(Aou~|=;Wm6A|?JW zDYS_3;J6>}?mh0_0Yam~RI_UWP&La)#baVNw<-o+(T5=f5r4*@#7sSrUd+IAeBHyx z*Sjds@;>+H=vVS41AHR!9McVpc!PLm)6zNb6NgwyQi#uq#|^q5@gvt|m)|%S9Ts?I z$jGGTi9^ITl3X&m%3$PJKou$^#}EDozq>UHQ4l)$$E+a0rYQDSO@H-6K7nz5RQp)!z?cY;vGf>SrAQ z000JJOGiWi{{a60|De66laoCV9t!3Q6AT(H#a+aelVuPvDl|5+d&EEiU}B&Uj2bX% ez^DO(#Q*?w{Q;-BzykpQ0000leO%>eE>egSzuC0su?^v>L z^r0trDW1G{=^dc`+}e>DM_yjOd%^Bv(7A9$+V_y8K7)MkM|M=D58m>|@g2<{ZP~xs>wfyonfzTjxxc?vRi`fe z@{9Lp4ohG1`1Qu0nds(x(d zkbT55Z0V@OtJdM;*IX{OkGeE3@-%TSQ#VJz;4{G$(>5K6Cy! zVrtc#idDx}j~}uJzdG(DeBrd?h1{G(u>HfW=U0zw54_&;oizyE_rH|4u3*QM-zFc0 z%YV)Z?VKCB+;r`(6@xn-T5*wIxxQ`q(`6;gT7`n`2PU`9T03%t-0@`7^_96x)>N~* z3u?|)O|lf+cX;TH%>8={TPmN4RygiVpBL^DM`m3f^u~(Fl6z0pUrhgL;%&3%9-db_ z=$)5evkP;7$@>0uhV{({H@=ryeFbZNc#l-J?%cKqMz*wdjb2=N&!}CuH=g|Zn~pBW zV(jhDzqn>m)vVU%@|!x(cDg$E{n50w^YqXSkHy~oa7f1>RCe_;Dz7TvbU{=iRv;+> zXiY>^RCgFwG%=w9u@>rh0EXnKi}-Qxegc;z7cslgNBdMaoG+I(#$aXR48Pb|D>@}& zVsUm+LO=i!r~^C^2}d;{;UY|20o@y7ioi`3z1Brk`O0y(5`#Ez<*hVXnvm;RqBt8b zib+AC!ZW2C0zJ8i`MRzO6cvxht#Qt(#6lF~bUG=TrC63k8l=_`)j@)cYU2!uB!&lS zVoX+bS&8BXCI~2Xx{DytI^N@7MD_W4;iFnN3y2RY0aS{y(o`furCMluX*~kzcIY21 zG(YN6ssd_CT}*_f^)RZBONEfcUVF7J7B<6?L<)vs1gUChSEkRFQ@y_OUJHYQkQ`A> zD@1l5OZU0hXjC=tSPwf}{gNnk?k# zfCxm$aje~hl0;#O5{m$oPB{WXkW!-|bHN~7C@J^42-Zs9l9Y#m9z+JH2jr-v#I;*X zemMdwbztzx*c}|ha}LJA^Bm1212++8!I*|>(LiNrE61DWMq&gM4x$zqm5KmNIf_Pb z#~{#^m|s!CF2aDo4a?qTA8IHG=)ePXh(Kx9CeU_)=Kbi*a{}j>K(hj!qOVADu;Jgd zjrPHdl1VRUVV3U6FJ3!X}UHxL9U&;g3H9%Lt80eSsKz03RbY^rE8qjA}Mqt`h55^k*BOB@SNOFf-Hb=v-!6S?#4coYB6cT3YUSDbEh0OHZC*+;G zDK0{yv0hJ!-|?}?4?EjsF+Qc}r(_-ke;s F^iSTY;!ywq delta 1270 zcmVaB^>EX>4U6ba`-PAZ2)IW&i+q+U=HImgFW3 zh2L34mVhLL#Bwk{=gbbW{9LfhUDZ94%uMo-hca!01(xLd$yA5&=eHUDz(FN*NNS!- z&Jjl{sc^-><9U>QrI_~hx`~g$i#^;E43nUj^VaIMzQV2_4}Uyj(D7;ye$B97j_7v0 z4_T4dxIZTeJD+w+m!mSyK`w63sUDZ3b}ihgTxYt|I=girUJM46x+0J;4o6h0p5Wqfg>i;Z%%mw}R%e#s=g) zws@d5D#V~N110KIY0}tzqlOd{4+axvZosl^4n~C=h|z*0i6)yA>Ea;Qcm$wJ!gnsT z^EM6#eAwYfIch`swA8faX3bk^wR4w_ZKCIH-FxYEP#D-LMjATuu;HVOI#Fv=W|}(l zwCS_VdQ-coerdlzjV@}uNv(BuQ-d{_JzUV*PJeVU12Ikn;qTGbw;0x9jD@N{l5KPAO5X_x1+bCx1+bCx1+bCx1;}sBmDbN!e3e`oq8Or zC;?lM?-_qRNW(xJ#a~mkA{9|Ph&W`Zf?z>Z#8IkP1Pi6D(5i#Ur5{3*h9t$sQE)9d z__0`ZaBo z#K0>A^r8Es-7h*&JNu-w9|XsE9%C|}69tZ?4q ztd=UQaZmojU`|_3ah>K6Vpv2R35bwU!3IjO5TR8g#YB?!qaOZ2$DbgVOs)+ua?GO) z6_S7B2mgcL-J1Ey2{$Pi1=?S1`(qdg>;m?2VCv|15dhSNRH&EDdh9O`x$*x7U;hPx>nuZ8v8hX0MgXe(hYEM2#gdc zd(GqBovpq7d#2If4_<|GpN70rI{*Lx24ZSUM??Tp08#)_QO)hr00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-^q5fmpZ>k5`30000TNklk From 1c94d2c9e9f994d78be6eba9a42d0926b93a79bb Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 4 Jul 2026 13:10:03 +0200 Subject: [PATCH 057/477] craftable pyrite projectors, once you find one --- .../resources/assets/spectrum/lang/en_us.json | 1 + .../unlocks/blocks/pyrite_projector.json | 31 +++++++++++++++++++ .../entries/dimension/undergrowth_manor.json | 5 +++ .../pedestal/tier4/pyrite_projector.json | 25 +++++++++++++++ 4 files changed, 62 insertions(+) create mode 100644 src/main/resources/data/spectrum/advancement/unlocks/blocks/pyrite_projector.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier4/pyrite_projector.json diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 0933099bb8..356baea4bc 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -2670,6 +2670,7 @@ "book.spectrum.guidebook.undergrowth_manor.page4.title": "The Dreiton", "book.spectrum.guidebook.undergrowth_manor.page5.text": "I was not expecting to find a person here, much less a sleeping woman.\\\n\\\nAt first I thought she was dead, but I quickly realized that she is breathing. They are just... very soft, very shallow, very quiet breaths.\\\n\\\n*This place is falling apart... she must have been here for decades if not centuries.*", "book.spectrum.guidebook.undergrowth_manor.page4.text": "*...I don't think she is going to wake up.*", + "book.spectrum.guidebook.undergrowth_manor.pyrite_projector.text": "Even though I managed to replicate these things close-to-perfectly (at least visually), I still do not have the sightest clue how to operate these things.\\\nWhat are these for...?", "book.spectrum.guidebook.foundry.page0.text": "I still remember my first days in this world, when I laboriously knocked coal out of stone to melt ore. But those days are numbered – the future is now, old me.\\\n\\\nBut there is a price to pay: I will lose out on the experience I would get from smelting.", "book.spectrum.guidebook.foundry.page1.text": "Automatically smelts broken blocks. Used on a [#](bb00bb)Fishing Rod[#]() it will set its hook on fire.\\\n\\\nMax Level: 1\\\nApplicable to mining tools and [#](bb00bb)Spectrum's Fishing Rods[#]().\\\nMutually exclusive with Silk Touch.", "book.spectrum.guidebook.four_upgrade_slots": "4 upgrade slots", diff --git a/src/main/resources/data/spectrum/advancement/unlocks/blocks/pyrite_projector.json b/src/main/resources/data/spectrum/advancement/unlocks/blocks/pyrite_projector.json new file mode 100644 index 0000000000..93f534e173 --- /dev/null +++ b/src/main/resources/data/spectrum/advancement/unlocks/blocks/pyrite_projector.json @@ -0,0 +1,31 @@ +{ + "criteria": { + "collected_pyrite": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:hidden/collect_pyrite" + } + }, + "collected_moonstone_core": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:lategame/collect_moonstone_core" + } + }, + "has_pyrite_projector_in_undergrowth_manor": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "player": { + "location": { + "structures": "spectrum:undergrowth_manor" + } + }, + "items": [ + { + "items": "spectrum:pyrite_projector" + } + ] + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/dimension/undergrowth_manor.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/dimension/undergrowth_manor.json index b1f59e792a..d7ff4c3fb3 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/dimension/undergrowth_manor.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/dimension/undergrowth_manor.json @@ -33,6 +33,11 @@ "type": "modonomicon:text", "text": "book.spectrum.guidebook.undergrowth_manor.page1.text" }, + { + "type": "spectrum:pedestal_crafting", + "text": "book.spectrum.guidebook.undergrowth_manor.pyrite_projector.text", + "recipe_id": "spectrum:pedestal/tier4/pyrite_projector" + }, { "type": "modonomicon:image", "use_legacy_rendering": true, diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier4/pyrite_projector.json b/src/main/resources/data/spectrum/recipe/pedestal/tier4/pyrite_projector.json new file mode 100644 index 0000000000..e2bce7e543 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier4/pyrite_projector.json @@ -0,0 +1,25 @@ +{ + "type": "spectrum:pedestal", + "time": 800, + "tier": "complex", + "colors": { + "spectrum:yellow": 16, + "spectrum:white": 4 + }, + "experience": 2.0, + "pattern": [ + "GGG", + "PMP", + "PPP" + ], + "key": { + "P": "spectrum:pyrite", + "M": "spectrum:moonstone_core", + "G": "minecraft:glow_lichen" + }, + "result": { + "id": "spectrum:pyrite_projector", + "count": 4 + }, + "required_advancement": "spectrum:unlocks/blocks/pyrite_projector" +} \ No newline at end of file From 87e6ba1816de867dfbdf5637e0f6cb4b09760bd3 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 4 Jul 2026 13:37:31 +0200 Subject: [PATCH 058/477] fluid type refactor. Fluid effects & fluid crafting now works in cauldrons --- .../blocks/fluid/SpectrumCauldronBlock.java | 8 +-- .../blocks/fluid/SpectrumFluidType.java | 44 ++++++++++++ .../spectrum/registries/SpectrumBlocks.java | 8 +-- .../spectrum/registries/SpectrumFluids.java | 67 +++---------------- 4 files changed, 62 insertions(+), 65 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumFluidType.java diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumCauldronBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumCauldronBlock.java index c44d93024d..421c2d74ac 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumCauldronBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumCauldronBlock.java @@ -17,9 +17,9 @@ public class SpectrumCauldronBlock extends AbstractCauldronBlock { - protected final Supplier fluidType; + protected final Supplier fluidType; - public SpectrumCauldronBlock(Supplier fluidType, CauldronInteraction.InteractionMap interactions, BlockBehaviour.Properties properties) { + public SpectrumCauldronBlock(Supplier fluidType, CauldronInteraction.InteractionMap interactions, BlockBehaviour.Properties properties) { super(properties, interactions); this.fluidType = fluidType; } @@ -37,11 +37,11 @@ public boolean isFull(BlockState p_153511_) { @Override protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { if (this.isEntityInsideContent(state, pos, entity)) { - entity.clearFire(); + this.getFluidType().onEntityCollision(state, level, pos, entity); } } - protected FluidType getFluidType() { + protected SpectrumFluid getFluidType() { return fluidType.get(); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumFluidType.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumFluidType.java new file mode 100644 index 0000000000..0461b82ac4 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumFluidType.java @@ -0,0 +1,44 @@ +package de.dafuqs.spectrum.blocks.fluid; + +import de.dafuqs.spectrum.api.block.*; +import de.dafuqs.spectrum.progression.*; +import de.dafuqs.spectrum.recipe.fluid_converting.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.core.*; +import net.minecraft.server.level.*; +import net.minecraft.sounds.*; +import net.minecraft.world.entity.*; +import net.minecraft.world.entity.item.*; +import net.minecraft.world.item.*; +import net.minecraft.world.item.crafting.*; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.state.*; +import net.minecraft.world.level.material.*; +import net.minecraft.world.phys.*; +import net.neoforged.neoforge.fluids.*; +import org.jspecify.annotations.*; + +public abstract class SpectrumFluidType extends FluidType { + + protected final boolean isVaporized; + protected final GameRules.Key isInfiniteGameRule; + + public SpectrumFluidType(boolean isVaporized, GameRules.Key isInfiniteGameRule, Properties properties) { + super(properties); + this.isVaporized = isVaporized; + this.isInfiniteGameRule = isInfiniteGameRule; + } + + public boolean isVaporizedOnPlacement(Level level, BlockPos pos, FluidStack stack) { + return isVaporized && level.dimensionType().ultraWarm(); + } + + @Override + public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos pos) { + if (reader instanceof Level level) { + return level.getGameRules().getBoolean(this.isInfiniteGameRule); + } + return super.canConvertToSource(state, reader, pos); + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index d0ce9220e4..c9803f1ebc 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -1860,10 +1860,10 @@ private static BlockBehaviour.Properties fluid(MapColor mapColor) { public static final DeferredBlock MIDNIGHT_SOLUTION = register(singleton(block("midnight_solution", () -> new MidnightSolutionFluidBlock(SpectrumFluids.MIDNIGHT_SOLUTION.get(), BLACK_MATERIA.get().defaultBlockState(), fluid(MapColor.WARPED_STEM).replaceable())), SpectrumTexturedModelProviders.particle(b -> b, "_still"))); public static final DeferredBlock DRAGONROT = register(singleton(block("dragonrot", () -> new DragonrotFluidBlock(SpectrumFluids.DRAGONROT.get(), BLACKSTONE.defaultBlockState(), fluid(MapColor.ICE).lightLevel((state) -> SpectrumFluids.DRAGONROT_LIGHT_LEVEL).replaceable())), SpectrumTexturedModelProviders.particle(b -> b, "_still"))); - public static final DeferredBlock LIQUID_CRYSTAL_CAULDRON = register(simple(block("liquid_crystal_cauldron", () -> new SpectrumCauldronBlock(SpectrumFluids.LIQUID_CRYSTAL_TYPE, CauldronInteraction.newInteractionMap(SpectrumCauldronInteractions.LIQUID_CRYSTAL_INTERACTION), BlockBehaviour.Properties.ofFullCopy(Blocks.CAULDRON))))); - public static final DeferredBlock SLUDGE_CAULDRON = register(simple(block("sludge_cauldron", () -> new SpectrumCauldronBlock(SpectrumFluids.LIQUID_CRYSTAL_TYPE, CauldronInteraction.newInteractionMap(SpectrumCauldronInteractions.SLUDGE_INTERACTION), BlockBehaviour.Properties.ofFullCopy(Blocks.CAULDRON))))); - public static final DeferredBlock MIDNIGHT_SOLUTION_CAULDRON = register(simple(block("midnight_solution_cauldron", () -> new SpectrumCauldronBlock(SpectrumFluids.LIQUID_CRYSTAL_TYPE, CauldronInteraction.newInteractionMap(SpectrumCauldronInteractions.MIDNIGHT_SOLUTION_INTERACTION), BlockBehaviour.Properties.ofFullCopy(Blocks.CAULDRON))))); - public static final DeferredBlock DRAGONROT_CAULDRON = register(simple(block("dragonrot_cauldron", () -> new SpectrumCauldronBlock(SpectrumFluids.LIQUID_CRYSTAL_TYPE, CauldronInteraction.newInteractionMap(SpectrumCauldronInteractions.DRAGONROT_INTERACTION), BlockBehaviour.Properties.ofFullCopy(Blocks.CAULDRON))))); + public static final DeferredBlock LIQUID_CRYSTAL_CAULDRON = register(simple(block("liquid_crystal_cauldron", () -> new SpectrumCauldronBlock(SpectrumFluids.LIQUID_CRYSTAL, CauldronInteraction.newInteractionMap(SpectrumCauldronInteractions.LIQUID_CRYSTAL_INTERACTION), BlockBehaviour.Properties.ofFullCopy(Blocks.CAULDRON))))); + public static final DeferredBlock SLUDGE_CAULDRON = register(simple(block("sludge_cauldron", () -> new SpectrumCauldronBlock(SpectrumFluids.SLUDGE, CauldronInteraction.newInteractionMap(SpectrumCauldronInteractions.SLUDGE_INTERACTION), BlockBehaviour.Properties.ofFullCopy(Blocks.CAULDRON))))); + public static final DeferredBlock MIDNIGHT_SOLUTION_CAULDRON = register(simple(block("midnight_solution_cauldron", () -> new SpectrumCauldronBlock(SpectrumFluids.MIDNIGHT_SOLUTION, CauldronInteraction.newInteractionMap(SpectrumCauldronInteractions.MIDNIGHT_SOLUTION_INTERACTION), BlockBehaviour.Properties.ofFullCopy(Blocks.CAULDRON))))); + public static final DeferredBlock DRAGONROT_CAULDRON = register(simple(block("dragonrot_cauldron", () -> new SpectrumCauldronBlock(SpectrumFluids.DRAGONROT, CauldronInteraction.newInteractionMap(SpectrumCauldronInteractions.DRAGONROT_INTERACTION), BlockBehaviour.Properties.ofFullCopy(Blocks.CAULDRON))))); public static final DeferredBlock TOPAZ_BRICKS = register(simple(blockWithItem("topaz_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_TOPAZ.get())), InkColors.CYAN))); public static final DeferredBlock AMETHYST_BRICKS = register(simple(blockWithItem("amethyst_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_AMETHYST.get())), InkColors.MAGENTA))); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java index 168fa12617..dd11b0341f 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java @@ -7,13 +7,17 @@ import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.*; +import de.dafuqs.spectrum.recipe.fluid_converting.*; import net.minecraft.client.*; import net.minecraft.client.renderer.*; import net.minecraft.core.*; import net.minecraft.core.registries.*; import net.minecraft.resources.*; import net.minecraft.sounds.*; +import net.minecraft.world.entity.*; +import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; +import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.material.*; import net.minecraft.world.level.pathfinder.*; import net.neoforged.bus.api.*; @@ -32,7 +36,7 @@ public class SpectrumFluids { // LIQUID CRYSTAL public static final int LIQUID_CRYSTAL_LIGHT_LEVEL = 11; - public static final DeferredHolder LIQUID_CRYSTAL_TYPE = registerFluidType("liquid_crystal", () -> new FluidType(FluidType.Properties.create() + public static final DeferredHolder LIQUID_CRYSTAL_TYPE = registerFluidType("liquid_crystal", () -> new SpectrumFluidType(true, SpectrumGameRules.RULE_LIQUID_CRYSTAL_SOURCE_CONVERSION, FluidType.Properties.create() .descriptionId("block.spectrum.liquid_crystal") .fallDistanceModifier(0F) .canDrown(true).canExtinguish(true).supportsBoating(true).canHydrate(true).lightLevel(LIQUID_CRYSTAL_LIGHT_LEVEL) @@ -40,19 +44,6 @@ public class SpectrumFluids { .density(800).viscosity(1000).temperature(200) .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL).sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY) .addDripstoneDripping(SpectrumConfig.CONFIG.LiquidCrystalDripstoneDripChance.get().floatValue(), SpectrumParticleTypes.DRIPPING_LIQUID_CRYSTAL, SpectrumBlocks.LIQUID_CRYSTAL_CAULDRON.get(), SoundEvents.POINTED_DRIPSTONE_DRIP_WATER_INTO_CAULDRON)) { - - @Override - public boolean isVaporizedOnPlacement(Level level, BlockPos pos, FluidStack stack) { - return level.dimensionType().ultraWarm(); - } - - @Override - public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos pos) { - if (reader instanceof Level level) { - return level.getGameRules().getBoolean(SpectrumGameRules.RULE_LIQUID_CRYSTAL_SOURCE_CONVERSION); - } - return super.canConvertToSource(state, reader, pos); - } }); public static final DeferredHolder LIQUID_CRYSTAL = registerFluid("liquid_crystal", LiquidCrystalFluid.Still::new); public static final DeferredHolder FLOWING_LIQUID_CRYSTAL = registerFluid("flowing_liquid_crystal", LiquidCrystalFluid.Flowing::new); @@ -62,7 +53,7 @@ public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos // SLUDGE public static final int SLUDGE_LIGHT_LEVEL = 0; - public static final DeferredHolder SLUDGE_TYPE = registerFluidType("sludge", () -> new FluidType(FluidType.Properties.create() + public static final DeferredHolder SLUDGE_TYPE = registerFluidType("sludge", () -> new SpectrumFluidType(true, SpectrumGameRules.RULE_SLUDGE_SOURCE_CONVERSION, FluidType.Properties.create() .descriptionId("block.spectrum.sludge") .fallDistanceModifier(0F) .canDrown(true).canExtinguish(true).supportsBoating(false).canHydrate(false).lightLevel(SLUDGE_LIGHT_LEVEL) @@ -70,19 +61,6 @@ public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos .density(5000).viscosity(8000).temperature(350) .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL).sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY) .addDripstoneDripping(SpectrumConfig.CONFIG.SludgeDripstoneDripChance.get().floatValue(), SpectrumParticleTypes.DRIPPING_SLUDGE, SpectrumBlocks.SLUDGE_CAULDRON.get(), SoundEvents.POINTED_DRIPSTONE_DRIP_WATER_INTO_CAULDRON)) { - - @Override - public boolean isVaporizedOnPlacement(Level level, BlockPos pos, FluidStack stack) { - return level.dimensionType().ultraWarm(); - } - - @Override - public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos pos) { - if (reader instanceof Level level) { - return level.getGameRules().getBoolean(SpectrumGameRules.RULE_SLUDGE_SOURCE_CONVERSION); - } - return super.canConvertToSource(state, reader, pos); - } }); public static final DeferredHolder SLUDGE = registerFluid("sludge", SludgeFluid.StillSludge::new); public static final DeferredHolder FLOWING_SLUDGE = registerFluid("flowing_sludge", SludgeFluid.FlowingSludge::new); @@ -92,27 +70,15 @@ public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos // MIDNIGHT SOLUTION public static final int MIDNIGHT_SOLUTION_LIGHT_LEVEL = 0; - public static final DeferredHolder MIDNIGHT_SOLUTION_TYPE = registerFluidType("midnight_solution", () -> new FluidType(FluidType.Properties.create() + public static final DeferredHolder MIDNIGHT_SOLUTION_TYPE = registerFluidType("midnight_solution", () -> new SpectrumFluidType(true, SpectrumGameRules.RULE_MIDNIGHT_SOLUTION_SOURCE_CONVERSION, + FluidType.Properties.create() .descriptionId("block.spectrum.midnight_solution") .fallDistanceModifier(0F) .canDrown(true).canExtinguish(true).supportsBoating(true).canHydrate(false).lightLevel(MIDNIGHT_SOLUTION_LIGHT_LEVEL) .pathType(PathType.LAVA).adjacentPathType(null) - .density(1500).viscosity(2000).temperature(300) + .density(1500).viscosity(2000).temperature(-100) .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL).sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY) .addDripstoneDripping(SpectrumConfig.CONFIG.MidnightSolutionDripstoneDripChance.get().floatValue(), SpectrumParticleTypes.DRIPPING_MIDNIGHT_SOLUTION, SpectrumBlocks.MIDNIGHT_SOLUTION_CAULDRON.get(), SoundEvents.POINTED_DRIPSTONE_DRIP_WATER_INTO_CAULDRON)) { - - @Override - public boolean isVaporizedOnPlacement(Level level, BlockPos pos, FluidStack stack) { - return level.dimensionType().ultraWarm(); - } - - @Override - public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos pos) { - if (reader instanceof Level level) { - return level.getGameRules().getBoolean(SpectrumGameRules.RULE_MIDNIGHT_SOLUTION_SOURCE_CONVERSION); - } - return super.canConvertToSource(state, reader, pos); - } }); public static final DeferredHolder MIDNIGHT_SOLUTION = registerFluid("midnight_solution", MidnightSolutionFluid.Still::new); public static final DeferredHolder FLOWING_MIDNIGHT_SOLUTION = registerFluid("flowing_midnight_solution", MidnightSolutionFluid.Flowing::new); @@ -122,7 +88,7 @@ public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos // DRAGONROT public static final int DRAGONROT_LIGHT_LEVEL = 15; - public static final DeferredHolder DRAGONROT_TYPE = registerFluidType("dragonrot", () -> new FluidType(FluidType.Properties.create() + public static final DeferredHolder DRAGONROT_TYPE = registerFluidType("dragonrot", () -> new SpectrumFluidType(false, SpectrumGameRules.RULE_DRAGONROT_SOURCE_CONVERSION, FluidType.Properties.create() .descriptionId("block.spectrum.dragonrot") .fallDistanceModifier(0F) .canDrown(true).canExtinguish(true).supportsBoating(true).canHydrate(false).lightLevel(DRAGONROT_LIGHT_LEVEL) @@ -130,19 +96,6 @@ public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos .density(2000).viscosity(3000).temperature(650) .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL).sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY) .addDripstoneDripping(SpectrumConfig.CONFIG.DragonrotDripstoneDripChance.get().floatValue(), SpectrumParticleTypes.DRIPPING_DRAGONROT, SpectrumBlocks.DRAGONROT_CAULDRON.get(), SoundEvents.POINTED_DRIPSTONE_DRIP_WATER_INTO_CAULDRON)) { - - @Override - public boolean isVaporizedOnPlacement(Level level, BlockPos pos, FluidStack stack) { - return level.dimensionType().ultraWarm(); - } - - @Override - public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos pos) { - if (reader instanceof Level level) { - return level.getGameRules().getBoolean(SpectrumGameRules.RULE_DRAGONROT_SOURCE_CONVERSION); - } - return super.canConvertToSource(state, reader, pos); - } }); public static final DeferredHolder DRAGONROT = registerFluid("dragonrot", DragonrotFluid.Still::new); public static final DeferredHolder FLOWING_DRAGONROT = registerFluid("flowing_dragonrot", DragonrotFluid.Flowing::new); From 680028008b73db6a6a50d73d287c2b402e81e4c6 Mon Sep 17 00:00:00 2001 From: kawaiixissa13 Date: Sat, 4 Jul 2026 09:52:11 -0400 Subject: [PATCH 059/477] Fix wrong check in particle payload --- .../s2c_payloads/PlayParticleAroundBlockSidesPayload.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleAroundBlockSidesPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleAroundBlockSidesPayload.java index a4bc4ac3d6..f96d31c334 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleAroundBlockSidesPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleAroundBlockSidesPayload.java @@ -33,7 +33,7 @@ public static void playParticleAroundBlockSides(ServerLevel level, int quantity, Packet packet = new ClientboundCustomPayloadPacket(new PlayParticleAroundBlockSidesPayload(pos, quantity, velocity, particleEffect, sides)); for (ServerPlayer player : level.getChunkSource().chunkMap.getPlayers(new ChunkPos(pos), false)) { - if (sendCheck.test(player)) + if (!sendCheck.test(player)) continue; player.connection.send(packet); From 91fd783a50788310f45efe4d7a76bd09c35b2467 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 4 Jul 2026 19:05:24 +0200 Subject: [PATCH 060/477] cloak rotated colored wood --- .../blocks/conditional/colored_tree/ColoredWoodBlock.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java index f9f70a094c..509e1e3324 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java @@ -40,7 +40,11 @@ public ResourceLocation getCloakAdvancementIdentifier() { @Override public Map getBlockStateCloaks() { - return Map.of(this.defaultBlockState(), Blocks.OAK_WOOD.defaultBlockState()); + Map map = new Hashtable<>(); + for (Direction.Axis axis : RotatedPillarBlock.AXIS.getPossibleValues()) { + map.put(this.defaultBlockState().setValue(RotatedPillarBlock.AXIS, axis), Blocks.OAK_WOOD.defaultBlockState().setValue(RotatedPillarBlock.AXIS, axis)); + } + return map; } @Override From 2d84005964ecdc70b29f4095c496162cd9937a1e Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 4 Jul 2026 19:24:04 +0200 Subject: [PATCH 061/477] stripping colored logs/wood drops Pigment --- .../colored_tree/ColoredLogBlock.java | 23 ++++- .../ColoredStrippedWoodBlockSpectrum.java | 7 +- .../colored_tree/ColoredWoodBlock.java | 25 +++++- .../spectrum/registries/SpectrumBlocks.java | 83 ++++++++++--------- .../registries/SpectrumLootTableKeys.java | 17 ++++ .../stripping/colored_logs/black.json | 14 ++++ .../gameplay/stripping/colored_logs/blue.json | 14 ++++ .../stripping/colored_logs/brown.json | 14 ++++ .../gameplay/stripping/colored_logs/cyan.json | 14 ++++ .../gameplay/stripping/colored_logs/gray.json | 14 ++++ .../stripping/colored_logs/green.json | 14 ++++ .../stripping/colored_logs/light_blue.json | 14 ++++ .../stripping/colored_logs/light_gray.json | 14 ++++ .../gameplay/stripping/colored_logs/lime.json | 14 ++++ .../stripping/colored_logs/magenta.json | 14 ++++ .../stripping/colored_logs/orange.json | 14 ++++ .../gameplay/stripping/colored_logs/pink.json | 14 ++++ .../stripping/colored_logs/purple.json | 14 ++++ .../gameplay/stripping/colored_logs/red.json | 14 ++++ .../stripping/colored_logs/white.json | 14 ++++ .../stripping/colored_logs/yellow.json | 14 ++++ 21 files changed, 331 insertions(+), 48 deletions(-) create mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/black.json create mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/blue.json create mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/brown.json create mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/cyan.json create mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/gray.json create mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/green.json create mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/light_blue.json create mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/light_gray.json create mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/lime.json create mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/magenta.json create mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/orange.json create mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/pink.json create mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/purple.json create mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/red.json create mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/white.json create mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/yellow.json diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLogBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLogBlock.java index 11307f12f4..1f011aa446 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLogBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLogBlock.java @@ -3,26 +3,30 @@ import com.mojang.serialization.*; import de.dafuqs.revelationary.api.revelations.*; import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.blocks.deeper_down.*; import de.dafuqs.spectrum.blocks.flammable.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.core.*; import net.minecraft.resources.*; import net.minecraft.util.*; import net.minecraft.world.item.*; +import net.minecraft.world.item.context.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; +import net.minecraft.world.level.storage.loot.*; +import net.neoforged.neoforge.common.*; import org.jspecify.annotations.Nullable; import java.util.*; import java.util.function.*; -public class ColoredLogBlock extends FlammableLogBlock implements RevelationAware, ColoredTree { +public class ColoredLogBlock extends StrippingLootPillarBlock implements RevelationAware, ColoredTree { private static final Map LOGS = new Object2ObjectArrayMap<>(); protected final InkColor color; - public ColoredLogBlock(Properties settings, Supplier strippedBlock, InkColor color) { - super(settings, strippedBlock); + public ColoredLogBlock(Properties settings, Supplier strippedBlock, InkColor color, ResourceKey strippingLootTableKey) { + super(settings, strippedBlock, strippingLootTableKey); this.color = color; LOGS.put(color, this); RevelationAware.register(this); @@ -34,6 +38,19 @@ public ColoredLogBlock(Properties settings, Supplier getBlockStateCloaks() { - return Map.of(this.defaultBlockState(), Blocks.STRIPPED_OAK_WOOD.defaultBlockState()); + Map map = new Hashtable<>(); + for (Direction.Axis axis : RotatedPillarBlock.AXIS.getPossibleValues()) { + map.put(this.defaultBlockState().setValue(RotatedPillarBlock.AXIS, axis), Blocks.STRIPPED_OAK_WOOD.defaultBlockState().setValue(RotatedPillarBlock.AXIS, axis)); + } + return map; } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java index 509e1e3324..0378b7e7cb 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java @@ -3,25 +3,30 @@ import com.mojang.serialization.*; import de.dafuqs.revelationary.api.revelations.*; import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.blocks.deeper_down.*; import de.dafuqs.spectrum.blocks.flammable.*; import it.unimi.dsi.fastutil.objects.*; +import net.minecraft.core.*; import net.minecraft.resources.*; import net.minecraft.util.*; import net.minecraft.world.item.*; +import net.minecraft.world.item.context.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; +import net.minecraft.world.level.storage.loot.*; +import net.neoforged.neoforge.common.*; import org.jspecify.annotations.Nullable; import java.util.*; import java.util.function.*; -public class ColoredWoodBlock extends FlammableLogBlock implements RevelationAware, ColoredTree { +public class ColoredWoodBlock extends StrippingLootPillarBlock implements RevelationAware, ColoredTree { private static final Map WOOD = new Object2ObjectArrayMap<>(); protected final InkColor color; - public ColoredWoodBlock(Properties settings, Supplier strippedBlock, InkColor color) { - super(settings, strippedBlock); + public ColoredWoodBlock(Properties settings, Supplier strippedBlock, InkColor color, ResourceKey strippingLootTableKey) { + super(settings, strippedBlock, strippingLootTableKey); this.color = color; WOOD.put(color, this); RevelationAware.register(this); @@ -33,6 +38,20 @@ public ColoredWoodBlock(Properties settings, Supplier registerColoredStr public static final DeferredBlock STRIPPED_WHITE_WOOD = registerColoredStrippedWood("stripped_white_wood", STRIPPED_WHITE_LOG, InkColors.WHITE); public static final DeferredBlock STRIPPED_YELLOW_WOOD = registerColoredStrippedWood("stripped_yellow_wood", STRIPPED_YELLOW_LOG, InkColors.YELLOW); - public static DeferredBlock registerColoredLog(String name, Supplier strippedBlock, InkColor color) { - return register(log(blockWithItem(name, () -> new ColoredLogBlock(copyWithMapColor(OAK_LOG, color.getDyeColor().orElse(DyeColor.LIME).getMapColor()), strippedBlock, color), color))); - } - - public static final DeferredBlock BLACK_LOG = registerColoredLog("black_log", STRIPPED_BLACK_LOG, InkColors.BLACK); - public static final DeferredBlock BLUE_LOG = registerColoredLog("blue_log", STRIPPED_BLUE_LOG, InkColors.BLUE); - public static final DeferredBlock BROWN_LOG = registerColoredLog("brown_log", STRIPPED_BROWN_LOG, InkColors.BROWN); - public static final DeferredBlock CYAN_LOG = registerColoredLog("cyan_log", STRIPPED_CYAN_LOG, InkColors.CYAN); - public static final DeferredBlock GRAY_LOG = registerColoredLog("gray_log", STRIPPED_GRAY_LOG, InkColors.GRAY); - public static final DeferredBlock GREEN_LOG = registerColoredLog("green_log", STRIPPED_GREEN_LOG, InkColors.GREEN); - public static final DeferredBlock LIGHT_BLUE_LOG = registerColoredLog("light_blue_log", STRIPPED_LIGHT_BLUE_LOG, InkColors.LIGHT_BLUE); - public static final DeferredBlock LIGHT_GRAY_LOG = registerColoredLog("light_gray_log", STRIPPED_LIGHT_GRAY_LOG, InkColors.LIGHT_GRAY); - public static final DeferredBlock LIME_LOG = registerColoredLog("lime_log", STRIPPED_LIME_LOG, InkColors.LIME); - public static final DeferredBlock MAGENTA_LOG = registerColoredLog("magenta_log", STRIPPED_MAGENTA_LOG, InkColors.MAGENTA); - public static final DeferredBlock ORANGE_LOG = registerColoredLog("orange_log", STRIPPED_ORANGE_LOG, InkColors.ORANGE); - public static final DeferredBlock PINK_LOG = registerColoredLog("pink_log", STRIPPED_PINK_LOG, InkColors.PINK); - public static final DeferredBlock PURPLE_LOG = registerColoredLog("purple_log", STRIPPED_PURPLE_LOG, InkColors.PURPLE); - public static final DeferredBlock RED_LOG = registerColoredLog("red_log", STRIPPED_RED_LOG, InkColors.RED); - public static final DeferredBlock WHITE_LOG = registerColoredLog("white_log", STRIPPED_WHITE_LOG, InkColors.WHITE); - public static final DeferredBlock YELLOW_LOG = registerColoredLog("yellow_log", STRIPPED_YELLOW_LOG, InkColors.YELLOW); - - public static DeferredBlock registerColoredWood(String name, Supplier strippedBlock, DeferredBlock logBlock, InkColor color) { - return register(blockWithItem(name, () -> new ColoredWoodBlock(copyWithMapColor(OAK_WOOD, logBlock.get().defaultMapColor()), strippedBlock, color), color)); - } - - public static final DeferredBlock BLACK_WOOD = registerColoredWood("black_wood", STRIPPED_BLACK_WOOD, BLACK_LOG, InkColors.BLACK); - public static final DeferredBlock BLUE_WOOD = registerColoredWood("blue_wood", STRIPPED_BLUE_WOOD, BLUE_LOG, InkColors.BLUE); - public static final DeferredBlock BROWN_WOOD = registerColoredWood("brown_wood", STRIPPED_BROWN_WOOD, BROWN_LOG, InkColors.BROWN); - public static final DeferredBlock CYAN_WOOD = registerColoredWood("cyan_wood", STRIPPED_CYAN_WOOD, CYAN_LOG, InkColors.CYAN); - public static final DeferredBlock GRAY_WOOD = registerColoredWood("gray_wood", STRIPPED_GRAY_WOOD, GRAY_LOG, InkColors.GRAY); - public static final DeferredBlock GREEN_WOOD = registerColoredWood("green_wood", STRIPPED_GREEN_WOOD, GREEN_LOG, InkColors.GREEN); - public static final DeferredBlock LIGHT_BLUE_WOOD = registerColoredWood("light_blue_wood", STRIPPED_LIGHT_BLUE_WOOD, LIGHT_BLUE_LOG, InkColors.LIGHT_BLUE); - public static final DeferredBlock LIGHT_GRAY_WOOD = registerColoredWood("light_gray_wood", STRIPPED_LIGHT_GRAY_WOOD, LIGHT_GRAY_LOG, InkColors.LIGHT_GRAY); - public static final DeferredBlock LIME_WOOD = registerColoredWood("lime_wood", STRIPPED_LIME_WOOD, LIME_LOG, InkColors.LIME); - public static final DeferredBlock MAGENTA_WOOD = registerColoredWood("magenta_wood", STRIPPED_MAGENTA_WOOD, MAGENTA_LOG, InkColors.MAGENTA); - public static final DeferredBlock ORANGE_WOOD = registerColoredWood("orange_wood", STRIPPED_ORANGE_WOOD, ORANGE_LOG, InkColors.ORANGE); - public static final DeferredBlock PINK_WOOD = registerColoredWood("pink_wood", STRIPPED_PINK_WOOD, PINK_LOG, InkColors.PINK); - public static final DeferredBlock PURPLE_WOOD = registerColoredWood("purple_wood", STRIPPED_PURPLE_WOOD, PURPLE_LOG, InkColors.PURPLE); - public static final DeferredBlock RED_WOOD = registerColoredWood("red_wood", STRIPPED_RED_WOOD, RED_LOG, InkColors.RED); - public static final DeferredBlock WHITE_WOOD = registerColoredWood("white_wood", STRIPPED_WHITE_WOOD, WHITE_LOG, InkColors.WHITE); - public static final DeferredBlock YELLOW_WOOD = registerColoredWood("yellow_wood", STRIPPED_YELLOW_WOOD, YELLOW_LOG, InkColors.YELLOW); + public static DeferredBlock registerColoredLog(String name, Supplier strippedBlock, InkColor color, ResourceKey strippingLootTableKey) { + return register(log(blockWithItem(name, () -> new ColoredLogBlock(copyWithMapColor(OAK_LOG, color.getDyeColor().orElse(DyeColor.LIME).getMapColor()), strippedBlock, color, strippingLootTableKey), color))); + } + + public static final DeferredBlock BLACK_LOG = registerColoredLog("black_log", STRIPPED_BLACK_LOG, InkColors.BLACK, SpectrumLootTableKeys.BLACK_LOG_STRIPPING); + public static final DeferredBlock BLUE_LOG = registerColoredLog("blue_log", STRIPPED_BLUE_LOG, InkColors.BLUE, SpectrumLootTableKeys.BLUE_LOG_STRIPPING); + public static final DeferredBlock BROWN_LOG = registerColoredLog("brown_log", STRIPPED_BROWN_LOG, InkColors.BROWN, SpectrumLootTableKeys.BROWN_LOG_STRIPPING); + public static final DeferredBlock CYAN_LOG = registerColoredLog("cyan_log", STRIPPED_CYAN_LOG, InkColors.CYAN, SpectrumLootTableKeys.CYAN_LOG_STRIPPING); + public static final DeferredBlock GRAY_LOG = registerColoredLog("gray_log", STRIPPED_GRAY_LOG, InkColors.GRAY, SpectrumLootTableKeys.GRAY_LOG_STRIPPING); + public static final DeferredBlock GREEN_LOG = registerColoredLog("green_log", STRIPPED_GREEN_LOG, InkColors.GREEN, SpectrumLootTableKeys.GREEN_LOG_STRIPPING); + public static final DeferredBlock LIGHT_BLUE_LOG = registerColoredLog("light_blue_log", STRIPPED_LIGHT_BLUE_LOG, InkColors.LIGHT_BLUE, SpectrumLootTableKeys.LIGHT_BLUE_LOG_STRIPPING); + public static final DeferredBlock LIGHT_GRAY_LOG = registerColoredLog("light_gray_log", STRIPPED_LIGHT_GRAY_LOG, InkColors.LIGHT_GRAY, SpectrumLootTableKeys.LIGHT_GRAY_LOG_STRIPPING); + public static final DeferredBlock LIME_LOG = registerColoredLog("lime_log", STRIPPED_LIME_LOG, InkColors.LIME, SpectrumLootTableKeys.LIME_LOG_STRIPPING); + public static final DeferredBlock MAGENTA_LOG = registerColoredLog("magenta_log", STRIPPED_MAGENTA_LOG, InkColors.MAGENTA, SpectrumLootTableKeys.MAGENTA_LOG_STRIPPING); + public static final DeferredBlock ORANGE_LOG = registerColoredLog("orange_log", STRIPPED_ORANGE_LOG, InkColors.ORANGE, SpectrumLootTableKeys.ORANGE_LOG_STRIPPING); + public static final DeferredBlock PINK_LOG = registerColoredLog("pink_log", STRIPPED_PINK_LOG, InkColors.PINK, SpectrumLootTableKeys.PINK_LOG_STRIPPING); + public static final DeferredBlock PURPLE_LOG = registerColoredLog("purple_log", STRIPPED_PURPLE_LOG, InkColors.PURPLE, SpectrumLootTableKeys.PURPLE_LOG_STRIPPING); + public static final DeferredBlock RED_LOG = registerColoredLog("red_log", STRIPPED_RED_LOG, InkColors.RED, SpectrumLootTableKeys.RED_LOG_STRIPPING); + public static final DeferredBlock WHITE_LOG = registerColoredLog("white_log", STRIPPED_WHITE_LOG, InkColors.WHITE, SpectrumLootTableKeys.WHITE_LOG_STRIPPING); + public static final DeferredBlock YELLOW_LOG = registerColoredLog("yellow_log", STRIPPED_YELLOW_LOG, InkColors.YELLOW, SpectrumLootTableKeys.YELLOW_LOG_STRIPPING); + + public static DeferredBlock registerColoredWood(String name, Supplier strippedBlock, DeferredBlock logBlock, InkColor color, ResourceKey strippingLootTableKey) { + return register(blockWithItem(name, () -> new ColoredWoodBlock(copyWithMapColor(OAK_WOOD, logBlock.get().defaultMapColor()), strippedBlock, color, strippingLootTableKey), color)); + } + + public static final DeferredBlock BLACK_WOOD = registerColoredWood("black_wood", STRIPPED_BLACK_WOOD, BLACK_LOG, InkColors.BLACK, SpectrumLootTableKeys.BLACK_LOG_STRIPPING); + public static final DeferredBlock BLUE_WOOD = registerColoredWood("blue_wood", STRIPPED_BLUE_WOOD, BLUE_LOG, InkColors.BLUE, SpectrumLootTableKeys.BLUE_LOG_STRIPPING); + public static final DeferredBlock BROWN_WOOD = registerColoredWood("brown_wood", STRIPPED_BROWN_WOOD, BROWN_LOG, InkColors.BROWN, SpectrumLootTableKeys.BROWN_LOG_STRIPPING); + public static final DeferredBlock CYAN_WOOD = registerColoredWood("cyan_wood", STRIPPED_CYAN_WOOD, CYAN_LOG, InkColors.CYAN, SpectrumLootTableKeys.CYAN_LOG_STRIPPING); + public static final DeferredBlock GRAY_WOOD = registerColoredWood("gray_wood", STRIPPED_GRAY_WOOD, GRAY_LOG, InkColors.GRAY, SpectrumLootTableKeys.GRAY_LOG_STRIPPING); + public static final DeferredBlock GREEN_WOOD = registerColoredWood("green_wood", STRIPPED_GREEN_WOOD, GREEN_LOG, InkColors.GREEN, SpectrumLootTableKeys.GREEN_LOG_STRIPPING); + public static final DeferredBlock LIGHT_BLUE_WOOD = registerColoredWood("light_blue_wood", STRIPPED_LIGHT_BLUE_WOOD, LIGHT_BLUE_LOG, InkColors.LIGHT_BLUE, SpectrumLootTableKeys.LIGHT_BLUE_LOG_STRIPPING); + public static final DeferredBlock LIGHT_GRAY_WOOD = registerColoredWood("light_gray_wood", STRIPPED_LIGHT_GRAY_WOOD, LIGHT_GRAY_LOG, InkColors.LIGHT_GRAY, SpectrumLootTableKeys.LIGHT_GRAY_LOG_STRIPPING); + public static final DeferredBlock LIME_WOOD = registerColoredWood("lime_wood", STRIPPED_LIME_WOOD, LIME_LOG, InkColors.LIME, SpectrumLootTableKeys.LIME_LOG_STRIPPING); + public static final DeferredBlock MAGENTA_WOOD = registerColoredWood("magenta_wood", STRIPPED_MAGENTA_WOOD, MAGENTA_LOG, InkColors.MAGENTA, SpectrumLootTableKeys.MAGENTA_LOG_STRIPPING); + public static final DeferredBlock ORANGE_WOOD = registerColoredWood("orange_wood", STRIPPED_ORANGE_WOOD, ORANGE_LOG, InkColors.ORANGE, SpectrumLootTableKeys.ORANGE_LOG_STRIPPING); + public static final DeferredBlock PINK_WOOD = registerColoredWood("pink_wood", STRIPPED_PINK_WOOD, PINK_LOG, InkColors.PINK, SpectrumLootTableKeys.PINK_LOG_STRIPPING); + public static final DeferredBlock PURPLE_WOOD = registerColoredWood("purple_wood", STRIPPED_PURPLE_WOOD, PURPLE_LOG, InkColors.PURPLE, SpectrumLootTableKeys.PURPLE_LOG_STRIPPING); + public static final DeferredBlock RED_WOOD = registerColoredWood("red_wood", STRIPPED_RED_WOOD, RED_LOG, InkColors.RED, SpectrumLootTableKeys.RED_LOG_STRIPPING); + public static final DeferredBlock WHITE_WOOD = registerColoredWood("white_wood", STRIPPED_WHITE_WOOD, WHITE_LOG, InkColors.WHITE, SpectrumLootTableKeys.WHITE_LOG_STRIPPING); + public static final DeferredBlock YELLOW_WOOD = registerColoredWood("yellow_wood", STRIPPED_YELLOW_WOOD, YELLOW_LOG, InkColors.YELLOW, SpectrumLootTableKeys.YELLOW_LOG_STRIPPING); public static DeferredBlock registerColoredLeaves(String name, InkColor color) { return register(singleton(blockWithItem(name, () -> new ColoredLeavesBlock(copyWithMapColor(OAK_LEAVES, color.getDyeColor().orElse(DyeColor.LIME).getMapColor()), color), color), TexturedModel.LEAVES)); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumLootTableKeys.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumLootTableKeys.java index 70f8b5bf8c..098bab910b 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumLootTableKeys.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumLootTableKeys.java @@ -35,6 +35,23 @@ public class SpectrumLootTableKeys { public static final ResourceKey IVORY_NOXCAP_STRIPPING = keyOf("gameplay/stripping/ivory_noxcap_stripping"); public static final ResourceKey CHESTNUT_NOXCAP_STRIPPING = keyOf("gameplay/stripping/chestnut_noxcap_stripping"); + public static final ResourceKey BLACK_LOG_STRIPPING = keyOf("gameplay/stripping/colored_logs/black"); + public static final ResourceKey BLUE_LOG_STRIPPING = keyOf("gameplay/stripping/colored_logs/blue"); + public static final ResourceKey BROWN_LOG_STRIPPING = keyOf("gameplay/stripping/colored_logs/brown"); + public static final ResourceKey CYAN_LOG_STRIPPING = keyOf("gameplay/stripping/colored_logs/cyan"); + public static final ResourceKey GRAY_LOG_STRIPPING = keyOf("gameplay/stripping/colored_logs/gray"); + public static final ResourceKey GREEN_LOG_STRIPPING = keyOf("gameplay/stripping/colored_logs/green"); + public static final ResourceKey LIGHT_BLUE_LOG_STRIPPING = keyOf("gameplay/stripping/colored_logs/light_blue"); + public static final ResourceKey LIGHT_GRAY_LOG_STRIPPING = keyOf("gameplay/stripping/colored_logs/light_gray"); + public static final ResourceKey LIME_LOG_STRIPPING = keyOf("gameplay/stripping/colored_logs/lime"); + public static final ResourceKey MAGENTA_LOG_STRIPPING = keyOf("gameplay/stripping/colored_logs/magenta"); + public static final ResourceKey ORANGE_LOG_STRIPPING = keyOf("gameplay/stripping/colored_logs/orange"); + public static final ResourceKey PINK_LOG_STRIPPING = keyOf("gameplay/stripping/colored_logs/pink"); + public static final ResourceKey PURPLE_LOG_STRIPPING = keyOf("gameplay/stripping/colored_logs/purple"); + public static final ResourceKey RED_LOG_STRIPPING = keyOf("gameplay/stripping/colored_logs/red"); + public static final ResourceKey WHITE_LOG_STRIPPING = keyOf("gameplay/stripping/colored_logs/white"); + public static final ResourceKey YELLOW_LOG_STRIPPING = keyOf("gameplay/stripping/colored_logs/yellow"); + public static ResourceKey keyOf(String id) { return ResourceKey.create(Registries.LOOT_TABLE, SpectrumCommon.locate(id)); } diff --git a/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/black.json b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/black.json new file mode 100644 index 0000000000..5f63a319d4 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/black.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:black_pigment" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/blue.json b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/blue.json new file mode 100644 index 0000000000..eb6506ea10 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/blue.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:blue_pigment" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/brown.json b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/brown.json new file mode 100644 index 0000000000..4c06311436 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/brown.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:brown_pigment" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/cyan.json b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/cyan.json new file mode 100644 index 0000000000..adaa8040e5 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/cyan.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:cyan_pigment" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/gray.json b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/gray.json new file mode 100644 index 0000000000..2c33eecba0 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/gray.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:gray_pigment" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/green.json b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/green.json new file mode 100644 index 0000000000..031ac43da7 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/green.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:green_pigment" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/light_blue.json b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/light_blue.json new file mode 100644 index 0000000000..5be164e3ac --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/light_blue.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:light_blue_pigment" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/light_gray.json b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/light_gray.json new file mode 100644 index 0000000000..61f1cd9b53 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/light_gray.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:light_gray_pigment" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/lime.json b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/lime.json new file mode 100644 index 0000000000..279a756a51 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/lime.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:lime_pigment" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/magenta.json b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/magenta.json new file mode 100644 index 0000000000..e353bf87d0 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/magenta.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:magenta_pigment" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/orange.json b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/orange.json new file mode 100644 index 0000000000..5ff8be05c9 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/orange.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:orange_pigment" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/pink.json b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/pink.json new file mode 100644 index 0000000000..156c7c2ec8 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/pink.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:pink_pigment" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/purple.json b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/purple.json new file mode 100644 index 0000000000..3d074c2a38 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/purple.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:purple_pigment" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/red.json b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/red.json new file mode 100644 index 0000000000..2c9f7ecd9d --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/red.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:red_pigment" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/white.json b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/white.json new file mode 100644 index 0000000000..5ce002ad9a --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/white.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:white_pigment" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/yellow.json b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/yellow.json new file mode 100644 index 0000000000..4389af7888 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/gameplay/stripping/colored_logs/yellow.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:yellow_pigment" + } + ] + } + ] +} \ No newline at end of file From cf2a814ab5f36de04cfc85121acadbcb329f55f1 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 4 Jul 2026 21:25:12 +0200 Subject: [PATCH 062/477] gemstone ores only require stone tools to drop (down from iron tools) --- .../resources/data/minecraft/tags/block/needs_iron_tool.json | 1 - .../resources/data/minecraft/tags/block/needs_stone_tool.json | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/data/minecraft/tags/block/needs_iron_tool.json b/src/main/resources/data/minecraft/tags/block/needs_iron_tool.json index 6d960bd42b..3e231758a4 100644 --- a/src/main/resources/data/minecraft/tags/block/needs_iron_tool.json +++ b/src/main/resources/data/minecraft/tags/block/needs_iron_tool.json @@ -1,6 +1,5 @@ { "values": [ - "#spectrum:gemstone_ores", "spectrum:neolith_block" ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json b/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json index ec882bb36a..c944de7cab 100644 --- a/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json +++ b/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json @@ -1,5 +1,6 @@ { "values": [ + "#spectrum:gemstone_ores", "#spectrum:shimmerstone_ores" ] } \ No newline at end of file From 739c16a52ad39a94d7ee4b72b607b6e606147213 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 4 Jul 2026 21:31:22 +0200 Subject: [PATCH 063/477] dynamic registry for geode ores --- .../data_loaders/GeodeOreDefinition.java | 21 +++ .../GeodesGenerateWithGemstoneOresMixin.java | 129 +++++------------- .../registries/SpectrumRegistries.java | 4 + .../registries/SpectrumRegistryKeys.java | 2 + .../spectrum/geode_ores/amethyst.json | 37 +++++ .../spectrum/spectrum/geode_ores/citrine.json | 37 +++++ .../spectrum/geode_ores/moonstone.json | 37 +++++ .../spectrum/spectrum/geode_ores/onyx.json | 37 +++++ .../spectrum/spectrum/geode_ores/topaz.json | 37 +++++ 9 files changed, 247 insertions(+), 94 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/data_loaders/GeodeOreDefinition.java create mode 100644 src/main/resources/data/spectrum/spectrum/geode_ores/amethyst.json create mode 100644 src/main/resources/data/spectrum/spectrum/geode_ores/citrine.json create mode 100644 src/main/resources/data/spectrum/spectrum/geode_ores/moonstone.json create mode 100644 src/main/resources/data/spectrum/spectrum/geode_ores/onyx.json create mode 100644 src/main/resources/data/spectrum/spectrum/geode_ores/topaz.json diff --git a/src/main/java/de/dafuqs/spectrum/data_loaders/GeodeOreDefinition.java b/src/main/java/de/dafuqs/spectrum/data_loaders/GeodeOreDefinition.java new file mode 100644 index 0000000000..38323510c6 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/data_loaders/GeodeOreDefinition.java @@ -0,0 +1,21 @@ +package de.dafuqs.spectrum.data_loaders; + +import com.mojang.serialization.*; +import com.mojang.serialization.codecs.*; +import de.dafuqs.spectrum.api.predicate.block.*; +import net.minecraft.core.*; +import net.minecraft.core.registries.*; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.levelgen.feature.configurations.*; + +import java.util.*; + +public record GeodeOreDefinition(BrokenBlockPredicate blocks, List oreConfiguration, int minDistance, int maxDistance, int tries) { + public static final Codec CODEC = RecordCodecBuilder.create((i -> i.group( + BrokenBlockPredicate.CODEC.fieldOf("geode_inner_layer_block_predicate").forGetter(c -> c.blocks), + Codec.list(OreConfiguration.TargetBlockState.CODEC).fieldOf("ore_configuration").forGetter(c -> c.oreConfiguration), + Codec.INT.fieldOf("min_distance_from_center").forGetter(c -> c.minDistance), + Codec.INT.fieldOf("max_distance_from_center").forGetter(c -> c.maxDistance), + Codec.INT.fieldOf("tries_per_range_increment").forGetter(c -> c.tries) + ).apply(i, GeodeOreDefinition::new))); +} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/mixin/GeodesGenerateWithGemstoneOresMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/GeodesGenerateWithGemstoneOresMixin.java index d863a91364..efe282d946 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/GeodesGenerateWithGemstoneOresMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/GeodesGenerateWithGemstoneOresMixin.java @@ -1,7 +1,9 @@ package de.dafuqs.spectrum.mixin; +import de.dafuqs.spectrum.data_loaders.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; +import net.minecraft.resources.*; import net.minecraft.tags.*; import net.minecraft.util.*; import net.minecraft.world.level.*; @@ -14,6 +16,9 @@ import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.*; +import java.util.*; +import java.util.function.*; + @Mixin(GeodeFeature.class) public abstract class GeodesGenerateWithGemstoneOresMixin { @@ -32,104 +37,40 @@ public void generate(FeaturePlaceContext context, CallbackIn @Unique private void spectrum$generateGemstoneOres(FeaturePlaceContext context) { BlockState gemBlock = context.config().geodeBlockSettings.innerLayerProvider.getState(context.random(), context.origin()); - BlockState oreBlockState = spectrum$getGemstoneOreForGeodeBlock(gemBlock); - if (oreBlockState != null) { // do not handle other modded geodes - BlockState blackslagOreBlockState = spectrum$getGemstoneBlackslagOreForGeodeBlock(gemBlock); - BlockState deepslateOreBlockState = spectrum$getGemstoneDeepslateOreForGeodeBlock(gemBlock); - WorldGenLevel world = context.level(); - RandomSource random = context.random(); - // having steps for distance with a fixed amount assures - // that the ore amount gets less with distance from the center - for (int distance = 5; distance < 14; distance++) { - for (int i = 0; i < 24; i++) { - int xOffset = (random.nextInt(distance + 1) * 2 - distance); - int yOffset = (random.nextInt(distance + 1) * 2 - distance); - int zOffset = (random.nextInt(distance + 1) * 2 - distance); - - BlockPos pos = context.origin().offset(xOffset, yOffset, zOffset); - BlockState state = world.getBlockState(pos); - if (state.is(SpectrumBlockTags.BLACKSLAG_ORE_REPLACEABLES)) { - world.setBlock(pos, blackslagOreBlockState, 3); - } else if (state.is(BlockTags.DEEPSLATE_ORE_REPLACEABLES)) { - world.setBlock(pos, deepslateOreBlockState, 3); - } else if (world.getBlockState(pos).is(BlockTags.STONE_ORE_REPLACEABLES)) { - world.setBlock(pos, oreBlockState, 3); + + Optional> geodeOresRegistry = context.level().registryAccess().registry(SpectrumRegistryKeys.GEODE_ORES); + if (geodeOresRegistry.isPresent()) { + Optional geodeOreDefinition = geodeOresRegistry.get() + .stream() + .filter(definition -> definition.blocks().test(gemBlock)) + .findFirst(); + + if (geodeOreDefinition.isPresent()) { + GeodeOreDefinition definition = geodeOreDefinition.get(); + WorldGenLevel world = context.level(); + RandomSource random = context.random(); + + // having steps for distance with a fixed amount assures + // that the ore amount gets less with distance from the center + for (int distance = definition.minDistance(); distance < definition.maxDistance(); distance++) { + for (int i = 0; i < definition.tries(); i++) { + int xOffset = (random.nextInt(distance + 1) * 2 - distance); + int yOffset = (random.nextInt(distance + 1) * 2 - distance); + int zOffset = (random.nextInt(distance + 1) * 2 - distance); + + BlockPos pos = context.origin().offset(xOffset, yOffset, zOffset); + BlockState state = world.getBlockState(pos); + + for (OreConfiguration.TargetBlockState target : definition.oreConfiguration()) { + if (target.target.test(state, random)) { + world.setBlock(pos, target.state, 3); + break; + } + } } } } } } - /** - * Returns a matching ore block for a gemstone block - * Aka amethyst_block => amethyst_ore - * - * @param blockState The blockstate the geode generates with - * @return the matching ore for that block state. Does return null if no matching ore exists. For example if another mod adds additional geodes - */ - @Unique - private @Nullable BlockState spectrum$getGemstoneOreForGeodeBlock(BlockState blockState) { - Block block = blockState.getBlock(); - if (block.equals(Blocks.AMETHYST_BLOCK)) { - return SpectrumBlocks.AMETHYST_ORE.get().defaultBlockState(); - } else if (block.equals(SpectrumBlocks.CITRINE_BLOCK.get())) { - return SpectrumBlocks.CITRINE_ORE.get().defaultBlockState(); - } else if (block.equals(SpectrumBlocks.TOPAZ_BLOCK.get())) { - return SpectrumBlocks.TOPAZ_ORE.get().defaultBlockState(); - } else if (block.equals(SpectrumBlocks.ONYX_BLOCK.get())) { - return SpectrumBlocks.ONYX_ORE.get().defaultBlockState(); - } else if (block.equals(SpectrumBlocks.MOONSTONE_BLOCK.get())) { - return SpectrumBlocks.MOONSTONE_ORE.get().defaultBlockState(); - } - return null; - } - - /** - * Returns a matching ore block for a gemstone block - * Aka amethyst_block => amethyst_ore - * - * @param blockState The blockstate the geode generates with - * @return the matching ore for that block state. Does return null if no matching ore exists. For example if another mod adds additional geodes - */ - @Unique - private @Nullable BlockState spectrum$getGemstoneDeepslateOreForGeodeBlock(BlockState blockState) { - Block block = blockState.getBlock(); - if (block.equals(Blocks.AMETHYST_BLOCK)) { - return SpectrumBlocks.DEEPSLATE_AMETHYST_ORE.get().defaultBlockState(); - } else if (block.equals(SpectrumBlocks.CITRINE_BLOCK.get())) { - return SpectrumBlocks.DEEPSLATE_CITRINE_ORE.get().defaultBlockState(); - } else if (block.equals(SpectrumBlocks.TOPAZ_BLOCK.get())) { - return SpectrumBlocks.DEEPSLATE_TOPAZ_ORE.get().defaultBlockState(); - } else if (block.equals(SpectrumBlocks.ONYX_BLOCK.get())) { - return SpectrumBlocks.DEEPSLATE_ONYX_ORE.get().defaultBlockState(); - } else if (block.equals(SpectrumBlocks.MOONSTONE_BLOCK.get())) { - return SpectrumBlocks.DEEPSLATE_MOONSTONE_ORE.get().defaultBlockState(); - } - return null; - } - - /** - * Returns a matching ore block for a gemstone block - * Aka amethyst_block => amethyst_ore - * - * @param blockState The blockstate the geode generates with - * @return the matching ore for that block state. Does return null if no matching ore exists. For example if another mod adds additional geodes - */ - @Unique - private @Nullable BlockState spectrum$getGemstoneBlackslagOreForGeodeBlock(BlockState blockState) { - Block block = blockState.getBlock(); - if (block.equals(Blocks.AMETHYST_BLOCK)) { - return SpectrumBlocks.BLACKSLAG_AMETHYST_ORE.get().defaultBlockState(); - } else if (block.equals(SpectrumBlocks.CITRINE_BLOCK.get())) { - return SpectrumBlocks.BLACKSLAG_CITRINE_ORE.get().defaultBlockState(); - } else if (block.equals(SpectrumBlocks.TOPAZ_BLOCK.get())) { - return SpectrumBlocks.BLACKSLAG_TOPAZ_ORE.get().defaultBlockState(); - } else if (block.equals(SpectrumBlocks.ONYX_BLOCK.get())) { - return SpectrumBlocks.BLACKSLAG_ONYX_ORE.get().defaultBlockState(); - } else if (block.equals(SpectrumBlocks.MOONSTONE_BLOCK.get())) { - return SpectrumBlocks.BLACKSLAG_MOONSTONE_ORE.get().defaultBlockState(); - } - return null; - } - } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java index 25b0e287f2..04ecebc93b 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java @@ -7,6 +7,7 @@ import de.dafuqs.spectrum.api.pastel_network.*; import de.dafuqs.spectrum.api.recipe.*; import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; +import de.dafuqs.spectrum.data_loaders.*; import de.dafuqs.spectrum.entity.variants.*; import de.dafuqs.spectrum.items.tools.*; import de.dafuqs.spectrum.recipe.*; @@ -14,6 +15,8 @@ import net.minecraft.resources.*; import net.minecraft.tags.*; import net.minecraft.util.*; +import net.minecraft.world.level.block.state.predicate.*; +import net.minecraft.world.level.levelgen.feature.configurations.*; import net.neoforged.neoforge.registries.*; import java.util.*; @@ -49,6 +52,7 @@ public static void registerDynamicRegistries(DataPackRegistryEvent.NewRegistry e event.dataPackRegistry(SpectrumRegistryKeys.KINDLING_VARIANT, KindlingVariant.DIRECT_CODEC, KindlingVariant.DIRECT_CODEC); event.dataPackRegistry(SpectrumRegistryKeys.LIZARD_FRILL_VARIANT, LizardFrillVariant.DIRECT_CODEC, LizardFrillVariant.DIRECT_CODEC); event.dataPackRegistry(SpectrumRegistryKeys.LIZARD_HORN_VARIANT, LizardHornVariant.DIRECT_CODEC, LizardHornVariant.DIRECT_CODEC); + event.dataPackRegistry(SpectrumRegistryKeys.GEODE_ORES, GeodeOreDefinition.CODEC, GeodeOreDefinition.CODEC); } public static T getRandomTagEntry(Registry registry, TagKey tag, RandomSource random, T fallback) { diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java index 0534d3a08c..e72dbdeaf6 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java @@ -8,6 +8,7 @@ import de.dafuqs.spectrum.api.pastel_network.*; import de.dafuqs.spectrum.api.recipe.*; import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; +import de.dafuqs.spectrum.data_loaders.*; import de.dafuqs.spectrum.entity.variants.*; import de.dafuqs.spectrum.items.tools.*; import de.dafuqs.spectrum.recipe.*; @@ -28,6 +29,7 @@ public class SpectrumRegistryKeys { public static final ResourceKey>> RESONANCE_PROCESSOR_TYPE = of("resonance_processor_type"); public static final ResourceKey> RESONANCE_PROCESSOR = of("resonance_processor"); public static final ResourceKey>> PASTEL_PAYLOAD_TYPE = of("pastel_payload_type"); + public static final ResourceKey> GEODE_ORES = of("geode_ores"); private static ResourceKey> of(String name) { return ResourceKey.createRegistryKey(SpectrumCommon.locate(name)); diff --git a/src/main/resources/data/spectrum/spectrum/geode_ores/amethyst.json b/src/main/resources/data/spectrum/spectrum/geode_ores/amethyst.json new file mode 100644 index 0000000000..450de2290d --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/geode_ores/amethyst.json @@ -0,0 +1,37 @@ +{ + "geode_inner_layer_block_predicate": { + "blocks": "minecraft:amethyst_block" + }, + "min_distance_from_center": 5, + "max_distance_from_center": 15, + "tries_per_range_increment": 24, + "ore_configuration": [ + { + "state": { + "Name": "spectrum:amethyst_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "spectrum:deepslate_amethyst_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + }, + { + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "spectrum:blackslag_ore_replaceables" + }, + "state": { + "Name": "spectrum:blackslag_amethyst_ore" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/geode_ores/citrine.json b/src/main/resources/data/spectrum/spectrum/geode_ores/citrine.json new file mode 100644 index 0000000000..186da86e08 --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/geode_ores/citrine.json @@ -0,0 +1,37 @@ +{ + "geode_inner_layer_block_predicate": { + "blocks": "spectrum:citrine_block" + }, + "min_distance_from_center": 5, + "max_distance_from_center": 15, + "tries_per_range_increment": 24, + "ore_configuration": [ + { + "state": { + "Name": "spectrum:citrine_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "spectrum:deepslate_citrine_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + }, + { + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "spectrum:blackslag_ore_replaceables" + }, + "state": { + "Name": "spectrum:blackslag_citrine_ore" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/geode_ores/moonstone.json b/src/main/resources/data/spectrum/spectrum/geode_ores/moonstone.json new file mode 100644 index 0000000000..7d270915a8 --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/geode_ores/moonstone.json @@ -0,0 +1,37 @@ +{ + "geode_inner_layer_block_predicate": { + "blocks": "spectrum:moonstone_block" + }, + "min_distance_from_center": 5, + "max_distance_from_center": 15, + "tries_per_range_increment": 24, + "ore_configuration": [ + { + "state": { + "Name": "spectrum:moonstone_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "spectrum:deepslate_moonstone_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + }, + { + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "spectrum:blackslag_ore_replaceables" + }, + "state": { + "Name": "spectrum:blackslag_moonstone_ore" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/geode_ores/onyx.json b/src/main/resources/data/spectrum/spectrum/geode_ores/onyx.json new file mode 100644 index 0000000000..a2a6a5a0c0 --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/geode_ores/onyx.json @@ -0,0 +1,37 @@ +{ + "geode_inner_layer_block_predicate": { + "blocks": "spectrum:onyx_block" + }, + "min_distance_from_center": 5, + "max_distance_from_center": 15, + "tries_per_range_increment": 24, + "ore_configuration": [ + { + "state": { + "Name": "spectrum:onyx_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "spectrum:deepslate_onyx_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + }, + { + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "spectrum:blackslag_ore_replaceables" + }, + "state": { + "Name": "spectrum:blackslag_onyx_ore" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/geode_ores/topaz.json b/src/main/resources/data/spectrum/spectrum/geode_ores/topaz.json new file mode 100644 index 0000000000..8995e49275 --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/geode_ores/topaz.json @@ -0,0 +1,37 @@ +{ + "geode_inner_layer_block_predicate": { + "blocks": "spectrum:topaz_block" + }, + "min_distance_from_center": 5, + "max_distance_from_center": 15, + "tries_per_range_increment": 24, + "ore_configuration": [ + { + "state": { + "Name": "spectrum:topaz_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "spectrum:deepslate_topaz_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + }, + { + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "spectrum:blackslag_ore_replaceables" + }, + "state": { + "Name": "spectrum:blackslag_topaz_ore" + } + } + ] +} \ No newline at end of file From faf806e098d0258eaa695029bbaf26b0c670db31 Mon Sep 17 00:00:00 2001 From: 2hh8899 <2hh8899@naver.com> Date: Tue, 7 Jul 2026 04:09:17 +0900 Subject: [PATCH 064/477] Create ko_kr.json --- .../resources/assets/spectrum/lang/ko_kr.json | 6050 +++++++++++++++++ 1 file changed, 6050 insertions(+) create mode 100644 src/main/resources/assets/spectrum/lang/ko_kr.json diff --git a/src/main/resources/assets/spectrum/lang/ko_kr.json b/src/main/resources/assets/spectrum/lang/ko_kr.json new file mode 100644 index 0000000000..1454914151 --- /dev/null +++ b/src/main/resources/assets/spectrum/lang/ko_kr.json @@ -0,0 +1,6050 @@ +{ + "advancements.spectrum.apply_divinity.description": "프라이가이스트를 마셔 엄청난 버프를 얻으세요... 물론, 죽는다면 막대한 대가를 치르게 될 것입니다", + "advancements.spectrum.apply_divinity.title": "매우 필멸적인 영혼", + "advancements.spectrum.break_budding_block_with_resonance_tool.description": "공명 마법이 부여된 도구를 사용해 싹 틔우는 블록을 부수세요", + "advancements.spectrum.break_budding_block_with_resonance_tool.title": "싹트는 우정", + "advancements.spectrum.break_cracked_dragonbone.description": "용골에 금을 내고 부수세요", + "advancements.spectrum.break_cracked_dragonbone.title": "피 흘리며 누운 용", + "advancements.spectrum.break_decayed_bedrock.description": "침식된 기반암을 부수세요", + "advancements.spectrum.break_decayed_bedrock.title": "기반을 뒤흔들며", + "advancements.spectrum.break_gemstone_ore.description": "보석 광석을 채굴하세요. 정동 바로 옆에서 이걸 찾아냈다면 정동이 아주 가깝다는 훌륭한 신호입니다!", + "advancements.spectrum.break_gemstone_ore.title": "보석 탐광자", + "advancements.spectrum.break_infested_block_with_resonance_tool.description": "공명 마법이 부여된 도구를 사용해 벌레 먹은 블록을 부수세요", + "advancements.spectrum.break_infested_block_with_resonance_tool.title": "오늘은 아냐, 오랜 친구여", + "advancements.spectrum.break_spawner_with_resonance_tool.description": "공명 마법이 부여된 도구를 사용해 몬스터 생성기를 부수세요", + "advancements.spectrum.break_spawner_with_resonance_tool.title": "내면의 악", + "advancements.spectrum.brew_lasting_potion_in_potion_workshop.description": "물약 작업장에서 반응물을 조합하여 20분 이상 지속되는 물약을 양조하세요", + "advancements.spectrum.brew_lasting_potion_in_potion_workshop.title": "하루를 버틸 가치", + "advancements.spectrum.brew_no_potion_in_potion_workshop.description": "생산량을 줄이는 물약 반응물을 너무 많이 넣어 결국 아무것도 남지 않게 만드세요", + "advancements.spectrum.brew_no_potion_in_potion_workshop.title": "탐욕이 낳은 비극", + "advancements.spectrum.brew_potion_in_potion_workshop.description": "물약 작업장을 사용하여 물약을 양조하세요. 반응물을 첨가하여 추가적인 효과를 부여할 수 있습니다", + "advancements.spectrum.brew_potion_in_potion_workshop.title": "마법 한 스푼을 곁들인 연금술", + "advancements.spectrum.brew_potion_in_potion_workshop_using_complex_reagent.description": "최소 하나 이상의 복합 반응물을 활용하여 물약을 양조하세요", + "advancements.spectrum.brew_potion_in_potion_workshop_using_complex_reagent.title": "고등 연금술", + "advancements.spectrum.brew_potion_with_four_effects_in_potion_workshop.description": "4가지의 고유한 효과를 가진 물약을 양조하세요", + "advancements.spectrum.brew_potion_with_four_effects_in_potion_workshop.title": "사악한 칵테일", + "advancements.spectrum.brew_potion_with_beneficial_and_harmful_reagents_in_potion_workshop.description": "겉보기엔 정말 멍청해 보이는 무언가를 양조했을 때 어떤 일이 일어나는지 알아내세요", + "advancements.spectrum.brew_potion_with_beneficial_and_harmful_reagents_in_potion_workshop.title": "무효화", + "advancements.spectrum.brew_powerful_potion_in_potion_workshop.description": "물약 작업장에서 반응물을 조합하여 레벨 IV 효과를 가진 물약을 양조하세요", + "advancements.spectrum.brew_powerful_potion_in_potion_workshop.title": "끝내주는 목 넘김", + "advancements.spectrum.build_advanced_pedestal_structure.description": "구조물에 새로운 블록들을 덧붙여 더 진보된 받침대의 기능을 활용하세요", + "advancements.spectrum.build_advanced_pedestal_structure.title": "스펙트럼 사원 건축", + "advancements.spectrum.build_basic_pedestal_structure.description": "강화된 안료 받침대의 힘을 완벽하게 다루기 위해선, 보석의 에너지를 받침대로 쏟아부어 줄 구조물을 세워야만 합니다", + "advancements.spectrum.build_basic_pedestal_structure.title": "마력 깔때기", + "advancements.spectrum.build_cinderhearth_structure.description": "잿불화로을 작동시키세요", + "advancements.spectrum.build_cinderhearth_structure.title": "용광로 전력 가동", + "advancements.spectrum.build_cinderhearth_without_lava_structure.description": "일지에 분명 '용암을 부어 넣는 게 훨씬 더 폼이 난다'고 쓰여 있었을 텐데, 똑똑한 척은", + "advancements.spectrum.build_cinderhearth_without_lava_structure.title": "꼭 그래야만 했어?", + "advancements.spectrum.build_complex_pedestal_structure.description": "받침대 구조물을 마지막으로 업그레이드하여 그 마법적인 힘을 남김없이 끌어내세요", + "advancements.spectrum.build_complex_pedestal_structure.title": "스펙트럼 성전 건축", + "advancements.spectrum.build_complex_pedestal_structure_without_moonstone.description": "조각된 월장석 블록을 약간 \"빌려와서\" 나만의 받침대 구조물을 확장하세요", + "advancements.spectrum.build_complex_pedestal_structure_without_moonstone.title": "잃어버린 퍼즐 조각", + "advancements.spectrum.collect_aether_vestiges.description": "에테르 파편의 잔재를 수집하세요", + "advancements.spectrum.collect_aether_vestiges.title": "인지 불가", + "advancements.spectrum.collect_all_legendary_weapons.description": "모든 전설적인 무기들을 고안하고 수집하세요", + "advancements.spectrum.collect_all_legendary_weapons.title": "예술가의 허무", + "advancements.spectrum.build_enchanting_structure.description": "마법 부여기 구조물을 건설하세요", + "advancements.spectrum.build_enchanting_structure.title": "다음 단계의 마법 부여", + "advancements.spectrum.build_fusion_shrine.description": "융합의 성소를 건설하세요", + "advancements.spectrum.build_fusion_shrine.title": "압도적인 디스플레이", + "advancements.spectrum.build_spirit_instiller_structure.description": "영혼 주입기를 건설하세요", + "advancements.spectrum.build_spirit_instiller_structure.title": "도깨비불의 의지", + "advancements.spectrum.build_wither_using_wither_heads.description": "위더 스켈레톤 해골을 사용하여 위더를 소환하세요", + "advancements.spectrum.build_wither_using_wither_heads.title": "안 돼, 그냥 하지 마", + "advancements.spectrum.carry_too_many_heavy_gravity_blocks.description": "스트라틴을 너무 많이 짊어져서 제대로 점프조차 할 수 없게 되세요", + "advancements.spectrum.carry_too_many_heavy_gravity_blocks.title": "무게 제한? 그런 거 무시한 지 오래지", + "advancements.spectrum.carry_too_many_low_gravity_blocks.description": "팔타에리아를 너무 많이 짊어지고 날아오르세요", + "advancements.spectrum.carry_too_many_low_gravity_blocks.title": "누구도 상상 못한 비행", + "advancements.spectrum.catch_shooting_star.description": "하늘에서 떨어지는 별똥별을 그대로 낚아채세요", + "advancements.spectrum.catch_shooting_star.title": "하늘에 닿기를", + "advancements.spectrum.collect_all_basic_pigments.description": "12가지 색상의 다채로운 안료를 모두 수집하세요", + "advancements.spectrum.collect_all_basic_pigments.title": "전국도감", + "advancements.spectrum.collect_all_basic_pigments_besides_brown.description": "색을 섞는 건 식은 죽 먹기인 줄 알았다. 그 빌어먹을 갈색이 네 즐거움을 망쳐놓기 전까지는. 현재 가진 팔레트로는 죽었다 깨어나도 갈색을 섞어낼 수 없다.", + "advancements.spectrum.collect_all_basic_pigments_besides_brown.title": "갈색은 기괴하다", + "advancements.spectrum.collect_any_basic_shard.description": "첫 번째 보석 조각을 수집하세요", + "advancements.spectrum.collect_any_basic_shard.title": "흥분되는 감각", + "advancements.spectrum.collect_all_basic_shards.description": "자연적으로 생성되는 모든 종류의 보석을 수집하세요", + "advancements.spectrum.collect_all_basic_shards.title": "대체 얼마나 있는 거야?", + "advancements.spectrum.collect_all_cookbooks.description": "이 조그마한 컬렉션을 들여다보는 것은 이미 오래전에 잊혀진 사람들의 생동감 넘치는 문화를 엿보는 것과 같습니다. 그들이 한때 이곳에 숨 쉬며 살아갔다는 증거입니다.", + "advancements.spectrum.collect_all_cookbooks.title": "또 다른 진혼곡", + "advancements.spectrum.collect_all_mob_heads.description": "세상의 모든 개별 몬스터 머리와 해골을 수집하세요. 이 모든 걸 장식할 만큼 거대한 전시장이 있기를 간절히 바랍니다.", + "advancements.spectrum.collect_all_mob_heads.title": "셀 수 없는 트로피", + "advancements.spectrum.collect_all_shooting_star_variants.description": "웅크린 채로 별똥별을 클릭하여 주우세요. 과연 모든 변종을 다 모을 수 있을까요?", + "advancements.spectrum.collect_all_shooting_star_variants.title": "별의 아이", + "advancements.spectrum.collect_amaranth.description": "아마란스 곡물을 찾아내세요", + "advancements.spectrum.collect_amaranth.title": "오래전에 잊혀진 작물", + "advancements.spectrum.collect_amaranth_bushel.description": "아마란스를 끝까지 길러낸 후 수확하세요", + "advancements.spectrum.collect_amaranth_bushel.title": "생동감", + "advancements.spectrum.collect_azurite.description": "남동석 원석을 수집하세요. 유용하게 써먹으려면 먼저 정제해야 합니다.", + "advancements.spectrum.collect_azurite.title": "우울함이 있어", + "advancements.spectrum.collect_bismuth.description": "비스무트를 수집하세요", + "advancements.spectrum.collect_bismuth.title": "모든 것의 50가지 그림자", + "advancements.spectrum.collect_bismuth_crystal.description": "비스무트를 완전한 크기의 결정으로 길러낸 뒤 파괴하세요. 이 무지갯빛 물질은 주변의 금속 블록들로부터 에너지를 빨아들이는 것 같습니다.", + "advancements.spectrum.collect_bismuth_crystal.title": "태고의 꿈", + "advancements.spectrum.collect_blood_orchid_petal.description": "혈난초 꽃잎을 찾아내세요", + "advancements.spectrum.collect_blood_orchid_petal.title": "톱날 잎사귀", + "advancements.spectrum.collect_dd_resources.description": "지저 너머 곳곳에 흩어져 있는 다양한 자원들을 모조리 수집하세요", + "advancements.spectrum.collect_dd_resources.title": "수집광", + "advancements.spectrum.collect_doombloom_seed.description": "울부짖는 불길, 폭발, 그리고 죽음. 그리고 한두 개의 씨앗", + "advancements.spectrum.collect_doombloom_seed.title": "죽음의 촛불", + "advancements.spectrum.collect_downstone_fragments.description": "하층석을 수확한다고? 놈들의 기술력이 그 경지에 도달했던 게 분명하다.", + "advancements.spectrum.collect_downstone_fragments.title": "거대한 기계 장치", + "advancements.spectrum.collect_ender_dragon_head_using_treasure_hunter.description": "보물 사냥꾼 마법이 부여된 무기를 사용하여 엔더 드래곤의 머리를 수집하세요", + "advancements.spectrum.collect_ender_dragon_head_using_treasure_hunter.title": "용의 마지막 숨결", + "advancements.spectrum.collect_enough_hints.description": "지저 너머가 어째서 버려졌는지 알아내세요. 단서를 찾기 위해 온갖 것들을 다 쑤시고 다녀야겠지만", + "advancements.spectrum.collect_enough_hints.title": "블루의 단서", + "advancements.spectrum.collect_four_leaf_clover.description": "네잎클로버를 찾아내세요", + "advancements.spectrum.collect_four_leaf_clover.title": "행운아", + "advancements.spectrum.collect_gemstone_powder.description": "안료 받침대에서 조합을 하려면 보석 가루가 필수적입니다. 보석 조각을 분쇄하면 약간의 가루를 쥐어짜 낼 수 있습니다.", + "advancements.spectrum.collect_gemstone_powder.title": "반짝이는 걸로 줘", + "advancements.spectrum.collect_gemstone_rock_candy.description": "보석 빛깔로 물든 락캔디를 손에 드세요", + "advancements.spectrum.collect_gemstone_rock_candy.title": "다채롭고 바삭한 과자", + "advancements.spectrum.collect_gemstone_shard_using_crystal_apothecary.description": "수정 채집장을 완전히 자라난 보석 군집들이 잔뜩인 정동의 한가운데에 설치하세요", + "advancements.spectrum.collect_gemstone_shard_using_crystal_apothecary.title": "꿀맛 같은 휴식", + "advancements.spectrum.collect_grayscale_pigments.description": "네 가지 무채색 안료를 모두 수집하여 안료 컬렉션을 완성하세요", + "advancements.spectrum.collect_grayscale_pigments.title": "회색의 4가지 그림자", + "advancements.spectrum.collect_hover_block.description": "두 세계가 정면으로 충돌하면 무슨 일이 벌어질까?", + "advancements.spectrum.collect_hover_block.title": "멈출 수 없는 힘 vs 나 자신", + "advancements.spectrum.collect_hummingstone.description": "음명석을 수집하세요", + "advancements.spectrum.collect_hummingstone.title": "송버드", + "advancements.spectrum.collect_jade_jelly.description": "때로는 더 위대한 무언가를 창조해 내기 위해 기꺼이 파괴의 길을 걸어야만 한다.", + "advancements.spectrum.collect_jade_jelly.title": "황금의 맛", + "advancements.spectrum.collect_jade_vine_petals.description": "적당히 자라난 비취 덩굴에서 꽃잎을 뜯어내세요", + "advancements.spectrum.collect_jade_vine_petals.title": "벨벳처럼 부드러운", + "advancements.spectrum.collect_malachite.description": "지저 너머를 걷다가 공작석과 마주치세요", + "advancements.spectrum.collect_malachite.title": "매혹적인 초록빛 그림자", + "advancements.spectrum.collect_mermaids_gem.description": "인어의 보석 수집하기", + "advancements.spectrum.collect_mermaids_gem.title": "깊은 바닷속에선 무엇이 자라날까?", + "advancements.spectrum.collect_midnight_chip.description": "자정의 용액을 사용하여 자정의 조각을 얻으세요", + "advancements.spectrum.collect_midnight_chip.title": "차악", + "advancements.spectrum.collect_mob_head_using_treasure_hunter.description": "보물 사냥꾼 마법이 부여된 무기로 적의 숨통을 끊고 그 머리를 전리품으로 챙기세요", + "advancements.spectrum.collect_mob_head_using_treasure_hunter.title": "이성 잃기", + "advancements.spectrum.collect_moonstone_core.description": "지하 도시 중 한 곳에서 월장석 코어를 찾아내세요", + "advancements.spectrum.collect_moonstone_core.title": "눈부신 발전기", + "advancements.spectrum.collect_moonstone_shard.description": "월장석 정동을 발견하세요", + "advancements.spectrum.collect_moonstone_shard.title": "가장 눈부신 새하얀 빛", + "advancements.spectrum.collect_myceylon.description": "도끼를 써서 어스름나무 버섯의 껍질을 벗겨내세요", + "advancements.spectrum.collect_myceylon.title": "버섯 아로마", + "advancements.spectrum.collect_mysterious_locket.description": "세 번째 색상 혼합 퍼즐이 당신을 기다립니다.", + "advancements.spectrum.collect_mysterious_locket.title": "세 번째 관문", + "advancements.spectrum.collect_nectardew.description": "희귀하고 매혹적인 꽃을 하나 발견하세요", + "advancements.spectrum.collect_nectardew.title": "넥타르", + "advancements.spectrum.collect_neolith.description": "네오리스를 얻으세요", + "advancements.spectrum.collect_neolith.title": "비비비결정질", + "advancements.spectrum.collect_nightdew.description": "찻잎을 쏙 빼닮은 잎사귀를 발견하세요", + "advancements.spectrum.collect_nightdew.title": "카모마일보다는 조금 독한", + "advancements.spectrum.collect_noxwood.description": "어스름나무와 우연히 마주치세요", + "advancements.spectrum.collect_noxwood.title": "버섯으로 된 나무?", + "advancements.spectrum.collect_one_cookbook.description": "이 책들이 얼마나 오래된 걸까? 분명한 건, 이 글을 쓴 작가들은 아주, 아주 오래전에 세상을 떠났다는 사실이다.", + "advancements.spectrum.collect_one_cookbook.title": "또 다른 이의 향수", + "advancements.spectrum.collect_paltaeria.description": "팔타에리아 조각을 수집하세요", + "advancements.spectrum.collect_paltaeria.title": "저 멀리 날아가는 걸 지켜봐", + "advancements.spectrum.collect_pigment.description": "색깔 나무의 잎을 부숴서 그토록 갈망하던 순수한 안료를 얻어내세요. 손으로 직접 부술 때만 그 귀한 수확물을 내어줄 것입니다.", + "advancements.spectrum.collect_pigment.title": "순수한 안료 수집", + "advancements.spectrum.collect_poisoners_handbook.description": "아마도 네가 절대 펼쳐보지 말았어야 할 무언가를 찾아냈다. 도대체 놈들은 왜 이런 걸...?", + "advancements.spectrum.collect_poisoners_handbook.title": "우리 함께 떠나자꾸나", + "advancements.spectrum.collect_prickly_bayleaf.description": "가위로 톱날 호랑가시나무 덤불의 잎사귀를 잘라내세요. 스튜에 곁들이면 환상적인 향이 나지만, 생으로 씹어 먹기엔 영 좋지 않습니다.", + "advancements.spectrum.collect_prickly_bayleaf.title": "고통의 풍미", + "advancements.spectrum.collect_pure_resource.description": "순수한 자원 군집을 수집하세요. 거친 원석 부스러기 따위와는 질적으로 다른, 훨씬 눈부신 광택을 내뿜습니다.", + "advancements.spectrum.collect_pure_resource.title": "같지만 다른", + "advancements.spectrum.collect_quitoxic_reeds.description": "맹독 갈대를 발견하세요", + "advancements.spectrum.collect_quitoxic_reeds.title": "늪에 빠지다", + "advancements.spectrum.collect_resonant_lily.description": "공명 백합을 꺾어 드세요", + "advancements.spectrum.collect_resonant_lily.title": "신출귀몰한 꽃 한 송이", + "advancements.spectrum.collect_shimmerstone.description": "여태껏 이 광석을 단 한 번도 눈치채지 못했다고.... 기괴한 일이다. 내가 생각했던 것보다 이 세계에 감춰진 비밀이 훨씬 많은 걸까?", + "advancements.spectrum.collect_shimmerstone.title": "눈에 보이는 것이 전부가 아니다", + "advancements.spectrum.collect_star_fragment.description": "별똥별이 남긴 그 귀중한 잔해을 긁어모으세요", + "advancements.spectrum.collect_star_fragment.title": "별이 빛나는 밤하늘", + "advancements.spectrum.collect_storm_stone.description": "폭풍석의 근원을 발견하세요", + "advancements.spectrum.collect_storm_stone.title": "Thunderstruck", + "advancements.spectrum.collect_stratine.description": "네더의 깊고 끔찍한 심연에서 스트라틴을 건져 올리세요", + "advancements.spectrum.collect_stratine.title": "무거운 짐", + "advancements.spectrum.collect_vegetal.description": "먹이를 던져주고, 뒤로 물러서서 게걸스럽게 포식하는 걸 감상한 다음... 전리품을 수확하세요", + "advancements.spectrum.collect_vegetal.title": "유기 물질", + "advancements.spectrum.collect_warden_head_using_treasure_hunter.description": "보물 사냥꾼 마법이 부여된 무기로 워든을 죽이고 그 머리를 수집하세요", + "advancements.spectrum.collect_warden_head_using_treasure_hunter.title": "자캐딸 박제", + "advancements.spectrum.collect_wither_head_using_treasure_hunter.description": "보물 사냥꾼 마법이 부여된 무기로 위더 스켈레톤의 머리를 수집하세요", + "advancements.spectrum.collect_wither_head_using_treasure_hunter.title": "위더로운 순환", + "advancements.spectrum.craft_and_get_25_xp.description": "안료 받침대에서 단 한 번의 조합으로 25의 경험치를 보상으로 받으세요", + "advancements.spectrum.craft_and_get_25_xp.title": "경험 많은 예술가", + "advancements.spectrum.craft_blacklisted_memory_fail.description": "애초에 부활시키기엔 너무 끔찍하게 강력한 짐승의 기억을 기어코 부활시키려다 멋지게 실패해 보세요", + "advancements.spectrum.craft_blacklisted_memory_fail.title": "또다시 나태하게", + "advancements.spectrum.craft_blacklisted_memory_success.description": "무시무시한 괴수의 기억을 기어코 부활시키는 데 성공하세요. 이런 미친 짓거리에 꽤 소질이 있는 것 같은데?", + "advancements.spectrum.craft_blacklisted_memory_success.title": "또다시 강렬하게", + "advancements.spectrum.craft_bottle_of_decay_away.description": "뭔가 끔찍하게 꼬여버릴 만약의 사태를 대비해, 부패 제거의 병을 만들어 철저히 무장하세요", + "advancements.spectrum.craft_bottle_of_decay_away.title": "후회보단 안전", + "advancements.spectrum.craft_bottle_of_fading.description": "새로 얻은 그 마법 능력을 만지작거릴 시간이다. 생명을 창조하라! 아니, 미생물에 더 가깝나. 굼뜨고 나약한 놈들. 어쨌든 뭔가 살아 숨 쉬긴 한다. 근데 이놈들은 대체 뭘 먹고 살지?", + "advancements.spectrum.craft_bottle_of_fading.title": "존재해선 안 될 것", + "advancements.spectrum.craft_bottle_of_failing.description": "첫 실험은 아주 성공적이었다. 하지만 분명 여기서 더 나아갈 길이 있을 것이다...", + "advancements.spectrum.craft_bottle_of_failing.title": "존재해선 절대 안 될 것", + "advancements.spectrum.craft_bottle_of_ruin.description": "역시나 그 너머가 존재했다. 순수한 결정에 공허의 무시무시한 권능을 들이부어 세상을 씹어먹을 부패를 창조해 내세요", + "advancements.spectrum.craft_bottle_of_ruin.title": "애초에 태어나선 안 됐을 것", + "advancements.spectrum.craft_cmy_pedestal.description": "모든 보석 조각을 들이부어 안료 받침대를 완벽하게 강화하세요", + "advancements.spectrum.craft_cmy_pedestal.title": "CMY 온", + "advancements.spectrum.craft_colored_sapling.description": "마법 능력을 끌어내어 색깔 묘목을 조합하세요", + "advancements.spectrum.craft_colored_sapling.title": "보타니안 랩소디", + "advancements.spectrum.craft_moonstone_pedestal.description": "월장석 조각을 사용해 안료 받침대를 다시 한번 한계 이상으로 강화하세요", + "advancements.spectrum.craft_moonstone_pedestal.title": "찬란함", + "advancements.spectrum.craft_onyx_pedestal.description": "오닉스 조각을 박아 안료 받침대의 마력을 한 차원 더 끌어올리세요", + "advancements.spectrum.craft_onyx_pedestal.title": "한 번 더 한다고 덧나진 않잖아?", + "advancements.spectrum.craft_resonant_pickaxe.description": "공명의 곡괭이를 제작하세요. 이 부드러운 진동이, 전에는 꿈도 못 꿨던 특수한 블록들을 고스란히 뜯어낼 수 있게 해주는 것 같습니다.", + "advancements.spectrum.craft_resonant_pickaxe.title": "기분 좋은 진동", + "advancements.spectrum.craft_salted_jaramel_trifle_or_tart.description": "적들의 눈물로 디저트를 구워내세요", + "advancements.spectrum.craft_salted_jaramel_trifle_or_tart.title": "소금기 팍팍 치고", + "advancements.spectrum.craft_something_brown.description": "오닉스 가루를 사용해 강화된 안료 받침대에서 진정으로 완벽한 갈색을 빚어내세요", + "advancements.spectrum.craft_something_brown.title": "무지개 이면의 색", + "advancements.spectrum.craft_using_pedestal.description": "안료 받침대에서 보석 가루를 사용해 아이템을 빚어내세요. 붓으로 건드리거나 레드스톤 신호를 가하면 조합이 시작됩니다.", + "advancements.spectrum.craft_using_pedestal.title": "묘하게 익숙한데", + "advancements.spectrum.create_big_pastel_network.description": "32개의 노드로 구성된 거대한 파스텔 네트워크를 구축하세요", + "advancements.spectrum.create_big_pastel_network.title": "글로벌 파스텔 디스패처", + "advancements.spectrum.upgrade_pastel_node.description": "노드 주변의 빛무리를 영롱하게 물들여 파스텔 노드를 강화하세요", + "advancements.spectrum.upgrade_pastel_node.title": "파리지앵 파스텔", + "advancements.spectrum.upgrade_pastel_node_throughput.description": "파스텔 네트워크의 전송량을 극한으로 올리는 최고급 강화를 장착하세요", + "advancements.spectrum.upgrade_pastel_node_throughput.title": "헤비 듀티 파스텔", + "advancements.spectrum.upgrade_pastel_node_lamp.description": "파스텔 노드를 끔찍한 낭비지만 반박할 수 없을 만큼 예쁜 전등으로 탈바꿈시키세요", + "advancements.spectrum.upgrade_pastel_node_lamp.title": "스튜디오 파스텔-라이트", + "advancements.spectrum.create_budding_onyx.description": "영혼 주입기에서 싹 틔우는 오닉스를 창조하세요. 이제 융합에만 목매달 필요가 없어진 것 같군!", + "advancements.spectrum.create_budding_onyx.title": "내 최고의 싹수", + "advancements.spectrum.create_evernectar.description": "명료하면서도 지독하게 기이한 성질을 지닌 독을 양조하세요", + "advancements.spectrum.create_evernectar.title": "궁극의 꿈", + "advancements.spectrum.create_glass_crest_tool.description": "공작석 도구에 월장석 코어를 박아 그 장비가 품은 숨겨진 능력을 해방하세요", + "advancements.spectrum.create_glass_crest_tool.title": "잉크 동력", + "advancements.spectrum.create_huge_slime.description": "탄력있는 우상을 사용해 상상을 초월할 만큼 거대한 슬라임이나 마그마 큐브를 만드세요", + "advancements.spectrum.create_huge_slime.title": "거대 뚱라임", + "advancements.spectrum.create_jade_vine.description": "비취 덩굴이 어떻게 이 세상에 태어났는지 그 끔찍한 비밀을 파헤치세요", + "advancements.spectrum.create_jade_vine.title": "한때 얽혀있던 것들", + "advancements.spectrum.create_malachite_tool.description": "공작석으로 벼려낸 도구를 창조하세요", + "advancements.spectrum.create_malachite_tool.title": "초록빛 꿈", + "advancements.spectrum.create_midnight_aberration.description": "토파즈, 자수정, 황수정, 오닉스, 그리고 네오리스를 한데 뭉쳐 융합하세요", + "advancements.spectrum.create_midnight_aberration.title": "궁극의 혼합물?", + "advancements.spectrum.create_onyx_shard.description": "달빛마저 죽어버린 가장 어두운 칠흑의 밤, 융합의 성소를 억지로 가동해 새까만 파편을 토해내게 하세요", + "advancements.spectrum.create_onyx_shard.title": "다시 어둠 속으로", + "advancements.spectrum.create_pastel_network.description": "두 개의 파스텔 노드를 이어붙여 파스텔 네트워크를 구축하세요", + "advancements.spectrum.create_pastel_network.title": "파스텔 링크", + "advancements.spectrum.create_pastel_network_using_every_node_type.description": "모든 종류의 파스텔 노드를 단 하나의 네트워크에 연결해 구동시키세요", + "advancements.spectrum.create_pastel_network_using_every_node_type.title": "파스텔 네트워크 엔지니어", + "advancements.spectrum.grow_azurite_in_crystallarieum.description": "남동석을 주괴 형태로 정제하세요", + "advancements.spectrum.grow_azurite_in_crystallarieum.title": "푸르게 피어난 꿈", + "advancements.spectrum.create_resonance_enchanted_book.description": "마법 부여기로 공명 마법이 새겨진 책을 만드세요", + "advancements.spectrum.create_resonance_enchanted_book.title": "더 나은 진동", + "advancements.spectrum.create_spectral_shard.description": "스펙트럼 조각을 빚어내세요", + "advancements.spectrum.create_spectral_shard.title": "무지개 너머 어딘가에", + "advancements.spectrum.crumble_midnight_aberration.description": "망상했던 그 '완벽함' 따위는 애초에 존재하지 않았다. 그 알량한 '궁극의 혼합물'은 아이템으로 변하기도 전에 손아귀에서 허무하게 바스라져 내렸다.", + "advancements.spectrum.crumble_midnight_aberration.title": "거대한 실패", + "advancements.spectrum.dark_radiance_staff.description": "광채의 지팡이를 설치된 불빛에 다시 사용해, 그 밝기를 1레벨로 만드세요", + "advancements.spectrum.dark_radiance_staff.title": "우와! 이거 진짜 쓸모없네", + "advancements.spectrum.dip_something_into_liquid_crystal.description": "몇몇 물건들은 액체 수정의 웅덩이에 들어가는 순간 아예 다른 무언가로 뒤틀려버린다.", + "advancements.spectrum.dip_something_into_liquid_crystal.title": "반짝임 주입", + "advancements.spectrum.drink_jade_wine.description": "비취 와인을 들이키세요", + "advancements.spectrum.drink_jade_wine.title": "고대의 술", + "advancements.spectrum.drink_tea_with_milk.description": "우유를 타서 차를 마시세요", + "advancements.spectrum.drink_tea_with_milk.title": "이단자", + "advancements.spectrum.drink_tea_with_scone.description": "핫바에 스콘을 챙겨둔 채로 여유롭게 차를 들이키세요. 이거야말로 클래식이지!", + "advancements.spectrum.drink_tea_with_scone.title": "우아한 영국식 다과회", + "advancements.spectrum.eat_each_cookbook_heavy_meal.description": "지하에 파묻힌 요리책들이 자랑하는 그 모든 위대한 만찬들을 하나하나 씹어 삼키며 미식 투어를 도세요", + "advancements.spectrum.eat_each_cookbook_heavy_meal.title": "미식가", + "advancements.spectrum.eat_each_pastry.description": "세상에 존재하는 모든 페이스트리를 굽고 남김없이 먹으세요", + "advancements.spectrum.eat_each_pastry.title": "굶주린 예술가", + "advancements.spectrum.enchant_book.description": "마법 부여기로 하나 이상의 마법이 부여된 책의 마법 부여를 다른 책으로 복사하세요. 경험치가 꽤나 비명을 지르겠네요.", + "advancements.spectrum.enchant_book.title": "무손실 압축", + "advancements.spectrum.enchant_exchanging_staff.description": "교환의 지팡이를 만들고 마법을 부여하세요", + "advancements.spectrum.enchant_exchanging_staff.title": "건축 도구 그 이상", + "advancements.spectrum.enchant_item_worth_2500_xp.description": "마법 부여기를 사용하여 단일 아이템에 2500의 경험치 가치의 마법을 부여하세요", + "advancements.spectrum.enchant_item_worth_2500_xp.title": "큰손", + "advancements.spectrum.enchant_seven_league_boots.description": "축지법의 장화에 힘 마법을 부여하여 더 빠르게 만드세요", + "advancements.spectrum.enchant_seven_league_boots.title": "미친 속도", + "advancements.spectrum.enter_color_mixing_preservation_ruin.description": "다채로운 보존 유적에 입장하세요", + "advancements.spectrum.enter_color_mixing_preservation_ruin.title": "뒤섞인 색채", + "advancements.spectrum.enter_dike_gate_preservation_ruin.description": "역장으로 보호받는 보존 유적에 입장하세요", + "advancements.spectrum.enter_dike_gate_preservation_ruin.title": "견고한 방벽", + "advancements.spectrum.enter_dimension.description": "한때 절대 뚫을 수 없었던 기반암 바닥 그 너머에 무엇이 있는지 알아내세요", + "advancements.spectrum.enter_dimension.title": "한때 뚫을 수 없었던 것", + "advancements.spectrum.enter_ender_glass.description": "엔더 유리를 통과하여 걸으세요", + "advancements.spectrum.enter_ender_glass.title": "매혹적인", + "advancements.spectrum.enter_liquid_crystal.description": "지금까지 배운 모든 것의 결합체 속에 당신을 담그면 무슨 일이 벌어질까요?", + "advancements.spectrum.enter_liquid_crystal.title": "액체 마법", + "advancements.spectrum.enter_wireless_redstone_preservation_ruin.description": "기반암으로 보호받는 보존 유적에 입장하세요", + "advancements.spectrum.enter_wireless_redstone_preservation_ruin.title": "단락", + "advancements.spectrum.equip_neat_ring.description": "우월감을 과시하기 위해 미치도록 비싼 반지를 만들고 장착하세요", + "advancements.spectrum.equip_neat_ring.title": "깔끔하네", + "advancements.spectrum.equip_pigment_palette.description": "안료 팔레트를 장착하여 마법의 정수를 더 쉽게 보관하세요. 잉크를 채워 마법 도구를 작동시킬 수 있습니다", + "advancements.spectrum.equip_pigment_palette.title": "예술가", + "advancements.spectrum.fail_to_glitch_into_preservation_ruin.description": "당신이 초대받지 않았다는 사실을 깨달으세요", + "advancements.spectrum.fail_to_glitch_into_preservation_ruin.title": "던져", + "advancements.spectrum.fail_to_take_item_out_of_pedestal.description": "붓으로 건드리거나 레드스톤 신호를 가해 조합을 시작하세요", + "advancements.spectrum.fail_to_take_item_out_of_pedestal.title": "붓으로 건드리거나 레드스톤 신호를 가해 조합을 시작하세요", + "advancements.spectrum.fill_bottomless_bundle.description": "바닥 없는 꾸러미를 꽉 채우세요", + "advancements.spectrum.fill_bottomless_bundle.title": "가득 채우기", + "advancements.spectrum.fill_bottomless_bundle_for_real_this_time.description": "한 종류의 아이템 2,000,000,000개를 수집하여, 마법 부여가 끝까지 된 바닥 없는 꾸러미를 완전히 채우세요", + "advancements.spectrum.fill_bottomless_bundle_for_real_this_time.title": "이번엔 진짜로", + "advancements.spectrum.fill_ink_container.description": "색상 추출기를 사용하여 잉크 용기를 채우세요. 잉크는 가스처럼 행동하며 용기들 사이의 양을 균등하게 맞춥니다", + "advancements.spectrum.fill_ink_container.title": "새로운 형태의 에너지", + "advancements.spectrum.fill_knowledge_gem.description": "지식의 보석에 10,000의 경험치를 채우세요", + "advancements.spectrum.fill_knowledge_gem.title": "매력 스탯 버리겠습니다", + "advancements.spectrum.fill_knowledge_gem_for_real_this_time.description": "마법 부여가 끝까지 된 지식의 보석을 측정할 수조차 없는 경험치로 채우세요", + "advancements.spectrum.fill_knowledge_gem_for_real_this_time.title": "내 지능 스탯은 +6", + "advancements.spectrum.fill_pigment_palette.description": "안료 팔레트를 얻을 수 있는 모든 종류의 잉크로 꽉 채우세요", + "advancements.spectrum.fill_pigment_palette.title": "온갖 활동을 위한 넉넉한 공간", + "advancements.spectrum.fill_potion_pendant.description": "물약 펜던트에 효과를 불어넣으세요. 물약을 양조하듯 물약 작업장 안에 올려두면 됩니다", + "advancements.spectrum.fill_potion_pendant.title": "효력 있는 펜던트", + "advancements.spectrum.find_excavation_site.description": "발굴 현장을 우연히 발견하세요", + "advancements.spectrum.find_excavation_site.title": "채굴 노가다", + "advancements.spectrum.find_forgotten_city.description": "잊혀진 도시에 입장하세요", + "advancements.spectrum.find_forgotten_city.title": "과거의 잔재", + "advancements.spectrum.find_undergrowth_manor.description": "덤불 속 저택에 입장하세요", + "advancements.spectrum.find_undergrowth_manor.title": "은신처", + "advancements.spectrum.enter_strange_preservation_ruin.description": "향 냄새가 강하게 나는 유독 축축한 유적에 입장하세요.", + "advancements.spectrum.enter_strange_preservation_ruin.title": "톱니바퀴 같은 다이브", + "advancements.spectrum.collect_aether_graced_nectar_gloves.description": "저택의 안뜰에 숨겨진 비밀을 밝혀내세요", + "advancements.spectrum.collect_aether_graced_nectar_gloves.title": "조수 아래", + "advancements.spectrum.find_forsaken_cathedral.description": "버려진 성소를 찾으세요", + "advancements.spectrum.find_forsaken_cathedral.title": "예술가 아카데미", + "advancements.spectrum.find_preservation_ruins.description": "지하에서 삼엄하게 보호받는 구조물을 찾았습니다. 그 안으로 들어갈 방법이 반드시 있을 겁니다! 지금 당장이 아니라면 나중에라도... 이곳의 위치를 기억해 두는 게 좋겠습니다.", + "advancements.spectrum.find_preservation_ruins.title": "난공불락의 요새", + "advancements.spectrum.finish_progression.description": "마법의 여정의 끝에 도달하세요. 축하합니다, 안료 공예가님!", + "advancements.spectrum.finish_progression.title": "여정의 끝", + "advancements.spectrum.finish_progression_without_tips.description": "힌트를 단 한 번도 보지 않고 스펙트럼 전체를 완료하세요. 대단합니다! 이 작은 선물을 즐기세요", + "advancements.spectrum.finish_progression_without_tips.title": "전설적인 예술가", + "advancements.spectrum.fish_an_entity.description": "월척을 낚아 올리세요", + "advancements.spectrum.fish_an_entity.title": "안녕, 그리고 고마웠어요.. 뭣", + "advancements.spectrum.fish_charged_creeper.description": "충전된 크리퍼를 낚아 올리세요. 가끔은 누구에게나 일진 사나운 날이 있는 법이죠", + "advancements.spectrum.fish_charged_creeper.title": "다이너마이트 낚시", + "advancements.spectrum.fish_in_lava.description": "궁금한데...", + "advancements.spectrum.fish_in_lava.title": "불타는 욕망", + "advancements.spectrum.fish_in_many_liquids.description": "가능한 한 많은 종류의 액체에서 낚시하세요", + "advancements.spectrum.fish_in_many_liquids.title": "그냥 낚시가 좋아", + "advancements.spectrum.get_azure_dike_charge.description": "남동석으로 만든 장신구를 장착하여 담청 방벽을 얻으세요", + "advancements.spectrum.get_azure_dike_charge.title": "방어막 가동", + "advancements.spectrum.get_hit_while_wearing_full_suit_of_gemstone_armor.description": "보석 갑옷 세트를 모두 입은 상태에서 공격받으세요", + "advancements.spectrum.get_hit_while_wearing_full_suit_of_gemstone_armor.title": "과충전", + "advancements.spectrum.get_killed_while_out_of_deeper_down_bounds.description": "평범하지 않은 방법으로 집으로 돌아갈 길을 찾으세요", + "advancements.spectrum.get_killed_while_out_of_deeper_down_bounds.title": "덕트 테이프 탈출", + "advancements.spectrum.collect_radiating_ender.description": "당신의 세계에 나타난 엔더맨 중 일부가 섬뜩한 아우라를 뿜어내는 블록을 훔쳐 가는 것을 막으세요", + "advancements.spectrum.collect_radiating_ender.title": "차갑게 식은 손아귀에서 뜯어내기", + "advancements.spectrum.get_semi_permeable_glass.description": "반투과성 유리를 조합하여 불청객으로부터 집을 보호하세요", + "advancements.spectrum.get_semi_permeable_glass.title": "평화와 만족", + "advancements.spectrum.get_tool_with_inertia_500_blocks_broken.description": "관성 마법이 부여된 도구를 사용해 똑같은 블록 500개를 부수세요", + "advancements.spectrum.get_tool_with_inertia_500_blocks_broken.title": "황야에서 가장 빠른 곡괭이", + "advancements.spectrum.gift_or_open_present.description": "선물을 포장해 소중한 사람이 열어볼 수 있도록 내려놓거나, 직접 선물을 뜯어보세요", + "advancements.spectrum.gift_or_open_present.title": "다채로운 광경", + "advancements.spectrum.gift_wet_lava_sponge.description": "젖은 용암 스펀지를 다른 플레이어에게 던지세요", + "advancements.spectrum.gift_wet_lava_sponge.title": "너나 가져!", + "advancements.spectrum.grow_bismuth_in_crystallarieum.description": "결정생성기를 사용하여 비스무트를 성장시키세요", + "advancements.spectrum.grow_bismuth_in_crystallarieum.title": "단단한 개선", + "advancements.spectrum.grow_bloodstone_in_crystallarieum.description": "...당신의 손 위에 태고적 고룡들의 의지인, 정복과 지배에 대한 갈망이 결정화되어 놓여 있습니다. 그리고 그 위에 비친 당신의 모습을 똑똑히 목도하십시오", + "advancements.spectrum.grow_bloodstone_in_crystallarieum.title": "의지의 힘", + "advancements.spectrum.grow_malachite_in_crystallarieum.description": "공작석이 자라나는 속도는 당신이 살아 숨 쉬는 동안 그걸 온전히 목격하지 못할 정도로 끔찍하게 느립니다. 다른 방법이 없을까요?", + "advancements.spectrum.grow_malachite_in_crystallarieum.title": "몇 분 안으로 압축된 영겁의 세월", + "advancements.spectrum.grow_ominous_sapling.description": "이거... 좀 죽어있는 것 같지 않나요?", + "advancements.spectrum.grow_ominous_sapling.title": "실패한 실험?", + "advancements.spectrum.harvest_moonstruck_nectar.description": "완전히 자라난 비취 덩굴에 유리병을 사용하여 달빛에 취한 넥타르를 수확하세요", + "advancements.spectrum.harvest_moonstruck_nectar.title": "세계 최고의 밀주", + "advancements.spectrum.have_half_a_heart_with_divinity.description": "프라이가이스트를 들이켜 승천한 다음 체력을 반 칸만 남기세요", + "advancements.spectrum.have_half_a_heart_with_divinity.title": "신들에게 위험할 정도로 가까워진", + "advancements.spectrum.high_jump_with_take_off_belt.description": "웅크려서 이륙 허리띠를 끝까지 충전하세요. 그리고 도약하세요!", + "advancements.spectrum.high_jump_with_take_off_belt.title": "완벽한 타이밍", + "advancements.spectrum.hook_entity_with_molten_rod.description": "사람에게 물고기를 주면 하루를 먹고살 수 있지만, 녹아내린 낚시대를 쥐여주면 온 세상을 불바다로 만들 것입니다", + "advancements.spectrum.hook_entity_with_molten_rod.title": "불길로 이끌다", + "advancements.spectrum.hurt_by_monstrosity.description": "당신이 철저히 준비했기를 바랍니다. 행운을 빕니다", + "advancements.spectrum.hurt_by_monstrosity.title": "주의 깊은 경비병이 깨어나다", + "advancements.spectrum.kill_a_mob_with_frenzy3.description": "광란 III 이상의 효과를 가진 상태에서 몹을 처치하세요. 이 효과를 한 번 더 얻으면 지속 시간이 연장되는 대신 레벨이 오릅니다", + "advancements.spectrum.kill_a_mob_with_frenzy3.title": "어두운 수난극", + "advancements.spectrum.kill_entity_with_ink_projectile.description": "붓의 물감 던지기 능력을 사용하여 생명체를 처치하세요. 웅크린 채 사용하여 색상을 선택할 수 있습니다.", + "advancements.spectrum.kill_entity_with_ink_projectile.title": "고통의 붓", + "advancements.spectrum.kill_entity_with_jeopardant_and_half_a_heart.description": "재앙걸이를 장착하고 체력이 반 칸 남은 상태에서 결정타를 날리세요", + "advancements.spectrum.kill_entity_with_jeopardant_and_half_a_heart.title": "벼랑 끝 생존", + "advancements.spectrum.killed_monstrosity.description": "거대한 위협과 싸워 물리치세요", + "advancements.spectrum.killed_monstrosity.title": "안전합니다... 당분간은", + "advancements.spectrum.manifest_memory.description": "기억을 창조하고 형체화시키세요", + "advancements.spectrum.manifest_memory.title": "다시 돌아온", + "advancements.spectrum.no_rgb.description": "무슨 일이 일어날 거라 기대한 겁니까? 우리는 지금 CMY를 다루고 있습니다. RGB 따위는 게이밍 키보드에나 박아 두세요", + "advancements.spectrum.no_rgb.title": "별로 빛나지 않는군", + "advancements.spectrum.open_deeper_down_portal.description": "차원문을 여세요... 지저 너머를 향해", + "advancements.spectrum.open_deeper_down_portal.title": "심연으로", + "advancements.spectrum.open_deeper_down_portal_in_nether.description": "차원문을 여세요... 아무 데도 이어지지 않는 곳을 향해", + "advancements.spectrum.open_deeper_down_portal_in_nether.title": "나락으로", + "advancements.spectrum.open_mysterious_compass.description": "월장석 코어를 신비로운 로켓에 꽂아 넣고 열어보세요", + "advancements.spectrum.open_mysterious_compass.title": "마무리로 향하는 길", + "advancements.spectrum.place_color_picker.description": "색상 추출기를 조합하고 바닥에 설치하세요", + "advancements.spectrum.place_color_picker.title": "깐깐하게 고르기", + "advancements.spectrum.place_incandescent_amalgam.description": "백열의 혼합물은 그 어떤 사소한 충격에도 즉시 반응하여 거대하고 불타는 분화구를 남기는 고위력 폭발물입니다. 행운을 빕니다.", + "advancements.spectrum.place_incandescent_amalgam.title": "좋아, 이제... 어쩌지?", + "advancements.spectrum.place_moonstone_in_preservation_ruins.description": "고대의 성소를 복원하세요", + "advancements.spectrum.place_moonstone_in_preservation_ruins.title": "치유의 상징", + "advancements.spectrum.place_pedestal.description": "당신만의 안료 받침대를 조합하고 설치하세요", + "advancements.spectrum.place_pedestal.title": "새로운 조합 방법", + "advancements.spectrum.plant_jade_vines.description": "비취 덩굴 구근을 발아시켜 울타리 바닥에 심으세요. 다른 덩굴들과 마찬가지로 이 식물도 아래로 자라납니다. 영겁의 세월 동안 어둠 속에 갇혀 있었기에, 직사광선은 이 식물에게 너무 치명적이며, 부드러운 달빛 아래에서만 자라납니다", + "advancements.spectrum.plant_jade_vines.title": "오랜 과거의 유산", + "advancements.spectrum.plant_ominous_sapling.description": "베지탈을 어린 묘목과 합치면 분명 뭔가 흥미로운 게 나올 거라 당신은 확신합니다", + "advancements.spectrum.plant_ominous_sapling.title": "자라나라, 자라나라!", + "advancements.spectrum.pluck_blood_orchid_petal.description": "혈난초 식물을 창조하고 꽃잎을 뜯어내 더 많은 꽃잎을 챙기세요", + "advancements.spectrum.pluck_blood_orchid_petal.title": "그들은 날 두려워한다, 두려워하지 않는다", + "advancements.spectrum.pluck_resplendent_feather.description": "§l오 세상에 이런 젠장 세상에 오 이런 젠장", + "advancements.spectrum.pluck_resplendent_feather.title": "돔황챠", + "advancements.spectrum.ascend_kindling.description": "불망울을 용가리 별로 보내버리세요", + "advancements.spectrum.ascend_kindling.title": "폭발적인 해명", + "advancements.spectrum.potion_mastery.description": "반응물 사용법을 완벽하게 터득했습니다. 추가적인 반응물 슬롯을 잠금 해제했습니다!", + "advancements.spectrum.potion_mastery.title": "물약 숙달", + "advancements.spectrum.put_too_many_low_gravity_blocks_into_animal.description": "당신의 동물 친구에게 팔타에리아를 한도 초과로 먹여주세요. 잘 가", + "advancements.spectrum.put_too_many_low_gravity_blocks_into_animal.title": "이제 가야 해. 내 행성이 날 부르고 있어", + "advancements.spectrum.reached_dd_floor.description": "지저 너머의 가장 밑바닥에 도달하세요", + "advancements.spectrum.reached_dd_floor.title": "기반암 2: 일렉트릭 부갈루", + "advancements.spectrum.remember_egg_laying_wooly_pig.description": "알 낳는 양털 돼지의 기억을 부화시키세요", + "advancements.spectrum.remember_egg_laying_wooly_pig.title": "한때는 전설에 불과했던", + "advancements.spectrum.remember_kindling.description": "신성한 용의 시대를 재림시키려 시도했다가 처참하게 실패한 뒤, 더 끝내주는 녀석을 얻어내세요!", + "advancements.spectrum.remember_kindling.title": "거짓된 우상", + "advancements.spectrum.revive_black_sludge_plant.description": "검은 진창 '식물'을 되살려내세요", + "advancements.spectrum.revive_black_sludge_plant.title": "지저 너머의 드루이드", + "advancements.spectrum.revive_dead_bush.description": "마른 덤불에 자연의 지팡이와 베지탈을 사용하여 다시 살아 숨 쉬게 만드세요", + "advancements.spectrum.revive_dead_bush.title": "부활", + "advancements.spectrum.shoot_fully_overcharged_crossbow.description": "끝까지 과충전된 유리 장식 쇠뇌를 발사하세요", + "advancements.spectrum.shoot_fully_overcharged_crossbow.title": "슈퍼차지", + "advancements.spectrum.smelt_in_cinderhearth_with_yield_upgrades.description": "잿불화로에 생산성 쇄도기와 하늘색 잉크를 들이부어 제련 결과물을 복제할 확률을 얻어내세요", + "advancements.spectrum.smelt_in_cinderhearth_with_yield_upgrades.title": "잉크에서 물질로", + "advancements.spectrum.smelt_pure_resource_in_cinderhearth.description": "잿불화로는 순수한 자원을 구워낼 때 평범한 용광로보다 더 좋은 효율을 자랑합니다", + "advancements.spectrum.smelt_pure_resource_in_cinderhearth.title": "광석의 눈사태", + "advancements.spectrum.solve_color_mixing_preservation_ruin.description": "교활한 퍼즐로 지켜지던 구조물... 더 이상은 아니군요", + "advancements.spectrum.solve_color_mixing_preservation_ruin.title": "분류된 색상", + "advancements.spectrum.solve_dike_gate_preservation_ruin.description": "불가사의한 보호막으로 둘러싸여 있던 구조물... 더 이상은 아니군요", + "advancements.spectrum.solve_dike_gate_preservation_ruin.title": "관통됨", + "advancements.spectrum.solve_wireless_redstone_preservation_ruin.description": "단단한 기반암으로 꽁꽁 싸매여 있던 구조물... 더 이상은 아니군요", + "advancements.spectrum.solve_wireless_redstone_preservation_ruin.title": "원격 연결됨", + "advancements.spectrum.spectrum.description": "마법과 색채, 그리고 혼돈에 관한 이야기", + "advancements.spectrum.spectrum.title": "스펙트럼 – 여정의 시작", + "advancements.spectrum.spectrum_endgame.description": "여정의 끝을 알리는 이야기", + "advancements.spectrum.spectrum_endgame.title": "스펙트럼 – 마지막 앙코르", + "advancements.spectrum.spectrum_lategame.description": "성찰적인 시와도 같은 이야기", + "advancements.spectrum.spectrum_lategame.title": "스펙트럼 – 순수로의 전환", + "advancements.spectrum.spectrum_midgame.description": "호기심과 탐욕에 관한 이야기", + "advancements.spectrum.spectrum_midgame.title": "스펙트럼 – 검게 칠하라", + "advancements.spectrum.start_crafting_time_consuming_pedestal_recipe.description": "강화기를 달아주면 지루하게 늘어지는 조합 시간을 줄일 수 있다는 걸 기억하세요", + "advancements.spectrum.start_crafting_time_consuming_pedestal_recipe.title": "예술의 인내심", + "advancements.spectrum.strike_up_hummingstone_hymn.description": "음명석 찬가를 연주하세요", + "advancements.spectrum.strike_up_hummingstone_hymn.title": "교향곡", + "advancements.spectrum.survive_drinking_incandescent_amalgam.description": "백열의 혼합물을 들이켰을 때 당신의 몸을 찢어발기려 드는 고통 속에서 살아남으세요", + "advancements.spectrum.survive_drinking_incandescent_amalgam.title": "한때 나는 태양이었다", + "advancements.spectrum.survive_fatal_slumber.description": "치명적 수면에서 무사히 깨어나... 위험할 정도로 가까이 닿으세요... 어딘가에", + "advancements.spectrum.survive_fatal_slumber.title": "깊은 빛", + "advancements.spectrum.take_off_belt_overcharged.description": "이륙 허리띠를 너무 오랫동안 충전하여 에너지가 흩어져버리게 만드세요", + "advancements.spectrum.take_off_belt_overcharged.title": "완벽하지 못한 타이밍", + "advancements.spectrum.tame_lizard.description": "잠복하는 도마뱀을 '길들이세요'", + "advancements.spectrum.tame_lizard.title": "친구 아니면 적? 둘 다 하면 안 될까!", + "advancements.spectrum.tap_aged_air.description": "며칠 동안 속을 텅 비워둔 채 꽁꽁 밀봉해 둔 발효통을 여세요", + "advancements.spectrum.tap_aged_air.title": "한 무더기의 아무것도 아님", + "advancements.spectrum.tap_chrysocolla.description": "너무 오랫동안 숙성시켜 버린 비취 와인을 꺼내 보세요", + "advancements.spectrum.tap_chrysocolla.title": "샐러드랑 먹는 게 낫겠어", + "advancements.spectrum.tap_mermaids_jam.title": "잼 민이", + "advancements.spectrum.tap_mermaids_jam.description": "인어의 잼을 빚어내는 비법을 알아내세요", + "advancements.spectrum.tap_poisonous_vodka.description": "독성 보드카의 꼭지를 트세요. 건배!", + "advancements.spectrum.tap_poisonous_vodka.title": "장기 파열의 맛", + "advancements.spectrum.tap_pure_alcohol.description": "발효통을 너무 오래 방치해 내용물이 순수 알코올로 변해버릴 때까지 기다리세요", + "advancements.spectrum.tap_pure_alcohol.title": "조금 쎈 도수", + "advancements.spectrum.tap_suspicious_brew.description": "수상한 양조물을 빚어내세요", + "advancements.spectrum.tap_suspicious_brew.title": "소젖 짜서 만든 게 아님", + "advancements.spectrum.tap_sweetened_jade_wine.description": "비취 와인에 약간의 단맛을 떨어뜨리면 겉보기에도,아니, 맛보기에도 혀에 훨씬 부드럽게 감긴다는 사실을 알아내세요", + "advancements.spectrum.tap_sweetened_jade_wine.title": "고대의 술++", + "advancements.spectrum.tap_titration_barrel.description": "발효통을 열고 당신의 목을 상쾌하게(혹은 전혀 안 상쾌하게) 적셔줄 술을 꺼내세요", + "advancements.spectrum.tap_titration_barrel.title": "시원한 한 캔 따기", + "advancements.spectrum.trigger_unenchanted_workstaff.description": "작업의 지팡이에서 마법을 벗겨버리고 당신이 도대체 무슨 짓을 저질렀는지 성찰해 보세요", + "advancements.spectrum.trigger_unenchanted_workstaff.title": "근데 대체 왜", + "advancements.spectrum.upgrade_enchanted_book_to_fortune4.description": "마법 부여기를 사용해 행운 III이 달린 마법의 책을 행운 IV로 업그레이드하세요", + "advancements.spectrum.upgrade_enchanted_book_to_fortune4.title": "행운폭발", + "advancements.spectrum.use_all_pedestal_upgrades.description": "받침대 구조물을 지탱하는 4개의 보석 블록 위에 하나씩 업그레이드를 모조리 얹어 그 능력을 폭발시키세요", + "advancements.spectrum.use_all_pedestal_upgrades.title": "초강화", + "advancements.spectrum.use_decay_away_on_sculk.description": "스컬크도 어엿한 자가 복제 유기체로서의 자격을 충분히 갖춘 모양입니다", + "advancements.spectrum.use_decay_away_on_sculk.title": "너의 심연을 밝히며", + "advancements.spectrum.use_glistering_melon_seeds.description": "반짝이는 수박... 식물을 길러내세요!", + "advancements.spectrum.use_glistering_melon_seeds.title": "번영의 징조", + "advancements.spectrum.use_oblivion_pickaxe_with_efficiency.description": "효율 마법이 부여된 망각의 곡괭이를 휘둘러 세상을 조각내며 나아가세요", + "advancements.spectrum.use_oblivion_pickaxe_with_efficiency.title": "나는 속도다", + "advancements.spectrum.use_perturbed_eye.description": "동요의 눈을 엔드 포탈 차원문에 끼우고 파괴되도록 놔두세요", + "advancements.spectrum.use_perturbed_eye.title": "아 랔 투 무빗 무빗", + "advancements.spectrum.visit_all_deeper_down_biomes.description": "지저 너머에 있는 모든 생물군계를 방문하세요", + "advancements.spectrum.visit_all_deeper_down_biomes.title": "기반암 아래의 생물군계들", + "advancements.spectrum.wear_both_gravity_trinkets.description": "중력에 훼방을 놓는 두 반지를 동시에 손가락에 끼우세요", + "advancements.spectrum.wear_both_gravity_trinkets.title": "무겁게 기뻐하기", + "advancements.spectrum.wear_complete_set_of_bedrock_armor.description": "영원불멸한 장미의 흑기사. 기반암 갑옷 세트를 모두 착용하세요", + "advancements.spectrum.wear_complete_set_of_bedrock_armor.title": "흑기사", + "advancements.spectrum.become_enlightened.title": "프로페셔널 고양이 짤쟁이", + "advancements.spectrum.become_enlightened.description": "매일 고양이 짤을 올리던 짓거리에서부터 우주의 비밀을 풀어내기까지: 당신은 진정 최고 중의 최고입니다. 이제 Noaaan의 이름에 'a'가 몇 개나 들어가는지 마침내 깨달았군요.", + "advancements.spectrum.failed_creating_player_spawner.title": "아기는 그렇게 만들어지는 게 아닙니다", + "advancements.spectrum.failed_creating_player_spawner.description": "플레이어 생성기 창조를 시도하세요", + "advancements.spectrum.failed_creating_empty_or_blacklisted_spawner.title": "대장, 이건 좀 아닌 것 같습니다", + "advancements.spectrum.failed_creating_empty_or_blacklisted_spawner.description": "너무 강력한 몹이나 영혼 주입기가 알아보지 못하는 몬스터의 생성기를 창조하려다 실패하세요.", + "advancements.spectrum.place_forgotten_memory.title": "과거의 그림자들", + "advancements.spectrum.place_forgotten_memory.description": "사람은 두 번 죽습니다: 한 번은 육신이 스러질 때, 그리고 또 한 번은 사람들에게서 잊혀졌을 때.", + + "advancements.spectrum.craft_star_candy_variant.title": "희미한 반짝임", + "advancements.spectrum.craft_star_candy_variant.description": "희귀한 별 사탕 변종을 조합하세요. 분명 우주가 당신에게 고급 맛을 허락하기로 결정한 게 틀림없습니다", + "advancements.spectrum.craft_magnificent_star_candy.title": "우주적 대박", + "advancements.spectrum.craft_magnificent_star_candy.description": "끝내주는 별 사탕을 구워내세요", + "advancements.spectrum.craft_sugary_star_candy.title": "달콤한 불행", + "advancements.spectrum.craft_sugary_star_candy.description": "기술적으로는 먹을 수 있지만, 감정적으로는 끔찍하게 실망스럽습니다", + "advancements.spectrum.consume_all_star_candy_variants.title": "최고의 1성급 메뉴", + "advancements.spectrum.consume_all_star_candy_variants.description": "모든 별 사탕 변종들을 손에 넣고 먹으세요", + + "attribute.name.spectrum.mental_presence": "정신적 존재감", + "attribute.name.spectrum.mental_presence.desc": "정신 관련 효과의 위력", + + "biome.spectrum.black_langast": "칠흑의 장령", + "biome.spectrum.crystal_gardens": "수정 정원", + "biome.spectrum.deep_barrens": "깊은 불모지", + "biome.spectrum.deep_dripstone_caves": "깊은 점적석 동굴", + "biome.spectrum.dragonrot_swamp": "용부액 늪", + "biome.spectrum.dragonrot_swamp.effect_start": "폐가 타들어간다... 이곳의 공기는 독성이다", + "biome.spectrum.dragonrot_swamp.effect_end": "타는 느낌이 가라앉는다", + "biome.spectrum.howling_spires": "울부짖는 첨탑", + "biome.spectrum.noxshroom_forest": "어스름버섯 숲", + "biome.spectrum.razor_edge": "칼날의 경계", + + "block.alloy_forgery.polished_basalt_forge_controller": "현무암 용광로 제어기", + "block.alloy_forgery.polished_blackslag_forge_controller": "흑작암 용광로 제어기", + "block.alloy_forgery.polished_bone_ash_forge_controller": "골회 용광로 제어기", + "block.alloy_forgery.polished_calcite_forge_controller": "방해석 용광로 제어기", + "block.alloy_forgery.polished_shale_clay_forge_controller": "셰일 점토 용광로 제어기", + "block.alloy_forgery.pyrite_forge_controller": "황철석 용광로 제어기", + + "block.minecraft.banner.spectrum.amethyst_cluster.black": "검은색 자수정 군집", + "block.minecraft.banner.spectrum.amethyst_cluster.blue": "파란색 자수정 군집", + "block.minecraft.banner.spectrum.amethyst_cluster.brown": "갈색 자수정 군집", + "block.minecraft.banner.spectrum.amethyst_cluster.cyan": "청록색 자수정 군집", + "block.minecraft.banner.spectrum.amethyst_cluster.gray": "회색 자수정 군집", + "block.minecraft.banner.spectrum.amethyst_cluster.green": "초록색 자수정 군집", + "block.minecraft.banner.spectrum.amethyst_cluster.light_blue": "하늘색 자수정 군집", + "block.minecraft.banner.spectrum.amethyst_cluster.light_gray": "회백색 자수정 군집", + "block.minecraft.banner.spectrum.amethyst_cluster.lime": "연두색 자수정 군집", + "block.minecraft.banner.spectrum.amethyst_cluster.magenta": "자홍색 자수정 군집", + "block.minecraft.banner.spectrum.amethyst_cluster.orange": "주황색 자수정 군집", + "block.minecraft.banner.spectrum.amethyst_cluster.pink": "분홍색 자수정 군집", + "block.minecraft.banner.spectrum.amethyst_cluster.purple": "보라색 자수정 군집", + "block.minecraft.banner.spectrum.amethyst_cluster.red": "빨간색 자수정 군집", + "block.minecraft.banner.spectrum.amethyst_cluster.white": "하얀색 자수정 군집", + "block.minecraft.banner.spectrum.amethyst_cluster.yellow": "노란색 자수정 군집", + "block.minecraft.banner.spectrum.amethyst_shard.black": "검은색 자수정 조각", + "block.minecraft.banner.spectrum.amethyst_shard.blue": "파란색 자수정 조각", + "block.minecraft.banner.spectrum.amethyst_shard.brown": "갈색 자수정 조각", + "block.minecraft.banner.spectrum.amethyst_shard.cyan": "청록색 자수정 조각", + "block.minecraft.banner.spectrum.amethyst_shard.gray": "회색 자수정 조각", + "block.minecraft.banner.spectrum.amethyst_shard.green": "초록색 자수정 조각", + "block.minecraft.banner.spectrum.amethyst_shard.light_blue": "하늘색 자수정 조각", + "block.minecraft.banner.spectrum.amethyst_shard.light_gray": "회백색 자수정 조각", + "block.minecraft.banner.spectrum.amethyst_shard.lime": "연두색 자수정 조각", + "block.minecraft.banner.spectrum.amethyst_shard.magenta": "자홍색 자수정 조각", + "block.minecraft.banner.spectrum.amethyst_shard.orange": "주황색 자수정 조각", + "block.minecraft.banner.spectrum.amethyst_shard.pink": "분홍색 자수정 조각", + "block.minecraft.banner.spectrum.amethyst_shard.purple": "보라색 자수정 조각", + "block.minecraft.banner.spectrum.amethyst_shard.red": "빨간색 자수정 조각", + "block.minecraft.banner.spectrum.amethyst_shard.white": "하얀색 자수정 조각", + "block.minecraft.banner.spectrum.amethyst_shard.yellow": "노란색 자수정 조각", + "block.minecraft.banner.spectrum.bedrock_dust.black": "검은색 기반암 가루", + "block.minecraft.banner.spectrum.bedrock_dust.blue": "파란색 기반암 가루", + "block.minecraft.banner.spectrum.bedrock_dust.brown": "갈색 기반암 가루", + "block.minecraft.banner.spectrum.bedrock_dust.cyan": "청록색 기반암 가루", + "block.minecraft.banner.spectrum.bedrock_dust.gray": "회색 기반암 가루", + "block.minecraft.banner.spectrum.bedrock_dust.green": "초록색 기반암 가루", + "block.minecraft.banner.spectrum.bedrock_dust.light_blue": "하늘색 기반암 가루", + "block.minecraft.banner.spectrum.bedrock_dust.light_gray": "회백색 기반암 가루", + "block.minecraft.banner.spectrum.bedrock_dust.lime": "연두색 기반암 가루", + "block.minecraft.banner.spectrum.bedrock_dust.magenta": "자홍색 기반암 가루", + "block.minecraft.banner.spectrum.bedrock_dust.orange": "주황색 기반암 가루", + "block.minecraft.banner.spectrum.bedrock_dust.pink": "분홍색 기반암 가루", + "block.minecraft.banner.spectrum.bedrock_dust.purple": "보라색 기반암 가루", + "block.minecraft.banner.spectrum.bedrock_dust.red": "빨간색 기반암 가루", + "block.minecraft.banner.spectrum.bedrock_dust.white": "하얀색 기반암 가루", + "block.minecraft.banner.spectrum.bedrock_dust.yellow": "노란색 기반암 가루", + "block.minecraft.banner.spectrum.crafting_tablet.black": "검은색 제작 석판", + "block.minecraft.banner.spectrum.crafting_tablet.blue": "파란색 제작 석판", + "block.minecraft.banner.spectrum.crafting_tablet.brown": "갈색 제작 석판", + "block.minecraft.banner.spectrum.crafting_tablet.cyan": "청록색 제작 석판", + "block.minecraft.banner.spectrum.crafting_tablet.gray": "회색 제작 석판", + "block.minecraft.banner.spectrum.crafting_tablet.green": "초록색 제작 석판", + "block.minecraft.banner.spectrum.crafting_tablet.light_blue": "하늘색 제작 석판", + "block.minecraft.banner.spectrum.crafting_tablet.light_gray": "회백색 제작 석판", + "block.minecraft.banner.spectrum.crafting_tablet.lime": "연두색 제작 석판", + "block.minecraft.banner.spectrum.crafting_tablet.magenta": "자홍색 제작 석판", + "block.minecraft.banner.spectrum.crafting_tablet.orange": "주황색 제작 석판", + "block.minecraft.banner.spectrum.crafting_tablet.pink": "분홍색 제작 석판", + "block.minecraft.banner.spectrum.crafting_tablet.purple": "보라색 제작 석판", + "block.minecraft.banner.spectrum.crafting_tablet.red": "빨간색 제작 석판", + "block.minecraft.banner.spectrum.crafting_tablet.white": "하얀색 제작 석판", + "block.minecraft.banner.spectrum.crafting_tablet.yellow": "노란색 제작 석판", + "block.minecraft.banner.spectrum.four_leaf_clover.black": "검은색 네잎클로버", + "block.minecraft.banner.spectrum.four_leaf_clover.blue": "파란색 네잎클로버", + "block.minecraft.banner.spectrum.four_leaf_clover.brown": "갈색 네잎클로버", + "block.minecraft.banner.spectrum.four_leaf_clover.cyan": "청록색 네잎클로버", + "block.minecraft.banner.spectrum.four_leaf_clover.gray": "회색 네잎클로버", + "block.minecraft.banner.spectrum.four_leaf_clover.green": "초록색 네잎클로버", + "block.minecraft.banner.spectrum.four_leaf_clover.light_blue": "하늘색 네잎클로버", + "block.minecraft.banner.spectrum.four_leaf_clover.light_gray": "회백색 네잎클로버", + "block.minecraft.banner.spectrum.four_leaf_clover.lime": "연두색 네잎클로버", + "block.minecraft.banner.spectrum.four_leaf_clover.magenta": "자홍색 네잎클로버", + "block.minecraft.banner.spectrum.four_leaf_clover.orange": "주황색 네잎클로버", + "block.minecraft.banner.spectrum.four_leaf_clover.pink": "분홍색 네잎클로버", + "block.minecraft.banner.spectrum.four_leaf_clover.purple": "보라색 네잎클로버", + "block.minecraft.banner.spectrum.four_leaf_clover.red": "빨간색 네잎클로버", + "block.minecraft.banner.spectrum.four_leaf_clover.white": "하얀색 네잎클로버", + "block.minecraft.banner.spectrum.four_leaf_clover.yellow": "노란색 네잎클로버", + "block.minecraft.banner.spectrum.guidebook.black": "검은색 다채로운 세계", + "block.minecraft.banner.spectrum.guidebook.blue": "파란색 다채로운 세계", + "block.minecraft.banner.spectrum.guidebook.brown": "갈색 다채로운 세계", + "block.minecraft.banner.spectrum.guidebook.cyan": "청록색 다채로운 세계", + "block.minecraft.banner.spectrum.guidebook.gray": "회색 다채로운 세계", + "block.minecraft.banner.spectrum.guidebook.green": "초록색 다채로운 세계", + "block.minecraft.banner.spectrum.guidebook.light_blue": "하늘색 다채로운 세계", + "block.minecraft.banner.spectrum.guidebook.light_gray": "회백색 다채로운 세계", + "block.minecraft.banner.spectrum.guidebook.lime": "연두색 다채로운 세계", + "block.minecraft.banner.spectrum.guidebook.magenta": "자홍색 다채로운 세계", + "block.minecraft.banner.spectrum.guidebook.orange": "주황색 다채로운 세계", + "block.minecraft.banner.spectrum.guidebook.pink": "분홍색 다채로운 세계", + "block.minecraft.banner.spectrum.guidebook.purple": "보라색 다채로운 세계", + "block.minecraft.banner.spectrum.guidebook.red": "빨간색 다채로운 세계", + "block.minecraft.banner.spectrum.guidebook.white": "하얀색 다채로운 세계", + "block.minecraft.banner.spectrum.guidebook.yellow": "노란색 다채로운 세계", + "block.minecraft.banner.spectrum.ink_flask.black": "검은색 잉크 플라스크", + "block.minecraft.banner.spectrum.ink_flask.blue": "파란색 잉크 플라스크", + "block.minecraft.banner.spectrum.ink_flask.brown": "갈색 잉크 플라스크", + "block.minecraft.banner.spectrum.ink_flask.cyan": "청록색 잉크 플라스크", + "block.minecraft.banner.spectrum.ink_flask.gray": "회색 잉크 플라스크", + "block.minecraft.banner.spectrum.ink_flask.green": "초록색 잉크 플라스크", + "block.minecraft.banner.spectrum.ink_flask.light_blue": "하늘색 잉크 플라스크", + "block.minecraft.banner.spectrum.ink_flask.light_gray": "회백색 잉크 플라스크", + "block.minecraft.banner.spectrum.ink_flask.lime": "연두색 잉크 플라스크", + "block.minecraft.banner.spectrum.ink_flask.magenta": "자홍색 잉크 플라스크", + "block.minecraft.banner.spectrum.ink_flask.orange": "주황색 잉크 플라스크", + "block.minecraft.banner.spectrum.ink_flask.pink": "분홍색 잉크 플라스크", + "block.minecraft.banner.spectrum.ink_flask.purple": "보라색 잉크 플라스크", + "block.minecraft.banner.spectrum.ink_flask.red": "빨간색 잉크 플라스크", + "block.minecraft.banner.spectrum.ink_flask.white": "하얀색 잉크 플라스크", + "block.minecraft.banner.spectrum.ink_flask.yellow": "노란색 잉크 플라스크", + "block.minecraft.banner.spectrum.jade_vine.black": "검은색 비취 덩굴", + "block.minecraft.banner.spectrum.jade_vine.blue": "파란색 비취 덩굴", + "block.minecraft.banner.spectrum.jade_vine.brown": "갈색 비취 덩굴", + "block.minecraft.banner.spectrum.jade_vine.cyan": "청록색 비취 덩굴", + "block.minecraft.banner.spectrum.jade_vine.gray": "회색 비취 덩굴", + "block.minecraft.banner.spectrum.jade_vine.green": "초록색 비취 덩굴", + "block.minecraft.banner.spectrum.jade_vine.light_blue": "하늘색 비취 덩굴", + "block.minecraft.banner.spectrum.jade_vine.light_gray": "회백색 비취 덩굴", + "block.minecraft.banner.spectrum.jade_vine.lime": "연두색 비취 덩굴", + "block.minecraft.banner.spectrum.jade_vine.magenta": "자홍색 비취 덩굴", + "block.minecraft.banner.spectrum.jade_vine.orange": "주황색 비취 덩굴", + "block.minecraft.banner.spectrum.jade_vine.pink": "분홍색 비취 덩굴", + "block.minecraft.banner.spectrum.jade_vine.purple": "보라색 비취 덩굴", + "block.minecraft.banner.spectrum.jade_vine.red": "빨간색 비취 덩굴", + "block.minecraft.banner.spectrum.jade_vine.white": "하얀색 비취 덩굴", + "block.minecraft.banner.spectrum.jade_vine.yellow": "노란색 비취 덩굴", + "block.minecraft.banner.spectrum.knowledge_gem.black": "검은색 지식의 보석", + "block.minecraft.banner.spectrum.knowledge_gem.blue": "파란색 지식의 보석", + "block.minecraft.banner.spectrum.knowledge_gem.brown": "갈색 지식의 보석", + "block.minecraft.banner.spectrum.knowledge_gem.cyan": "청록색 지식의 보석", + "block.minecraft.banner.spectrum.knowledge_gem.gray": "회색 지식의 보석", + "block.minecraft.banner.spectrum.knowledge_gem.green": "초록색 지식의 보석", + "block.minecraft.banner.spectrum.knowledge_gem.light_blue": "하늘색 지식의 보석", + "block.minecraft.banner.spectrum.knowledge_gem.light_gray": "회백색 지식의 보석", + "block.minecraft.banner.spectrum.knowledge_gem.lime": "연두색 지식의 보석", + "block.minecraft.banner.spectrum.knowledge_gem.magenta": "자홍색 지식의 보석", + "block.minecraft.banner.spectrum.knowledge_gem.orange": "주황색 지식의 보석", + "block.minecraft.banner.spectrum.knowledge_gem.pink": "분홍색 지식의 보석", + "block.minecraft.banner.spectrum.knowledge_gem.purple": "보라색 지식의 보석", + "block.minecraft.banner.spectrum.knowledge_gem.red": "빨간색 지식의 보석", + "block.minecraft.banner.spectrum.knowledge_gem.white": "하얀색 지식의 보석", + "block.minecraft.banner.spectrum.knowledge_gem.yellow": "노란색 지식의 보석", + "block.minecraft.banner.spectrum.logo.black": "검은색 색채 이론", + "block.minecraft.banner.spectrum.logo.blue": "파란색 색채 이론", + "block.minecraft.banner.spectrum.logo.brown": "갈색 색채 이론", + "block.minecraft.banner.spectrum.logo.cyan": "청록색 색채 이론", + "block.minecraft.banner.spectrum.logo.gray": "회색 색채 이론", + "block.minecraft.banner.spectrum.logo.green": "초록색 색채 이론", + "block.minecraft.banner.spectrum.logo.light_blue": "하늘색 색채 이론", + "block.minecraft.banner.spectrum.logo.light_gray": "회백색 색채 이론", + "block.minecraft.banner.spectrum.logo.lime": "연두색 색채 이론", + "block.minecraft.banner.spectrum.logo.magenta": "자홍색 색채 이론", + "block.minecraft.banner.spectrum.logo.orange": "주황색 색채 이론", + "block.minecraft.banner.spectrum.logo.pink": "분홍색 색채 이론", + "block.minecraft.banner.spectrum.logo.purple": "보라색 색채 이론", + "block.minecraft.banner.spectrum.logo.red": "빨간색 색채 이론", + "block.minecraft.banner.spectrum.logo.white": "하얀색 색채 이론", + "block.minecraft.banner.spectrum.logo.yellow": "노란색 색채 이론", + "block.minecraft.banner.spectrum.multitool.black": "검은색 멀티툴", + "block.minecraft.banner.spectrum.multitool.blue": "파란색 멀티툴", + "block.minecraft.banner.spectrum.multitool.brown": "갈색 멀티툴", + "block.minecraft.banner.spectrum.multitool.cyan": "청록색 멀티툴", + "block.minecraft.banner.spectrum.multitool.gray": "회색 멀티툴", + "block.minecraft.banner.spectrum.multitool.green": "초록색 멀티툴", + "block.minecraft.banner.spectrum.multitool.light_blue": "하늘색 멀티툴", + "block.minecraft.banner.spectrum.multitool.light_gray": "회백색 멀티툴", + "block.minecraft.banner.spectrum.multitool.lime": "연두색 멀티툴", + "block.minecraft.banner.spectrum.multitool.magenta": "자홍색 멀티툴", + "block.minecraft.banner.spectrum.multitool.orange": "주황색 멀티툴", + "block.minecraft.banner.spectrum.multitool.pink": "분홍색 멀티툴", + "block.minecraft.banner.spectrum.multitool.purple": "보라색 멀티툴", + "block.minecraft.banner.spectrum.multitool.red": "빨간색 멀티툴", + "block.minecraft.banner.spectrum.multitool.white": "하얀색 멀티툴", + "block.minecraft.banner.spectrum.multitool.yellow": "노란색 멀티툴", + "block.minecraft.banner.spectrum.neolith.black": "검은색 네오리스", + "block.minecraft.banner.spectrum.neolith.blue": "파란색 네오리스", + "block.minecraft.banner.spectrum.neolith.brown": "갈색 네오리스", + "block.minecraft.banner.spectrum.neolith.cyan": "청록색 네오리스", + "block.minecraft.banner.spectrum.neolith.gray": "회색 네오리스", + "block.minecraft.banner.spectrum.neolith.green": "초록색 네오리스", + "block.minecraft.banner.spectrum.neolith.light_blue": "하늘색 네오리스", + "block.minecraft.banner.spectrum.neolith.light_gray": "회백색 네오리스", + "block.minecraft.banner.spectrum.neolith.lime": "연두색 네오리스", + "block.minecraft.banner.spectrum.neolith.magenta": "자홍색 네오리스", + "block.minecraft.banner.spectrum.neolith.orange": "주황색 네오리스", + "block.minecraft.banner.spectrum.neolith.pink": "분홍색 네오리스", + "block.minecraft.banner.spectrum.neolith.purple": "보라색 네오리스", + "block.minecraft.banner.spectrum.neolith.red": "빨간색 네오리스", + "block.minecraft.banner.spectrum.neolith.white": "하얀색 네오리스", + "block.minecraft.banner.spectrum.neolith.yellow": "노란색 네오리스", + "block.minecraft.banner.spectrum.palette.black": "검은색 예술", + "block.minecraft.banner.spectrum.palette.blue": "파란색 예술", + "block.minecraft.banner.spectrum.palette.brown": "갈색 예술", + "block.minecraft.banner.spectrum.palette.cyan": "청록색 예술", + "block.minecraft.banner.spectrum.palette.gray": "회색 예술", + "block.minecraft.banner.spectrum.palette.green": "초록색 예술", + "block.minecraft.banner.spectrum.palette.light_blue": "하늘색 예술", + "block.minecraft.banner.spectrum.palette.light_gray": "회백색 예술", + "block.minecraft.banner.spectrum.palette.lime": "연두색 예술", + "block.minecraft.banner.spectrum.palette.magenta": "자홍색 예술", + "block.minecraft.banner.spectrum.palette.orange": "주황색 예술", + "block.minecraft.banner.spectrum.palette.pink": "분홍색 예술", + "block.minecraft.banner.spectrum.palette.purple": "보라색 예술", + "block.minecraft.banner.spectrum.palette.red": "빨간색 예술", + "block.minecraft.banner.spectrum.palette.white": "하얀색 예술", + "block.minecraft.banner.spectrum.palette.yellow": "노란색 예술", + "block.minecraft.banner.spectrum.pigment.black": "검은색 안료", + "block.minecraft.banner.spectrum.pigment.blue": "파란색 안료", + "block.minecraft.banner.spectrum.pigment.brown": "갈색 안료", + "block.minecraft.banner.spectrum.pigment.cyan": "청록색 안료", + "block.minecraft.banner.spectrum.pigment.gray": "회색 안료", + "block.minecraft.banner.spectrum.pigment.green": "초록색 안료", + "block.minecraft.banner.spectrum.pigment.light_blue": "하늘색 안료", + "block.minecraft.banner.spectrum.pigment.light_gray": "회백색 안료", + "block.minecraft.banner.spectrum.pigment.lime": "연두색 안료", + "block.minecraft.banner.spectrum.pigment.magenta": "자홍색 안료", + "block.minecraft.banner.spectrum.pigment.orange": "주황색 안료", + "block.minecraft.banner.spectrum.pigment.pink": "분홍색 안료", + "block.minecraft.banner.spectrum.pigment.purple": "보라색 안료", + "block.minecraft.banner.spectrum.pigment.red": "빨간색 안료", + "block.minecraft.banner.spectrum.pigment.white": "하얀색 안료", + "block.minecraft.banner.spectrum.pigment.yellow": "노란색 안료", + "block.minecraft.banner.spectrum.raw_azurite.black": "검은색 남동석", + "block.minecraft.banner.spectrum.raw_azurite.blue": "파란색 남동석", + "block.minecraft.banner.spectrum.raw_azurite.brown": "갈색 남동석", + "block.minecraft.banner.spectrum.raw_azurite.cyan": "청록색 남동석", + "block.minecraft.banner.spectrum.raw_azurite.gray": "회색 남동석", + "block.minecraft.banner.spectrum.raw_azurite.green": "초록색 남동석", + "block.minecraft.banner.spectrum.raw_azurite.light_blue": "하늘색 남동석", + "block.minecraft.banner.spectrum.raw_azurite.light_gray": "회백색 남동석", + "block.minecraft.banner.spectrum.raw_azurite.lime": "연두색 남동석", + "block.minecraft.banner.spectrum.raw_azurite.magenta": "자홍색 남동석", + "block.minecraft.banner.spectrum.raw_azurite.orange": "주황색 남동석", + "block.minecraft.banner.spectrum.raw_azurite.pink": "분홍색 남동석", + "block.minecraft.banner.spectrum.raw_azurite.purple": "보라색 남동석", + "block.minecraft.banner.spectrum.raw_azurite.red": "빨간색 남동석", + "block.minecraft.banner.spectrum.raw_azurite.white": "하얀색 남동석", + "block.minecraft.banner.spectrum.raw_azurite.yellow": "노란색 남동석", + "block.minecraft.banner.spectrum.shimmer.black": "검은색 반짝임", + "block.minecraft.banner.spectrum.shimmer.blue": "파란색 반짝임", + "block.minecraft.banner.spectrum.shimmer.brown": "갈색 반짝임", + "block.minecraft.banner.spectrum.shimmer.cyan": "청록색 반짝임", + "block.minecraft.banner.spectrum.shimmer.gray": "회색 반짝임", + "block.minecraft.banner.spectrum.shimmer.green": "초록색 반짝임", + "block.minecraft.banner.spectrum.shimmer.light_blue": "하늘색 반짝임", + "block.minecraft.banner.spectrum.shimmer.light_gray": "회백색 반짝임", + "block.minecraft.banner.spectrum.shimmer.lime": "연두색 반짝임", + "block.minecraft.banner.spectrum.shimmer.magenta": "자홍색 반짝임", + "block.minecraft.banner.spectrum.shimmer.orange": "주황색 반짝임", + "block.minecraft.banner.spectrum.shimmer.pink": "분홍색 반짝임", + "block.minecraft.banner.spectrum.shimmer.purple": "보라색 반짝임", + "block.minecraft.banner.spectrum.shimmer.red": "빨간색 반짝임", + "block.minecraft.banner.spectrum.shimmer.white": "하얀색 반짝임", + "block.minecraft.banner.spectrum.shimmer.yellow": "노란색 반짝임", + "block.minecraft.banner.spectrum.shimmerstone.black": "검은색 미광석", + "block.minecraft.banner.spectrum.shimmerstone.blue": "파란색 미광석", + "block.minecraft.banner.spectrum.shimmerstone.brown": "갈색 미광석", + "block.minecraft.banner.spectrum.shimmerstone.cyan": "청록색 미광석", + "block.minecraft.banner.spectrum.shimmerstone.gray": "회색 미광석", + "block.minecraft.banner.spectrum.shimmerstone.green": "초록색 미광석", + "block.minecraft.banner.spectrum.shimmerstone.light_blue": "하늘색 미광석", + "block.minecraft.banner.spectrum.shimmerstone.light_gray": "회백색 미광석", + "block.minecraft.banner.spectrum.shimmerstone.lime": "연두색 미광석", + "block.minecraft.banner.spectrum.shimmerstone.magenta": "자홍색 미광석", + "block.minecraft.banner.spectrum.shimmerstone.orange": "주황색 미광석", + "block.minecraft.banner.spectrum.shimmerstone.pink": "분홍색 미광석", + "block.minecraft.banner.spectrum.shimmerstone.purple": "보라색 미광석", + "block.minecraft.banner.spectrum.shimmerstone.red": "빨간색 미광석", + "block.minecraft.banner.spectrum.shimmerstone.white": "하얀색 미광석", + "block.minecraft.banner.spectrum.shimmerstone.yellow": "노란색 미광석", + "block.minecraft.banner.spectrum.vegetal.black": "검은색 베지탈", + "block.minecraft.banner.spectrum.vegetal.blue": "파란색 베지탈", + "block.minecraft.banner.spectrum.vegetal.brown": "갈색 베지탈", + "block.minecraft.banner.spectrum.vegetal.cyan": "청록색 베지탈", + "block.minecraft.banner.spectrum.vegetal.gray": "회색 베지탈", + "block.minecraft.banner.spectrum.vegetal.green": "초록색 베지탈", + "block.minecraft.banner.spectrum.vegetal.light_blue": "하늘색 베지탈", + "block.minecraft.banner.spectrum.vegetal.light_gray": "회백색 베지탈", + "block.minecraft.banner.spectrum.vegetal.lime": "연두색 베지탈", + "block.minecraft.banner.spectrum.vegetal.magenta": "자홍색 베지탈", + "block.minecraft.banner.spectrum.vegetal.orange": "주황색 베지탈", + "block.minecraft.banner.spectrum.vegetal.pink": "분홍색 베지탈", + "block.minecraft.banner.spectrum.vegetal.purple": "보라색 베지탈", + "block.minecraft.banner.spectrum.vegetal.red": "빨간색 베지탈", + "block.minecraft.banner.spectrum.vegetal.white": "하얀색 베지탈", + "block.minecraft.banner.spectrum.vegetal.yellow": "노란색 베지탈", + "block.minecraft.banner.spectrum.astrologer.black": "검은색 점성술사", + "block.minecraft.banner.spectrum.astrologer.blue": "파란색 점성술사", + "block.minecraft.banner.spectrum.astrologer.brown": "갈색 점성술사", + "block.minecraft.banner.spectrum.astrologer.cyan": "청록색 점성술사", + "block.minecraft.banner.spectrum.astrologer.gray": "회색 점성술사", + "block.minecraft.banner.spectrum.astrologer.green": "초록색 점성술사", + "block.minecraft.banner.spectrum.astrologer.light_blue": "하늘색 점성술사", + "block.minecraft.banner.spectrum.astrologer.light_gray": "회백색 점성술사", + "block.minecraft.banner.spectrum.astrologer.lime": "연두색 점성술사", + "block.minecraft.banner.spectrum.astrologer.magenta": "자홍색 점성술사", + "block.minecraft.banner.spectrum.astrologer.orange": "주황색 점성술사", + "block.minecraft.banner.spectrum.astrologer.pink": "분홍색 점성술사", + "block.minecraft.banner.spectrum.astrologer.purple": "보라색 점성술사", + "block.minecraft.banner.spectrum.astrologer.red": "빨간색 점성술사", + "block.minecraft.banner.spectrum.astrologer.white": "하얀색 점성술사", + "block.minecraft.banner.spectrum.astrologer.yellow": "노란색 점성술사", + "block.minecraft.banner.spectrum.velvet_astrologer.black": "검은색 벨벳 점성술사", + "block.minecraft.banner.spectrum.velvet_astrologer.blue": "파란색 벨벳 점성술사", + "block.minecraft.banner.spectrum.velvet_astrologer.brown": "갈색 벨벳 점성술사", + "block.minecraft.banner.spectrum.velvet_astrologer.cyan": "청록색 벨벳 점성술사", + "block.minecraft.banner.spectrum.velvet_astrologer.gray": "회색 벨벳 점성술사", + "block.minecraft.banner.spectrum.velvet_astrologer.green": "초록색 벨벳 점성술사", + "block.minecraft.banner.spectrum.velvet_astrologer.light_blue": "하늘색 벨벳 점성술사", + "block.minecraft.banner.spectrum.velvet_astrologer.light_gray": "회백색 벨벳 점성술사", + "block.minecraft.banner.spectrum.velvet_astrologer.lime": "연두색 벨벳 점성술사", + "block.minecraft.banner.spectrum.velvet_astrologer.magenta": "자홍색 벨벳 점성술사", + "block.minecraft.banner.spectrum.velvet_astrologer.orange": "주황색 벨벳 점성술사", + "block.minecraft.banner.spectrum.velvet_astrologer.pink": "분홍색 벨벳 점성술사", + "block.minecraft.banner.spectrum.velvet_astrologer.purple": "보라색 벨벳 점성술사", + "block.minecraft.banner.spectrum.velvet_astrologer.red": "빨간색 벨벳 점성술사", + "block.minecraft.banner.spectrum.velvet_astrologer.white": "하얀색 벨벳 점성술사", + "block.minecraft.banner.spectrum.velvet_astrologer.yellow": "노란색 벨벳 점성술사", + "block.minecraft.banner.spectrum.poisonbloom.black": "검은색 맹독꽃", + "block.minecraft.banner.spectrum.poisonbloom.blue": "파란색 맹독꽃", + "block.minecraft.banner.spectrum.poisonbloom.brown": "갈색 맹독꽃", + "block.minecraft.banner.spectrum.poisonbloom.cyan": "청록색 맹독꽃", + "block.minecraft.banner.spectrum.poisonbloom.gray": "회색 맹독꽃", + "block.minecraft.banner.spectrum.poisonbloom.green": "초록색 맹독꽃", + "block.minecraft.banner.spectrum.poisonbloom.light_blue": "하늘색 맹독꽃", + "block.minecraft.banner.spectrum.poisonbloom.light_gray": "회백색 맹독꽃", + "block.minecraft.banner.spectrum.poisonbloom.lime": "연두색 맹독꽃", + "block.minecraft.banner.spectrum.poisonbloom.magenta": "자홍색 맹독꽃", + "block.minecraft.banner.spectrum.poisonbloom.orange": "주황색 맹독꽃", + "block.minecraft.banner.spectrum.poisonbloom.pink": "분홍색 맹독꽃", + "block.minecraft.banner.spectrum.poisonbloom.purple": "보라색 맹독꽃", + "block.minecraft.banner.spectrum.poisonbloom.red": "빨간색 맹독꽃", + "block.minecraft.banner.spectrum.poisonbloom.white": "하얀색 맹독꽃", + "block.minecraft.banner.spectrum.poisonbloom.yellow": "노란색 맹독꽃", + "block.minecraft.banner.spectrum.deep_light.black": "검은색 깊은 빛", + "block.minecraft.banner.spectrum.deep_light.blue": "파란색 깊은 빛", + "block.minecraft.banner.spectrum.deep_light.brown": "갈색 깊은 빛", + "block.minecraft.banner.spectrum.deep_light.cyan": "청록색 깊은 빛", + "block.minecraft.banner.spectrum.deep_light.gray": "회색 깊은 빛", + "block.minecraft.banner.spectrum.deep_light.green": "초록색 깊은 빛", + "block.minecraft.banner.spectrum.deep_light.light_blue": "하늘색 깊은 빛", + "block.minecraft.banner.spectrum.deep_light.light_gray": "회백색 깊은 빛", + "block.minecraft.banner.spectrum.deep_light.lime": "연두색 깊은 빛", + "block.minecraft.banner.spectrum.deep_light.magenta": "자홍색 깊은 빛", + "block.minecraft.banner.spectrum.deep_light.orange": "주황색 깊은 빛", + "block.minecraft.banner.spectrum.deep_light.pink": "분홍색 깊은 빛", + "block.minecraft.banner.spectrum.deep_light.purple": "보라색 깊은 빛", + "block.minecraft.banner.spectrum.deep_light.red": "빨간색 깊은 빛", + "block.minecraft.banner.spectrum.deep_light.white": "하얀색 깊은 빛", + "block.minecraft.banner.spectrum.deep_light.yellow": "노란색 깊은 빛", + + "block.spectrum.abyssal_vines": "심연의 덩굴", + "block.spectrum.allay_head": "알레이 머리", + "block.spectrum.armadillo_head": "아르마딜로 머리", + "block.spectrum.breeze_head": "브리즈 머리", + "block.spectrum.bogged_head": "보그드 머리", + "block.spectrum.marrow_head": "말로우 머리", + "block.spectrum.splinterspawn_head": "가시파편충 머리", + "block.spectrum.aloe": "알로에", + "block.spectrum.amaranth": "아마란스", + "block.spectrum.amaranth_bushel": "아마란스 덤불", + "block.spectrum.amethyst_basalt_light": "자수정 현무암 광원", + "block.spectrum.amethyst_calcite_light": "자수정 방해석 광원", + "block.spectrum.amethyst_chime": "자수정 차임", + "block.spectrum.amethyst_chiseled_basalt": "조각된 자수정 현무암", + "block.spectrum.amethyst_chiseled_calcite": "조각된 자수정 방해석", + "block.spectrum.amethyst_glass": "자수정 유리", + "block.spectrum.amethyst_glass_pane": "자수정 유리판", + "block.spectrum.amethyst_ore": "자수정 광석", + "block.spectrum.amethyst_powder_block": "자수정 가루 블록", + "block.spectrum.amethyst_semi_permeable_glass": "반투과성 자수정 유리", + "block.spectrum.polished_amethyst": "윤나는 자수정", + "block.spectrum.amethyst_pillar": "자수정 기둥", + "block.spectrum.amethyst_pylon": "자수정 수정탑", + "block.spectrum.citrine_pylon": "황수정 수정탑", + "block.spectrum.topaz_pylon": "토파즈 수정탑", + "block.spectrum.onyx_pylon": "오닉스 수정탑", + "block.spectrum.moonstone_pylon": "월장석 수정탑", + "block.spectrum.amphora": "암포라", + "block.spectrum.ancient_chiseled_polished_blackslag": "고대의 조각된 윤나는 흑작암", + "block.spectrum.andesite_shimmerstone_light": "안산암 미광석 광원", + "block.spectrum.apricotti": "아프리코트", + "block.spectrum.ash": "재", + "block.spectrum.ash_pile": "재 더미", + "block.spectrum.ashen_blackslag": "잿더미 흑작암", + "block.spectrum.attached_glistering_melon_stem": "반짝이는 수박 줄기", + "block.spectrum.axolotl_blue_head": "파란색 아홀로틀 머리", + "block.spectrum.axolotl_cyan_head": "청록색 아홀로틀 머리", + "block.spectrum.axolotl_gold_head": "노란색 아홀로틀 머리", + "block.spectrum.axolotl_idol": "은밀한 우상", + "block.spectrum.axolotl_leucistic_head": "분홍색 아홀로틀 머리", + "block.spectrum.axolotl_wild_head": "갈색 아홀로틀 머리", + "block.spectrum.raw_azurite_block": "남동석 원석 블록", + "block.spectrum.azurite_block": "순수한 남동석 블록", + "block.spectrum.azurite_cluster": "남동석 군집", + "block.spectrum.azurite_ore": "남동석 광석", + "block.spectrum.basal_marble": "기저 대리석", + "block.spectrum.basal_marble_brick_slab": "기저 대리석 벽돌 반 블록", + "block.spectrum.basal_marble_brick_stairs": "기저 대리석 벽돌 계단", + "block.spectrum.basal_marble_brick_wall": "기저 대리석 벽돌 담장", + "block.spectrum.basal_marble_bricks": "기저 대리석 벽돌", + "block.spectrum.basal_marble_pillar": "기저 대리석 기둥", + "block.spectrum.basal_marble_slab": "기저 대리석 반 블록", + "block.spectrum.basal_marble_stairs": "기저 대리석 계단", + "block.spectrum.basal_marble_tile_slab": "기저 대리석 타일 반 블록", + "block.spectrum.basal_marble_tile_stairs": "기저 대리석 타일 계단", + "block.spectrum.basal_marble_tile_wall": "기저 대리석 타일 담장", + "block.spectrum.basal_marble_tiles": "기저 대리석 타일", + "block.spectrum.basal_marble_wall": "기저 대리석 담장", + "block.spectrum.longing_chimera": "키메라", + "block.spectrum.longing_chimera.tooltip": "작자 미상 – 갈망", + "block.spectrum.basalt_brick_slab": "현무암 벽돌 반 블록", + "block.spectrum.basalt_brick_stairs": "현무암 벽돌 계단", + "block.spectrum.basalt_brick_wall": "현무암 벽돌 담장", + "block.spectrum.basalt_bricks": "윤나는 현무암 벽돌", + "block.spectrum.basalt_shimmerstone_light": "현무암 미광석 광원", + "block.spectrum.basalt_tile_slab": "현무암 타일 반 블록", + "block.spectrum.basalt_tile_stairs": "현무암 타일 계단", + "block.spectrum.basalt_tile_wall": "현무암 타일 담장", + "block.spectrum.basalt_tiles": "현무암 타일", + "block.spectrum.bat_head": "박쥐 머리", + "block.spectrum.bat_idol": "날렵한 우상", + "block.spectrum.bedrock_anvil": "기반암 모루", + "block.spectrum.bedrock_dust_block": "기반암 가루 블록", + "block.spectrum.bee_head": "꿀벌 머리", + "block.spectrum.bee_idol": "성실한 우상", + "block.spectrum.bismuth_block": "비스무트 블록", + "block.spectrum.bismuth_cluster": "비스무트 군집", + "block.spectrum.black_block": "검은색 블록", + "block.spectrum.black_button": "검은색 버튼", + "block.spectrum.black_chiseled_preservation_stone": "검은색 조각된 보존석", + "block.spectrum.black_fence": "검은색 울타리", + "block.spectrum.black_fence_gate": "검은색 울타리 문", + "block.spectrum.black_glowblock": "검은색 발광 블록", + "block.spectrum.black_hole_chest": "블랙홀 상자", + "block.spectrum.black_lamp": "검은색 조명", + "block.spectrum.black_leaves": "검은색 잎", + "block.spectrum.black_log": "검은색 원목", + "block.spectrum.black_materia": "검은 물질", + "block.spectrum.black_planks": "검은색 판자", + "block.spectrum.black_pressure_plate": "검은색 압력판", + "block.spectrum.black_sapling": "검은색 묘목", + "block.spectrum.black_slab": "검은색 반 블록", + "block.spectrum.black_sludge": "검은색 진흙", + "block.spectrum.black_spirit_sallow_vines_body": "검은색 영혼버들 덩굴", + "block.spectrum.black_spirit_sallow_vines_head": "검은색 영혼버들 덩굴", + "block.spectrum.black_spore_blossom": "검은색 포자 꽃", + "block.spectrum.black_stairs": "검은색 계단", + "block.spectrum.black_wood": "검은색 나무", + "block.spectrum.blackslag": "흑작암", + "block.spectrum.blackslag_amethyst_ore": "흑작암 자수정 광석", + "block.spectrum.blackslag_azurite_ore": "흑작암 남동석 광석", + "block.spectrum.blackslag_brick_slab": "흑작암 벽돌 반 블록", + "block.spectrum.blackslag_brick_stairs": "흑작암 벽돌 계단", + "block.spectrum.blackslag_brick_wall": "흑작암 벽돌 담장", + "block.spectrum.blackslag_bricks": "흑작암 벽돌", + "block.spectrum.blackslag_citrine_ore": "흑작암 황수정 광석", + "block.spectrum.blackslag_coal_ore": "흑작암 석탄 광석", + "block.spectrum.blackslag_copper_ore": "흑작암 구리 광석", + "block.spectrum.blackslag_diamond_ore": "흑작암 다이아몬드 광석", + "block.spectrum.blackslag_emerald_ore": "흑작암 에메랄드 광석", + "block.spectrum.blackslag_gold_ore": "흑작암 금 광석", + "block.spectrum.blackslag_iron_ore": "흑작암 철 광석", + "block.spectrum.blackslag_lapis_ore": "흑작암 청금석 광석", + "block.spectrum.blackslag_malachite_ore": "흑작암 공작석 광석", + "block.spectrum.blackslag_moonstone_ore": "흑작암 월장석 광석", + "block.spectrum.blackslag_onyx_ore": "흑작암 오닉스 광석", + "block.spectrum.blackslag_redstone_ore": "흑작암 레드스톤 광석", + "block.spectrum.blackslag_shimmerstone_light": "흑작암 미광석 광원", + "block.spectrum.blackslag_shimmerstone_ore": "흑작암 미광석 광석", + "block.spectrum.blackslag_slab": "흑작암 반 블록", + "block.spectrum.blackslag_stairs": "흑작암 계단", + "block.spectrum.blackslag_tile_slab": "흑작암 타일 반 블록", + "block.spectrum.blackslag_tile_stairs": "흑작암 타일 계단", + "block.spectrum.blackslag_tile_wall": "흑작암 타일 담장", + "block.spectrum.blackslag_tiles": "흑작암 타일", + "block.spectrum.blackslag_topaz_ore": "흑작암 토파즈 광석", + "block.spectrum.blackslag_wall": "흑작암 담장", + "block.spectrum.manxi": "별지기 만시", + "block.spectrum.manxi.nope": "강력한 마법이 당신을 밀어냅니다", + "block.spectrum.blaze_head": "블레이즈 머리", + "block.spectrum.blaze_idol": "신랄한 우상", + "block.spectrum.blazing_crystal": "타오르는 결정", + "block.spectrum.block_breaker": "블록 파괴기", + "block.spectrum.block_detector": "블록 감지기", + "block.spectrum.block_flooder": "블록 범람기", + "block.spectrum.block_placer": "블록 배치기", + "block.spectrum.blood_orchid": "혈난초", + "block.spectrum.raw_bloodstone_block": "혈석 원석 블록", + "block.spectrum.bloodstone_block": "순수한 혈석 블록", + "block.spectrum.bloodstone_cluster": "혈석 군집", + "block.spectrum.blue_block": "파란색 블록", + "block.spectrum.blue_button": "파란색 버튼", + "block.spectrum.blue_chiseled_preservation_stone": "파란색 조각된 보존석", + "block.spectrum.blue_fence": "파란색 울타리", + "block.spectrum.blue_fence_gate": "파란색 울타리 문", + "block.spectrum.blue_glowblock": "파란색 발광 블록", + "block.spectrum.blue_lamp": "파란색 조명", + "block.spectrum.blue_leaves": "파란색 잎", + "block.spectrum.blue_log": "파란색 원목", + "block.spectrum.blue_planks": "파란색 판자", + "block.spectrum.blue_pressure_plate": "파란색 압력판", + "block.spectrum.blue_sapling": "파란색 묘목", + "block.spectrum.blue_slab": "파란색 반 블록", + "block.spectrum.blue_spore_blossom": "파란색 포자 꽃", + "block.spectrum.blue_stairs": "파란색 계단", + "block.spectrum.blue_wood": "파란색 나무", + "block.spectrum.bone_ash_brick_slab": "골회 벽돌 반 블록", + "block.spectrum.bone_ash_brick_stairs": "골회 벽돌 계단", + "block.spectrum.bone_ash_brick_wall": "골회 벽돌 담장", + "block.spectrum.bone_ash_bricks": "골회 벽돌", + "block.spectrum.bone_ash_shingles": "골회 지붕널", + "block.spectrum.bone_ash_tile_slab": "골회 타일 반 블록", + "block.spectrum.bone_ash_tile_stairs": "골회 타일 계단", + "block.spectrum.bone_ash_tile_wall": "골회 타일 담장", + "block.spectrum.bone_ash_tiles": "골회 타일", + "block.spectrum.bonemealing_idol.tooltip": "§7주변 식물에 비료를 줍니다", + "block.spectrum.bottomless_bundle": "바닥없는 꾸러미", + "block.spectrum.bristle_sprouts": "가시털 새싹", + "block.spectrum.brown_block": "갈색 블록", + "block.spectrum.brown_button": "갈색 버튼", + "block.spectrum.brown_chiseled_preservation_stone": "갈색 조각된 보존석", + "block.spectrum.brown_fence": "갈색 울타리", + "block.spectrum.brown_fence_gate": "갈색 울타리 문", + "block.spectrum.brown_glowblock": "갈색 발광 블록", + "block.spectrum.brown_lamp": "갈색 조명", + "block.spectrum.brown_leaves": "갈색 잎", + "block.spectrum.brown_log": "갈색 원목", + "block.spectrum.brown_planks": "갈색 판자", + "block.spectrum.brown_pressure_plate": "갈색 압력판", + "block.spectrum.brown_sapling": "갈색 묘목", + "block.spectrum.brown_slab": "갈색 반 블록", + "block.spectrum.brown_spore_blossom": "갈색 포자 꽃", + "block.spectrum.brown_stairs": "갈색 계단", + "block.spectrum.brown_wood": "갈색 나무", + "block.spectrum.budding_citrine": "싹 틔우는 황수정", + "block.spectrum.budding_moonstone": "싹 틔우는 월장석", + "block.spectrum.budding_onyx": "싹 틔우는 오닉스", + "block.spectrum.budding_topaz": "싹 틔우는 토파즈", + "block.spectrum.calcite_brick_slab": "방해석 벽돌 반 블록", + "block.spectrum.calcite_brick_stairs": "방해석 벽돌 계단", + "block.spectrum.calcite_brick_wall": "방해석 벽돌 담장", + "block.spectrum.calcite_bricks": "윤나는 방해석 벽돌", + "block.spectrum.calcite_shimmerstone_light": "방해석 미광석 광원", + "block.spectrum.calcite_slab": "방해석 반 블록", + "block.spectrum.calcite_stairs": "방해석 계단", + "block.spectrum.calcite_tile_slab": "방해석 타일 반 블록", + "block.spectrum.calcite_tile_stairs": "방해석 타일 계단", + "block.spectrum.calcite_tile_wall": "방해석 타일 담장", + "block.spectrum.calcite_tiles": "방해석 타일", + "block.spectrum.calcite_wall": "방해석 담장", + "block.spectrum.camel_head": "낙타 머리", + "block.spectrum.cat_head": "고양이 머리", + "block.spectrum.cat_idol": "변덕스러운 우상", + "block.spectrum.cave_spider_head": "동굴 거미 머리", + "block.spectrum.certus_quartz_cluster": "서투스 석영 군집", + "block.spectrum.chestnut_noxcap_block": "밤색 어스름갓 블록", + "block.spectrum.chestnut_noxcap_gills": "밤색 어스름갓 주름", + "block.spectrum.chestnut_noxcap_hyphae": "밤색 어스름갓 균사", + "block.spectrum.chestnut_noxcap_stem": "밤색 어스름갓 줄기", + "block.spectrum.chestnut_noxshroom": "밤색 어스름버섯", + "block.spectrum.chestnut_noxwood_amphora": "밤색 어스름나무 암포라", + "block.spectrum.chestnut_noxwood_pillar": "밤색 어스름나무 기둥", + "block.spectrum.chestnut_noxwood_button": "밤색 어스름나무 버튼", + "block.spectrum.chestnut_noxwood_door": "밤색 어스름나무 문", + "block.spectrum.chestnut_noxwood_fence": "밤색 어스름나무 울타리", + "block.spectrum.chestnut_noxwood_fence_gate": "밤색 어스름나무 울타리 문", + "block.spectrum.chestnut_noxwood_lantern": "밤색 어스름나무 랜턴", + "block.spectrum.chestnut_noxwood_lamp": "밤색 어스름나무 조명", + "block.spectrum.chestnut_noxwood_light": "밤색 어스름나무 광원", + "block.spectrum.chestnut_noxwood_planks": "밤색 어스름나무 판자", + "block.spectrum.chestnut_noxwood_pressure_plate": "밤색 어스름나무 압력판", + "block.spectrum.chestnut_noxwood_slab": "밤색 어스름나무 반 블록", + "block.spectrum.chestnut_noxwood_stairs": "밤색 어스름나무 계단", + "block.spectrum.chestnut_noxwood_trapdoor": "밤색 어스름나무 다락문", + "block.spectrum.chicken_head": "닭 머리", + "block.spectrum.chicken_idol": "자만스러운 우상", + "block.spectrum.chiseled_polished_basalt": "조각된 윤나는 현무암", + "block.spectrum.chiseled_polished_blackslag": "조각된 윤나는 흑작암", + "block.spectrum.chiseled_polished_calcite": "조각된 윤나는 방해석", + "block.spectrum.cinderhearth": "잿불화로", + "block.spectrum.citrine_basalt_light": "황수정 현무암 광원", + "block.spectrum.citrine_block": "황수정 블록", + "block.spectrum.citrine_calcite_light": "황수정 방해석 광원", + "block.spectrum.citrine_chime": "황수정 차임", + "block.spectrum.citrine_chiseled_basalt": "조각된 황수정 현무암", + "block.spectrum.citrine_chiseled_calcite": "조각된 황수정 방해석", + "block.spectrum.citrine_cluster": "황수정 군집", + "block.spectrum.citrine_glass": "황수정 유리", + "block.spectrum.citrine_glass_pane": "황수정 유리판", + "block.spectrum.citrine_ore": "황수정 광석", + "block.spectrum.citrine_powder_block": "황수정 가루 블록", + "block.spectrum.citrine_semi_permeable_glass": "반투과성 황수정 유리", + "block.spectrum.polished_citrine": "윤나는 황수정", + "block.spectrum.citrine_pillar": "황수정 기둥", + "block.spectrum.clover": "클로버", + "block.spectrum.coal_cluster": "석탄 군집", + "block.spectrum.cobbled_blackslag": "흑작암 조약돌", + "block.spectrum.cobbled_blackslag_slab": "흑작암 조약돌 반 블록", + "block.spectrum.cobbled_blackslag_stairs": "흑작암 조약돌 계단", + "block.spectrum.cobbled_blackslag_wall": "흑작암 조약돌 담장", + "block.spectrum.color_picker": "색상 추출기", + "block.spectrum.color_picker.tooltip": "§b안§d료§f를 §e잉§3크§f로 변환합니다", + "block.spectrum.colorful_shooting_star": "다채로운 별똥별", + "block.spectrum.compacting_chest": "압축 상자", + "block.spectrum.compacting_chest.toggle_crafting_mode": "조합 모드 전환", + "block.spectrum.connection_node": "§7파스텔 네트워크 연결 노드", + "block.spectrum.connection_node.tooltip": "네트워크의 범위를 확장합니다", + "block.spectrum.copper_cluster": "구리 군집", + "block.spectrum.courier_statue": "고대 석상", + "block.spectrum.cod_head": "대구 머리", + "block.spectrum.cow_head": "소 머리", + "block.spectrum.cow_idol": "평화로운 우상", + "block.spectrum.cracked_basalt_bricks": "금 간 현무암 벽돌", + "block.spectrum.cracked_basalt_tiles": "금 간 현무암 타일", + "block.spectrum.cracked_blackslag_bricks": "금 간 흑작암 벽돌", + "block.spectrum.cracked_blackslag_tiles": "금 간 흑작암 타일", + "block.spectrum.cracked_calcite_bricks": "금 간 방해석 벽돌", + "block.spectrum.cracked_calcite_tiles": "금 간 방해석 타일", + "block.spectrum.cracked_dragonbone": "금 간 용골", + "block.spectrum.cracked_end_portal_frame": "금 간 엔드 차원문 틀", + "block.spectrum.creative_particle_spawner": "크리에이티브 입자 생성기", + "block.spectrum.creative_particle_spawner.tooltip": "파괴 불가 – 레드스톤이 필요하지 않습니다", + "block.spectrum.creeper_idol": "기어다니는 우상", + "block.spectrum.crystal_apothecary": "수정 채집장", + "block.spectrum.crystal_apothecary.owner": "%s의 수정 채집장", + "block.spectrum.crystal_apothecary.tooltip": "정동 안에 배치하여 보석 조각을 수확합니다", + "block.spectrum.crystallarieum": "결정생성기", + "block.spectrum.cyan_block": "청록색 블록", + "block.spectrum.cyan_button": "청록색 버튼", + "block.spectrum.cyan_chiseled_preservation_stone": "청록색 조각된 보존석", + "block.spectrum.cyan_fence": "청록색 울타리", + "block.spectrum.cyan_fence_gate": "청록색 울타리 문", + "block.spectrum.cyan_glowblock": "청록색 발광 블록", + "block.spectrum.cyan_lamp": "청록색 조명", + "block.spectrum.cyan_leaves": "청록색 잎", + "block.spectrum.cyan_log": "청록색 원목", + "block.spectrum.cyan_planks": "청록색 판자", + "block.spectrum.cyan_pressure_plate": "청록색 압력판", + "block.spectrum.cyan_sapling": "청록색 묘목", + "block.spectrum.cyan_slab": "청록색 반 블록", + "block.spectrum.cyan_spirit_sallow_vines_body": "청록색 영혼버들 덩굴", + "block.spectrum.cyan_spirit_sallow_vines_head": "청록색 영혼버들 덩굴", + "block.spectrum.cyan_spore_blossom": "청록색 포자 꽃", + "block.spectrum.cyan_stairs": "청록색 계단", + "block.spectrum.cyan_wood": "청록색 나무", + "block.spectrum.decay_away": "부패 제거", + "block.spectrum.transient_light": "일시적인 미광석 광원", + "block.spectrum.deeper_down_portal": "지저 너머 차원문", + "block.spectrum.deepslate_amethyst_ore": "심층암 자수정 광석", + "block.spectrum.deepslate_azurite_ore": "심층암 남동석 광석", + "block.spectrum.deepslate_citrine_ore": "심층암 황수정 광석", + "block.spectrum.deepslate_malachite_ore": "심층암 공작석 광석", + "block.spectrum.deepslate_moonstone_ore": "심층암 월장석 광석", + "block.spectrum.deepslate_onyx_ore": "심층암 오닉스 광석", + "block.spectrum.deepslate_shimmerstone_light": "심층암 미광석 광원", + "block.spectrum.deepslate_shimmerstone_ore": "심층암 미광석 광석", + "block.spectrum.deepslate_topaz_ore": "심층암 토파즈 광석", + "block.spectrum.diamond_cluster": "다이아몬드 군집", + "block.spectrum.dike_chiseled_preservation_stone": "방벽이 조각된 보존석", + "block.spectrum.dream_chiseled_preservation_stone": "몽환이 조각된 보존석", + "block.spectrum.deep_light_chiseled_preservation_stone": "깊은 빛이 조각된 보존석", + "block.spectrum.deep_light_chiseled_preservation_stone.puzzle0": "이름 없는 점성술사를 기리며", + "block.spectrum.deep_light_chiseled_preservation_stone.puzzle1": "도둑. 스승. 꿈꾸는 자.", + "block.spectrum.deep_light_chiseled_preservation_stone.puzzle2": "에테르의 축복을 두 번이나 받은 그는 더 깊은 진리를 좇았다.", + "block.spectrum.deep_light_chiseled_preservation_stone.puzzle3": "깊은 빛을 쫓아, 그는 황량한 바다로 항해했다.", + "block.spectrum.deep_light_chiseled_preservation_stone.puzzle4": "깨달음.", + "block.spectrum.deep_light_chiseled_preservation_stone.puzzle5": "너무 깊이 잠수했다.", + "block.spectrum.deep_light_chiseled_preservation_stone.puzzle6": "끝없는 바다에서 길을 잃은 영혼.", + "block.spectrum.deep_light_chiseled_preservation_stone.puzzle7": "단지 진리를 위해 길을 잃을 위험을 감수하겠는가?", + "block.spectrum.deep_light_chiseled_preservation_stone.puzzle8": "그저 보이지 않는 것을 보기 위해서?", + "block.spectrum.dike_gate": "방벽 차단막", + "block.spectrum.dream_gate": "몽환 차단막", + "block.spectrum.dike_gate_fountain": "방벽 차단막 분출기", + "block.spectrum.diorite_shimmerstone_light": "섬록암 미광석 광원", + "block.spectrum.dolphin_head": "돌고래 머리", + "block.spectrum.donkey_head": "당나귀 머리", + "block.spectrum.doombloom": "파멸꽃", + "block.spectrum.downstone": "하층석", + "block.spectrum.dragonbone": "용골", + "block.spectrum.dragonrot": "용부액", + "block.spectrum.drowned_head": "드라운드 머리", + "block.spectrum.ebony_noxcap_block": "흑단 어스름갓 블록", + "block.spectrum.ebony_noxcap_gills": "흑단 어스름갓 주름", + "block.spectrum.ebony_noxcap_hyphae": "흑단 어스름갓 균사", + "block.spectrum.ebony_noxcap_stem": "흑단 어스름갓 줄기", + "block.spectrum.ebony_noxshroom": "흑단 어스름버섯", + "block.spectrum.ebony_noxwood_amphora": "흑단 어스름나무 암포라", + "block.spectrum.ebony_noxwood_pillar": "흑단 어스름나무 기둥", + "block.spectrum.ebony_noxwood_button": "흑단 어스름나무 버튼", + "block.spectrum.ebony_noxwood_door": "흑단 어스름나무 문", + "block.spectrum.ebony_noxwood_fence": "흑단 어스름나무 울타리", + "block.spectrum.ebony_noxwood_fence_gate": "흑단 어스름나무 울타리 문", + "block.spectrum.ebony_noxwood_lantern": "흑단 어스름나무 랜턴", + "block.spectrum.ebony_noxwood_lamp": "흑단 어스름나무 조명", + "block.spectrum.ebony_noxwood_light": "흑단 어스름나무 광원", + "block.spectrum.ebony_noxwood_planks": "흑단 어스름나무 판자", + "block.spectrum.ebony_noxwood_pressure_plate": "흑단 어스름나무 압력판", + "block.spectrum.ebony_noxwood_slab": "흑단 어스름나무 반 블록", + "block.spectrum.ebony_noxwood_stairs": "흑단 어스름나무 계단", + "block.spectrum.ebony_noxwood_trapdoor": "흑단 어스름나무 다락문", + "block.spectrum.echo_cluster": "메아리 군집", + "block.spectrum.echolocating_idol.tooltip": "§7반경 %d 블록 내의 생물을 음파 탐지로 찾습니다", + "block.spectrum.resplendent_bed": "찬란한 침대", + "block.spectrum.resplendent_block": "찬란한 블록", + "block.spectrum.resplendent_carpet": "찬란한 양탄자", + "block.spectrum.resplendent_cushion": "찬란한 쿠션", + "block.spectrum.egg_laying_wooly_pig_head": "알 낳는 양털 돼지 머리", + "block.spectrum.elder_guardian_head": "엘더 가디언 머리", + "block.spectrum.emerald_cluster": "에메랄드 군집", + "block.spectrum.enchanter": "마법 부여기", + "block.spectrum.ender_dragon_idol": "강력한 우상", + "block.spectrum.ender_dropper": "엔더 공급기", + "block.spectrum.ender_dropper.owner": "%s의 엔더 공급기", + "block.spectrum.ender_glass": "엔더 유리", + "block.spectrum.ender_hopper": "엔더 호퍼", + "block.spectrum.ender_hopper.owner": "%s의 엔더 호퍼", + "block.spectrum.enderman_head": "엔더맨 머리", + "block.spectrum.enderman_idol": "이세계의 우상", + "block.spectrum.endermite_head": "엔더마이트 머리", + "block.spectrum.endermite_idol": "들쭉날쭉한 우상", + "block.spectrum.creature_detector": "생명체 감지기", + "block.spectrum.entity_summoning_idol.tooltip": "§7%s(을)를 소환합니다", + "block.spectrum.eraser_head": "말소자 허물", + "block.spectrum.ethereal_platform": "에테르 플랫폼", + "block.spectrum.evoker_head": "변명자 머리", + "block.spectrum.evoker_idol": "광신적인 우상", + "block.spectrum.explosion_idol.tooltip": "§7%d§7 블록 반경의 큰 폭발을 일으킵니다", + "block.spectrum.exposed_polished_shale_clay": "노출된 윤나는 셰일 점토", + "block.spectrum.exposed_polished_shale_clay_slab": "노출된 윤나는 셰일 점토 반 블록", + "block.spectrum.exposed_polished_shale_clay_stairs": "노출된 윤나는 셰일 점토 계단", + "block.spectrum.exposed_shale_clay": "노출된 셰일 점토", + "block.spectrum.exposed_shale_clay_brick_slab": "노출된 셰일 점토 벽돌 반 블록", + "block.spectrum.exposed_shale_clay_brick_stairs": "노출된 셰일 점토 벽돌 계단", + "block.spectrum.exposed_shale_clay_bricks": "노출된 셰일 점토 벽돌", + "block.spectrum.exposed_shale_clay_tile_slab": "노출된 셰일 점토 타일 반 블록", + "block.spectrum.exposed_shale_clay_tile_stairs": "노출된 셰일 점토 타일 계단", + "block.spectrum.exposed_shale_clay_tiles": "노출된 셰일 점토 타일", + "block.spectrum.fading": "쇠퇴", + "block.spectrum.failing": "결함", + "block.spectrum.fall_damage_negating_idol.tooltip": "§7착지 시 모든 낙하 피해를 무효화합니다", + "block.spectrum.fall_damage_negating_idol.tooltip2": "§7또한 일시적으로 낙하를 막아줍니다", + "block.spectrum.feeding_idol.tooltip": "§7바닥에 있는 먹이를 사용해 반경 %d§7 블록 내의 동물을 먹입니다", + "block.spectrum.fiery_shooting_star": "타오르는 별똥별", + "block.spectrum.firestarter_idol.tooltip": "§7불을 피우고 얼음을 녹입니다", + "block.spectrum.fish_idol": "사교적인 우상", + "block.spectrum.flowing_liquid_crystal": "액체 수정", + "block.spectrum.flowing_midnight_solution": "자정의 용액", + "block.spectrum.flowing_sludge": "진흙탕", + "block.spectrum.fluix_cluster": "액정 수정 군집", + "block.spectrum.forfeiture": "상실", + "block.spectrum.four_leaf_clover": "네잎클로버", + "block.spectrum.fox_arctic_head": "북극여우 머리", + "block.spectrum.fox_red_head": "여우 머리", + "block.spectrum.fox_idol": "교활한 우상", + "block.spectrum.freezing_idol.tooltip": "§7주변 블록을 얼립니다", + "block.spectrum.frog_cold_head": "추운 지방 개구리 머리", + "block.spectrum.frog_temperate_head": "따뜻한 지방 개구리 머리", + "block.spectrum.frog_warm_head": "더운 지방 개구리 머리", + "block.spectrum.frostbite_crystal": "동상의 결정", + "block.spectrum.fusion_shrine": "융합의 성소", + "block.spectrum.fusion_shrine_basalt": "융합의 성소", + "block.spectrum.fusion_shrine_calcite": "융합의 성소", + "block.spectrum.gather_node": "§8파스텔 네트워크 수집 노드", + "block.spectrum.gather_node.tooltip": "송신, 제공 및 저장 노드로부터 아이템을 수집합니다", + "block.spectrum.gemstone_shooting_star": "보석 별똥별", + "block.spectrum.ghast_head": "가스트 머리", + "block.spectrum.ghast_idol": "섬뜩한 우상", + "block.spectrum.giant_moss_ball": "거대한 마리모", + "block.spectrum.varia_sprout": "바리아 새싹", + "block.spectrum.glistering_melon": "반짝이는 수박", + "block.spectrum.glistering_melon_stem": "반짝이는 수박 줄기", + "block.spectrum.glistering_shooting_star": "반짝이는 별똥별", + "block.spectrum.globette_cluster": "글로벳 군집", + "block.spectrum.globette_end_cluster": "엔드 글로벳 군집", + "block.spectrum.globette_nether_cluster": "네더 글로벳 군집", + "block.spectrum.glow_squid_head": "발광 오징어 머리", + "block.spectrum.glow_squid_idol": "발광의 우상", + "block.spectrum.glowstone_cluster": "발광석 군집", + "block.spectrum.goat_head": "염소 머리", + "block.spectrum.goat_idol": "고집스러운 우상", + "block.spectrum.gold_cluster": "금 군집", + "block.spectrum.granite_shimmerstone_light": "화강암 미광석 광원", + "block.spectrum.gray_block": "회색 블록", + "block.spectrum.gray_button": "회색 버튼", + "block.spectrum.gray_chiseled_preservation_stone": "회색 조각된 보존석", + "block.spectrum.gray_fence": "회색 울타리", + "block.spectrum.gray_fence_gate": "회색 울타리 문", + "block.spectrum.gray_glowblock": "회색 발광 블록", + "block.spectrum.gray_lamp": "회색 조명", + "block.spectrum.gray_leaves": "회색 잎", + "block.spectrum.gray_log": "회색 원목", + "block.spectrum.gray_planks": "회색 판자", + "block.spectrum.gray_pressure_plate": "회색 압력판", + "block.spectrum.gray_sapling": "회색 묘목", + "block.spectrum.gray_slab": "회색 반 블록", + "block.spectrum.gray_spore_blossom": "회색 포자 꽃", + "block.spectrum.gray_stairs": "회색 계단", + "block.spectrum.gray_wood": "회색 나무", + "block.spectrum.green_block": "초록색 블록", + "block.spectrum.green_button": "초록색 버튼", + "block.spectrum.green_chiseled_preservation_stone": "초록색 조각된 보존석", + "block.spectrum.green_fence": "초록색 울타리", + "block.spectrum.green_fence_gate": "초록색 울타리 문", + "block.spectrum.green_glowblock": "초록색 발광 블록", + "block.spectrum.green_lamp": "초록색 조명", + "block.spectrum.green_leaves": "초록색 잎", + "block.spectrum.green_log": "초록색 원목", + "block.spectrum.green_planks": "초록색 판자", + "block.spectrum.green_pressure_plate": "초록색 압력판", + "block.spectrum.green_sapling": "초록색 묘목", + "block.spectrum.green_slab": "초록색 반 블록", + "block.spectrum.green_spore_blossom": "초록색 포자 꽃", + "block.spectrum.green_stairs": "초록색 계단", + "block.spectrum.green_wood": "초록색 나무", + "block.spectrum.guardian_head": "가디언 머리", + "block.spectrum.guardian_idol": "보호적인 우상", + "block.spectrum.heartbound_chest": "마음결속 상자", + "block.spectrum.heartbound_chest.owner": "%s의 마음결속 상자", + "block.spectrum.hoglin_head": "호글린 머리", + "block.spectrum.horse_head": "말 머리", + "block.spectrum.horse_idol": "우아한 우상", + "block.spectrum.hover_block": "부유 블록", + "block.spectrum.humming_bell": "음명방울", + "block.spectrum.hummingstone": "음명석", + "block.spectrum.hummingstone_glass": "음명석 유리", + "block.spectrum.hummingstone_glass_pane": "음명석 유리판", + "block.spectrum.husk_head": "허스크 머리", + "block.spectrum.illusioner_head": "환술사 머리", + "block.spectrum.illusioner_idol": "기만하는 우상", + "block.spectrum.incandescent_amalgam": "백열의 혼합물", + "block.spectrum.incandescent_amalgam.tooltip": "§6⚠§r 고위력 마법 폭발물, 취급 주의", + "block.spectrum.incandescent_amalgam.tooltip.preview": "시간이 지날수록 폭발력이 강해집니다", + "block.spectrum.incandescent_amalgam.tooltip_power": "폭발 위력: %d", + "block.spectrum.infested_blackslag": "벌레 먹은 흑작암", + "block.spectrum.splinterspawn_infested_pyrite": "가시파편충이 먹은 황철석", + "block.spectrum.splinterspawn_infested_shale_clay": "가시파편충이 먹은 셰일 점토", + "block.spectrum.insomnia_idol.tooltip": "§7불면증을 유발합니다", + "block.spectrum.invisible_wall": "투명 벽", + "block.spectrum.iron_cluster": "철 군집", + "block.spectrum.iron_golem_head": "철 골렘 머리", + "block.spectrum.item_bowl_basalt": "현무암 아이템 그릇", + "block.spectrum.item_bowl_calcite": "방해석 아이템 그릇", + "block.spectrum.preservation_item_bowl": "보존 아이템 그릇", + "block.spectrum.item_detector": "아이템 감지기", + "block.spectrum.item_roundel": "아이템 라운델", + "block.spectrum.ivory_noxcap_block": "상아색 어스름갓 블록", + "block.spectrum.ivory_noxcap_gills": "상아색 어스름갓 주름", + "block.spectrum.ivory_noxcap_hyphae": "상아색 어스름갓 균사", + "block.spectrum.ivory_noxcap_stem": "상아색 어스름갓 줄기", + "block.spectrum.ivory_noxshroom": "상아색 어스름버섯", + "block.spectrum.ivory_noxwood_amphora": "상아색 어스름나무 암포라", + "block.spectrum.ivory_noxwood_pillar": "상아색 어스름나무 기둥", + "block.spectrum.ivory_noxwood_button": "상아색 어스름나무 버튼", + "block.spectrum.ivory_noxwood_door": "상아색 어스름나무 문", + "block.spectrum.ivory_noxwood_fence": "상아색 어스름나무 울타리", + "block.spectrum.ivory_noxwood_fence_gate": "상아색 어스름나무 울타리 문", + "block.spectrum.ivory_noxwood_lantern": "상아색 어스름나무 랜턴", + "block.spectrum.ivory_noxwood_lamp": "상아색 어스름나무 조명", + "block.spectrum.ivory_noxwood_light": "상아색 어스름나무 광원", + "block.spectrum.ivory_noxwood_planks": "상아색 어스름나무 판자", + "block.spectrum.ivory_noxwood_pressure_plate": "상아색 어스름나무 압력판", + "block.spectrum.ivory_noxwood_slab": "상아색 어스름나무 반 블록", + "block.spectrum.ivory_noxwood_stairs": "상아색 어스름나무 계단", + "block.spectrum.ivory_noxwood_trapdoor": "상아색 어스름나무 다락문", + "block.spectrum.jade_vine_bulb": "비취 덩굴 구근", + "block.spectrum.jade_vine_petal_block": "비취 꽃잎 블록", + "block.spectrum.jade_vine_petal_carpet": "비취 꽃잎 양탄자", + "block.spectrum.jade_vine_roots": "비취 덩굴 뿌리", + "block.spectrum.jade_vines": "비취 덩굴", + "block.spectrum.jadeite_lotus_bulb": "경옥 연꽃 구근", + "block.spectrum.jadeite_lotus_flower": "경옥 연꽃", + "block.spectrum.jadeite_lotus_stem": "경옥 연꽃 줄기", + "block.spectrum.jadeite_petal_block": "경옥 꽃잎 블록", + "block.spectrum.jadeite_petal_carpet": "경옥 꽃잎 양탄자", + "block.spectrum.kindling_head": "불망울 머리", + "block.spectrum.knockback_idol.tooltip": "§7넉백을 일으킵니다", + "block.spectrum.lapis_cluster": "청금석 군집", + "block.spectrum.large_azurite_bud": "큰 남동석 봉오리", + "block.spectrum.large_bismuth_bud": "큰 비스무트 봉오리", + "block.spectrum.large_bloodstone_bud": "큰 혈석 봉오리", + "block.spectrum.large_certus_quartz_bud": "큰 서투스 석영 봉오리", + "block.spectrum.large_citrine_bud": "큰 황수정 봉오리", + "block.spectrum.large_coal_bud": "큰 석탄 봉오리", + "block.spectrum.large_copper_bud": "큰 구리 봉오리", + "block.spectrum.large_diamond_bud": "큰 다이아몬드 봉오리", + "block.spectrum.large_echo_bud": "큰 메아리 봉오리", + "block.spectrum.large_emerald_bud": "큰 에메랄드 봉오리", + "block.spectrum.large_fluix_bud": "큰 액정 수정 봉오리", + "block.spectrum.large_globette_bud": "큰 글로벳 봉오리", + "block.spectrum.large_globette_end_bud": "큰 엔드 글로벳 봉오리", + "block.spectrum.large_globette_nether_bud": "큰 네더 글로벳 봉오리", + "block.spectrum.large_glowstone_bud": "큰 발광석 봉오리", + "block.spectrum.large_gold_bud": "큰 금 봉오리", + "block.spectrum.large_iron_bud": "큰 철 봉오리", + "block.spectrum.large_lapis_bud": "큰 청금석 봉오리", + "block.spectrum.large_malachite_bud": "큰 공작석 봉오리", + "block.spectrum.large_moonstone_bud": "큰 월장석 봉오리", + "block.spectrum.large_netherite_scrap_bud": "큰 네더라이트 파편 봉오리", + "block.spectrum.large_onyx_bud": "큰 오닉스 봉오리", + "block.spectrum.large_prismarine_bud": "큰 프리즈머린 봉오리", + "block.spectrum.large_quartz_bud": "큰 석영 봉오리", + "block.spectrum.large_redstone_bud": "큰 레드스톤 봉오리", + "block.spectrum.large_topaz_bud": "큰 토파즈 봉오리", + "block.spectrum.large_zinc_bud": "큰 아연 봉오리", + "block.spectrum.lava_sponge": "용암 스펀지", + "block.spectrum.light_blue_block": "하늘색 블록", + "block.spectrum.light_blue_button": "하늘색 버튼", + "block.spectrum.light_blue_chiseled_preservation_stone": "하늘색 조각된 보존석", + "block.spectrum.light_blue_fence": "하늘색 울타리", + "block.spectrum.light_blue_fence_gate": "하늘색 울타리 문", + "block.spectrum.light_blue_glowblock": "하늘색 발광 블록", + "block.spectrum.light_blue_lamp": "하늘색 조명", + "block.spectrum.light_blue_leaves": "하늘색 잎", + "block.spectrum.light_blue_log": "하늘색 원목", + "block.spectrum.light_blue_planks": "하늘색 판자", + "block.spectrum.light_blue_pressure_plate": "하늘색 압력판", + "block.spectrum.light_blue_sapling": "하늘색 묘목", + "block.spectrum.light_blue_slab": "하늘색 반 블록", + "block.spectrum.light_blue_spore_blossom": "하늘색 포자 꽃", + "block.spectrum.light_blue_stairs": "하늘색 계단", + "block.spectrum.light_blue_wood": "하늘색 나무", + "block.spectrum.light_gray_block": "회백색 블록", + "block.spectrum.light_gray_button": "회백색 버튼", + "block.spectrum.light_gray_chiseled_preservation_stone": "회백색 조각된 보존석", + "block.spectrum.light_gray_fence": "회백색 울타리", + "block.spectrum.light_gray_fence_gate": "회백색 울타리 문", + "block.spectrum.light_gray_glowblock": "회백색 발광 블록", + "block.spectrum.light_gray_lamp": "회백색 조명", + "block.spectrum.light_gray_leaves": "회백색 잎", + "block.spectrum.light_gray_log": "회백색 원목", + "block.spectrum.light_gray_planks": "회백색 판자", + "block.spectrum.light_gray_pressure_plate": "회백색 압력판", + "block.spectrum.light_gray_sapling": "회백색 묘목", + "block.spectrum.light_gray_slab": "회백색 반 블록", + "block.spectrum.light_gray_spore_blossom": "회백색 포자 꽃", + "block.spectrum.light_gray_stairs": "회백색 계단", + "block.spectrum.light_gray_wood": "회백색 나무", + "block.spectrum.light_level_detector": "블록 빛 감지기", + "block.spectrum.lime_block": "연두색 블록", + "block.spectrum.lime_button": "연두색 버튼", + "block.spectrum.lime_chiseled_preservation_stone": "연두색 조각된 보존석", + "block.spectrum.lime_fence": "연두색 울타리", + "block.spectrum.lime_fence_gate": "연두색 울타리 문", + "block.spectrum.lime_glowblock": "연두색 발광 블록", + "block.spectrum.lime_lamp": "연두색 조명", + "block.spectrum.lime_leaves": "연두색 잎", + "block.spectrum.lime_log": "연두색 원목", + "block.spectrum.lime_planks": "연두색 판자", + "block.spectrum.lime_pressure_plate": "연두색 압력판", + "block.spectrum.lime_sapling": "연두색 묘목", + "block.spectrum.lime_slab": "연두색 반 블록", + "block.spectrum.lime_spore_blossom": "연두색 포자 꽃", + "block.spectrum.lime_stairs": "연두색 계단", + "block.spectrum.lime_wood": "연두색 나무", + "block.spectrum.line_teleporting_idol.tooltip": "§7직선상의 %d 블록 내에 있는 같은 종류의", + "block.spectrum.line_teleporting_idol.tooltip2": "§7다른 블록으로 순간이동합니다", + "block.spectrum.liquid_crystal": "액체 수정", + "block.spectrum.lizard_black_head": "검은색 잠복 도마뱀 머리", + "block.spectrum.lizard_blue_head": "파란색 잠복 도마뱀 머리", + "block.spectrum.lizard_brown_head": "갈색 잠복 도마뱀 머리", + "block.spectrum.lizard_cyan_head": "청록색 잠복 도마뱀 머리", + "block.spectrum.lizard_gray_head": "회색 잠복 도마뱀 머리", + "block.spectrum.lizard_green_head": "초록색 잠복 도마뱀 머리", + "block.spectrum.lizard_light_blue_head": "하늘색 잠복 도마뱀 머리", + "block.spectrum.lizard_light_gray_head": "회백색 잠복 도마뱀 머리", + "block.spectrum.lizard_lime_head": "연두색 잠복 도마뱀 머리", + "block.spectrum.lizard_magenta_head": "자홍색 잠복 도마뱀 머리", + "block.spectrum.lizard_orange_head": "주황색 잠복 도마뱀 머리", + "block.spectrum.lizard_pink_head": "분홍색 잠복 도마뱀 머리", + "block.spectrum.lizard_purple_head": "보라색 잠복 도마뱀 머리", + "block.spectrum.lizard_red_head": "빨간색 잠복 도마뱀 머리", + "block.spectrum.lizard_white_head": "하얀색 잠복 도마뱀 머리", + "block.spectrum.lizard_yellow_head": "노란색 잠복 도마뱀 머리", + "block.spectrum.llama_head": "라마 머리", + "block.spectrum.magenta_block": "자홍색 블록", + "block.spectrum.magenta_button": "자홍색 버튼", + "block.spectrum.magenta_chiseled_preservation_stone": "자홍색 조각된 보존석", + "block.spectrum.magenta_fence": "자홍색 울타리", + "block.spectrum.magenta_fence_gate": "자홍색 울타리 문", + "block.spectrum.magenta_glowblock": "자홍색 발광 블록", + "block.spectrum.magenta_lamp": "자홍색 조명", + "block.spectrum.magenta_leaves": "자홍색 잎", + "block.spectrum.magenta_log": "자홍색 원목", + "block.spectrum.magenta_planks": "자홍색 판자", + "block.spectrum.magenta_pressure_plate": "자홍색 압력판", + "block.spectrum.magenta_sapling": "자홍색 묘목", + "block.spectrum.magenta_slab": "자홍색 반 블록", + "block.spectrum.magenta_spirit_sallow_vines_body": "자홍색 영혼버들 덩굴", + "block.spectrum.magenta_spirit_sallow_vines_head": "자홍색 영혼버들 덩굴", + "block.spectrum.magenta_spore_blossom": "자홍색 포자 꽃", + "block.spectrum.magenta_stairs": "자홍색 계단", + "block.spectrum.magenta_wood": "자홍색 나무", + "block.spectrum.magma_cube_head": "마그마 큐브 머리", + "block.spectrum.raw_malachite_block": "공작석 원석 블록", + "block.spectrum.malachite_block": "순수한 공작석 블록", + "block.spectrum.malachite_cluster": "공작석 군집", + "block.spectrum.malachite_ore": "공작석 광석", + "block.spectrum.medium_citrine_bud": "중간 황수정 봉오리", + "block.spectrum.medium_moonstone_bud": "중간 월장석 봉오리", + "block.spectrum.medium_onyx_bud": "중간 오닉스 봉오리", + "block.spectrum.medium_topaz_bud": "중간 토파즈 봉오리", + "block.spectrum.memory": "기억", + "block.spectrum.mermaids_brush": "인어의 붓", + "block.spectrum.midnight_solution": "자정의 용액", + "block.spectrum.milking_idol.tooltip": "§7반경 %d 블록 내의 생물로부터 우유를 짭니다", + "block.spectrum.milking_idol.tooltip2": "§7동물 주변에 §f양동이§7나 §f그릇§7이 필요합니다", + "block.spectrum.mob_block.tooltip": "사용/밟기/투사체 피격으로 작동 시:", + "block.spectrum.monstrosity_head": "괴이 머리", + "block.spectrum.moonstone_basalt_light": "월장석 현무암 광원", + "block.spectrum.moonstone_block": "월장석 블록", + "block.spectrum.moonstone_calcite_light": "월장석 방해석 광원", + "block.spectrum.moonstone_chime": "월장석 차임", + "block.spectrum.moonstone_chiseled_basalt": "조각된 월장석 현무암", + "block.spectrum.moonstone_chiseled_calcite": "조각된 월장석 방해석", + "block.spectrum.moonstone_cluster": "월장석 군집", + "block.spectrum.moonstone_glass": "월장석 유리", + "block.spectrum.moonstone_glass_pane": "월장석 유리판", + "block.spectrum.moonstone_ore": "월장석 광석", + "block.spectrum.moonstone_powder_block": "월장석 가루 블록", + "block.spectrum.moonstone_semi_permeable_glass": "반투과성 월장석 유리", + "block.spectrum.polished_moonstone": "윤나는 월장석", + "block.spectrum.moonstone_pillar": "월장석 기둥", + "block.spectrum.mooshroom_brown_head": "갈색 무시룸 머리", + "block.spectrum.mooshroom_red_head": "빨간색 무시룸 머리", + "block.spectrum.moss_ball": "마리모", + "block.spectrum.sludge": "진흙탕", + "block.spectrum.mule_head": "노새 머리", + "block.spectrum.neolith_block": "네오리스 블록", + "block.spectrum.nephrite_blossom_bulb": "연옥 꽃나무 구근", + "block.spectrum.nephrite_blossom_leaves": "연옥 꽃나무 잎", + "block.spectrum.nephrite_blossom_stem": "연옥 꽃나무 줄기", + "block.spectrum.netherite_scrap_cluster": "네더라이트 파편 군집", + "block.spectrum.nightdew": "밤이슬", + "block.spectrum.notched_polished_basalt": "홈이 파인 윤나는 현무암", + "block.spectrum.notched_polished_calcite": "홈이 파인 윤나는 방해석", + "block.spectrum.ocelot_head": "오셀롯 머리", + "block.spectrum.ocelot_idol": "오만한 우상", + "block.spectrum.ominous_sapling": "불길한 묘목", + "block.spectrum.onyx_basalt_light": "오닉스 현무암 광원", + "block.spectrum.onyx_block": "오닉스 블록", + "block.spectrum.onyx_calcite_light": "오닉스 방해석 광원", + "block.spectrum.onyx_chime": "오닉스 차임", + "block.spectrum.onyx_chiseled_basalt": "조각된 오닉스 현무암", + "block.spectrum.onyx_chiseled_calcite": "조각된 오닉스 방해석", + "block.spectrum.onyx_cluster": "오닉스 군집", + "block.spectrum.onyx_glass": "오닉스 유리", + "block.spectrum.onyx_glass_pane": "오닉스 유리판", + "block.spectrum.onyx_ore": "오닉스 광석", + "block.spectrum.onyx_powder_block": "오닉스 가루 블록", + "block.spectrum.onyx_semi_permeable_glass": "반투과성 오닉스 유리", + "block.spectrum.polished_onyx": "윤나는 오닉스", + "block.spectrum.onyx_pillar": "오닉스 기둥", + "block.spectrum.orange_block": "주황색 블록", + "block.spectrum.orange_button": "주황색 버튼", + "block.spectrum.orange_chiseled_preservation_stone": "주황색 조각된 보존석", + "block.spectrum.orange_fence": "주황색 울타리", + "block.spectrum.orange_fence_gate": "주황색 울타리 문", + "block.spectrum.orange_glowblock": "주황색 발광 블록", + "block.spectrum.orange_lamp": "주황색 조명", + "block.spectrum.orange_leaves": "주황색 잎", + "block.spectrum.orange_log": "주황색 원목", + "block.spectrum.orange_planks": "주황색 판자", + "block.spectrum.orange_pressure_plate": "주황색 압력판", + "block.spectrum.orange_sapling": "주황색 묘목", + "block.spectrum.orange_slab": "주황색 반 블록", + "block.spectrum.orange_spore_blossom": "주황색 포자 꽃", + "block.spectrum.orange_stairs": "주황색 계단", + "block.spectrum.orange_wood": "주황색 나무", + "block.spectrum.overgrown_blackslag": "무성한 흑작암", + "block.spectrum.overgrown_slush": "무성한 진창", + "block.spectrum.paltaeria_floatblock": "팔타에리아 부유 블록", + "block.spectrum.paltaeria_ore": "팔타에리아 광석", + "block.spectrum.panda_head": "판다 머리", + "block.spectrum.parametric_mining_device": "매개변수식 채굴 장치", + "block.spectrum.parametric_mining_device.tooltip": "던지거나 벽에 붙이면 폭발합니다", + "block.spectrum.parrot_blue_head": "파란색 앵무새 머리", + "block.spectrum.parrot_yellow_blue_head": "청록색 앵무새 머리", + "block.spectrum.parrot_gray_head": "회색 앵무새 머리", + "block.spectrum.parrot_green_head": "초록색 앵무새 머리", + "block.spectrum.parrot_idol": "학구적인 우상", + "block.spectrum.parrot_red_blue_head": "빨간색 앵무새 머리", + "block.spectrum.particle_spawner": "입자 생성기", + "block.spectrum.particle_spawner.color_c": "C", + "block.spectrum.particle_spawner.color_m": "M", + "block.spectrum.particle_spawner.color_y": "Y", + "block.spectrum.particle_spawner.glow": "발광", + "block.spectrum.particle_spawner.pos_x": "X", + "block.spectrum.particle_spawner.pos_y": "Y", + "block.spectrum.particle_spawner.pos_z": "Z", + "block.spectrum.particle_spawner.collisions": "충돌", + "block.spectrum.particle_spawner.duration": "지속 시간", + "block.spectrum.particle_spawner.gravity": "중력", + "block.spectrum.particle_spawner.offset": "오프셋", + "block.spectrum.particle_spawner.particle_count": "입자 수 / 초", + "block.spectrum.particle_spawner.scale": "크기", + "block.spectrum.particle_spawner.tooltip": "레드스톤으로 작동하며 세밀한 설정이 가능한 입자 디스플레이", + "block.spectrum.particle_spawner.variance": "분산", + "block.spectrum.particle_spawner.velocity": "속도", + "block.spectrum.pastel_network_nodes.connection_debug": "이 노드는 다음에 연결되어 있습니다:", + "block.spectrum.pastel_network_nodes.tooltip.placing": "인벤토리 형태의 블록에 붙여서 배치해야 합니다", + "block.spectrum.pastel_network_nodes.tooltip.range": "반경 %d 블록 내의 다른 노드들과 연결됩니다", + "block.spectrum.pastel_node": "파스텔 노드", + "block.spectrum.pedestal": "안료 받침대", + "block.spectrum.pedestal_all_basic": "안료 받침대", + "block.spectrum.pedestal_basic_amethyst": "안료 받침대", + "block.spectrum.pedestal_basic_citrine": "안료 받침대", + "block.spectrum.pedestal_basic_topaz": "안료 받침대", + "block.spectrum.pedestal_moonstone": "안료 받침대", + "block.spectrum.pedestal_onyx": "안료 받침대", + "block.spectrum.phantom_head": "팬텀 머리", + "block.spectrum.phantom_idol": "귀신들린 우상", + "block.spectrum.pig_head": "돼지 머리", + "block.spectrum.pig_idol": "신중한 우상", + "block.spectrum.piglin_idol": "격노한 우상", + "block.spectrum.piglin_trade_idol.tooltip": "§f금괴§7를 교환합니다", + "block.spectrum.pillager_head": "약탈자 머리", + "block.spectrum.pink_block": "분홍색 블록", + "block.spectrum.pink_button": "분홍색 버튼", + "block.spectrum.pink_chiseled_preservation_stone": "분홍색 조각된 보존석", + "block.spectrum.pink_fence": "분홍색 울타리", + "block.spectrum.pink_fence_gate": "분홍색 울타리 문", + "block.spectrum.pink_glowblock": "분홍색 발광 블록", + "block.spectrum.pink_lamp": "분홍색 조명", + "block.spectrum.pink_leaves": "분홍색 잎", + "block.spectrum.pink_log": "분홍색 원목", + "block.spectrum.pink_planks": "분홍색 판자", + "block.spectrum.pink_pressure_plate": "분홍색 압력판", + "block.spectrum.pink_sapling": "분홍색 묘목", + "block.spectrum.pink_slab": "분홍색 반 블록", + "block.spectrum.pink_spore_blossom": "분홍색 포자 꽃", + "block.spectrum.pink_stairs": "분홍색 계단", + "block.spectrum.pink_wood": "분홍색 나무", + "block.spectrum.player_detector": "플레이어 감지기", + "block.spectrum.player_detector.owner": "%s의 플레이어 감지기", + "block.spectrum.polar_bear_head": "북극곰 머리", + "block.spectrum.polar_bear_idol": "호전적인 우상", + "block.spectrum.polished_basal_marble": "윤나는 기저 대리석", + "block.spectrum.polished_basal_marble_slab": "윤나는 기저 대리석 반 블록", + "block.spectrum.polished_basal_marble_stairs": "윤나는 기저 대리석 계단", + "block.spectrum.polished_basal_marble_wall": "윤나는 기저 대리석 담장", + "block.spectrum.polished_basalt": "윤나는 현무암", + "block.spectrum.polished_basalt_button": "윤나는 현무암 버튼", + "block.spectrum.polished_basalt_crest": "윤나는 현무암 문장", + "block.spectrum.polished_basalt_pillar": "윤나는 현무암 기둥", + "block.spectrum.polished_basalt_pressure_plate": "윤나는 현무암 압력판", + "block.spectrum.polished_basalt_slab": "윤나는 현무암 반 블록", + "block.spectrum.polished_basalt_stairs": "윤나는 현무암 계단", + "block.spectrum.polished_basalt_wall": "윤나는 현무암 담장", + "block.spectrum.polished_blackslag": "윤나는 흑작암", + "block.spectrum.polished_blackslag_button": "윤나는 흑작암 버튼", + "block.spectrum.polished_blackslag_pillar": "윤나는 흑작암 기둥", + "block.spectrum.polished_blackslag_pressure_plate": "윤나는 흑작암 압력판", + "block.spectrum.polished_blackslag_slab": "윤나는 흑작암 반 블록", + "block.spectrum.polished_blackslag_stairs": "윤나는 흑작암 계단", + "block.spectrum.polished_blackslag_wall": "윤나는 흑작암 담장", + "block.spectrum.polished_bone_ash": "윤나는 골회", + "block.spectrum.polished_bone_ash_pillar": "윤나는 골회 기둥", + "block.spectrum.polished_bone_ash_slab": "윤나는 골회 반 블록", + "block.spectrum.polished_bone_ash_stairs": "윤나는 골회 계단", + "block.spectrum.polished_bone_ash_wall": "윤나는 골회 담장", + "block.spectrum.polished_calcite": "윤나는 방해석", + "block.spectrum.polished_calcite_button": "윤나는 방해석 버튼", + "block.spectrum.polished_calcite_crest": "윤나는 방해석 문장", + "block.spectrum.polished_calcite_pillar": "윤나는 방해석 기둥", + "block.spectrum.polished_calcite_pressure_plate": "윤나는 방해석 압력판", + "block.spectrum.polished_calcite_slab": "윤나는 방해석 반 블록", + "block.spectrum.polished_calcite_stairs": "윤나는 방해석 계단", + "block.spectrum.polished_calcite_wall": "윤나는 방해석 담장", + "block.spectrum.polished_shale_clay": "윤나는 셰일 점토", + "block.spectrum.polished_shale_clay_slab": "윤나는 셰일 점토 반 블록", + "block.spectrum.polished_shale_clay_stairs": "윤나는 셰일 점토 계단", + "block.spectrum.potion_effect_idol.tooltip": "§7%s§7(을)를 부여합니다", + "block.spectrum.potion_workshop": "물약 작업장", + "block.spectrum.potted_amaranth_bushel": "화분에 심은 아마란스 덤불", + "block.spectrum.potted_black_sapling": "화분에 심은 검은색 묘목", + "block.spectrum.potted_blood_orchid": "화분에 심은 블러드 오키드", + "block.spectrum.potted_blue_sapling": "화분에 심은 파란색 묘목", + "block.spectrum.potted_brown_sapling": "화분에 심은 갈색 묘목", + "block.spectrum.potted_chestnut_noxshroom": "화분에 심은 밤색 어스름버섯", + "block.spectrum.potted_cyan_sapling": "화분에 심은 청록색 묘목", + "block.spectrum.potted_ebony_noxshroom": "화분에 심은 흑단 어스름버섯", + "block.spectrum.potted_gray_sapling": "화분에 심은 회색 묘목", + "block.spectrum.potted_green_sapling": "화분에 심은 초록색 묘목", + "block.spectrum.potted_ivory_noxshroom": "화분에 심은 상아색 어스름버섯", + "block.spectrum.potted_light_blue_sapling": "화분에 심은 하늘색 묘목", + "block.spectrum.potted_light_gray_sapling": "화분에 심은 회백색 묘목", + "block.spectrum.potted_lime_sapling": "화분에 심은 연두색 묘목", + "block.spectrum.potted_magenta_sapling": "화분에 심은 자홍색 묘목", + "block.spectrum.potted_orange_sapling": "화분에 심은 주황색 묘목", + "block.spectrum.potted_pink_sapling": "화분에 심은 분홍색 묘목", + "block.spectrum.potted_purple_sapling": "화분에 심은 보라색 묘목", + "block.spectrum.potted_red_sapling": "화분에 심은 빨간색 묘목", + "block.spectrum.potted_resonant_lily": "화분에 심은 공명 백합", + "block.spectrum.potted_sweet_pea": "화분에 심은 스위트피", + "block.spectrum.potted_apricotti": "화분에 심은 아프리코트", + "block.spectrum.potted_varia_sprout": "화분에 심은 바리아 새싹", + "block.spectrum.potted_humming_bell": "화분에 심은 음명방울", + "block.spectrum.potted_slate_noxshroom": "화분에 심은 점판암색 어스름버섯", + "block.spectrum.potted_weeping_gala_sprig": "화분에 심은 낙유목 묘목", + "block.spectrum.potted_white_sapling": "화분에 심은 하얀색 묘목", + "block.spectrum.potted_yellow_sapling": "화분에 심은 노란색 묘목", + "block.spectrum.powder_chiseled_preservation_stone": "가루가 조각된 보존석", + "block.spectrum.present": "선물", + "block.spectrum.present.tooltip.description": "아이템에 우클릭하여 선물 안에 넣습니다", + "block.spectrum.present.tooltip.description2": "그다음 조합 창에 넣고 안료를 더해 포장합니다", + "block.spectrum.present.tooltip.wrapped": "포장됨 (배치 후 웅크린 채로 사용하여 엽니다)", + "block.spectrum.present.tooltip.wrapped.giver": "%s(이)가 포장함 (배치 후 웅크린 채로 사용하여 엽니다)", + "block.spectrum.present.tooltip.wrapped_placed": "선물입니다! 웅크린 채로 사용하여 엽니다", + "block.spectrum.present.tooltip.wrapped_placed.giver": "%s(이)가 포장한 선물입니다! (웅크린 채로 사용하여 엽니다)", + "block.spectrum.preservation_block_detector": "보존 블록 감지기", + "block.spectrum.preservation_bricks": "보존 벽돌", + "block.spectrum.preservation_chest": "보존 상자", + "block.spectrum.preservation_controller": "보존 제어기", + "block.spectrum.preservation_glass": "보존 유리", + "block.spectrum.preservation_roundel": "보존 라운델", + "block.spectrum.preservation_slab": "보존 반 블록", + "block.spectrum.preservation_stairs": "보존 계단", + "block.spectrum.preservation_stone": "보존석", + "block.spectrum.preservation_turret_head": "보존 포탑 머리", + "block.spectrum.preservation_wall": "보존 담장", + "block.spectrum.primordial_fire": "태고의 불", + "block.spectrum.primordial_torch": "태고의 횃불", + "block.spectrum.prismarine_cluster": "프리즈머린 군집", + "block.spectrum.pristine_shooting_star": "순수한 별똥별", + "block.spectrum.projectile_idol.tooltip": "§7%s§7(을)를 발사합니다", + "block.spectrum.provider_node": "§d파스텔 네트워크 제공 노드", + "block.spectrum.provider_node.tooltip": "수집 노드에 아이템을 공급합니다", + "block.spectrum.pufferfish_head": "복어 머리", + "block.spectrum.pufferfish_idol": "미묘한 우상", + "block.spectrum.pure_certus_quartz_block": "순수한 서투스 석영 블록", + "block.spectrum.pure_coal_block": "순수한 석탄 블록", + "block.spectrum.pure_copper_block": "순수한 구리 블록", + "block.spectrum.pure_diamond_block": "순수한 다이아몬드 블록", + "block.spectrum.pure_echo_block": "순수한 메아리 블록", + "block.spectrum.pure_emerald_block": "순수한 에메랄드 블록", + "block.spectrum.pure_fluix_block": "순수한 액정 수정 블록", + "block.spectrum.pure_globette_block": "순수한 고버 글로벳 블록", + "block.spectrum.pure_globette_end_block": "순수한 엔드 고버 글로벳 블록", + "block.spectrum.pure_globette_nether_block": "순수한 네더 고버 글로벳 블록", + "block.spectrum.pure_glowstone_block": "순수한 발광석 블록", + "block.spectrum.pure_gold_block": "순수한 금 블록", + "block.spectrum.pure_iron_block": "순수한 철 블록", + "block.spectrum.pure_lapis_block": "순수한 청금석 블록", + "block.spectrum.pure_netherite_scrap_block": "순수한 네더라이트 파편 블록", + "block.spectrum.pure_prismarine_block": "순수한 프리즈머린 블록", + "block.spectrum.pure_quartz_block": "순수한 석영 블록", + "block.spectrum.pure_redstone_block": "순수한 레드스톤 블록", + "block.spectrum.pure_zinc_block": "순수한 아연 블록", + "block.spectrum.purple_block": "보라색 블록", + "block.spectrum.purple_button": "보라색 버튼", + "block.spectrum.purple_chiseled_preservation_stone": "보라색 조각된 보존석", + "block.spectrum.purple_fence": "보라색 울타리", + "block.spectrum.purple_fence_gate": "보라색 울타리 문", + "block.spectrum.purple_glowblock": "보라색 발광 블록", + "block.spectrum.purple_lamp": "보라색 조명", + "block.spectrum.purple_leaves": "보라색 잎", + "block.spectrum.purple_log": "보라색 원목", + "block.spectrum.purple_planks": "보라색 판자", + "block.spectrum.purple_pressure_plate": "보라색 압력판", + "block.spectrum.purple_sapling": "보라색 묘목", + "block.spectrum.purple_slab": "보라색 반 블록", + "block.spectrum.purple_spore_blossom": "보라색 포자 꽃", + "block.spectrum.purple_stairs": "보라색 계단", + "block.spectrum.purple_wood": "보라색 나무", + "block.spectrum.pyrite": "황철석", + "block.spectrum.pyrite_slab": "황철석 반 블록", + "block.spectrum.pyrite_stairs": "황철석 계단", + "block.spectrum.pyrite_wall": "황철석 담장", + "block.spectrum.pyrite_paneling": "황철석 판벽", + "block.spectrum.pyrite_pile": "황철석 더미", + "block.spectrum.pyrite_plating": "황철석 철판", + "block.spectrum.pyrite_relief": "황철석 부조", + "block.spectrum.pyrite_ripper": "황철석 단애", + "block.spectrum.pyrite_projector": "황철석 투영기", + "block.spectrum.pyrite_stack": "황철석 적층", + "block.spectrum.pyrite_tiles": "황철석 타일", + "block.spectrum.pyrite_tile_slab": "황철석 타일 반 블록", + "block.spectrum.pyrite_tile_stairs": "황철석 타일 계단", + "block.spectrum.pyrite_tile_wall": "황철석 타일 담장", + "block.spectrum.pyrite_tubing": "황철석 도관", + "block.spectrum.pyrite_vent": "황철석 환기구", + "block.spectrum.quartz_cluster": "석영 군집", + "block.spectrum.quitoxic_reeds": "맹독 갈대", + "block.spectrum.rabbit_head": "토끼 머리", + "block.spectrum.piglin_brute_head": "피글린 야수 머리", + "block.spectrum.rabbit_idol": "건방진 우상", + "block.spectrum.radiant_glass": "광채 유리", + "block.spectrum.radiant_glass_pane": "광채 유리판", + "block.spectrum.radiant_semi_permeable_glass": "반투과성 광채 유리", + "block.spectrum.radiating_ender": "광채의 엔더", + "block.spectrum.random_teleporting_idol.tooltip": "§7무작위 방향으로 최대 %d 블록 순간이동시킵니다", + "block.spectrum.ravager_head": "파괴수 머리", + "block.spectrum.red_block": "빨간색 블록", + "block.spectrum.red_button": "빨간색 버튼", + "block.spectrum.red_chiseled_preservation_stone": "빨간색 조각된 보존석", + "block.spectrum.red_fence": "빨간색 울타리", + "block.spectrum.red_fence_gate": "빨간색 울타리 문", + "block.spectrum.red_glowblock": "빨간색 발광 블록", + "block.spectrum.red_lamp": "빨간색 조명", + "block.spectrum.red_leaves": "빨간색 잎", + "block.spectrum.red_log": "빨간색 원목", + "block.spectrum.red_planks": "빨간색 판자", + "block.spectrum.red_pressure_plate": "빨간색 압력판", + "block.spectrum.red_sapling": "빨간색 묘목", + "block.spectrum.red_slab": "빨간색 반 블록", + "block.spectrum.red_spore_blossom": "빨간색 포자 꽃", + "block.spectrum.red_stairs": "빨간색 계단", + "block.spectrum.red_wood": "빨간색 나무", + "block.spectrum.redstone_calculator": "레드스톤 계산기", + "block.spectrum.redstone_calculator.mode.addition": "덧셈", + "block.spectrum.redstone_calculator.mode.division": "나눗셈", + "block.spectrum.redstone_calculator.mode.max": "최댓값", + "block.spectrum.redstone_calculator.mode.min": "최솟값", + "block.spectrum.redstone_calculator.mode.modulo": "나머지", + "block.spectrum.redstone_calculator.mode.multiplication": "곱셈", + "block.spectrum.redstone_calculator.mode.subtraction": "뺄셈", + "block.spectrum.redstone_calculator.mode_set": "모드 설정: ", + "block.spectrum.redstone_cluster": "레드스톤 군집", + "block.spectrum.redstone_sand": "레드스톤 모래", + "block.spectrum.redstone_timer": "레드스톤 타이머", + "block.spectrum.redstone_timer.setting.active": "활성화 시간 설정: ", + "block.spectrum.redstone_timer.setting.four_ticks": "4 틱", + "block.spectrum.redstone_timer.setting.inactive": "비활성화 시간 설정: ", + "block.spectrum.redstone_timer.setting.one_minute": "1 분", + "block.spectrum.redstone_timer.setting.one_second": "1 초", + "block.spectrum.redstone_timer.setting.ten_minutes": "10 분", + "block.spectrum.redstone_timer.setting.ten_seconds": "10 초", + "block.spectrum.redstone_transceiver": "레드스톤 송수신기", + "block.spectrum.resonant_lily": "공명 백합", + "block.spectrum.fabrication_chest": "조립 상자", + "block.spectrum.rock_crystal": "백수정", + "block.spectrum.rotten_ground": "썩은 땅", + "block.spectrum.ruin": "파멸", + "block.spectrum.sacred_soil": "신성한 흙", + "block.spectrum.sag_bubble": "시든 거품", + "block.spectrum.sag_leaf": "시든 잎사귀", + "block.spectrum.salmon_head": "연어 머리", + "block.spectrum.sawblade_grass": "톱날 풀", + "block.spectrum.sawblade_holly_bush": "톱날 호랑가시나무 덤불", + "block.spectrum.semi_permeable_glass": "반투과성 유리", + "block.spectrum.sender_node": "§e파스텔 네트워크 송신 노드", + "block.spectrum.sender_node.tooltip": "수집 및 저장 노드로 아이템을 보냅니다", + "block.spectrum.shale_clay": "셰일 점토", + "block.spectrum.shale_clay_brick_slab": "셰일 점토 벽돌 반 블록", + "block.spectrum.shale_clay_brick_stairs": "셰일 점토 벽돌 계단", + "block.spectrum.shale_clay_bricks": "셰일 점토 벽돌", + "block.spectrum.shale_clay_tile_slab": "셰일 점토 타일 반 블록", + "block.spectrum.shale_clay_tile_stairs": "셰일 점토 타일 계단", + "block.spectrum.shale_clay_tiles": "셰일 점토 타일", + "block.spectrum.shearing_idol.tooltip": "§7주변의 생물체에게 가위질을 합니다", + "block.spectrum.sheep_head": "양 머리", + "block.spectrum.sheep_idol": "독실한 우상", + "block.spectrum.shimmel": "균사토", + "block.spectrum.shimmering_preservation_bricks": "일렁이는 보존 벽돌", + "block.spectrum.shimmerstone_block": "미광석 블록", + "block.spectrum.shimmerstone_ore": "미광석 광석", + "block.spectrum.shulker_black_head": "검은색 셜커 머리", + "block.spectrum.shulker_blue_head": "파란색 셜커 머리", + "block.spectrum.shulker_brown_head": "갈색 셜커 머리", + "block.spectrum.shulker_cyan_head": "청록색 셜커 머리", + "block.spectrum.shulker_gray_head": "회색 셜커 머리", + "block.spectrum.shulker_green_head": "초록색 셜커 머리", + "block.spectrum.shulker_head": "셜커 머리", + "block.spectrum.shulker_idol": "은둔의 우상", + "block.spectrum.shulker_light_blue_head": "하늘색 셜커 머리", + "block.spectrum.shulker_light_gray_head": "회백색 셜커 머리", + "block.spectrum.shulker_lime_head": "연두색 셜커 머리", + "block.spectrum.shulker_magenta_head": "자홍색 셜커 머리", + "block.spectrum.shulker_orange_head": "주황색 셜커 머리", + "block.spectrum.shulker_pink_head": "분홍색 셜커 머리", + "block.spectrum.shulker_purple_head": "보라색 셜커 머리", + "block.spectrum.shulker_red_head": "빨간색 셜커 머리", + "block.spectrum.shulker_white_head": "하얀색 셜커 머리", + "block.spectrum.shulker_yellow_head": "노란색 셜커 머리", + "block.spectrum.silverfish_head": "좀벌레 머리", + "block.spectrum.silverfish_idol": "민첩한 우상", + "block.spectrum.silverfish_inserting_idol.tooltip": "§7인접한 블록을 좀벌레로 감염시킵니다", + "block.spectrum.skeleton_horse_head": "스켈레톤 말 해골", + "block.spectrum.skeleton_idol": "버려진 우상", + "block.spectrum.slate_noxcap_block": "점판암색 어스름갓 블록", + "block.spectrum.slate_noxcap_gills": "점판암색 어스름갓 주름", + "block.spectrum.slate_noxcap_hyphae": "점판암색 어스름갓 균사", + "block.spectrum.slate_noxcap_stem": "점판암색 어스름갓 줄기", + "block.spectrum.slate_noxshroom": "점판암색 어스름버섯", + "block.spectrum.slate_noxwood_amphora": "점판암색 어스름나무 암포라", + "block.spectrum.slate_noxwood_pillar": "점판암색 어스름나무 기둥", + "block.spectrum.slate_noxwood_button": "점판암색 어스름나무 버튼", + "block.spectrum.slate_noxwood_door": "점판암색 어스름나무 문", + "block.spectrum.slate_noxwood_fence": "점판암색 어스름나무 울타리", + "block.spectrum.slate_noxwood_fence_gate": "점판암색 어스름나무 울타리 문", + "block.spectrum.slate_noxwood_lantern": "점판암색 어스름나무 랜턴", + "block.spectrum.slate_noxwood_lamp": "점판암색 어스름나무 조명", + "block.spectrum.slate_noxwood_light": "점판암색 어스름나무 광원", + "block.spectrum.slate_noxwood_planks": "점판암색 어스름나무 판자", + "block.spectrum.slate_noxwood_pressure_plate": "점판암색 어스름나무 압력판", + "block.spectrum.slate_noxwood_slab": "점판암색 어스름나무 반 블록", + "block.spectrum.slate_noxwood_stairs": "점판암색 어스름나무 계단", + "block.spectrum.slate_noxwood_trapdoor": "점판암색 어스름나무 다락문", + "block.spectrum.slime_head": "슬라임 머리", + "block.spectrum.slime_idol": "탄력있는 우상", + "block.spectrum.slime_sizing_idol.tooltip": "§7근처 슬라임의 크기를 키웁니다", + "block.spectrum.slush": "진창", + "block.spectrum.small_azurite_bud": "작은 남동석 봉오리", + "block.spectrum.small_bismuth_bud": "작은 비스무트 봉오리", + "block.spectrum.small_black_dragonjag": "작은 검은색 용린초", + "block.spectrum.small_bloodstone_bud": "작은 혈석 봉오리", + "block.spectrum.small_certus_quartz_bud": "작은 서투스 석영 봉오리", + "block.spectrum.small_citrine_bud": "작은 황수정 봉오리", + "block.spectrum.small_coal_bud": "작은 석탄 봉오리", + "block.spectrum.small_copper_bud": "작은 구리 봉오리", + "block.spectrum.small_diamond_bud": "작은 다이아몬드 봉오리", + "block.spectrum.small_echo_bud": "작은 메아리 봉오리", + "block.spectrum.small_emerald_bud": "작은 에메랄드 봉오리", + "block.spectrum.small_fluix_bud": "작은 액정 수정 봉오리", + "block.spectrum.small_globette_bud": "작은 글로벳 봉오리", + "block.spectrum.small_globette_end_bud": "작은 엔드 글로벳 봉오리", + "block.spectrum.small_globette_nether_bud": "작은 네더 글로벳 봉오리", + "block.spectrum.small_glowstone_bud": "작은 발광석 봉오리", + "block.spectrum.small_gold_bud": "작은 금 봉오리", + "block.spectrum.small_iron_bud": "작은 철 봉오리", + "block.spectrum.small_lapis_bud": "작은 청금석 봉오리", + "block.spectrum.small_malachite_bud": "작은 공작석 봉오리", + "block.spectrum.small_moonstone_bud": "작은 월장석 봉오리", + "block.spectrum.small_netherite_scrap_bud": "작은 네더라이트 파편 봉오리", + "block.spectrum.small_onyx_bud": "작은 오닉스 봉오리", + "block.spectrum.small_pink_dragonjag": "작은 분홍색 용린초", + "block.spectrum.small_prismarine_bud": "작은 프리즈머린 봉오리", + "block.spectrum.small_purple_dragonjag": "작은 보라색 용린초", + "block.spectrum.small_quartz_bud": "작은 석영 봉오리", + "block.spectrum.small_red_dragonjag": "작은 빨간색 용린초", + "block.spectrum.small_redstone_bud": "작은 레드스톤 봉오리", + "block.spectrum.small_sag_bubble": "작은 축 처진 거품", + "block.spectrum.small_topaz_bud": "작은 토파즈 봉오리", + "block.spectrum.small_yellow_dragonjag": "작은 노란색 용린초", + "block.spectrum.small_zinc_bud": "작은 아연 봉오리", + "block.spectrum.smooth_basalt_slab": "매끄러운 현무암 반 블록", + "block.spectrum.smooth_basalt_stairs": "윤나는 현무암 계단", + "block.spectrum.smooth_basalt_wall": "윤나는 현무암 담장", + "block.spectrum.snapping_ivy": "포식 담쟁이덩굴", + "block.spectrum.sniffer_head": "스니퍼 머리", + "block.spectrum.snow_golem_head": "눈 골렘 머리", + "block.spectrum.snow_golem_idol": "보조의 우상", + "block.spectrum.spectral_shard_block": "분광 파편 블록", + "block.spectrum.spectral_shard_storage_block": "윤나는 분광 파편 블록", + "block.spectrum.spider_head": "거미 머리", + "block.spectrum.spider_idol": "잠복의 우상", + "block.spectrum.spirit_instiller": "영혼 주입기", + "block.spectrum.spirit_sallow_heart": "영혼버들 심장", + "block.spectrum.spirit_sallow_leaves": "영혼버들 잎", + "block.spectrum.spirit_sallow_log": "영혼버들 원목", + "block.spectrum.spirit_sallow_roots": "영혼버들 뿌리", + "block.spectrum.squid_head": "오징어 머리", + "block.spectrum.squid_idol": "서투른 우상", + "block.spectrum.stardust_block": "별가루 블록", + "block.spectrum.stone_shimmerstone_light": "돌 미광석 광원", + "block.spectrum.storage_node": "§b파스텔 네트워크 저장 노드", + "block.spectrum.storage_node.tooltip": "송신 및 수집 노드를 위한 저장소 역할을 합니다", + "block.spectrum.stratine_floatblock": "스트라틴 부유 블록", + "block.spectrum.stratine_ore": "스트라틴 광석", + "block.spectrum.stray_head": "스트레이 머리", + "block.spectrum.stray_idol": "잊혀진 우상", + "block.spectrum.strider_head": "스트라이더 머리", + "block.spectrum.strider_idol": "다혈질 우상", + "block.spectrum.stripped_black_log": "껍질 벗긴 검은색 원목", + "block.spectrum.stripped_black_wood": "껍질 벗긴 검은색 나무", + "block.spectrum.stripped_blue_log": "껍질 벗긴 파란색 원목", + "block.spectrum.stripped_blue_wood": "껍질 벗긴 파란색 나무", + "block.spectrum.stripped_brown_log": "껍질 벗긴 갈색 원목", + "block.spectrum.stripped_brown_wood": "껍질 벗긴 갈색 나무", + "block.spectrum.stripped_chestnut_noxcap_hyphae": "껍질 벗긴 밤색 어스름갓 균사", + "block.spectrum.stripped_chestnut_noxcap_stem": "껍질 벗긴 밤색 어스름갓 줄기", + "block.spectrum.stripped_cyan_log": "껍질 벗긴 청록색 원목", + "block.spectrum.stripped_cyan_wood": "껍질 벗긴 청록색 나무", + "block.spectrum.stripped_ebony_noxcap_hyphae": "껍질 벗긴 흑단 어스름갓 균사", + "block.spectrum.stripped_ebony_noxcap_stem": "껍질 벗긴 흑단 어스름갓 줄기", + "block.spectrum.stripped_gray_log": "껍질 벗긴 회색 원목", + "block.spectrum.stripped_gray_wood": "껍질 벗긴 회색 나무", + "block.spectrum.stripped_green_log": "껍질 벗긴 초록색 원목", + "block.spectrum.stripped_green_wood": "껍질 벗긴 초록색 나무", + "block.spectrum.stripped_ivory_noxcap_hyphae": "껍질 벗긴 상아색 어스름갓 균사", + "block.spectrum.stripped_ivory_noxcap_stem": "껍질 벗긴 상아색 어스름갓 줄기", + "block.spectrum.stripped_light_blue_log": "껍질 벗긴 하늘색 원목", + "block.spectrum.stripped_light_blue_wood": "껍질 벗긴 하늘색 나무", + "block.spectrum.stripped_light_gray_log": "껍질 벗긴 회백색 원목", + "block.spectrum.stripped_light_gray_wood": "껍질 벗긴 회백색 나무", + "block.spectrum.stripped_lime_log": "껍질 벗긴 연두색 원목", + "block.spectrum.stripped_lime_wood": "껍질 벗긴 연두색 나무", + "block.spectrum.stripped_magenta_log": "껍질 벗긴 자홍색 원목", + "block.spectrum.stripped_magenta_wood": "껍질 벗긴 자홍색 나무", + "block.spectrum.stripped_orange_log": "껍질 벗긴 주황색 원목", + "block.spectrum.stripped_orange_wood": "껍질 벗긴 주황색 나무", + "block.spectrum.stripped_pink_log": "껍질 벗긴 분홍색 원목", + "block.spectrum.stripped_pink_wood": "껍질 벗긴 분홍색 나무", + "block.spectrum.stripped_purple_log": "껍질 벗긴 보라색 원목", + "block.spectrum.stripped_purple_wood": "껍질 벗긴 보라색 나무", + "block.spectrum.stripped_red_log": "껍질 벗긴 빨간색 원목", + "block.spectrum.stripped_red_wood": "껍질 벗긴 빨간색 나무", + "block.spectrum.stripped_slate_noxcap_hyphae": "껍질 벗긴 점판암색 어스름갓 균사", + "block.spectrum.stripped_slate_noxcap_stem": "껍질 벗긴 점판암색 어스름갓 줄기", + "block.spectrum.stripped_weeping_gala_log": "껍질 벗긴 낙유목 원목", + "block.spectrum.stripped_weeping_gala_wood": "껍질 벗긴 낙유목 나무", + "block.spectrum.stripped_white_log": "껍질 벗긴 하얀색 원목", + "block.spectrum.stripped_white_wood": "껍질 벗긴 하얀색 나무", + "block.spectrum.stripped_yellow_log": "껍질 벗긴 노란색 원목", + "block.spectrum.stripped_yellow_wood": "껍질 벗긴 노란색 나무", + "block.spectrum.stuck_storm_stone": "폭풍석", + "block.spectrum.sweet_pea": "스위트피", + "block.spectrum.tadpole_head": "올챙이 머리", + "block.spectrum.tall_black_dragonjag": "큰 검은색 용린초", + "block.spectrum.tall_pink_dragonjag": "큰 분홍색 용린초", + "block.spectrum.tall_purple_dragonjag": "큰 보라색 용린초", + "block.spectrum.tall_red_dragonjag": "큰 빨간색 용린초", + "block.spectrum.tall_yellow_dragonjag": "큰 노란색 용린초", + "block.spectrum.threat_conflux": "위협 경합체", + "block.spectrum.threat_conflux.tooltip": "무언가가 밟으면 폭발합니다", + "block.spectrum.threat_conflux.tooltip2": "다음을 사용하여 해체합니다: ", + "block.spectrum.tilled_shale_clay": "경작된 셰일 점토", + "block.spectrum.tilled_slush": "경작된 진창", + "block.spectrum.tinted_preservation_glass": "색유리 보존 유리", + "block.spectrum.tinted_semi_permeable_glass": "반투과성 색유리", + "block.spectrum.titration_barrel": "적정 통", + "block.spectrum.titration_barrel.content_count_with_fluid": "%s(와)과 %d개의 아이템이 들어있습니다. 색깔 판자로 밀봉하여 발효를 시작합니다.", + "block.spectrum.titration_barrel.content_count_with_fluid_full": "%s(와)과 %d개의 아이템이 들어있습니다 (가득 참). 색깔 판자로 밀봉하여 발효를 시작합니다.", + "block.spectrum.titration_barrel.content_count_without_fluid": "%d개의 아이템이 들어있고 액체는 없습니다. 색깔 판자로 밀봉하여 발효를 시작합니다.", + "block.spectrum.titration_barrel.content_count_without_fluid_full": "%d개의 아이템이 들어있고 (가득 참) 액체는 없습니다. 색깔 판자로 밀봉하여 발효를 시작합니다.", + "block.spectrum.titration_barrel.days_of_sealing_after_opened_with_extractable_amount": "%s(이)가 %d일 (현실 %s일) 동안 발효되었습니다", + "block.spectrum.titration_barrel.days_of_sealing_before_opened": "%d일 (현실 %s일) 전에 밀봉되었습니다. 웅크린 채 사용하여 개봉합니다", + "block.spectrum.titration_barrel.debug_added_day": "(디버그 기능) 현실 시간 1일 치 발효 시간이 추가되었습니다", + "block.spectrum.titration_barrel.empty_when_tapping": "이건... 비어 있었습니다", + "block.spectrum.titration_barrel.invalid_recipe": "이것은 유용한 무언가를 만들어낼 것 같지 않습니다...", + "block.spectrum.titration_barrel.invalid_recipe_when_tapping": "이 통에는 쓸모없는 혼합물만 들어 있었습니다. 윽", + "block.spectrum.titration_barrel.missing_liquid_when_tapping": "액체가 부족하여 내용물이 상한 것 같습니다. 안타깝네요", + "block.spectrum.titration_barrel.not_yet_ready": "%d일 (현실 %s일) 전에 밀봉되었습니다. 아직 완성되지 않았습니다.", + "block.spectrum.titration_barrel.recipe_not_unlocked": "이 안에 무엇이 들어있는지 전혀 알 수 없습니다. 그냥 두는 게 좋겠습니다.", + "block.spectrum.titration_barrel.tapping_item_required": "추출하려면 다음이 필요합니다: ", + "block.spectrum.topaz_basalt_light": "토파즈 현무암 광원", + "block.spectrum.topaz_block": "토파즈 블록", + "block.spectrum.topaz_calcite_light": "토파즈 방해석 광원", + "block.spectrum.topaz_chime": "토파즈 차임", + "block.spectrum.topaz_chiseled_basalt": "조각된 토파즈 현무암", + "block.spectrum.topaz_chiseled_calcite": "조각된 토파즈 방해석", + "block.spectrum.topaz_cluster": "토파즈 군집", + "block.spectrum.topaz_glass": "토파즈 유리", + "block.spectrum.topaz_glass_pane": "토파즈 유리판", + "block.spectrum.topaz_ore": "토파즈 광석", + "block.spectrum.topaz_powder_block": "토파즈 가루 블록", + "block.spectrum.topaz_semi_permeable_glass": "반투과성 토파즈 유리", + "block.spectrum.polished_topaz": "윤나는 토파즈", + "block.spectrum.topaz_pillar": "토파즈 기둥", + "block.spectrum.tropical_fish_head": "열대어 머리", + "block.spectrum.turtle_head": "거북 머리", + "block.spectrum.turtle_idol": "완강한 우상", + "block.spectrum.universe_spyhole": "우주의 엿보기 구멍", + "block.spectrum.upgrade_efficiency": "효율 경사대", + "block.spectrum.upgrade_efficiency2": "효율 경사대 T2", + "block.spectrum.upgrade_experience": "지식 집중기", + "block.spectrum.upgrade_experience2": "지식 집중기 T2", + "block.spectrum.upgrade_speed": "조합 가속기", + "block.spectrum.upgrade_speed2": "조합 가속기 T2", + "block.spectrum.upgrade_speed3": "조합 가속기 T3", + "block.spectrum.upgrade_yield": "생산성 쇄도기", + "block.spectrum.upgrade_yield2": "생산성 쇄도기 T2", + "block.spectrum.vegetal_block": "베지탈 블록", + "block.spectrum.vex_head": "벡스 머리", + "block.spectrum.villager_converting_idol.tooltip": "§7주민을 좀비 주민으로 변환시킵니다", + "block.spectrum.villager_head": "주민 머리", + "block.spectrum.vindicator_head": "변명자 머리", + "block.spectrum.persistent_light": "미광석 광원", + "block.spectrum.wandering_trader_head": "떠돌이 상인 머리", + "block.spectrum.warden_head": "워든 머리", + "block.spectrum.waxed_hummingstone": "밀랍 칠한 음명석", + "block.spectrum.weather_detector": "날씨 감지기", + "block.spectrum.weathered_polished_shale_clay": "풍화된 윤나는 셰일 점토", + "block.spectrum.weathered_polished_shale_clay_slab": "풍화된 윤나는 셰일 점토 반 블록", + "block.spectrum.weathered_polished_shale_clay_stairs": "풍화된 윤나는 셰일 점토 계단", + "block.spectrum.weathered_shale_clay": "풍화된 셰일 점토", + "block.spectrum.weathered_shale_clay_brick_slab": "풍화된 셰일 점토 벽돌 반 블록", + "block.spectrum.weathered_shale_clay_brick_stairs": "풍화된 셰일 점토 벽돌 계단", + "block.spectrum.weathered_shale_clay_bricks": "풍화된 셰일 점토 벽돌", + "block.spectrum.weathered_shale_clay_tile_slab": "풍화된 셰일 점토 타일 반 블록", + "block.spectrum.weathered_shale_clay_tile_stairs": "풍화된 셰일 점토 타일 계단", + "block.spectrum.weathered_shale_clay_tiles": "풍화된 셰일 점토 타일", + "block.spectrum.weeping_gala_amphora": "낙유목 암포라", + "block.spectrum.weeping_gala_barrel": "낙유목 통", + "block.spectrum.weeping_gala_button": "낙유목 버튼", + "block.spectrum.weeping_gala_door": "낙유목 문", + "block.spectrum.weeping_gala_fence": "낙유목 울타리", + "block.spectrum.weeping_gala_fence_gate": "낙유목 울타리 문", + "block.spectrum.weeping_gala_fronds": "낙유목 잎줄기", + "block.spectrum.weeping_gala_fronds_plant": "낙유목 잎줄기 식물", + "block.spectrum.weeping_gala_lamp": "낙유목 조명", + "block.spectrum.weeping_gala_lantern": "낙유목 랜턴", + "block.spectrum.weeping_gala_leaves": "낙유목 잎", + "block.spectrum.weeping_gala_light": "낙유목 광원", + "block.spectrum.weeping_gala_log": "낙유목 원목", + "block.spectrum.weeping_gala_pillar": "낙유목 기둥", + "block.spectrum.weeping_gala_planks": "낙유목 판자", + "block.spectrum.weeping_gala_pressure_plate": "낙유목 압력판", + "block.spectrum.weeping_gala_slab": "낙유목 반 블록", + "block.spectrum.weeping_gala_sprig": "낙유목 묘목", + "block.spectrum.weeping_gala_stairs": "낙유목 계단", + "block.spectrum.weeping_gala_trapdoor": "낙유목 다락문", + "block.spectrum.weeping_gala_wood": "낙유목 나무", + "block.spectrum.wet_lava_sponge": "젖은 용암 스펀지", + "block.spectrum.white_block": "하얀색 블록", + "block.spectrum.white_button": "하얀색 버튼", + "block.spectrum.white_chiseled_preservation_stone": "하얀색 조각된 보존석", + "block.spectrum.white_fence": "하얀색 울타리", + "block.spectrum.white_fence_gate": "하얀색 울타리 문", + "block.spectrum.white_glowblock": "하얀색 발광 블록", + "block.spectrum.white_lamp": "하얀색 조명", + "block.spectrum.white_leaves": "하얀색 잎", + "block.spectrum.white_log": "하얀색 원목", + "block.spectrum.white_planks": "하얀색 판자", + "block.spectrum.white_pressure_plate": "하얀색 압력판", + "block.spectrum.white_sapling": "하얀색 묘목", + "block.spectrum.white_slab": "하얀색 반 블록", + "block.spectrum.white_spirit_sallow_vines_body": "하얀색 영혼버들 덩굴", + "block.spectrum.white_spirit_sallow_vines_head": "하얀색 영혼버들 덩굴", + "block.spectrum.white_spore_blossom": "하얀색 포자 꽃", + "block.spectrum.white_stairs": "하얀색 계단", + "block.spectrum.white_wood": "하얀색 나무", + "block.spectrum.witch_head": "마녀 머리", + "block.spectrum.witch_idol": "예언의 우상", + "block.spectrum.wither_head": "위더 해골", + "block.spectrum.wither_idol": "파괴적인 우상", + "block.spectrum.wither_skeleton_idol": "주술적인 우상", + "block.spectrum.wolf_head": "늑대 머리", + "block.spectrum.wolf_idol": "충실한 우상", + "block.spectrum.yellow_block": "노란색 블록", + "block.spectrum.yellow_button": "노란색 버튼", + "block.spectrum.yellow_chiseled_preservation_stone": "노란색 조각된 보존석", + "block.spectrum.yellow_fence": "노란색 울타리", + "block.spectrum.yellow_fence_gate": "노란색 울타리 문", + "block.spectrum.yellow_glowblock": "노란색 발광 블록", + "block.spectrum.yellow_lamp": "노란색 조명", + "block.spectrum.yellow_leaves": "노란색 잎", + "block.spectrum.yellow_log": "노란색 원목", + "block.spectrum.yellow_planks": "노란색 판자", + "block.spectrum.yellow_pressure_plate": "노란색 압력판", + "block.spectrum.yellow_sapling": "노란색 묘목", + "block.spectrum.yellow_slab": "노란색 반 블록", + "block.spectrum.yellow_spirit_sallow_vines_body": "노란색 영혼버들 덩굴", + "block.spectrum.yellow_spirit_sallow_vines_head": "노란색 영혼버들 덩굴", + "block.spectrum.yellow_spore_blossom": "노란색 포자 꽃", + "block.spectrum.yellow_stairs": "노란색 계단", + "block.spectrum.yellow_wood": "노란색 나무", + "block.spectrum.zinc_cluster": "아연 군집", + "block.spectrum.zoglin_head": "조글린 머리", + "block.spectrum.zombie_horse_head": "좀비 말 머리", + "block.spectrum.zombie_idol": "버림받은 우상", + "block.spectrum.zombie_villager_head": "좀비 주민 머리", + "block.spectrum.zombified_piglin_head": "좀비화 피글린 머리", + + "block.spectrum.topaz_bricks": "토파즈 벽돌", + "block.spectrum.amethyst_bricks": "자수정 벽돌", + "block.spectrum.citrine_bricks": "황수정 벽돌", + "block.spectrum.onyx_bricks": "오닉스 벽돌", + "block.spectrum.moonstone_bricks": "월장석 벽돌", + "block.spectrum.mixed_gemstone_bricks": "혼합된 보석 벽돌", + "block.spectrum.azurite_bricks": "남동석 벽돌", + "block.spectrum.malachite_bricks": "공작석 벽돌", + "block.spectrum.bloodstone_bricks": "혈석 벽돌", + "block.spectrum.mixed_refined_crystal_bricks": "혼합된 정제 수정 벽돌", + + "block.spectrum.dragonrot_cauldron": "용부액 가마솥", + "block.spectrum.liquid_crystal_cauldron": "액체 수정 가마솥", + "block.spectrum.midnight_solution_cauldron": "자정의 용액 가마솥", + "block.spectrum.sludge_cauldron": "진흙탕 가마솥", + + "book.spectrum.guidebook.abyssal_vines.page0.text": "구불구불한 줄기와 빛나는 열매는 꽤나 익숙한 광경이다. 조금 더 어둡고 잎이 무성하긴 하지만, 이 늘어진 덩굴들이 발광 열매와 친척 관계라는 것은 쉽게 알 수 있다.\\\n창백한 빛과 수정 같은 기운을 뿜어내는 것을 보면, 수 세기 동안의 어둠 속에서 [액체 수정](entry://general/liquid_crystal)을 머금으며 자라난 끝에 이 서늘하고 어스름한 심연에 완벽하게 적응한 형태로 변모한 것 같다.", + "book.spectrum.guidebook.abyssal_vines.page1.text": "*만지면 어질어질해진다*", + "book.spectrum.guidebook.abyssal_vines.page1.title": "보송보송한 잎", + "book.spectrum.guidebook.abyssal_vines.page2.text": "당연하게도 이 덩굴에는 열매가 열리지만, 예상했던 것보다 훨씬 기묘하다. 처음엔 두 개의 열매인 줄 알았으나, 자세히 보니 크고 통통한 두 개의 엽으로 갈라진 하나의 핵과였다.\\\n맛은 꽤나 복합적이고, 톡 쏘면서도 향긋하다. 솔향과 사향의 풍미가 기저에 깔려 강렬한 단맛과 견과류의 고소함을 받쳐준다. 심지어 약간의 꽃내음까지 느껴지는 것 같다!", + "book.spectrum.guidebook.abyssal_vines.page2.title": "균열 자두", + "book.spectrum.guidebook.abyssal_vines.page3.text": " 덜 익은 것은 떫지만 절임용으로 쓰기 좋다.\\\n\\\n*덩굴에서 따내자마자 빛을 잃어버렸다. 너무 슬프다.*", + "book.spectrum.guidebook.abyssal_vines.page3.title": "지하의 핵과", + "book.spectrum.guidebook.abyssal_vines.page4.text": " 이 자두는 당도가 꽤 높아서, 열을 가하면 하얀 설탕의 원료로 사용할 수 있다.", + "book.spectrum.guidebook.abyssal_vines.page4.title": "캐러멜화", + "book.spectrum.guidebook.abyssal_vines.page5.text": " 이 열매의 씨앗은 유분과 영양분이 풍부하다. 재와 수지를 섞으면 대량의 비료를 만들 수 있다.\\\n*[베지탈](entry://general/vegetal)은 촉매 역할이므로 소모되지 않는다.*", + "book.spectrum.guidebook.abyssal_vines.page5.title": "비료", + "book.spectrum.guidebook.all_variants": "모든 변형", + "book.spectrum.guidebook.pylons.name": "보석 수정탑", + "book.spectrum.guidebook.pylons.page0.text": "보석 정동에는 말로 다 표현하기 힘든 특유의 기운이 있다. 생생하고 다채로운 빛깔로 일렁이는 수정들을 올려다보고 있으면... 그저 경이로울 따름이다.\\\n\\\n이 수정탑들은 그 경외감을 조금이나마 담아낼 수 있기를 바란다. 정동만큼 웅장하지는 않지만, 그래도 마치 색채의 신호탑처럼 우뚝 솟아 있다.", + "book.spectrum.guidebook.aloe.page0.text": "이 건조함을 사랑하는 식물은 거의 어디서든 자랄 수 있다. 아이러니하게도 그 강인함과는 달리, 너무 강한 빛이나 영양분이 풍부한 토양은 견디지 못하는 것 같다.\\\n\\\n아마도 그 깊은 지하에서는 굳이 그런 환경에 적응할 필요가 없었기 때문일 것이다.", + "book.spectrum.guidebook.aloe.page1.text": "잎사귀 하나하나를 쉽게 떼어낼 수 있다. 수분을 듬뿍 머금고 있어 영양가가 꽤 높다.\\\n\\\n심어두면 시간이 지나며 완전한 새로운 식물로 자라난다.", + "book.spectrum.guidebook.amaranth.page0.text": "이 씨앗들은 버려진 지 꽤 오랜 시간이 흐른 것 같지만, 여전히 생명력을 품고 있는 듯하다. 자라나면 과연 어떤 모습이 될지 궁금해진다.", + "book.spectrum.guidebook.amaranth.page1.text": "살면서 이런 건 본 적이 없다. 이렇게나 강렬하고 인상적인 빨간색이라니! 내 안의 영감이 솟아오르는 기분이다.\\\n\\\n이 덤불들을 으깨어 더 많은 곡물을 얻거나, 잔디 위에 장식용으로 심거나 화분에 담을 수도 있다.", + "book.spectrum.guidebook.amaranth.page2.text": "아마란스의 맛은 그 생김새만큼이나 밀과 확연히 달랐다. 내 머릿속에서 이 맛있는 요리처럼 완전히 새로운 아이디어들이 마구 피어올랐다.", + "book.spectrum.guidebook.amaranth.page3.text": "크림으로 꽉 찬 작고 훌륭한 페이스트리.\\\n\\\n*차와 곁들이기 완벽하다.*", + "book.spectrum.guidebook.amaranth.page3.title": "스콘", + "book.spectrum.guidebook.amaranth.page4.text": "이 만찬은 오랫동안 내 배를 든든하게 채워줄 것이 분명하다.\\\n\\\n*지방과 고기, 와인, 그리고 뒤틀림으로 가득 차 있다!*", + "book.spectrum.guidebook.amaranth.packed_mud.text": "아마란스는 진흙을 단단하게 굳히는 데 밀 못지않게 유용하다.", + "book.spectrum.guidebook.another_roll.page0.text": "광석을 캘 때 [#](449900)행운[#]()을 사용하거나 몬스터를 잡을 때 [#](449900)약탈[#]()을 사용하는 것 같은 수량 기반의 전리품 획득량이 평균보다 더 많아진다.\\\n추가 기회 레벨이 오를 수록 가능한 한 가장 많은 수량을 얻을 확률이 증가한다.", + "book.spectrum.guidebook.anvil_crushing.page0.text": "*\"새로운 것을 창조하려면 파괴의 길을 걸어야 한다\"\\\n – 누군가, 아마도*", + "book.spectrum.guidebook.anvil_crushing.page1.text": "지금까지 나는 [](item://minecraft:anvil)를 주로 도구를 수리하거나 강화하는 데만 사용해 왔다. 하지만 모루같이 무거운 물건은 훨씬 더 쓸모가 많다! 그 압도적인 무게를 이용해 물건을 가루로 으깨버리는 건 어떨까? 적들의 두개골 같은 거... 흐흐흐! 아니, 아이템 말이다. 그래, 그게 낫겠어.\\\n\\\n아이템 분쇄를 사용하여 [보석 조각](entry://general/shards)을 [가루](entry://general/gemstone_powder)로 으깰 수 있다.\\\n\\\n*팁: 모루가 더 높은 곳에서 떨어질수록 좋다.*", + "book.spectrum.guidebook.anvil_crushing.page2.text": "일부 아이템 위에 [](item://minecraft:anvil)를 떨어뜨리면 금이 가게 만들거나, 아예 완전히 다른 무언가로 변형시킬 수 있다.\\\n\\\n21블록 높이에서 떨어뜨리면 [](item://minecraft:anvil)가 최대 충격량에 도달하기에 충분할 것이다.", + "book.spectrum.guidebook.anvil_crushing.page3.text": "[#](bb00bb)꽃[#]()을 분쇄해 [#](bb00bb)염료[#]()로 만들거나, [#](bb00bb)말 갑옷[#]()을 분쇄해 [#](bb00bb)주괴[#]()를 얻거나, [#](bb00bb)블레이즈 막대[#]()를 부수어 더 많은 [#](bb00bb)블레이즈 가루[#]()를 얻어낼 수도 있다.", + "book.spectrum.guidebook.artisans_atlas.page0.text": "이 지도는 내가 움직일 때마다 변하고 이동한다. 마치 살아 숨 쉬며 내 의도를 감지하는 것 같다.\\\n\\\n특정 구조물 안에서 사용하면, 이 지도책은 험난한 지형과 거센 강물, 울창한 숲을 지나 동일한 종류의 다른 구조물을 찾을 수 있도록 나를 인도해 줄 것이다.", + "book.spectrum.guidebook.artisans_atlas.page1.text": "*세상 곳곳을 여행하며\\\n멀리, 그리고 넓게 찾아 헤매리\\\n한 손에 든 지도로 구조물을 짚어내며\\\n그 안의 전리품을 모두 모으리*", + "book.spectrum.guidebook.ascension.page0.text": "그것은 오직 하늘의 부름이라고밖에 표현할 수 없는 느낌이었다. [#](449900)신성[#]()이 발현되기 직전의 영광스럽고도 거대한 힘의 결집이었다.", + "book.spectrum.guidebook.ashen_circlet.page0.text": "이 서클릿에 박아 넣은 [스트라틴 결정](entry://general/stratine)은 그 자체로 네더의 산물이라 고열을 쉽게 흡수할 수 있다.\\\n아주 짧은 시간이긴 하지만, 끓어오르는 용암의 열기로부터 나를 보호해 주기까지 한다.\\\n\\\n[#](449900)화염 저항[#]()과 결합하면 용암 속을 마치 물처럼 헤엄칠 수 있다.", + "book.spectrum.guidebook.ashen_circlet.page1.text": "- 불과 뜨거운 바닥으로 인한 모든 피해 방지\n- 용암에 잠겼을 때의 기동성과 시야 크게 증가\n- 강렬한 열에 노출 시 짧은 시간 동안 화염 저항을 부여하지만, 재사용 대기시간 필요", + "book.spectrum.guidebook.auto_harvesting": "자동 수확", + "book.spectrum.guidebook.azalea_tea.page0.text": "저 [밤이슬](entry://general/nightdew_sprout)의 정수는 수면을 취하는 데 아주 효과적인 것 같다. 진달래꽃과 함께 우려내면 그 효과가 듬뿍 담긴 달콤한 향의 차가 될 것이다.\\\n\\\n*낮에는 도무지 잠을 이룰 수 없게 만드는 무언가가 있는데, 이걸 마시면 해결될 것이다.*", + "book.spectrum.guidebook.azure_dike_equipment.name": "담청 방벽 장비", + "book.spectrum.guidebook.azure_dike_equipment.page0.text": "[남동석](entry://general/azurite)을 [파란색 안료](entry://general/pigment@blue)의 보호 특성과 결합한 결과는 내 호기심을 강하게 자극했다. 완성된 덩어리에 다시 손을 뻗었을 때, 뚫고 들어가는 데 꽤 힘이 드는 투명한 기운이 그 물질을 둘러싸고 있는 것 같았다.\\\n\\\n*이거 정말 흥미로워지겠는걸...*", + "book.spectrum.guidebook.azure_dike_equipment.page1.text": "마법의 기운이 내 몸을 둘러싸고 외부의 피해로부터 나를 보호해 준다.\\\n느리지만 꾸준하게 일정량까지 충전된다.\\\n\\\n[#](2c2e8e)담청 방벽[#]() 장비를 하나씩 착용할 때마다 최대 보호막의 양이 증가한다.", + "book.spectrum.guidebook.azure_dike_equipment.page1.title": "담청 방벽", + "book.spectrum.guidebook.azure_dike_equipment.page2.text": "- [#](2c2e8e)담청 방벽[#]() [#](495b24)6[#]() 단위 부여\n- [#](2c2e8e)담청 방벽[#]() 충전속도 증가", + "book.spectrum.guidebook.azure_dike_equipment.page3.text": "- [#](2c2e8e)담청 방벽[#]() [#](495b24)8[#]() 단위 부여\n- 피격 후 [#](2c2e8e)담청 방벽[#]()의 회복력을 증가시켜 더 빨리 재충전을 시작함", + "book.spectrum.guidebook.azure_dike_equipment.page4.text": "[색상 추출기](entry://ink/color_picker)에서 [파란색 잉크](entry://ink/ink)를 주입하면 부여되는 [#](2c2e8e)담청 방벽[#]()의 양이 증가한다.\\\n\\\n처음에는 적은 잉크만으로도 충분하지만, 레벨이 오를수록 요구되는 잉크의 양이 기하급수적으로 늘어난다.", + "book.spectrum.guidebook.azurite.name": "남동석", + "book.spectrum.guidebook.azurite.page0.text": "지하 깊은 곳에서 발견한 풍부한 푸른빛의 광석이다. 멀리서 봤을 때는 주변을 감도는 그 놀라운 기운이 아니었다면 거의 [청금석](item://minecraft:lapis_lazuli)으로 착각할 뻔했다. 남동석 원석에는 불순물이 많이 섞여 있다.\\\n\\\n안료의 에너지를 강화시킬 수 있는 것 같다.", + "book.spectrum.guidebook.azurite.page1.text": "남동석을 정제하는 것은 결코 쉬운 작업이 아니다.\\\n이렇게 정제된 남동석은 훨씬 더 다양한 조합에 사용할 수 있다.", + "book.spectrum.guidebook.azurite.growing.title": "남동석 성장시키기", + "book.spectrum.guidebook.bag_of_holding.page0.text": "[#](bb00bb)엔더 상자[#]()를 설치하고, 열어보고, 마법이 부여된 곡괭이로 다시 캐내는 짓은 결코 유쾌한 작업이 아니다.\\\n그래서 이 물건을 만들었다.", + "book.spectrum.guidebook.bag_of_holding.page1.text": "이제 그저 이것을 열기만 하면 [#](bb00bb)엔더 상자[#]()의 내용물이 바로 눈앞에 나타난다.", + "book.spectrum.guidebook.banner_patterns.name": "현수막 무늬", + "book.spectrum.guidebook.banner_patterns.page0.text": "내가 발견한 다양한 자원과 도구들을 [](item://minecraft:loom)에서 무늬로 직접 사용할 수 있다.", + "book.spectrum.guidebook.banner_patterns.page1.title": "바닐라 무늬", + "book.spectrum.guidebook.basal_marble.page0.text": "대리석과 다를 바 없는 이 변성암은 [울부짖는 첨탑](entry://dimension/howling_spires)에서 가장 흔하게 발견된다.\\\n\\\n여러모로 대리석과 비슷하지만, 이 광물은 강가의 돌과 비슷한 성질을 띠고 있는 것 같다. 이 암석들이 거센 급류 아래에서 형성되었다는 것은 내게 너무나도 명백하다.", + "book.spectrum.guidebook.basal_marble.page1.text": "*...만약 이것들이 깊은 지하의 대수층에서 형성되었다면, 도대체 어떻게 여기까지 올라오게 된 걸까? 이 은빛 재의 풍경은 예전에 지하의 바다였던 걸까?*", + "book.spectrum.guidebook.base_trinkets.name": "기본 장신구", + "book.spectrum.guidebook.base_trinkets.page0.text": "이 기본적인 장신구들은 더 발전된 형태의 장신구를 만들기 위한 훌륭한 출발점이 되어줄 것이다.\\\n모든 최종 장신구들은 [융합의 성소](entry://general/fusion_shrine)에서 만들어진다.", + "book.spectrum.guidebook.bedrock_anvil.page0.text": "나는 내 모루를 정말 많이 사용해왔다 (말 그대로 정말 많은 모루를 썼다). [아이템 분쇄](entry://general/item_crushing), 수리, 마법 부여를 하다 보면 내 철 주괴들이 남아나질 않는다.\\\n모루를 더 오래 쓰기 위해서, 아니, 사실상 절대 부서지지 않게 만들기 위해서 기반암은 가장 완벽한 선택으로 보인다.\\\n\\\n이것을 사용하면 무료로 아이템의 이름을 바꿀 수 있고, 수리 횟수 제한도 없다.", + "book.spectrum.guidebook.bedrock_anvil.page1.text": "또한 아이템에 설명을 추가할 수도 있고, 안료를 사용해 알록달록한 생기를 불어넣을 수도 있다.\\\n\\\n*전문가의 팁: \"\\n\"을 입력하면 텍스트가 여러 줄로 나뉜다.*\\\n*그리고 이름 칸을 비워두면 이름이 초기화된다.*", + "book.spectrum.guidebook.bedrock_armor.name": "기반암 방어구", + "book.spectrum.guidebook.bedrock_armor.page0.text": "지금까지 내가 찾은 가장 단단한 재료는 네더라이트였다. 하지만 [#](bb00bb)네더라이트 방어구[#]()를 수리하는 것은 방어구를 만드는 것보다 더 비싸게 먹혔다. 게다가 흠집이 날 때마다 보호력도 떨어졌다. 애초에 방어구가 절대 피해를 입지 않도록 만들 수 있다면 이 모든 문제는 해결된다.\\\n\\\n*결코 시들지 않는, 돌꽃이여.*", + "book.spectrum.guidebook.bedrock_armor.page1.text": "기반암 투구는 **발사체로부터 보호 V**가 부여되어 있다.", + "book.spectrum.guidebook.bedrock_armor.page2.text": "기반암 흉갑은 **보호 V**가 부여되어 있다.", + "book.spectrum.guidebook.bedrock_armor.page3.text": "기반암 레깅스는 **폭발로부터 보호 V**가 부여되어 있다.", + "book.spectrum.guidebook.bedrock_armor.page4.text": "기반암 부츠는 **화염으로부터 보호 V**가 부여되어 있다.", + "book.spectrum.guidebook.bedrock_dust.page0.text": "기반암조차 내가 새롭게 창조해 낸 \"생명\"을 견뎌낼 만큼 단단하지 않았다. 마치 민들레가 콘크리트를 뚫고 피어나듯 기반암을 산산조각 내버렸다.", + "book.spectrum.guidebook.bedrock_dust.page1.text": "나 자신을 위한 메모: 만약 저 바깥에 여전히 [그 빌어먹을 것](entry://general/ruin)이 남아있는 상태에서 이 옛 노트를 읽고 있다면, 우선순위를 다시 생각해 보는 게 좋을 것이다. 그러지 않으면 *후회하게 될지도* 모른다.\\\n\\\n다행히도 나는 이미 [적절한 대항제](entry://general/decay_away)를 발명해 두었다.", + "book.spectrum.guidebook.bedrock_dust.page1.title": "친절한 알림", + "book.spectrum.guidebook.bedrock_dust.page2.text": "기반암 덩어리들은 너무나도 단단해서 평범한 [](item://minecraft:crafting_table)로는 가공할 수 없다. 하지만 나의 [안료 받침대](entry://general/pedestal)라면 문제없이 처리할 수 있다.", + "book.spectrum.guidebook.bedrock_dust.page2.title": "기반암 블록", + "book.spectrum.guidebook.bedrock_dust.page3.text": "이 블록들은 너무나도 단단해서 심지어 위더조차 뚫고 나오지 못할 것 같다.", + "book.spectrum.guidebook.bedrock_tools.name": "기반암 도구", + "book.spectrum.guidebook.bedrock_tools.page0.text": "새로운 세계에 들어설 때마다, 나는 며칠 동안이나 생각 없이 주민들을 모으고, 그들을 좀비로 만들었다가 다시 치료하는 짓을 반복하곤 했다. 그중 하나가 결국 내게 [#](449900)수선[#]() 책을 건네주길 바라면서 말이다. 이 모든 것은 그저 도구를 수리하기 귀찮다는 이유 하나 때문이었다.\\\n재미있지도 않고 윤리적이지도 않다. 이제 내게는 훨씬 더 인도적인 해결책이 생겼다.", + "book.spectrum.guidebook.bedrock_tools.page1.text": "기반암 곡괭이는 **섬세한 손길**이 부여되어 있다.", + "book.spectrum.guidebook.bedrock_tools.page2.text": "기반암 도끼는 **효율 VI**가 부여되어 있다.", + "book.spectrum.guidebook.bedrock_tools.page3.text": "기반암 삽은 **효율 VI**가 부여되어 있다.", + "book.spectrum.guidebook.bedrock_tools.page4.text": "기반암 검은 **날카로움 VI**가 부여되어 있다.", + "book.spectrum.guidebook.bedrock_tools.page5.text": "기반암 괭이는 **행운 IV**가 부여되어 있다.", + "book.spectrum.guidebook.bedrock_tools.page6.text": "기반암 활은 **힘 VI**가 부여되어 있다.", + "book.spectrum.guidebook.bedrock_tools.page7.text": "기반암 쇠뇌는 **빠른 장전 IV**가 부여되어 있다.", + "book.spectrum.guidebook.bedrock_tools.page8.text": "기반암 가위는 **효율 VI**가 부여되어 있다.", + "book.spectrum.guidebook.bedrock_tools.page9.text": "기반암 낚시대는 **바다의 행운 IV**가 부여되어 있다.", + "book.spectrum.guidebook.big_catch.page0.text": "나의 새로운 마법 낚시대들은 살아있는 생명체마저 끌어들이는 흥미로운 특성을 가지고 있다. 왜 이전의 따분한 낚시대들은 그러지 못했을까? 나도 모르겠다.\\\n\\\n이 마법 부여를 사용하면 살아있는 생물들을 낚을 확률을 한층 더 높일 수 있다.", + "book.spectrum.guidebook.big_catch.page1.text": "낚시할 때 살아있는 생물체를 낚을 확률을 증가시킨다.\\\n\\\n최대 레벨: 3\\\n스펙트럼의 낚시대에 적용 가능.", + "book.spectrum.guidebook.biomes.name": "심연의 생물군계", + "book.spectrum.guidebook.biomes.page0.text": "저 아래 깊은 곳의 구역이 얼마나 다채로울 수 있을지 여전히 상상조차 되지 않는다. 그러니까... 햇빛이 전혀 닿지 않는 곳에서 대체 무엇이 자랄 수 있다는 말인가? 햇빛과 물은 생명의 기본 조건이고, 적어도 햇빛만큼은...", + "book.spectrum.guidebook.biomes.page1.text": "내 입으로 뱉은 그 말을 스스로 반박할 수 있다면 정말 기쁠 것이다.", + "book.spectrum.guidebook.bismuth.cluster_crushing.text": "완전히 다 자란 군집을 분쇄하면 더 많은 조각을 얻을 수 있다.\\\n계산을 좀 해봤는데, 이 과정만으로도 충분히 자급자족이 가능해 보인다!", + "book.spectrum.guidebook.bismuth.crystal_crushing.text": "*뭐, 필요한 촉매와 잉크를 무시한다면 말이지만...*", + "book.spectrum.guidebook.bismuth.name": "비스무트", + "book.spectrum.guidebook.bismuth.page0.text": "무지개의 모든 색으로 반짝이는 금속이다.\\\n내가 수집한 작은 새싹들은 의미 있게 사용하기엔 너무 작다.\\\n\\\n싹 틔우는 블록 없이 이걸 어떻게 기를 수 있을까? 한 가지 눈치챈 점이 있다면, 이 봉오리들은 마치 신호기처럼 근처에 있는 금속 블록에 반응하는 것 같다는 것이다.", + "book.spectrum.guidebook.bismuth.page1.text": "금속 블록 전체를 희생하는 대신, [결정생성기](entry://ink/crystallarieum)가 제어 가능한 기질을 제공하여 훨씬 더 효율적으로 영양분을 공급할 수 있게 해 준다.", + "book.spectrum.guidebook.bismuth.page1.title": "비스무트 성장시키기", + "book.spectrum.guidebook.bismuth_trinkets.name": "비스무트 장신구", + "book.spectrum.guidebook.bismuth_trinkets.page0.text": "비스무트, 이 재료는 단숨에 내 흥미를 사로잡았다! 영롱하게 반짝이는 자태를 보니 애초에 보석의 재료가 될 운명이었음이 틀림없다. 그리고 갈고닦은 내 솜씨 덕에 실제로 이걸 형태를 잡아 깎아내는 데 성공했다. 아름답기 그지없다.", + "book.spectrum.guidebook.bismuth_trinkets.page1.text": "항상 약간 따스하며, 어둠 속에서도 은은하게 빛을 낸다. 왜 그런지는 스스로에게 묻지 않는 편이 좋겠다.", + "book.spectrum.guidebook.black_hole_chest.page0.text": "호퍼의 문제점은 속도도 느릴 뿐만 아니라, 그 범위가 너무 좁아서 거대한 농장에 쓰기엔 영 부적합하다는 것이다.\\\n\\\n약간의 파란색 안료만 곁들이면, 이 상자처럼 생긴 기계 장치 주변의 넓은 반경 안에 있는 모든 아이템을 아주 쉽게 빨아들여 보관할 수 있다.", + "book.spectrum.guidebook.black_hole_chest.page1.text": "반경은 12블록이다. 위에 완전한 블록을 올려두면 비활성화할 수 있다. [필터](entry://magical_blocks/filtering) 기능을 제공하여 어떤 아이템을 빨아들일지 지정할 수도 있다.", + "book.spectrum.guidebook.black_hole_chest.page2.text": "블랙홀 상자 안에 [지식의 보석](entry://enchanting/knowledge_gem)을 넣어두면 주변의 경험치 구슬을 흡수하여 보석 안으로 그 경험치를 전송할 수 있게 된다.", + "book.spectrum.guidebook.black_hole_chest.page2.title": "경험치 흡수", + "book.spectrum.guidebook.black_langast.page0.text": "사방이 [자정의 용액](entry://general/midnight_solution) 투성이다.", + "book.spectrum.guidebook.black_langast.page1.text": "이곳의 거대한 땅덩어리가 모조리 죽음의 황무지로 변해버리다니, 도대체 무슨 일이 있었던 걸까? 분명 어떤 끔찍한 사고가 있었을 것이다. 무엇이든, 혹은 누구든 간에 이 사태의 책임이 있는 자는 분명 [내가 겪었던 것과 비슷한 경험](entry://general/midnight_aberration)을 했을 테지... 훨씬 더 비극적인 결말을 맞이했겠지만.\\\n\\\n이곳에서 자라나는 *무언가*는 식물이라 부르기엔 [#](bb00bb)마른 덤불[#]()에게조차 모욕일 만큼 도저히 건강해 보이지 않는다.", + "book.spectrum.guidebook.blackslag.page0.text": "지저 너머의 하층부 대부분을 구성하고 있는 흔하고 어두우며 단단한 돌이다.", + "book.spectrum.guidebook.blackslag.page1.text": "[](item://minecraft:blast_furnace)는 [](item://minecraft:furnace)보다 이 돌을 훨씬 빠르게 구워낸다.", + "book.spectrum.guidebook.blackslag.page2.text": "벽돌과 타일은 금이 갈 수 있다.", + "book.spectrum.guidebook.block_breaker.page0.text": "블록을 파괴하는 단순하지만 효과적인 방법이다. 매우 정교하거나 자세한 설정이 있는 건 아니지만, 설치하기 쉽고 매우 작다.\\\n\\\n레드스톤 신호를 주면 바로 앞에 있는 블록을 파괴한다.", + "book.spectrum.guidebook.block_breaker.page1.text": "철 등급의 블록까지 파괴할 수 있다.", + "book.spectrum.guidebook.block_checklist": "블록 체크리스트", + "book.spectrum.guidebook.block_detector.page0.text": "[#](bb00bb)관측기[#]()와 비슷하지만, 조금 더 구체적이다.\\\n자신의 아래에 있는 블록과(만약 아래를 향하고 있다면 위에 있는 블록과) 일치하는 블록이 앞에 놓일 때마다 [#](449900)레드스톤 신호[#]()를 내보낸다.", + "book.spectrum.guidebook.block_flooder.page0.text": "마치 원시인처럼, 나는 언제나 주변의 동굴을 밝히거나 그 흉측한 입구들을 막으려 사방을 뛰어다녀야만 했다. 이 성가신 일에서 벗어나고자, 나는 [쇠퇴](entry://general/fading)의 자가 복제 능력에서 영감을 얻어 블록 범람기를 개발했다.\\\n이걸 좁은 길이나 연못, 협곡에 던져 넣으면 순식간에 블록으로 가득 차게 된다. 5%% 꼴로는 결과물이 제법 봐줄 만하게 나오기도 한다!", + "book.spectrum.guidebook.block_flooder.page1.text": "빈 공간을 채우기 위해 내 인벤토리에서 일치하는 블록을 직접 끌어온다. 일치하는 블록이 없다면, [](item://minecraft:cobblestone)을 대신 사용한다.", + "book.spectrum.guidebook.block_placer.page0.text": "블록을 자동으로 부수거나, 무게를 재거나, 분류하거나, 상자에 집어넣는 일은 쉽다. 하지만 이전의 내 모든 기계들이 절대 할 수 없었던 한 가지가 바로 '블록을 배치하는 것'이었다. 이제 그것도 다 옛말이 되었다.\\\n물질과 강한 친화력을 지닌 [토파즈](entry://general/shards@topaz)의 힘을 빌려, 인벤토리 안의 블록들을 현실로 구현해 낼 수 있게 되었다.", + "book.spectrum.guidebook.block_placer.page1.text": "*정말로 작동한다!*", + "book.spectrum.guidebook.block_variants.name": "현무암 & 방해석", + "book.spectrum.guidebook.block_variants.page0.text": "외부의 영향으로부터 내 소중한 보석들을 보호해 주던 이 블록들도 정동 그 자체의 마법적인 성질을 조금은 흡수한 걸까?\\\n누가 알겠는가. 어쨌든 이 돌들은 확실히 예쁘고, 아주 훌륭한 건축 블록이 되어준다.", + "book.spectrum.guidebook.block_variants.page1.text": "방해석의 찬란한 하얀색은 아마 내가 본 자연의 색 중 가장 밝은 빛일 것이다. 매우 깨끗해 보이며 고결함을 내뿜는다. 이는 현무암의 어둡고 숭고한 톤과 아름다운 대비를 이룬다.", + "book.spectrum.guidebook.block_variants.page1.title": "기본 변형", + "book.spectrum.guidebook.block_variants.page2.text": "열을 가하면 그들의 밝고 어두운 질감이 한층 더 뚜렷해진다.\\\n현무암을 구워내면 거의 새카맣게 변한다. [](item://minecraft:crafting_table)나 [](item://minecraft:stonecutter)를 사용하여 매우 다양하고 장식적인 블록들로 가공할 수 있다.", + "book.spectrum.guidebook.block_variants.page3.title": "변형 요약", + "book.spectrum.guidebook.block_variants.page6.text": "[아이템 분쇄](entry://general/item_crushing)를 사용하면 벽돌과 타일에 금을 가게 할 수 있다.", + "book.spectrum.guidebook.blood_orchid_petal.page0.text": "이 잎사귀들은 내가 단 한 번도 본 적 없는 꽃에서 떨어진 것 같다. 한때 여기서 피어났던 걸까? 아니면 나보다 먼저 이곳에 왔던 이들이 기르던 걸까? 어쩌면 내가 그 존재조차 모르는 다른 세계에서 가져온 기념품일지도 모른다.\\\n그런데도 마치 고작 5분 전에 갓 꺾은 것처럼 싱싱해 보인다.", + "book.spectrum.guidebook.blood_orchid_petal.page1.text": "\\\n\\\n\\\n\\\n나는 이 꽃잎을 만질 때마다 어떤 감각을 느낀다.\\\n*불안감*.", + "book.spectrum.guidebook.blood_orchid_products.name": "혈난초 가공품", + "book.spectrum.guidebook.blood_orchid_products.page0.text": "[혈난초](entry://general/blood_orchid) 추출물을 섭취하면 매우 강렬한 효과가 나타난다. 생명체를 극도의 [#](449900)광란[#]() 상태에 빠뜨리는 것이다.\\\n적을 처치할 때마다 공격력, 공격 속도, 이동 속도, 밀침 저항이 증가한다. 효과의 레벨이 높을수록 버프도 강력해진다. 하지만 10초 내에 처치를 기록하지 못하면 오히려 디버프가 걸린다.", + "book.spectrum.guidebook.blood_orchid_products.page1.text": "새로운 [#](449900)광란[#]() 효과를 부여하면 지속 시간이 초기화되는 것이 아니라 그 위력이 증가한다.\\\n\\\n이 효과를 최대한 활용하려면, 먼저 지속 시간이 긴 효과를 부여한 뒤 짧지만 더 강력한 효과들을 중첩시켜야 한다.", + "book.spectrum.guidebook.blood_orchid_products.page1.title": "광란 중첩", + "book.spectrum.guidebook.blood_orchid_products.page2.text": "혈난초 꽃잎의 유효 성분을 걸쭉한 용액으로 추출해 내는 데 성공했다. 장미수와 비슷한 향이 나지만, 그 효과는 확실히... *조금 더 격렬하다*.", + "book.spectrum.guidebook.blood_orchid_products.page3.text": "[#](449900)광란[#]() 효과가 약하게 시작되지만, 조금 더 오래 지속된다.", + "book.spectrum.guidebook.blood_orchid_products.page4.text": "[#](449900)광란[#]() 효과가 비교적 짧지만, 아주 강력하게 시작된다.", + "book.spectrum.guidebook.blood_orchid_products.page5.text": "정말 역겨운 양조주다. 맛도 딱 예상한 그대로다.", + "book.spectrum.guidebook.blood_orchids.page0.text": "[공명 백합](entry://general/resonant_lily)! 정말 보기 드문 꽃이다. 겉보기엔 어떤 식으로든 혈난초와 연관이 있는 것 같다 (비록 혈난초의 에너지가 금세 꽃을 잠식해버리긴 하지만).", + "book.spectrum.guidebook.blood_orchids.page1.text": "뭐, 대체 무슨 일이 일어나겠어? 꽃잎이나 뜯을 수 있는 또 다른 식물을 하나 얻게 되길 바랄 뿐이다.", + "book.spectrum.guidebook.bloodstone.name": "혈석", + "book.spectrum.guidebook.bloodstone.page0.text": "[찬란한 깃털](entry://creating_life/resplendent_feathers)에서 떨어진 피의 반점들이 결정화되어 눈부신 진홍빛으로 반짝이고, 의지적인 마법을 흘리고 있다!", + "book.spectrum.guidebook.bloodstone.page1.text": "***[#](ff3d71)비정상적일[#]()*** 정도의 많은 [#](bb00bb)구리[#]()를 주입하면, 생기 넘치는 빨간색의 거대한 유리 판으로 자라날 것이다.", + "book.spectrum.guidebook.bloodstone.page1.title": "혈석 정제", + "book.spectrum.guidebook.bottomless_bundle.page0.text": "지하를 여행하다 보면 평범하고 똑같이 생긴 블록들을 잔뜩 모으게 되고, 이것들은 분명 쓸 일이 없을 것이다. 뭐, 그게 중요한 건 아니다! 난 절대 저장 강박증 환자가 아니다, *맹세한다*.\\\n\\\n바닥없는 꾸러미는 사실상 무한한 양의 아이템을 저장할 수 있지만, 오직 한 가지 종류만 넣을 수 있다.", + "book.spectrum.guidebook.bottomless_bundle.page1.text": "내 인벤토리에서 아이템 묶음이나 빈 슬롯에 대고 우클릭하면 꾸러미를 채우거나 비울 수 있다.", + "book.spectrum.guidebook.bottomless_bundle.page2.text": "웅크린 채로 사용하면 바닥에 설치할 수 있으며, 이 상태에서는 자동으로 아이템을 넣고 뺄 수 있게 된다.", + "book.spectrum.guidebook.bottomless_bundle.page2.title": "자동화", + "book.spectrum.guidebook.bottomless_bundle.page3.text": "바닥에 설치된 바닥없는 꾸러미는 마지막으로 넣었던 아이템으로 '고정'되기 때문에 필터로 활용할 수도 있다.\\\n\\\n*참고: 텅 빈 상태로 설치되면 처음으로 들어오는 아이템을 받아들이고 그 아이템으로 고정된다.*", + "book.spectrum.guidebook.bottomless_bundle.page4.text": "힘 마법이 부여되면 레벨당 용량이 10배씩 늘어난다.\\\n\\\n*이건 정말 **엄청난** 저장 공간이다. 힘 V를 부여하면 이걸 다 채울 수나 있을까?*", + "book.spectrum.guidebook.bottomless_bundle.page5.text": "공허의 저주를 부여하면 바닥없는 꾸러미의 용량을 초과하는 모든 아이템이 소멸된다.\\\n\\\n*이제 채굴할 때 쓸데없는 블록들이 길을 가로막을 일은 없을 것이다.*", + "book.spectrum.guidebook.brewers_handbook.page0.text": " *달의 투영*", + "book.spectrum.guidebook.brewers_handbook.page0.title": "심연을 위한 양조", + "book.spectrum.guidebook.brewers_handbook.page1.text": "안녕! 현재 지상과 지저 사이의 관계는 꽤나 나쁜 편이고, 슬프게도 상황은 점점 더 악화되기만 하는 것 같아. 그리고 내가 할 수 있는 일은 그리 많지 않지.\\\n\\\n그래서 시간을 좀 내어 지상에서 쓰이는 양조 레시피들을 잔뜩 모아왔어. 그리고 우리 지저에서 구할 수 있는 재료들로 만들 수 있게끔 보완했지. 이게 너희 모두에게 도움이 되기를 바라는 마음으로, 선물 삼아 이 책을 출판하게 되었어.", + "book.spectrum.guidebook.brewers_handbook.page10.text": "*목구멍을 타고 내려갈 때도, 위장에 도착했을 때도 타는 듯한 느낌이 들어.\\\n\\\n 누군가를 후끈 달아오르게 만들고 싶을 때 아주 좋지.*", + "book.spectrum.guidebook.brewers_handbook.page13.text": "안녕. 모두에게 더 많은 걸 전해주지 못해서 미안해. 이게 내가 간신히 몰래 들여올 수 있었던 전부야. 동굴 입구를 지나가는 모든 것들이 철저히 감시당하고 있고, 나조차도 지상 제국 황제들의 시선이 등 뒤를 태울 듯이 꽂히는 걸 느끼고 있어. 정말, 정말 더 많은 걸 해주고 싶었지만, 내가 가명을 써야만 한다는 사실 자체가 내 처지가 어떤지 말해주고 있을 거야. 이게 내가 할 수 있는 최선이야. 부디 이걸로 충분하기를 바랄게.", + "book.spectrum.guidebook.brewers_handbook.page13.title": "[숨겨진 페이지 1]", + "book.spectrum.guidebook.brewers_handbook.page14.text": "*이걸 성공시키는 데 정말 많은 노력이 필요했어. 이걸 통해, 너희는 혈난초 추출물을 훨씬 더 공격적으로 사용할 수 있게 될 거야. 최악의 상황이 오더라도, 이것이 너희에게 유리한 고지를 내어주길 바랄게.*", + "book.spectrum.guidebook.brewers_handbook.page15.text": " ...아스테라스\\\n이 메시지가 네게 닿기를 바랄게. 우리가 마지막으로 이야기를 나눈 이후로 상황은 그저 악화되기만 했어. 귀족들은 여전히 너를 노리고 있지만, 더 걱정스러운 건.... 그들이 전쟁을 준비하고 있다는 거야. 이젠 명백해졌어. 그들은 만개석을 원하고 있고, 그것을 위해서라면 어떤 희생이든 치를 각오가 되어 있어. 상황이 심각해질 거야. 부디 무사해야 해.\\\n *...네가 보고 싶어.*", + "book.spectrum.guidebook.brewers_handbook.page15.title": "[숨겨진 페이지 2]", + "book.spectrum.guidebook.brewers_handbook.page2.text": "\\\n이봐, 유리 복숭아는 황제들만의 전유물이 아니라고!\\\n\\\n우리도 충분히 즐길 수 있어! 빠르고 쉽게 따라 할 수 있는 이 레시피로 부드럽고 훌륭한 복숭아 크림 한 잔을 만들어 봐. 만약 달콤한 열매가 있다면, 사실 없어도 그 이유는 충분히 이해하지만, 아주 훌륭한 장식이 되어 줄 거야!", + "book.spectrum.guidebook.brewers_handbook.page2.title": "분홍빛 찻잔", + "book.spectrum.guidebook.brewers_handbook.page3.text": "*달콤한 열매 대신 호랑가시나무 열매를 넣지는 마. 그건 정말 끔찍하니까...*", + "book.spectrum.guidebook.brewers_handbook.page4.text": "\\\n저 황철석 덤불들... 아마 지저에서 내가 가장 좋아하는 장소일 거야. 그저 존재하는 것만으로도 얼마나 위험한지 알면서도, 덤불에는 그저 너무나도 아름다운 무언가가 있어.\\\n\\\n어쨌든! 그곳에서 자라는 덤불의 열매에는 독이 있지만, 우린 그걸 피해 갈 수 있지...", + "book.spectrum.guidebook.brewers_handbook.page4.title": "호랑가시나무 따뜻한 음료", + "book.spectrum.guidebook.brewers_handbook.page5.text": "*하지만 굳이 그 호랑가시나무 열매를 어떻게든 써먹어 보고 싶다면, 이쪽을 보라고.*", + "book.spectrum.guidebook.brewers_handbook.page6.text": "\\\n이건 벌꿀술이 아니야. 법적으로 벌꿀술이라고 부를 수 없고, 나 역시 이게 벌꿀술이 아니라는 점을 분명히 해야 할 의무가 있지.\\\n\\\n\\\n 그래서 말인데, 이 벌꿀술은 내가 꽤나 아끼는 레시피야. 벌이 없는 이 지하에서 꿀 와인을 대체할 방법을 알아내는 데 꽤 오랜 시간이 걸렸지만, 날 믿어. 이건 벌꿀술을 완전히 뛰어넘는 진짜배기 맛이니까.", + "book.spectrum.guidebook.brewers_handbook.page6.title": "꿀 와인 아님", + "book.spectrum.guidebook.brewers_handbook.page7.text": "*벌꿀술이 절대, 절대 아니라고.*", + "book.spectrum.guidebook.brewers_handbook.page9.text": "\\\n균사피, 너희들이 지하에서 쓰는 그 시나몬을 닮은 기묘한 향신료 말이야. 솔직히 난 그 향신료가 정말 마음에 들어. 그걸 맡고 있으면 내가 지저에서 보냈던 길고도 부드러웠던 밤들이 떠오르거든. 대부분의 사람들처럼 나 역시 그 향신료에서 따뜻함과 안락함을 느끼지만, 나에게는 그 기저에 짙은 그리움이 깔려있어...", + "book.spectrum.guidebook.brewers_handbook.page9.title": "마음을 위한 온기", + "book.spectrum.guidebook.poisoners_handbook.page0.title": "은빛과 벨벳", + "book.spectrum.guidebook.poisoners_handbook.page0.text": "깊은 빛의 꿈, 평화의 시대에 대한 꿈... 아주 오래전의 일이지만 여전히 내 기억 속엔 너무나도 생생하다.\\\n\\\n벨벳의 바다 한가운데서 일렁이는 은빛 실가닥이 자아내는 참으로 아름다운 광경. 그것은 나를 어루만지고 이끌어주어, 버려진 별들을 향해 시선을 두게 해주었다.\\\n고위의 천체로부터 선물을 받았지만, 나는 호기심 많은 어느 사내를 만나기 전까지 그 선물을 어떻게 써야 할지 알지 못했다.", + "book.spectrum.guidebook.poisoners_handbook.page1.text": "그는 점성술사였다. 화염을 섬기는 자들의 문장을 지니고 있었음에도, 그의 충성심은 미로스 황제를 향한 것이 아니었다.\\\n\\\n그는 나와 같은 진리를 보았으나, 나와는 달리 용감했다. 그는 꿈결에 물든 성좌인 바로 그 별들을 찾아 헤맸고, 그 안에서 진리를 찾아냈다. 그리고 그가 우리 곁에 머물던 시절, 그는 자신이 얻은 깨달음을 내게 전수하기로 마음먹었다.", + "book.spectrum.guidebook.poisoners_handbook.page1.title": "기억 속에서", + "book.spectrum.guidebook.poisoners_handbook.page2.text": "내가 길을 잃고 두려움에 떨고 있을 때, 그는 나를 찾아내어 안식을 주었다. 나는 막 내 동족들에게 쫓겨난 참이었다. 화염의 축복을 받지 못했다는 이유로 내 혈육들에게마저 버림받은 것이다.\\\n\\\n그는 내게 형제들의 길을 가르쳐 주었다. 죄인과 방관자의 길, 꿈꾸는 자와 독살자의 길을.\\\n\\\n그리고 나는 기꺼이 이 운명을 즐겼다.", + "book.spectrum.guidebook.poisoners_handbook.page3.text": "그가 나를 제자로 거둔 이후로, 나는 줄곧 이 일지를 써 왔다. 중요한 교훈을 기록하고 우리가 함께한 여정에서 있었던 주목할 만한 모든 일들을 적어 내려갔다... 하지만 이제 그가 떠났기에, 나는 이 핸드북을 그에게 바치기로 결심했다.\\\n\\\n*영원히 기억할 테지만, 결코 입 밖으로 내지는 않으리라.*\\\n*그는 자신의 이름이 감추어지길 바랐으며, 나는 죽는 날까지 그의 뜻을 기릴 것이다.*\\\n**~ 만시**", + "book.spectrum.guidebook.poisoners_handbook.page4.title": "승리...", + "book.spectrum.guidebook.poisoners_handbook.page4.text": "*이곳에 기록을 남긴다.*\\\n\\\n*어느 승리의 기억을.*\\\n\\\n*그 찬란함, 그 매혹을...*\\\n\\\n*...순수하고 진실된 에테르 파편의 자태를.*\\\n\\\n*금과 진홍을 상대로 거둔 은빛과 벨벳의 작은 승리. 무력이 아닌, 부드러움으로 쟁취해 낸 전리품을.*", + "book.spectrum.guidebook.poisoners_handbook.page5.title": "...", + "book.spectrum.guidebook.poisoners_handbook.page5.text": "*고요한 배신은 성공적이었다.\\\n이를 취하여 넥타르를 하사했다.*", + "book.spectrum.guidebook.poisoners_handbook.page6.title": "정원의 은신처", + "book.spectrum.guidebook.poisoners_handbook.page6.text": "오늘은 정말 경이로운 날이다. 스승님과 그의 동료들이 모여, 다 함께 나를 승격시키기로 합의했다.\\\n\\\n내가 이 은신처의 관리자로 선택된 것이다!\\\n\\\n얼마나 영광스러운 일인가... 용들의 배신 이후 수많은 이들이 이곳으로 몰려들고 있어 해야 할 일이 태산이지만, 결코 실망시키지 않겠다.", + "book.spectrum.guidebook.poisoners_handbook.page7.text": "이 복도들이 쥐죽은 듯 고요했던 시절이 아직도 기억난다. 덤불 속 깊은 곳에 숨겨진 채 떨어지는 잎사귀들을 비처럼 맞던 침묵의 정원. 그때는 훨씬 평온한 시기였지만, 온갖 배경을 가진 이토록 수많은 새로운 얼굴들을 맞이하는 일도 분명 즐겁다! 옛 시대의 길에 대한 한계가 사람들을 우리에게, 그리고 진리로 이끌었다.\\\n\\\n충분한 밤이슬을 구해오는 일이 꽤나 골칫거리가 되긴 했지만 말이다.", + "book.spectrum.guidebook.poisoners_handbook.page8.title": "라벤더 팅크", + "book.spectrum.guidebook.poisoners_handbook.page8.text": "관리자로서의 임무 외에도, 나의 가장 중요한 업무는 수면 유도 추출물을 수급하고 정제하는 일이다.\\\n\\\n독, 팅크, 약, 기름... 이 모든 것들을 만들기 위해 증류기는 밤낮으로, 내가 깨어 있을 때나 *깊은 교감*에 빠져들 때나 쉬지 않고 가동되어야 한다.\\\n\\\n물론 기구들을 다루는 데는 능숙했기에 큰 문제는 아니지만, 스트레스를 받는 건 사실이다.", + "book.spectrum.guidebook.poisoners_handbook.page9.text": "대부분의 수면 정수는 알코올에 쉽게 용해되기 때문에, 알코올은 밤의 연금술에서 매우 중요한 매개체다.\\\n\\\n*벨벳 브랜디는 호전적인 우리 형제들 사이에서 늘 수요가 넘쳐난다.*", + "book.spectrum.guidebook.poisoners_handbook.page10.text": "밤이슬은 밤의 연금술의 뿌리이자 심장이며, 모든 수면 마법의 기원이자, 고요한 바다를 향한 우리 여정의 심장이다.\\\n밤하늘처럼 반짝이며 부드러운 보랏빛으로 장식된 그 은빛 꽃들. 우리가 갈망하는 신성한 넥타르가 그곳에서 흘러나오지만, 밀수꾼들은 자취를 감추고 제국은 날로 흉흉해져 가니 그 공급이 갈수록 줄어들고 있다.\\\n\\\n결국 직접 기르는 것만이 유일한 해결책이다.", + "book.spectrum.guidebook.poisoners_handbook.page10.title": "밤이슬 가꾸기", + "book.spectrum.guidebook.poisoners_handbook.page11.text": "이 녹청색 덩굴들은 자신들과 함께 꿈꿀 또 다른 누군가를 갈망한다. 곁에서 잠에 빠져드는 이가 많을수록, 꽃을 피울 확률도 높아진다.\\\n\\\n*얼마 전에 만났던 루브레아라는 여인이 떠오른다. 그녀는 이 새싹들처럼 눈이 부시게 아름다웠고, 또 몹시 탐스러운 뒤태를 가졌었지... 그녀를 위해 꽃 한 송이를 남겨두는 게 좋겠다.*", + "book.spectrum.guidebook.poisoners_handbook.page11.title": "심해의 연꽃", + "book.spectrum.guidebook.poisoners_handbook.page12.text": "끝없는 바다는 나를 공포에 떨게 한다.\\\n\\\n그간 수없이 잠에 빠져들었지만, 그곳에는 무언가 깊고도 불길한 기운이 있다. 그저 엿보는 것만으로도, 그 바닥 없는 바다를, 그 끝을 알 수 없는 꿈을... 그것이...\\\n\\\n...\\\n\\\n나 자신의 겁많음이 부끄러울 따름이다.", + "book.spectrum.guidebook.poisoners_handbook.page13.text": "내가 간신히 용기를 쥐어짜 심연을 응시할 때마다, 빛나는 실가닥들을 목격하곤 했다. 끝없이 먹물처럼 퍼진 아지랑이를 뚫고 나오는 새하얀 은빛의 반짝임. 그 매혹적인 광채.\\\n그 빛의 가닥들이 우리를 인도한다.\\\n\\\n그것은 내게 기형적인 별자리들을 보여주었다. 내게, 아니 우리에게, 순수하고 진실된 창백한 빛을 찾으라고 속삭이던 그 별들을.", + "book.spectrum.guidebook.poisoners_handbook.page14.text": "만병통치약과 독약은 대다수의 생각보다 훨씬 더 비슷하다. 대개는 그저 복용량의 차이일 뿐이다.\\\n나로선 그러지 않았으면 좋겠지만, 우리가 수행해야 하는 의식들은 종종 그 아슬아슬한 경계선에 서기를 요구한다.\\\n\\\n넥타르를 머금은 이 경옥 추출물은 성유를 바르는 의식이나, 특히나 헌신적인 자들의 경우에는 직접 섭취하는 용도로 흔히 쓰이는 반응물이다.", + "book.spectrum.guidebook.poisoners_handbook.page14.title": "위태로운 도박", + "book.spectrum.guidebook.poisoners_handbook.page15.text": "*스승님께서 이걸 마실 때마다 보여주시는 그 평온함이란... 심지어 그분의 동료 점성술사들조차 종종 놀라곤 한다.*\\\n\\\n*그런 스승님의 극기는 언제 보아도 나를 경이롭게 한다.*", + "book.spectrum.guidebook.poisoners_handbook.page16.text": "오늘 드디어 이곳으로 돌아왔다. 루브레아와 시간을 보내기 위해 바리아로 떠나 2주 동안 요새를 비웠다. 용병인 그녀와 정원의 관리자인 나, 우리는 각자의 임무 때문에 자주 만나지는 못한다. 하지만 우리가 함께 보낸 시간은 그야말로 환상적이었다. 그녀는 정말 강하고, 거침없으며... 숨이 멎을 정도로 아름답다.\\\n\\\n...하지만 애석하게도 내가 지금 이 글을 쓰고 있는 진짜 이유는 그녀 때문이 아니다.", + "book.spectrum.guidebook.poisoners_handbook.page17.text": "오랜만에 돌아간 고향의 낯선 느낌에도 불구하고, 바리아는 내 기억 속의 모습과 크게 다르지 않았다. 하지만 걱정스러운 무언가가, 공기를 끔찍하게 짓누르는 무언가가 있었다.\\\n\\\n진달래 교단의 사절단이 그림자 속에 숨어 구석구석을 배회하고 있었다. 소문으로만... 듣긴 했지만, 제국군이 정말로 이단 심문을 시작할 줄은 꿈에도 몰랐다.\\\n\\\n**상황이 심각하다**.", + "book.spectrum.guidebook.poisoners_handbook.page18.text": "나... 나는 차마 이 글을 써 내려가기가 벅차다.\\\n오늘, 의식 교감을 거행하며 바닥 없는 바다로 깊이 빠져들었던 스승님께서... 깨어나지 못하셨다. 너무 깊이 잠수하신 나머지 텅 빈 황량한 바다에서 길을 잃고 마신 것이다.\\\n\\\n이제 어떻게 해야 할지 도무지 *모르겠다*. 가족들에게 버림받았던 나를 거두어 주신 분이었다. 내 눈물을 닦아주며 안심시켜 주셨고, 나를 지금의 모습으로 길러내셨다.\\\n스승님은... 내겐 아버지와 같은 분이셨는데, 이제 그가 떠나버렸다.", + "book.spectrum.guidebook.poisoners_handbook.page19.text": "천체의 바다처럼 어둡고 아득한 이 탁한 리큐어... 이것이 우리의 가장 기초적인 마법에 쓰이는 물건이다. 예전에는 스승님께서 제조법을 관리하셨지만, 이제는 온전히 내가 짊어져야 할 몫이 된 것 같다.\\\n\\\n*수면처럼, 죽음처럼.*\\\n*바다에서 길을 잃은 그가... 부디 자비를 찾았기를?*", + "book.spectrum.guidebook.poisoners_handbook.page20.text": "최근 정원 주변이 소름 끼치도록 고요해졌다. 원래도 너무 깊숙이 숨겨진 곳이라 스무 명 남짓한 사람들이 전부이긴 했지만... 이제는 그마저도 아무도 오지 않는다.\\\n\\\n\\\n당분간 이것이 내 마지막 일지가 될지도 모르겠다. 지금은 너무나도 조용하다...", + "book.spectrum.guidebook.poisoners_handbook.page21.text": "그저 아무 일도 일어나지 않는 평화로운 시기라거나, 스승님의 동료들이 애도의 시간을 가지느라 오지 않는 것이라고 믿고 싶다. 하지만 미로스의 이단 심문이 낳은 결과일까 봐 두렵다.\\\n바깥세상에 우리 형제들이 얼마나 살아남아 있을지도 모르겠고, 남은 자들마저 깊은 곳에 숨어버린 게 분명하다.\\\n\\\n*나 혼자 남았다.*", + "book.spectrum.guidebook.poisoners_handbook.page22.text": "\\\n내 머리 위로 발소리가 쿵쿵 울리는 게 들린다. 심문관들이다.\\\n\\\n이곳은 세상의 모든 것으로부터 그토록 멀리 떨어진 곳인데, 그들이 우리를 찾아냈을 리가 없다.\\\n누군가 나를 배신한 것이다. 그리고 이제 나는 이곳에서 외롭게, 또다시 버림받은 채 죽음을 맞이하겠지.\\\n\\\n*미로스... 이 빌어먹을 개자식아, 제발 뒈져버려라.*\\\n\\\n*(이곳의 글씨는 몹시 떨리고, 페이지는 눈물 자국으로 얼룩져 있다)*", + "book.spectrum.guidebook.poisoners_handbook.page23.text": "\\\n결코 놈들의 손에 붙잡힐 수 *없다*. 그들이 신성모독자들에게 무슨 짓을 저지르는지 잘 알고 있으니까.\\\n\\\n빠져나갈 길은 오직 하나뿐이다.\\\n\\\n나의 스승님께서 걸으셨던 길, 너무나도 두려워 따르지 못했던 바로 그 길... 이제 때가 되었다.\\\n\\\n**함께 갑시다**", + "book.spectrum.guidebook.poisoners_handbook.page24.text": "우리가 다루는 마법의 특성상, 의도치 않은 중독 사고는 꽤 흔하게 일어난다. 특히 수습생들 사이에서는 더더욱 우려스러운 일이다. 끝없는 바다로 안전하게 발을 내딛기 위해서는 다재다능하고 범용적인 해독제가 필수적이다.\\\n\\\n비취 덩굴 꽃의 추출물이 이에 매우 탁월하다고 알려져 있지만, 만족스러운 양을 구하기가 상당히 까다롭다.", + "book.spectrum.guidebook.poisoners_handbook.page24.title": "해독제", + "book.spectrum.guidebook.poisoners_handbook.page25.text": "*이 제조법은 내가 직접 고안해 낸 것이다. 새싹의 수면 특성을 이용해 추출물의 영혼을 진정시키고, 안정화시켜 순수한 형태로 보관할 수 있게 해준다.*", + "book.spectrum.guidebook.poisoners_handbook.page.text": "", + "book.spectrum.guidebook.poisoners_handbook.bitter_oils_1.title": "강력한 기름", + "book.spectrum.guidebook.poisoners_handbook.bitter_oils_1.text": "또 다른 유용한 공식이다.\\\n이 기름을 더 증류하면 그 효과가 훨씬 더 강력해질 것이다.", + "book.spectrum.guidebook.poisoners_handbook.bitter_oils_2.text": "이 기름은 문제들을 해결해 준다... *만약 그 문제가 타인이라면 말이다*.", + + "book.spectrum.guidebook.brown_is_weird.name": "갈색 안료?", + "book.spectrum.guidebook.brown_is_weird.page0.text": "아무리 시도해 봐도 소용이 없었다. 묘목까지 사용해서 [보석 가루](entry://general/gemstone_powder)를 섞어봐도 도무지 [#](70400d)갈색[#]()을 만들어 낼 방법을 상상조차 할 수 없다. 내가 도달한 가장 근접한 색상은 물 빠진 주황색이었다. 으으.\\\n이렇게 어려울 리가 없는데. 그야... [#](70400d)흙도 갈색이고[#]() 내 주변에서 가장 흔하게 널린 게 흙이잖아.\\\n\\\n분명 방법이 있을 것이다...\\\n그리고 확신하건대 [#](000000)**검은색**[#]()이 그 해답이 될 것이다.", + "book.spectrum.guidebook.brown_is_weird.page1.link_text": "갈색은 기묘하다", + "book.spectrum.guidebook.brown_is_weird.page1.text": "\\\n\\\n\\\n\\\n\\\n\\\n*정말로, 나름 연구를 해봤다니까! 우리가 갈색을 인지하는 방식은 정말이지 매혹적이다!*", + "book.spectrum.guidebook.budding_onyx.page0.text": "[오닉스](entry://general/onyx_shards)를 만드는 것은 언제나 매우 까다로운 일이었다. 달의 위상에 전적으로 의존해야 했기 때문이다. [초승달 시계](entry://equipment/crescent_clock)라는 물건이 있긴 하지만, 나는 종종 그 짧은 시간의 창을 놓치곤 했다.\\\n오닉스를 다른 보석들처럼 키울 수 있게 된다면 내 소중한 시간을 많이 아낄 수 있을 것이다.\\\n\\\n*이상하게도, 똑같은 과정이 다른 보석들에게는 통하지 않는 것 같은데?*", + "book.spectrum.guidebook.budding_onyx.page1.text": "[자정의 기형물](entry://general/midnight_aberration)은 한 번에 대량으로 조합해 두는 것이 가장 좋다. 손안에서 너무나도 순식간에 부서져 내리는 것 같으니까.", + "book.spectrum.guidebook.calming.page0.text": "이걸 마시면 [#](449900)적의 생성과 공격성이 줄어드는 것 같다.[#]() 그 효과는 레벨에 비례한다. 심지어 대부분의 생명체들은 내가 평소보다 더 가까이 다가가는 것마저 용인해 줄 것이다.", + "book.spectrum.guidebook.calming.page1.text": "이 진정 효과가 나를 수면에 훨씬 더 취약하게 만드는 것 같군, 허.", + "book.spectrum.guidebook.calming.page1.title": "수면 (취약성)", + "book.spectrum.guidebook.category.brewing.name": "양조 & 효과", + "book.spectrum.guidebook.category.creating_life.name": "생명 창조", + "book.spectrum.guidebook.category.cuisine.name": "화가의 요리", + "book.spectrum.guidebook.category.decoration.name": "장식", + "book.spectrum.guidebook.category.dimension.name": "기반암 너머", + "book.spectrum.guidebook.category.enchanting.name": "마법 부여", + "book.spectrum.guidebook.category.equipment.name": "장비", + "book.spectrum.guidebook.category.general.name": "나의 여정", + "book.spectrum.guidebook.category.ink.name": "잉크", + "book.spectrum.guidebook.category.magical_blocks.name": "마법 블록", + "book.spectrum.guidebook.category.mod_integration.name": "모드 호환성", + "book.spectrum.guidebook.category.mod_integration.description": "여가 시간엔 가끔 다른 활동들을 즐기기도 한다!\\\n\\\n지식을 서로 교환한다는 건 정말 멋진 일이다.", + "book.spectrum.guidebook.category.pastel_network.name": "파스텔 네트워크", + "book.spectrum.guidebook.celestial_pocketwatch.page0.text": "[오닉스 조각](entry://general/onyx_shards)의 문제점은 제작 조건이 너무나도 구체적이라는 것이다. 신월의 밤은 매일 찾아오지 않는다. 게다가 당연하게도, 내가 시계를 볼 때마다 그 시간적 여유는 꼭 1분 차이로 아슬아슬하게 지나가 버린 것만 같았다.\\\n\\\n이제 비장의 무기를 꺼낼 때다, 바로 시간과 깊은 친화력을 지닌 자홍색이다.", + "book.spectrum.guidebook.celestial_pocketwatch.page1.text": "*정말 별처럼 눈부신 나의 아이디어다*", + "book.spectrum.guidebook.checklist_complete": "체크리스트 (완성)", + "book.spectrum.guidebook.checklist_upgrade": "체크리스트 (강화)", + "book.spectrum.guidebook.cheong.page0.text": "과일에 굳이 감미료를 더 넣을 필요가 있을까 생각했었다. 하지만 이렇게 설탕으로 걸쭉하게 끓여내니, 과일 본연의 풍미가 훨씬 더 훌륭하게 살아났다.", + "book.spectrum.guidebook.cheong.page1.text": "*마멀레이드도 아니고... 시럽도 아니고... 바로 청이다!*", + "book.spectrum.guidebook.chrysocolla.page0.text": "가장 최근에 시도한 와인 발효 결과물은 *조금* 너무 강력했다.\\\n엄청나게 쓰고 약간의 산미가 느껴지는 맛이다.\\\n본래의 속성을 일부 유지하고 있긴 하지만, 내 생각에 이건 마시는 것보다는 약으로 쓰는 게 더 유용할 것 같다.", + "book.spectrum.guidebook.cinderhearth.page0.text": "[#](e16201)주황색 잉크[#]()를 소모하여 광석 따위를 제련하는 내 예술 작품 같은 최첨단 용광로다.\\\n\\\n[강화기](entry://magical_blocks/upgrades)를 사용하여 그 능력을 한층 더 끌어올릴 수 있다.", + "book.spectrum.guidebook.cinderhearth.page1.text": "[지식의 보석](entry://enchanting/knowledge_gem)을 넣으면 제련을 통해 얻는 경험치가 보석 안으로 빨려 들어갈 것이다.", + "book.spectrum.guidebook.cinderhearth.page2.text": "강화기는 두 개의 조각된 블록 위에 배치해야 한다.", + "book.spectrum.guidebook.cinderhearth.page3.text": "- 1 잿불화로\n- 21 윤나는 블록\n- 6 문장 블록\n- 5 유리와 유사한 블록\n- 2 조각된 블록\n- 6 용암 양동이\n\n\\\n*어차피 [#](e16201)잉크[#]()가 있는데 굳이 밑에 [#](bb00bb)용암[#]()을 깔아야 했냐고*?\\\n아니, 사실 그럴 필요는 없었다. 하지만 이렇게 해놓는 게 보기에. 훨씬. 더. 좋잖아.", + "book.spectrum.guidebook.cinderhearth.page4.text": "[#](bb00bb)조각된 블록[#]() 위에 배치된 [강화기](entry://magical_blocks/upgrades)는 그 종류에 따라 추가적인 [잉크](entry://ink/ink)를 요구한다. 강화기의 레벨이 높을수록 잉크 소모량도 증가한다.", + "book.spectrum.guidebook.cinderhearth.page4.title": "강화", + "book.spectrum.guidebook.cinderhearth.page5.text": "- 속도 ([#](aa32a0)자홍색 잉크[#]()):\n제련 시간이 빨라짐\n- 생산량 ([#](258ac8)하늘색 잉크[#]()):\n결과물이 배로 늘어날 확률 부여\n- 경험치 ([#](ff4ff6)보라색 잉크[#]()):\n경험치 획득량을 크게 증가시킴\n- 효율 ([#](302951)검은색 잉크[#]()):\n[#](e16201)주황색[#]()을 포함한 다른 모든 종류의 잉크 소모량을 크게 감소시킴", + "book.spectrum.guidebook.circlet_of_arrogance.page0.text": "바로 이거다. 승천, 궁극의 버프. 이를 착용 가능한 형태로 만든 것이다.\\\n\\\n매번 너무 세게 맞을 때마다 내 존재 자체가 위태로워지지 않았다면 (그 대가가 너무 크긴 하지만) 나는 주저 없이 1초 만에 이걸 썼을 것이다.\\\n내가 정말 이걸 써야 할까...?\\\n\\\n당연하지.", + "book.spectrum.guidebook.circlet_of_arrogance.page1.text": "*교만은 패망의 선봉이다.*", + "book.spectrum.guidebook.clover.clover.text": "평원과 다른 푸른 생물군계들은 생명력으로 싹을 틔우는 이 싱그러운 초록빛 클로버들의 고향이다.\\\n\\\n*오늘이 내 행운의 날일까?*", + "book.spectrum.guidebook.clover.clover_crushing.text": "이걸 분쇄하면 약간의 [](item://minecraft:green_dye)를 얻을 수 있다.", + "book.spectrum.guidebook.clover.four_leaf_clover.text": "정말로 그렇다!\\\n이 조그마한 행운의 상징이 언젠가 유용하게 쓰일 것이라 확신한다.", + "book.spectrum.guidebook.clover.four_leaf_clover_crushing.text": "이걸 분쇄하면 *꽤 많은* 초록색 염료를 얻을 수 있다.\\\n\\\n왜 염료가 훨씬 더 많이 나오냐고?\\\n당연히 잎사귀가 더 많으니까!", + "book.spectrum.guidebook.clovers_favor.page0.text": "아주 가끔씩, 나는 적을 쓰러뜨리고 단 하나의 희귀한 전리품을 얻는 행운을 누리곤 한다.\\\n[클로버](entry://general/clover)가 가진 행운의 성질을 접목하면 그 희박한 확률을 엄청나게 끌어올릴 수 있을 것이다.", + "book.spectrum.guidebook.clovers_favor.page1.text": "좀비에게서 [#](bb00bb)철 주괴[#]()를 얻는 등, 희귀한 전리품이 떨어질 확률이 증가한다.\\\n*가장 가치 있는 전리품을 얻을 확률마저 높여주지 않을까?*\\\n\\\n최대 레벨: 3\\\n근접 무기에 적용 가능.\\\n약탈과 동시에 부여할 수 없음.", + "book.spectrum.guidebook.color_mixing_black.name": "검은색 혼합", + "book.spectrum.guidebook.color_mixing_black.page0.text": "*안녕 어둠이여 나의 오랜 친구여*", + "book.spectrum.guidebook.color_mixing_black.page1.text": "\\\n\\\n\\\n오닉스의 칠흑 같은 어둠 덕분에 나는 몇 가지 색을 더 조합해 낼 수 있게 되었다. 여전히 완벽하진 않지만, 환상적인 진전이다!\\\n\\\n이제 회색조는 어떡하지? 아마 또 다른 아이디어가 떠오르겠지...", + "book.spectrum.guidebook.color_mixing_cmy.name": "색상 혼합", + "book.spectrum.guidebook.color_mixing_cmy.description": "색상을 혼합하는 방법과 혼합하지 않는 방법", + "book.spectrum.guidebook.color_mixing_cmy.page0.text": "원색인 [#](157687)청록색[#](), [#](aa32a0)자홍색[#](), [#](f0af15)노란색[#]()을 섞으면 어떤 색이든 만들어낼 수 있다!\\\n*...이론상으로는 말이지*.", + "book.spectrum.guidebook.color_mixing_cmy.page1.text": "[보석 가루](entry://general/gemstone_powder)를 직접 섞어보려던 내 시도는 그리 성공적이지 못했다. 그저 조합창에 함께 올려두는 것만으로는 어림도 없었다.\\\n\\\n하지만 이제 나에게 또 다른 아이디어가 생겼다.\\\n내 보석들이 자연과 깊은 유대감을 지니고 있다는 점은, *자연* 그 자체가 해답이 될 수도 있다는 것을 암시한다!\\\n\\\n[이 레시피](entry://general/colored_trees)는 꽤나 유망해 보이고 시도해 볼 만한 가치가 있다! 나는 [보석 가루](entry://general/gemstone_powder)를 사용하여 [#](bb00bb)묘목[#]()을 매개체로 삼아 색을 주입해 보았다.", + "book.spectrum.guidebook.color_mixing_white.name": "하얀색 혼합", + "book.spectrum.guidebook.color_mixing_white.page0.text": "*모든 색의 스펙트럼*", + "book.spectrum.guidebook.color_mixing_white.page1.text": "\\\n\\\n**정말 놀랍다!**\\\n\\\n그토록 길고 고된 여정과 수많은 실패 끝에 모든 색의 스펙트럼을 마주하게 되니 가슴이 벅차오른다. 내 붓끝을 타고 다음엔 또 어떤 창조적인 혁신이 흘러나올지 너무나도 기대된다.", + "book.spectrum.guidebook.color_picker.page0.text": "[안료](entry://general/pigment)를 순수한 [잉크](entry://ink/ink)로 변환하여, [잉크 플라스크](entry://ink/ink_flask) 같은 용기에 담아 옮길 수 있게 해준다.\\\n\\\n불행히도 [잉크가 전달되는 방식](entry://ink/ink@transfer) 때문에 항상 조금씩 남게 된다. 좀 짜증 나긴 하지만... 그래도 장점이 없는 건 아니다. 용기 간의 잉크 잔량 차이가 클수록 전송 속도가 훨씬 빨라진다!", + "book.spectrum.guidebook.color_picker.page1.text": "*감당할 수 없는 열정은 결코 키우지 마라. 그것은 책벌레처럼 네 심장을 갉아먹을 것이다.*", + "book.spectrum.guidebook.colored_lamps.name": "채색된 조명", + "book.spectrum.guidebook.colored_lamps.page0.text": "마침내 색을 제대로 혼합하는 데 성공했다! 나의 새로운 [안료](entry://general/pigment)의 특성을 당장 시험해 보는 것보다 더 자연스러운 일이 있을까?\\\n\\\n*이제 평범한 [#](bb00bb)레드스톤 조명[#]()은 질릴 대로 질렸다. 색을 좀 더해볼 시간이다!*", + "book.spectrum.guidebook.colored_lamps.page1.text": "이 조명들은 활성화되면 생생하고 다채로운 빛으로 주변을 물들인다.", + "book.spectrum.guidebook.colored_spore_blossoms.name": "채색된 포자 꽃", + "book.spectrum.guidebook.colored_spore_blossoms.page0.text": "어느 날, 잎이 무성한 동굴을 헤매던 중 나는 허공을 가로지르며 팔랑이는 수많은 꽃잎들을 발견했다.\\\n\\\n나는 그 광경에 완전히 매료되어, 나만의 다채로운 포자 꽃을 만들어 보기로 결심했다. 아름답지 않은가?", + "book.spectrum.guidebook.colored_spore_blossoms.page1.text": "다양한 안료를 선택하여 꽃잎을 내가 원하는 수많은 색깔로 물들일 수 있다.\\\n\\\n이 레시피는 색상마다 정해진 [보석 가루](entry://general/gemstone_powder)의 조합을 필요로 하며, 이는 [내가 색을 섞을 때 기록해 두었던 비율](entry://general/color_mixing_cmy)과 일치한다.", + "book.spectrum.guidebook.colored_trees.name": "색깔 나무", + "book.spectrum.guidebook.colored_trees.page0.text": "내 안료를 무언가 유기적인 것과 섞어야 한다. 수많은 실험 끝에, 나는 [#](bb00bb)묘목[#]()의 뿌리가 [보석 가루](entry://general/gemstone_powder)에 담긴 색상을 매우 쉽게 흡수한다는 사실을 알아냈다. 작디작은 줄기와 갓 돋아난 첫 잎사귀들 사이로 순수한 색채가 벌써부터 고동치고 있다.\\\n\\\n이것들이 완전히 자라나면 과연 어떤 모습이 될까?", + "book.spectrum.guidebook.colored_trees.page1.text": "이 레시피는 색상마다 정해진 [보석 가루](entry://general/gemstone_powder)의 조합을 필요로 하며, 이는 [내가 색을 섞을 때 기록해 두었던 비율](entry://general/color_mixing_cmy)과 일치한다.\\\n\\\n잎사귀는 내가 직접 부숴야 할 것이다.", + "book.spectrum.guidebook.colored_trees.crafting_colored_saplings.title": "채색된 묘목 만들기", + "book.spectrum.guidebook.colored_trees.natural_generation.text": "세상에, 이 나무들이 내 주변에 줄곧 존재하고 있었는데 그걸 전혀 몰랐네! 저 바깥에 또 무엇이 숨겨져 있을지 누가 알겠는가.", + "book.spectrum.guidebook.colored_trees.natural_generation.title": "자연 생성", + "book.spectrum.guidebook.colored_trees.colored_wood.text": "색이 없고 마법이 깃들지 않은 평범한 나무들처럼, 이 나무들도 껍질을 벗겨낼 수 있고 판자, 계단, 반 블록, 버튼, 압력판, 울타리, 울타리 문을 만드는 데 사용할 수 있다.", + "book.spectrum.guidebook.colored_trees.colored_wood.title": "색깔 나무", + "book.spectrum.guidebook.colored_trees.leaf_crushing.title": "잎사귀 분쇄", + "book.spectrum.guidebook.colored_trees.leaf_crushing.text": "[채색된 잎사귀를 모루로 분쇄하면](entry://general/item_crushing) 항상 약간의 안료를 얻을 수 있다.\\\n\\\n*많은 양은 아니지만, 정직한 노동의 대가다.*", + "book.spectrum.guidebook.compacting_chest.page0.text": "내 창고에 산더미처럼 쌓여가는 석탄, 철, 구리, 금을 위한 새로운 보관 공간을 만드는 일은 진작에 신물이 났다. 마찬가지로 이것들을 조금이라도 뭉쳐보겠다고 하루 종일 조합만 하고 있는 것도 이젠 지긋지긋하다...\\\n\\\n압축 상자가 이 지루하고 단조로운 노동에서 내 손을 해방시켜 줄 것이다.", + "book.spectrum.guidebook.compacting_chest.page1.text": "이름이 모든 것을 말해준다.\\\n이 상자 안에 들어간 모든 아이템을 3x3, 2x2, 또는 1x1 패턴으로 뭉쳐 조합해 버리며, 상자 인벤토리에서 패턴을 전환할 수 있다.", + "book.spectrum.guidebook.compression": "압축", + "book.spectrum.guidebook.conflicting_enchantments.name": "마법 부여 숙련", + "book.spectrum.guidebook.conflicting_enchantments.page0.text": "내 장비에 서로 충돌하는 여러 마법 부여를 함께 걸지 못해 끙끙대던 과거의 문제들을 마침내 뒤로하고 떠나는 날이다.\\\n마법 부여의 숙련자로서, 이제 내 소망을 가로막는 것은 아무것도 없다.", + "book.spectrum.guidebook.conflicting_enchantments.page1.text": "이제 나는 마법 부여기를 사용하여 일반적으론 중복이 불가능한 마법 부여들도 함께 적용할 수 있게 되었다.\\\n\\\n*물론 그러한 행동에는 엄청나게 많은 경험치가 요구될 것이다.*", + "book.spectrum.guidebook.connection_node.name": "연결 노드", + "book.spectrum.guidebook.connection_node.page0.text": "가장 단순한 노드인 연결 노드는 그 자체로는 능동적인 역할을 하지 않는다.\\\n\\\n오로지 내 네트워크의 도달 범위를 아주 값싸고 눈에 띄지 않게 확장해 주는 역할만을 수행할 뿐이다.", + "book.spectrum.guidebook.connection_node.page1.text": "다른 모든 노드들과 마찬가지로, 연결 노드 역시 12블록의 범위를 가진다.", + "book.spectrum.guidebook.constructors_staff.page0.text": "나는 블록을 배치하는 데 정말 많은 시간을 보낸다. 어찌나 많은지 내 존재의 주된 이유가 이것 때문은 아닐까 믿어질 정도다. 하지만 비슷한 블록을 무더기로 배치하는 건 너무나도 지루한 일이다.\\\n\\\n아니, 정확히 말하자면, 지루한 일*이었다*.", + "book.spectrum.guidebook.constructors_staff.page1.text": "웅크린 상태에서는 일치하는 블록뿐만 아니라 모든 블록을 기반으로 영역을 확장한다.", + "book.spectrum.guidebook.cotton_cloud_boots.page0.text": "새처럼 하늘을 날아다니는 것은 나를 포함한 많은 이들의 오랜 꿈이었다.\\\n\\\n나는 그 꿈을 실현시키기 위해 이 부츠를 고안해 냈다. 이 자유로움은 거의 압도적일 지경이다! (*약간의 흠이 있어서 완벽하게 만들어내진 못했지만, 뭐 어쩌겠는가.*)", + "book.spectrum.guidebook.cotton_cloud_boots.page1.text": "달리기를 시작하는 즉시 내 발밑에 작은 구름들이 형성되기 시작할 것이다. 너무 푹신해서 그 위에서 점프는 할 수 없겠지만, 나를 공중에 안전하게 띄워두기에는 충분하다.\\\n\\\n다만 한 가지 주의할 점이 있다면,\\\n*저 높은 공중에서 달리기를 멈추지 않는 게 좋을 거란 사실이다*.", + "book.spectrum.guidebook.cracking": "균열 내기", + "book.spectrum.guidebook.crafting": "나는 [마법 부여기](entry://enchanting/enchanter) 주변을 [안료](entry://general/pigment)와 기타 필요한 재료들로 둘러쌈으로써, 이 마법을 [#](bb00bb)평범한 책[#]()에 불어넣을 수 있다.", + "book.spectrum.guidebook.crafting_tablet.page0.text": "제작 석판은 그저 휴대용 [](item://minecraft:crafting_table)를 훌쩍 뛰어넘는 물건이다. 내가 입력한 레시피를 기억해 두었다가, 나중에 내가 원할 때마다 언제든 그 조합을 수행하게 해준다.", + "book.spectrum.guidebook.crafting_tablet.page1.text": "살다 보면 특정 재료가 너무 자주 필요해서 아예 자동화해 버리고 싶어지는 때가 올 수도 있다. 아니면 어쩌면 내가 그저 할 수 있다는 이유만으로 모든 아이템을 자동화해 버리는 마조히스트가 될지도 모른다.\\\n\\\n[안료 받침대](entry://general/pedestal)에는 제작 석판을 위한 전용 슬롯이 마련되어 있다. 제작 석판을 끼워 넣고 호퍼를 통해 아이템을 공급해 주면, 저장된 레시피에 맞춰 척척 아이템들이 조합되어 나올 것이다.", + "book.spectrum.guidebook.crafting_tablet.page1.title": "받침대 자동화", + "book.spectrum.guidebook.crawfish.page0.text": "지난번 낚시 여행에서 뭍으로 건져 올린 게 뭔지 봐라! 이건 물고기가 아니라 *갑각류*다.\\\n\\\n이 녀석들은 심지어 그 [기괴하기 짝이 없는 연못](entry://magical_blocks/sludge)에서도 아주 잘 번식하는 것 같다.", + "book.spectrum.guidebook.creating_enchanted_books.name": "마법이 부여된 책 만들기", + "book.spectrum.guidebook.creating_enchanted_books.page0.text": "[안료](entry://general/pigment), 엄선된 재료들, 약간의 경험치를 사용하면 [마법 부여기](entry://enchanting/enchanter)를 통해 [평범한 책](item://minecraft:book)에 마법 부여를 새겨 넣을 수 있다.\\\n\\\n이 과정은 일반적인 마법 부여대를 사용할 때보다 더 많은 경험치를 소모하지만, 내가 원하는 마법 부여를 아주 세밀하게 통제하고 창조해 낼 수 있다는 장점이 있다.", + "book.spectrum.guidebook.creating_enchanted_books.page1.text": "나는 이 과정을 사용하여 나의 마법 도구들에 직접 마법을 부여할 수도 있다.", + "book.spectrum.guidebook.creature_manipulation.axolotls.text": "모든 색상의 아홀로틀에게 통한다.", + "book.spectrum.guidebook.creature_manipulation.name": "생물 조작", + "book.spectrum.guidebook.creature_manipulation.page0.text": "내 \"생명 창조\" 프로젝트는 지금까지는 절반의 성공에 불과했다. 하지만 이제 *무언가*를 성취해 낼 수 있을 거라는 확신이 차오르기 시작한다.\\\n\\\n무에서 유를 창조하는 것은 어려운 일이지만, 이미 존재하는 지식들을 결합하는 것이라면?\\\n\\\n프랑켄슈타인이 이런 기분이었을까? *이게 나를 나쁜 놈으로 만드는 걸까? 악당으로? 전혀 확신할 수는 없지만, 그럼에도 나는 기꺼이 시도해 볼 생각이다.*", + "book.spectrum.guidebook.creature_manipulation.parrots.text": "모든 색상의 앵무새에게 통한다.", + "book.spectrum.guidebook.creature_manipulation.shulkers.text": "모든 색상의 셜커에게 통한다.", + "book.spectrum.guidebook.creatures.name": "지저의 생물들", + "book.spectrum.guidebook.creatures.page0.text": "이 끝없는 어둠 속 아래에 이렇게나 많은... 생명체가 있을 줄은 상상도 못 했다. 아니, 애초에 무언가 존재할 거라고 기대하지도 않았다.\\\n\\\n저 아래에는 과연 어떤 것들이 득실거리고 있을지 정말 궁금해진다.", + "book.spectrum.guidebook.creatures.page1.text": "내 이 호기심을 후회하게 되지 않기만을 바란다.", + "book.spectrum.guidebook.crescent_clock.page0.text": "시간의 증인들로 구성된 이 시계는 시작과 끝이 끝없이 반복되는 흐름인, 바로 달의 위상 속에서 나를 인도해 줄 것이다.\\\n\\\n\\\n\\\n*우리 그림자들이 심기를 거슬렀다면, 이것만 알아주시면 모든 게 해결되리.*", + "book.spectrum.guidebook.crescent_clock.page1.text": "*그저 이곳에서 선잠을 잔 것뿐, 이 모든 환상들이 스쳐 지나가는 동안.\\\n그리고 이 나약하고도 헛된 이야기는, 더 이상 아무것도 남기지 않는 그저 한낱 꿈일 뿐이리.*", + "book.spectrum.guidebook.crossbow": "쇠뇌", + "book.spectrum.guidebook.crystal_apothecary.page0.text": "[정동](entry://general/geodes) 안에 배치해 두면 완전히 다 자란 [#](bb00bb)보석 군집[#]()을 자동으로 수확한다.\\\n\\\n보통 내 다른 장치들이나 심지어 농작물들조차 내가 멀리 떨어져 있으면 시간 속에 얼어붙어 버리는데, 이건 그 법칙의 예외인 것 같다. 기묘하다.", + "book.spectrum.guidebook.crystal_apothecary.page1.text": "군집을 손으로 직접 부수는 것만큼 효율적이지는 않지만, 이 압도적인 편리함은 확실한 장점이다.", + "book.spectrum.guidebook.crystal_apothecary_harvesting": "[수정 채집장](entry://ink/crystal_apothecary)은 [#](bb00bb)수정[#]()을 자동으로 수확할 수 있다. 심지어 내가 정동 근처에 없더라도 말이다!", + "book.spectrum.guidebook.crystal_flowers.name": "수정 꽃", + "book.spectrum.guidebook.crystal_flowers.page0.text": "심연의 수정 정원은 그야말로 경이로운 구경거리다. 말할 거리가 산더미처럼 많지만, 그중에서도 내 시선을 사로잡은 건 바로 이 결정질의 꽃들이었다.\\\n\\\n유리로 된 꽃잎과 그들의 황홀한 반짝임... 정말이지 너무나 사랑스럽고 앙증맞은 존재들이다.", + "book.spectrum.guidebook.crystal_flowers.page1.text": "달콤하고 향긋하다. 장담컨대, 액체 수정이나 이 꽃 중 어느 하나라도 먹을 수 있는 것이었다면 딸기 맛이 났을 것이다...", + "book.spectrum.guidebook.crystal_flowers.page2.text": "아주 약초 같고 쓴맛이 난다.\\\n\\\n*이것들이 살구와 닮은 건 오직 색깔뿐이다.*", + "book.spectrum.guidebook.crystal_flowers.page3.text": "한편으로, 이것들은 발광 염료의 아주 훌륭한 공급원이다.\\\n\\\n*다른 한편으론, 이걸 먹으면 내 혀에 이명이 들리는 기분이다.*", + "book.spectrum.guidebook.crystal_gardens.moss_balls.text": "푹신푹신한 것들이다.\\\n이것들을 보고 있자니 전설 속에서 읽었던 한 생명체가 떠오른다. 이미 아주 오래전에 멸종되었다고 전해지지만 말이다.", + "book.spectrum.guidebook.crystal_gardens.moss_balls.title": "마리모", + "book.spectrum.guidebook.crystal_gardens.page0.text": "[액체 수정](entry://general/liquid_crystal)으로 이루어진 호수와 거대한 [결정질 구조물들](entry://dimension/hummingstone)이 이 공간의 풍경을 정의한다.", + "book.spectrum.guidebook.crystal_gardens.page1.text": "바닥은 얇은 흙으로 덮여 있다. 그리 두껍진 않지만, 그 위를 두터운 이끼 양탄자로 덮기에는 충분하고도 남는다.\\\n\\\n대부분의 다른 생물군계와는 달리, 이곳에는 수많은 천연 광원들이 존재하여 식물들이 자랄 수 있는 환경을 만들어 주는 것 같다. 지상에서 흔히 볼 수 있는 식물들마저 이곳에서 발견할 수 있을 정도니 말이다.", + "book.spectrum.guidebook.crystallarieum.page0.text": "싹 틔우는 블록의 원리를 염두에 두고, 나는 원석 덩어리를 잉크의 힘으로 배양하여 반짝이는 수정으로 길러낼 수 있는 장치를 고안해 냈다.\\\n\\\n자원을 성장시키기 위해서는 다음 조건들이 필요하다.\n- 알맞은 액체로 장치가 채워져 있을 것\n- 시작 역할을 할 씨앗을 던져 넣을 것\n- 촉매를 던져 넣을 것\n- [플라스크](entry://ink/ink_flask)를 통해 특정 색상의 잉크를 공급할 것", + "book.spectrum.guidebook.crystallarieum.page1.text": "[보석](entry://general/shards)을 직접 성장시키려던 내 최고의 노력들은 실패로 돌아갔지만, 나는 곧 이 장치가 온갖 다른 종류의 자원들을 길러낼 수 있다는 사실을 깨달았다.", + "book.spectrum.guidebook.crystallarieum.page10.title": "금", + "book.spectrum.guidebook.crystallarieum.page11.title": "철", + "book.spectrum.guidebook.crystallarieum.page12.title": "청금석", + "book.spectrum.guidebook.crystallarieum.page13.title": "네더라이트", + "book.spectrum.guidebook.crystallarieum.page14.title": "프리즈머린", + "book.spectrum.guidebook.crystallarieum.page15.title": "석영", + "book.spectrum.guidebook.crystallarieum.page16.title": "레드스톤", + "book.spectrum.guidebook.crystallarieum.page2.text": "각 촉매는 봉오리의 성장에 저마다 다른 영향을 미친다.\\\n어떤 촉매는 요구되는 잉크의 양을 줄여주지만, 또 다른 촉매는 성장에 필요한 시간을 단축시켜 줄 수도 있다.", + "book.spectrum.guidebook.crystallarieum.page2.title": "촉매", + "book.spectrum.guidebook.crystallarieum.page3.text": "[#](449900)금속 계열 자원[#]()은 [#](bb00bb)원석[#]() 같은 정제되지 않은 재료를 필요로 하며, 이를 통해 [#](bb00bb)작은 금속 봉오리[#]()가 생성된다. 이 봉오리는 안전하게 수확할 수 있을 때까지 꾸준히 자라난다.\\\n\\\n[#](449900)수정 계열 자원[#]()의 경우, 이미 존재하는 수정을 씨앗으로 삼아 자신과 완전히 똑같은 복제품을 길러낼 수 있다.", + "book.spectrum.guidebook.crystallarieum.page3.title": "금속 vs 수정", + "book.spectrum.guidebook.crystallarieum.page4.title": "석탄", + "book.spectrum.guidebook.crystallarieum.page5.title": "구리", + "book.spectrum.guidebook.crystallarieum.page6.title": "다이아몬드", + "book.spectrum.guidebook.crystallarieum.page7.title": "메아리", + "book.spectrum.guidebook.crystallarieum.page8.title": "에메랄드", + "book.spectrum.guidebook.crystallarieum.page9.title": "발광석", + "book.spectrum.guidebook.curse_of_the_void.page0.text": "이 저주가 부여된 도구는 자신이 캐낸 모든 것을 허공으로 분해해 버리는 것 같다. 가장 고운 모래알보다도 미세하게 분해되어 바람에 날아가 버리는 것이다.\\\n\\\n만약 내가 거친 돌덩이로 가득 찬 도시의 절반을 날려버리고 싶을 때라면 이 저주마저도 쓸모가 있을지도 모르겠다. 어떤 것들은 아마 축복인 동시에 저주이기도 한가 보다.", + "book.spectrum.guidebook.curse_of_the_void.page1.text": "파괴된 모든 블록의 전리품을 소멸시킨다.\\\n\\\n최대 레벨: 1\\\n채굴 도구에 적용 가능.", + "book.spectrum.guidebook.deadly_poison.page0.text": "보통 독이란 건 항상 주의해야 할 대상이긴 했지만, 그렇다고 그것 때문에 목숨을 잃을 뻔한 적은 없었다. 하지만 이 지독하게 강력한 변종은 노골적으로 내 목숨을 *노리는* 것 같다. 정말 소름 끼치는 물건이다!", + "book.spectrum.guidebook.decay_away.page0.text": "내 마지막 실험은 실패로 끝났을 뿐만 아니라, 그 뒷수습을 하는 것도 끔찍한 고통이었다.\\\n만약 상황이 다시 통제 불능이 될 때를 대비하여, 나는 이 개량된 버전을 만들어 냈다. 하지만 이번에는 내 기지를 쓸어버리는 것이 아니라, 온전히 치유를 위한 목적이다.\\\n확실히 한 병쯤 들고 다녀서 나쁠 건 없지.", + "book.spectrum.guidebook.decay_away.page1.text": "자가 증식하는 미생물들을 99%% 박멸한다.", + "book.spectrum.guidebook.decompression": "압축 해제", + "book.spectrum.guidebook.deep_barrens.page0.text": "어둡고, 돌로 뒤덮인 황무지.", + "book.spectrum.guidebook.deep_barrens.page1.text": "언뜻 보기엔 별 볼 일 없어 보이지만, 이곳은 방문할 가치가 충분하다. 보이는 모든 구석구석에서 광석들이 나를 향해 미소 짓고 있으니까 (솔직히 말해 시야가 그리 멀진 않지만 말이다).\\\n\\\n어떤 곳에서는 거대한 광맥이 이 생물군계를 이리저리 교차하며 뻗어있다. 단 하나의 광맥만으로도 아마 수년은 거뜬히 버틸 수 있을 것이다.", + "book.spectrum.guidebook.deep_dripstone_caves.page0.text": "익숙하지만, 뭔가 다르다.", + "book.spectrum.guidebook.deep_dripstone_caves.page1.text": "점적석들의 크기로 미루어 보아, 이 동굴들은 태초의 시간부터 이곳에 존재했던 것이 틀림없다.\\\n저 거대한 종유석들이 이곳에서 과연 얼마나 더 크게 자랄 수 있을지 궁금해진다. 난 이미 수백 블록에 걸쳐 뻗어있는 것들을 보았다.\\\n바닥은 온통 [#](bb00bb)물[#]()웅덩이들로 얼룩져 있다.", + "book.spectrum.guidebook.delving_deeper_down.name": "지저 너머로의 탐험", + "book.spectrum.guidebook.delving_deeper_down.page0.text": "이게 가능할 거라곤 생각지도 못했다. 기반암을 뚫고 점점 더 깊은 곳으로 내려가자, 칠흑같이 어두운 차원문이 열렸다. 이게 어디로 이어지는 걸까? 알아낼 방법은 단 하나뿐이다.\\\n\\\n*그래도 아래를 내려다볼 때마다 목이 메는 이 긴장감은 떨쳐낼 수가 없다...*", + "book.spectrum.guidebook.delving_deeper_down.page1.text": "억겁의 세월 동안 단 한 줄기의 햇빛조차 닿지 않은 곳. 태양빛이 영원히 허락되지 않는 곳. 영원한 어둠에 휩싸인 장소.\\\n\\\n저 아래에는 과연 어떤 것들이 나의 발견을 기다리고 있을까?", + "book.spectrum.guidebook.delving_deeper_down.page1.title": "지저 너머", + "book.spectrum.guidebook.density.page0.text": "레벨이 오를수록 [#](449900)나를 더 무겁게 만들어[#](), 결과적으로 더 큰 낙하 피해를 입게 한다. 심지어 멀리뛰기조차 불가능해진다.\\\n\\\n*30년 뒤의 나는 매일매일 이런 기분으로 살아가게 되는 걸까?*", + "book.spectrum.guidebook.disarming.page0.text": "내가 매일 밤 마주치는 좀비들은 꽤나 값비싼 장비들로 무장하고 있다. 하지만 녀석들이 죽고 나면, 그 장비들은 영영 다시 볼 수 없게 사라져 버린다 (대체 이게 어떤 원리인지는 나에게도 미스터리다).\\\n\\\n하지만 녀석들이 아직 살아 숨 쉴 때 재빨리 낚아채는 데 성공한다면 아무 문제 없다. 잡았다 요놈!", + "book.spectrum.guidebook.disarming.page1.text": "매 타격 시 낮은 확률로 몬스터(그리고 다른 플레이어!)가 장착 중인 장비를 떨어뜨리게 만든다.\\\n\\\n최대 레벨: 2\\\n근접 무기에 적용 가능.", + "book.spectrum.guidebook.discovered_geodes": "세상 곳곳을 돌아다니며 나는 귀중한 자원을 뿜어내는 수많은 정동들을 발견해 냈다.", + "book.spectrum.guidebook.disinfect": "마시기보다는 소독하는 용도에 가깝다.\\\n\\\n*하지만, 알잖아... 누가 날 말리겠어?*", + "book.spectrum.guidebook.divinity.page0.text": "나는 모든 주요 능력치에 어마어마한 버프를 받았다.\\\n\\\n하지만 그럼에도 죽는다면, ([거의](entry://creating_life/hardcore_revival)) 돌이킬 수 없는 끔찍한 대가를 치르게 될까 봐 몹시 두렵다.", + "book.spectrum.guidebook.doomblooms.name": "파멸꽃", + "book.spectrum.guidebook.doomblooms.page0.text": "이 식물은 씨앗을 퍼뜨리고 포식자를 쫓아내는 방식이 꽤나... 기이하다. 이 꽃은 건드리면 펑 하고 터지는 폭발성 가스 캡슐을 품고 있다.\\\n\\\n만약 이 꽃 주변에서 조심하지 않는다면, 예를 들어 너무 거칠게 다룬다거나 한다면, 내 주변 반경을 모조리 불타는 크레이터로 만들어버릴 위험이 있다.", + "book.spectrum.guidebook.doomblooms.page1.text": "완전히 자라나면, 꽃에서 [#](bb00bb)화약[#]()을 수확할 수 있다.\\\n\\\n폭발시키지 않고 안전하게 캐내려면 [#](bb00bb)섬세한 손길[#]()이나 [#](bb00bb)가위[#]()가 필요하다.", + "book.spectrum.guidebook.downstone.page0.text": "지저 너머의 가장 깊숙한 곳에서, 나는 이 새로운 종류의 돌을 발견했다.\\\n엄청나게 단단해서, 심지어 [#](bb00bb)기반암[#]()조차 이 돌에 비하면 우스운 수준이다.", + "book.spectrum.guidebook.downstone_fragments.page0.text": "나보다 먼저 이곳에 왔던 자들은 하층석을 캐낼 수 있었던 모양이다! 다만 [거대하고 압도적인 굴착기](entry://dimension/excavation_sites)의 힘을 빌려서만 말이다.\\\n\\\n이 파편들을 이용해 [#](bb00bb)보존석[#]()을 제조했던 걸까?", + "book.spectrum.guidebook.knotted_sword.page0.text": "살아있는 검이다! 사용하는 손맛도 그만큼 생동감 넘친다.\\\n[밤이슬](entry://general/nightdew_sprout)과 내가 창조해 낸 그 [베지탈](entry://general/vegetal) 찌꺼기들을 가지고 이것저것 실험해 보다가 이 [#](bb00bb)경량 대검[#]()을 만들어내는 데 성공했다. 이 검으로 적의 공격을 막아낼 수 있고, 심지어 피격되기 직전에 방어하면 내 반격의 위력을 더욱 강화할 수도 있다.\\\n만약 공중에 뜬 상태에서 방어를 풀면, 검을 쥔 채로 앞으로 크게 돌진할 수도 있다!", + "book.spectrum.guidebook.knotted_sword.page1.text": "돌진하는 도중에 이 검에 맞으면 아마 끔찍하게 아플 것이다. 특히나 그 충격만으로도 칼날에 묻은 맹독성 물질이 사방으로 튈 게 분명하니까.\\\n\\\n*매듭 같은 것이 아니다.*", + "book.spectrum.guidebook.nectar_lance.page0.text": "나는 만시의 일지에 담긴 페이지들을 오랫동안 응시했고, 필설로 다할 수 없는 그 끝없는 흔적들을 오랫동안 바라보았다.\\\n이것이 바로 그 결과물이다. 새롭게 탄생한 [#](bb00bb)경량 대검[#]()은 훨씬 더 날카롭고, 더 예리하게 벼려졌으며, 더 나은 균형을 자랑한다. 이 검의 돌진은 더 정확하고 멀리 나아가며, 방어는 한층 더 견고해졌다.\\\n\\\n이 검의 돌진으로 상대를 꿰뚫으면 대상의 상태 효과를 삼켜버릴 것이다.", + "book.spectrum.guidebook.nectar_lance.page1.text": "지속 피해 효과는 원래 입혔어야 할 피해량의 상당 부분을 한꺼번에 입히며, 만약 지속 피해 효과가 없다면, 수면 상태에 빠진 대상에게는 무조건 치명타를 가한다. 그 두 가지 경우 모두 해당하지 않는다면, 이 검은 대상의 이로운 효과를 훔쳐 올 것이다.\\\n\\\n*이 검에는 매듭이 없다...*", + "book.spectrum.guidebook.draconic_twinsword.page0.text": "나의 깊은 고찰이 빚어낸 이 무기는 다재다능함의 결정체라 해도 과언이 아니다.\\\n이 쌍두검은 절묘한 균형을 이루고 있어 넓고도 강력한 휩쓸기 공격을 가능케 한다. 무기를 구성하는 정교한 [혈석](entry://creating_life/bloodstone)의 구조는 몹시도 견고하며, 날의 예리함을 유지하는 데 탁월하다.\\\n\\\n섬뜩하면서도, 동시에 사람을 홀리는 매력이 있는 무기다.", + "book.spectrum.guidebook.draconic_twinsword.page1.text": "검 속에 흐르는 [#](f0af15)노란색 잉크[#]() 덕분에 검을 위로 던진 뒤 때리는 방식으로 엄청난 속도로 투척할 수 있다. 우클릭으로 검을 회수할 수 있지만, 튕겨 나오는 반동에는 주의해야 한다.\\\n\\\n*내 무기에 내가 맞아 죽는 꼴은 피해야겠지.*", + "book.spectrum.guidebook.draconic_twinsword.page2.text": "이 무기의 역동성은 여기서 끝이 아니다. 한 손을 비운 채로 검을 든 손을 바꾸면, 검이 두 개로 갈라지며 한 쌍의 쌍둥이 단검으로 변모한다. 날렵하고 치명적인 이 단검들 역시 투척할 수 있지만, 작동 방식은 조금 다르다. 흩날리는 민들레의 영혼이 깃들어 있어, 사악할 정도의 기동성을 자랑한다.", + "book.spectrum.guidebook.draconic_twinsword.page3.text": "단검을 던진 후 언제든 나의 의지로 다시 불러들일 수 있다. 단검이 나를 앞으로 튕겨내거나, 아니면 단검에 맞은 몬스터를 내 쪽으로 끌어당기는 식이다. 단검이 어떻게 움직이고 누구를 이동시킬지를 결정하는 변수가 많으니, 손에 익을 때까지 충분히 연습해 봐야겠다.", + "book.spectrum.guidebook.draconic_twinsword.page4.text": "참고로 이 무기에는 아주 독특한 마법 부여 상호작용들이 존재한다.\n- [관성](entry://enchanting/enchantments/inertia) 마법 부여는 검이 튕겨 나올 때마다 쌍둥이 검의 위력을 증폭시키며, 개체들을 끌어당기는 발톱의 힘도 더 강해진다.\n- [향상된 치명타](entry://enchanting/enchantments/improved_critical)는 공중에 뜬 대상을 타격할 때의 위력을 증가시킨다.\n- 찌르기는 휩쓸기 공격을 강화하고 단일 대상 원거리 피해를 광역 피해로 변환해 준다.\n- 관통은 말 그대로 기대한 역할을 정확히 수행한다.", + "book.spectrum.guidebook.nectar_gloves.page0.text": "기이한 곳에서 발견한 기이한 물건이다. 이 가지색 장갑은 최고급 가죽으로 제작되었으며 독특한 하얀색 수정이 장식되어 있다.\\\n\\\n이걸 착용하니 왠지 방벽이 나를 보호해 주는 듯한 기분이 들고, 더 나아가 내 몸의 해로운 효과마저 정화해 주는 것 같다.", + "book.spectrum.guidebook.nectar_gloves.page1.text": "*이 장갑은 내 머릿속에 수많은 의문을 남긴다.\\\n[#](2432ff)남동석[#]()의 기운을 띠지 않고도 방벽을 품고 있다니... 도대체 어떻게?*", + "book.spectrum.guidebook.azuresque_dike_core.page0.text": "[#](2c2e8e)담청 방벽[#]()에 관한 내 필생의 역작이다! 보존 구조물들의 작동 원리는 오랜 시간 동안 나를 혼란스럽게 했지만, 마침내 그 구조물들을 복제해 내는 과정에서 엄청난 진전을 이루었다!\\\n\\\n 그... 물건...의 힘을 빌려, 나는 방벽의 힘을 극대화하고, 회복 속도를 올리며, 모든 방벽의 원천을 두 배로 증폭시키는 회로를 만들어 냈다.\\\n하지만 이 코어 자체만으로는 방어막을 생성할 수는 없다.", + "book.spectrum.guidebook.azuresque_dike_core.page1.text": "*나로서는 거대한 도약이다!...\\\n\\\n...하지만 그 구조물들을 완전히 복제하기까지는 아직 아주 작은 첫걸음일 뿐이다. 그 흔적들은 너무나도 희미하고, 그 모든 걸 해내기 위해 필요한 남동석과 하층석의 양은 현실적으로 감당할 수 없는 수준이니까.*", + "book.spectrum.guidebook.dragonbone.page0.text": "이 거대한 잔해들이 정말 용의 것이란 말인가?\\\n솔직히 나도 잘 모르겠다. 하지만 그 거대한 크기로 보아하니, 정말 그럴지도 모른다는 생각이 든다!\\\n\\\n심지어 지금까지도 이 블록들은 마법적인 기운에 둘러싸여 있어, 노골적인 채굴 시도로부터 스스로를 보호하고 있다. 그 거칠고 투박한 표면을 손가락으로 만지기만 해도 마치 *폭발*할 듯한 기분이 된다.", + "book.spectrum.guidebook.dragonbone.page1.text": "[#](449900)폭발[#]()을 사용하여 용골에 손상을 입히면 그들을 보호하던 마법적인 기운이 날아가 버리는 듯하다. 이제 드디어 이 블록들을 캐낼 수 있게 되었다.\\\n떨어지는 조각들에는 여전히 고대의 마법이 미약하게나마 남아 있다.", + "book.spectrum.guidebook.dragonbone.page2.text": "[잿불화로](entry://ink/cinderhearth)만이 이 뼈들을 재로 만들어버릴 수 있을 만큼 충분한 열기를 뿜어내는 유일한 장치다.", + "book.spectrum.guidebook.dragonbone.page2.title": "재로 돌리기", + "book.spectrum.guidebook.dragonbone.page6.text": "대부분의 블록들은 [잿불화로](entry://ink/cinderhearth)를 통해 원래의 윤나는 형태로 되돌릴 수 있다.", + "book.spectrum.guidebook.dragonbone.anvil_crushing.text": "이 뼈들은 꽤나 튼튼하지만, 충분한 물리적 힘을 가하면 가루로 부숴버릴 수 있다. 그렇게 만들어진 가루는 매우 훌륭한 비료가 된다.", + "book.spectrum.guidebook.dragonbone.dragonrot_converting.text": "이 조합은 어떤 의미로는 아이러니하다. 닭고기에 달걀옷을 입혀 튀기는 것처럼 병적이고 섬뜩해 보이지만, 결국 그 끝은 용에서 용을 빼서... 아무것도 남지 않는다. 오직... 재뿐이다.", + "book.spectrum.guidebook.dragonjags.name": "용린초", + "book.spectrum.guidebook.dragonjags.page0.text": "이 다육식물들은 거의 어디서든, 심지어 척박한 바위 위에서조차 자라날 수 있다.", + "book.spectrum.guidebook.dragonjags.page1.text": "[#](bb00bb)뼛가루[#]()를 뿌리면 이 식물들이 빠르게 자라나며 퍼져나간다.", + "book.spectrum.guidebook.dragonrot.page0.text": "이건 마치 액체로 된 불꽃처럼 붉게 타오르는 듯한 모습을 띠고 있다. 만졌을 때는 지옥의 불길처럼 끔찍한 고통을 주지만 (난 내 호기심을 *기어코* 채워야만 했다...), 신기하게도 열기는 전혀 내뿜지 않는다.\\\n\\\n[자정의 용액](entry://general/midnight_solution)이 그저 변화를 갈망하는 파괴적인 성질을 띠고 있다면, 용부액의 목적은 오직 순수하고 완전한 파괴 그 자체인 것 같다.", + "book.spectrum.guidebook.dragonrot.page1.text": "아이템을 이 안에 던져 넣으면, 아이템이 완전히 썩어 들어가 아예 다른 무언가로 변해버릴 때까지 타락시키는 것 같다.", + "book.spectrum.guidebook.dragonrot_swamp.page0.text": "침수된 이 둥지는 [용부액](entry://dimension/dragonrot)의 호수가 사방에 스며들어 있다.\\\n벽면에서는 붉은 독주가 눈물처럼 흘러내린다. 저건 확실히 물이 아니다.", + "book.spectrum.guidebook.dragonrot_swamp.page1.text": "이곳에 발을 들이자마자 가장 먼저 내 신경을 건드린 것은 질퍽이는 땅도, 그 속에 도사리고 있는 사악한 식물들도 아니었다. 바로 공기 그 자체였다. 숨을 들이마시는 순간, 타는 듯한 통증이 목을 후려치며 폐 깊숙이 파고들었다.\\\n\\\n*공기 자체가 악의로 짙게 물들어 있다. 이 끔찍한 안개에 대한 면역력을 갖추지 않으면 이 썩어빠진 독기에 질식해 죽고 말 것이다.*", + "book.spectrum.guidebook.dragonrot_swamp.page1.title": "독기", + "book.spectrum.guidebook.dragonrot_swamp.page2.text": "이 자그마한 식물들은 마치 담쟁이덩굴처럼 바닥을 타고 퍼져나간다. 초록색으로 사납게 뻗어나가는 줄기 사이에서 작은 군락을 이루며 자라난다. 비료를 주면 훨씬 더 널리 퍼져나간다.", + "book.spectrum.guidebook.dragonrot_swamp.page3.text": "이건 흙도 아니고, 진흙도 아니다. 이건... 무언가 다른 것인데, 도대체 뭔지 짐작조차 할 수 없다. 어쨌든 이 위를 걸을 때마다 발이 조금씩 푹푹 빠져든다.", + "book.spectrum.guidebook.dreamflayer.page0.text": "\"최고의 방어는 공격이다\"라는 말을 완벽하게 그대로 보여주는 탁월한 무기다.\\\n이 몽환참수검의 본질은 힘의 균형을 맞추는 데 있다.\\\n내 적이 나보다 두꺼운 장갑을 두르고 있을수록, 이 무기는 그들에게 더 끔찍한 피해를 안겨줄 것이다.[#]()\\\n\\\n웅크린 채 사용하여 무기의 힘을 해방하면, 이 무기는 [#](8f2121)빨간색 잉크[#]()를 소름 끼치는 속도로 집어삼키는 대신 이 세상에서 가장 단단한 방어구조차 단숨에 베어버릴 수 있게 된다.", + "book.spectrum.guidebook.dreamflayer.page1.text": "보름달이 뜨는 밤이어야 한다.\\\n\\\n*만약 내가 가벼운 옷차림으로 전장을 휩쓸고 다닐 완벽한 핑계가 필요했다면, 바로 이 무기가 그 해답이다.*", + "book.spectrum.guidebook.effect_prolonging.name": "효과 연장 (중첩)", + "book.spectrum.guidebook.effect_prolonging.page0.text": "이 효과가 활성화된 상태에서 다른 상태 효과를 받으면, 그 효과들의 지속 시간이 훨씬 길어진다.", + "book.spectrum.guidebook.effect_prolonging.page1.text": "효과 연장 버프를 받을 때 지속 시간이 초기화되는 것이 아니라, 이미 존재하는 레벨 위에 새로운 레벨이 쌓이면서 효과의 위력이 점점 더 증폭된다.", + "book.spectrum.guidebook.resplendent_deco.name": "찬란한 장식", + "book.spectrum.guidebook.resplendent_deco.page0.text": "매일매일 솜사탕처럼 부풀어 오른 푹신한 깃털에 파묻혀 지내는 내 [불망울](entry://creating_life/kindlings) 녀석들이 정말 부러울 지경이다. 그 깃털을 가로지르는 [#](f0af15)찬란한 황금빛 생기[#]()는 물론이고, 부드러움을 넘어 촉감과 색감 모두가 그야말로 호화롭기 그지없다.\\\n\\\n이 깃털로 만든 쿠션에 얼굴을 파묻고 잠에 빠져드는 내 모습이 눈에 선하다.", + "book.spectrum.guidebook.resplendent_deco.page1.text": "조합하면 다시 [#](bb00bb)깃털[#]()로 되돌릴 수 있다.", + "book.spectrum.guidebook.resplendent_feathers.page0.text": "[불망울](entry://creating_life/kindlings)들의 이 찬란한 깃털은 정말 놀라울 정도로 풍성해서, 나는 촌뜨기 같은 녀석들의 털을 정기적으로 다듬어줘야만 할 지경이다.\\\n하지만 털을 다듬다 보니 이 깃털들에 종종 핏방울이 맺혀 있는 것을 눈치챘다.\\\n*이걸 [어떻게든 결정화시킬](entry://general/liquid_crystal) 수 있지 않을까?*", + "book.spectrum.guidebook.resplendent_feathers.page1.text": "[액체 수정](entry://general/liquid_crystal)에 푹 적셔내면, 깃털에 반짝이는 결정의 흔적이 맺힌다.", + "book.spectrum.guidebook.resplendent_feathers.page1.title": "피를 결정화하기", + "book.spectrum.guidebook.egg_laying_wooly_pig.name": "알 낳는 양털 돼지", + "book.spectrum.guidebook.egg_laying_wooly_pig.page0.text": "프랑켄슈타인 이야기까지 했던가? 내게 *미친* 아이디어가 하나 떠올랐다... 근데 원래 그런 게 최고 아닌가?", + "book.spectrum.guidebook.egg_laying_wooly_pig.page1.text": "나의 새로운 피조물은 대체 무얼 먹고 싶어 할까? 이건 나름 중요한 문제다, [이유가 다 있어서](entry://creating_life/memories) 말이지.", + "book.spectrum.guidebook.egg_laying_wooly_pig.page1.title": "문제의 그 미친 아이디어", + "book.spectrum.guidebook.egg_laying_wooly_pig.page2.text": "[아마란스](entry://cuisine/amaranth)[#]()가 바로 정답이었다!", + "book.spectrum.guidebook.egg_laying_wooly_pig.page3.text": "정말 경이로운 생명체다. [#](449900)가위질[#]()도 할 수 있고 [#](449900)우유[#]()도 짤 수 있으면서, 동시에 [#](449900)알도 낳는다[#]().", + "book.spectrum.guidebook.enchanted_food.name": "마법이 부여된 음식", + "book.spectrum.guidebook.enchanted_food.page0.text": "내 인생만큼이나 험난하다.", + "book.spectrum.guidebook.enchanted_food.page1.text": "물론 [#](bb00bb)마법이 부여된 황금 사과[#]()의 위력에 비하면 그 효과가 현저히 떨어지긴 하지만, 그래도 적당한 길이의 여행 중에 요긴하게 씹어먹기 좋은 간식거리다.", + "book.spectrum.guidebook.enchanter.name": "마법 부여기", + "book.spectrum.guidebook.enchanter.page0.text": "완벽한 도구를 향한 여정 속에서, 나는 평범한 [#](bb00bb)마법 부여대[#]()가 종종 내 뜻대로 움직여주지 않는다는 사실을 깨달았다. 이 고도로 개조된 마법 부여기는 기존의 것이 가지고 있던 내 대부분의 불만들을 해결해 줄 것이다.[#]()\\\n\\\n이 장치를 통해 할 수 있는 일이 많다.\n- [새로운 마법이 부여된 책 만들기](entry://enchanting/creating_enchanted_books)\n- [마법 부여 강화하기](entry://enchanting/upgrading_enchanted_books)\n- [마법이 부여된 책을 소모하지 않고 아이템에 마법 부여하기](entry://enchanting/enchanting_items)", + "book.spectrum.guidebook.enchanter.page1.text": "마법 부여기가 작동하려면 구조물이 필요하다.", + "book.spectrum.guidebook.enchanter.page2.text": "크기: 11x11x5 블록\\\n네 개의 보석 블록 위에 [강화기](entry://magical_blocks/upgrades)를 배치하여 그 능력을 강화할 수 있다.", + "book.spectrum.guidebook.enchanter.page3.text": "- 1 마법 부여기\n- 8 아이템 그릇\n- 4+ 액체 수정 양동이\n- 4 윤나는 보석 블록\n- 8 보석 광원\n- 12 윤나는 기둥\n- 24 윤나는 반 블록\n- 159 윤나는 블록\n\n\\\n*보석 블록 위에 강화기를 배치하여 마법 부여기를 강화한다.*", + "book.spectrum.guidebook.enchanting_items.page0.text": "마법 부여기를 사용하여 아이템에 마법을 부여하는 방법은 꽤나 간단하다.\\\n[아이템 그릇](entry://decoration/item_bowl) 위에 [](item://minecraft:enchanted_book)을 올려두고, 마법을 부여할 아이템을 마법 부여기 본체 위에 올려두기만 하면 된다.\\\n\\\n일반적인 마법 부여와는 달리, 이 과정은 내 소중한 책들을 소모하지 않지만 그 대가로 훨씬 더 방대한 양의 경험치를 요구할 것이다.", + "book.spectrum.guidebook.enchanting_items.page1.text": "[지식의 보석](entry://enchanting/knowledge_gem)을 활용하면 끊임없는 경험치 공급을 유지할 수 있다.", + "book.spectrum.guidebook.enchanting_items.page2.text": "새로운 [](item://minecraft:enchanted_book)를 만들어내려면, 복사하고자 하는 [](item://minecraft:enchanted_book)를 [아이템 그릇](entry://decoration/item_bowl) 위에 올려두고 [평범한 책](item://minecraft:book)을 [마법 부여기](entry://enchanting/enchanter) 본체에 올려두어야 한다.\\\n\\\n하지만 평범한 책이 지닌 태생적인 단순함 때문에, 이 작업은 엄청난 양의 경험치를 요구할 것이다.", + "book.spectrum.guidebook.enchanting_items.page2.title": "마법이 부여된 책 복사하기", + "book.spectrum.guidebook.enchanting_items.page3.text": "대부분의 경우 마법 부여를 한 번 적용하는 데 드는 비용은 **경험치 50에서 200 사이**로 추정된다.\\\n물론 다른 변수들도 존재한다. 마법 부여의 희귀도, 레벨, 그리고 대상 아이템이 마법 부여를 얼마나 잘 흡수할 수 있는가에 따라 달라진다.\\\n대상에게 부적합한 마법 부여 등의 간섭 요소들은 이 비용을 더욱 끔찍하게 치솟게 만들 것이다.", + "book.spectrum.guidebook.enchanting_items.page3.title": "필요 경험치", + "book.spectrum.guidebook.enchantment_canvas.page0.text": "내 곡괭이, 마법을 부여하느라 죄악에 가까울 만큼 끔찍한 비용을 쏟아부었던...? 그 곡괭이가 거의 부서지기 직전이다. 이제 블록을 캘 때마다 곡괭이보다 내 정신이 더 깎여나가는 기분이다.\\\n\\\n비록 도구 자체는 살려내지 못하더라도, 최소한 마법 부여만큼은 살려낼 수 있다! 이 캔버스는 색을 담아내기 위한 물건이 아니다. 도구에 사용하면, 그 안에 깃든 마법 부여를 캔버스로 고스란히 옮겨 담을 수 있다.", + "book.spectrum.guidebook.enchantment_canvas.page1.text": "한 번 사용하고 나면, 캔버스에 마법을 옮겨온 아이템의 이미지가 형체화되며 영구적으로 해당 종류의 아이템에만 마법을 부여할 수 있도록 귀속된다.", + "book.spectrum.guidebook.enchantment_canvas.page2.title": "귀속 해제", + "book.spectrum.guidebook.enchantment_canvas.page2.text": "자정의 용액은 무언가의 마법을 벗겨내는 데 아주 탁월한 효과를 발휘하며, 이는 이 캔버스의 수명을 비약적으로 향상시켜 준다! 캔버스를 이 용액에 푹 담가두면 완전히 초기화되어, 내가 원하는 어떤 아이템에든 다시 사용할 수 있게 된다.\\\n\\\n*이 용액으로 아무리 씻어내려 애써도, 결코 충분히 씻겨나간 것 같은 기분이 들지 않는다.*", + "book.spectrum.guidebook.enchantment_characteristics": "특성", + "book.spectrum.guidebook.ender_dropper.page0.text": "엔더 공급기는 [엔더 호퍼](entry://magical_blocks/ender_hopper)와 정확히 반대되는 역할을 수행한다. [#](449900)레드스톤 신호[#]()를 받을 때마다 내 [#](bb00bb)엔더 인벤토리[#]()에서 아이템을 뱉어낸다.\\\n\\\n다만 주의할 점이 있다. 누군가 이 공급기 옆에 버튼을 달아놓고 내 엔더 상자를 싹 다 털어가는 걸 누가 막겠는가?\\\n[엔더 호퍼](entry://magical_blocks/ender_hopper)의 대조물이다.", + "book.spectrum.guidebook.ender_glass.page0.text": "나는 이 레시피를 종이 위에 적어 내려간 순간부터, 이 창조물이 뭔가 특별한 물건이 될 거라는 걸 직감했다.\\\n\\\n[#](449900)엔드[#](), [#](449900)레드스톤[#](), [#](449900)마법[#]()의 결합은 이 블록에 매우 기이한 특성들을 부여한다.", + "book.spectrum.guidebook.ender_glass.page1.text": "가해지는 [#](449900)레드스톤 신호[#]()의 강도에 따라, 이 블록은 전혀 다른 특성을 띠게 된다.\n- 레드스톤 신호가 없으면, 완전히 단단한 고체 상태가 된다.\n- [#](449900)레드스톤 신호[#]()를 받으면, 마치 유리처럼 투명해진다.\n- 하지만 이 블록이 가장 기이한 상태에 도달하는 건 최대 강도의 레드스톤 신호를 받았을 때인데...", + "book.spectrum.guidebook.ender_glass.page2.text": "더욱 기이한 점은, 이 물질이 가장 강한 신호가 아니라 마지막으로 가해진 신호에 반응하는 것처럼 보인다는 사실이다.\\\n\\\n그야말로 엔드에서 온 기이한 물건이 아닐 수 없다.", + "book.spectrum.guidebook.ender_hopper.page0.text": "형태나 기능 면에서 평범한 호퍼를 쏙 빼닮게 설계된 이 엔더 호퍼는, 아이템을 내 [#](bb00bb)엔더 인벤토리[#]()로 직접 전송하는 특별한 능력을 지니고 있다.\\\n[엔더 공급기](entry://magical_blocks/ender_dropper)의 대조물이다.", + "book.spectrum.guidebook.ender_splice.page0.text": "엔더맨의 순간이동 능력을 복제하는 데 꽤 성공적인 결과를 얻었다! 하지만 목적지를 정하기 위해서는 먼저 그 위치의 좌표를 기억하게 해 두어야만 한다. 엔더맨들은 굳이 그런 과정을 거치지 않는 것 같은데, 왜일까? 아니면 *진짜로* 거치는 걸까?\\\n처음 사용하면 현재 위치를 기억하고, 두 번째 사용하면 그곳으로 나를 순간이동시킨다.", + "book.spectrum.guidebook.ender_splice.page1.text": "- 플레이어에게 귀속시킬 수도 있다.\n- 차원을 가로질러 순간이동할 수는 없다.", + "book.spectrum.guidebook.ender_splice.page2.text": "사용 시 파괴될 확률을 줄여준다.", + "book.spectrum.guidebook.ender_splice.page3.text": "차원 간 순간이동을 가능하게 해준다.", + "book.spectrum.guidebook.enemy_tears": "고전적이다. 이 음료를 훨씬 더 맛있게 만들어 줄 단 하나의 조미료가 있다면, 그건 내 적들이 흘리는 눈물일 것이다.", + "book.spectrum.guidebook.creature_detector.name": "생물 감지기", + "book.spectrum.guidebook.creature_detector.page0.text": "생물 감지기에 내장된 보석은 지면의 미세한 진동에 반응한다.\\\n이를 통해 주변에 얼마나 많은 생명체가 있는지 측정할 수 있는 능력을 갖게 되었다.", + "book.spectrum.guidebook.creature_detector.page1.text": "반경 10블록 내에 있는 생명체 한 마리당 1씩 누적된 신호 강도를 출력한다.", + "book.spectrum.guidebook.erasers.name": "말소자", + "book.spectrum.guidebook.erasers.page0.text": "*나 자신에게 남기는 메모: 저놈들에게 압도당하지 마라!*", + "book.spectrum.guidebook.erasers.page1.text": "맞히기도 힘들게 쪼그마한 데다 무리 지어 사냥하는 이 거미 녀석들은 나를 물어뜯을 때마다 온갖 역겨운 효과를 걸어댄다.\\\n\\\n이 지하에서 저 빌어먹을 것들은 그야말로 최악의 골칫거리다. 저 녀석들이 고대 문명을 몰락시킨 장본인이라 해도 난 전혀 놀라지 않을 것이다.\\\n\\\n검이나 활 같은 평범한 방식으로는 저놈들을 상대하기 버겁다. 저놈들은 그런 무기로 맞히기엔 너무 빠르다. 광역 피해를 주는 무언가가 훨씬 효과적일 것이다.", + + "book.spectrum.guidebook.marrows.name": "말로우", + "book.spectrum.guidebook.marrows.page0.text": "스켈레톤이긴 한데, 그냥 평범한 스켈레톤이 아니다. ", + "book.spectrum.guidebook.marrows.page1.text": "\\\n이 녀석들의 뼈는 지상에서 흔히 굴러다니는, 이제는 내게 위협조차 되지 않는 흔해 빠진 스켈레톤들에 비해 훨씬 더 단단하다.\\\n여전히 죽일 수는 있지만, 꽤나 짜증 나는 녀석들이다.\\\n이놈들은 [경직의 화살](entry://brewing/effects/stiffness)을 쏴댄다.\\\n\\\n(*나 자신에게 남기는 메모: 언데드 생명체를 죽이는 걸 뭐라고 불러야 할까?*)", + "book.spectrum.guidebook.splinterspawns.name": "가시파편충", + "book.spectrum.guidebook.splinterspawns.page0.text": "좀벌레와 매우 흡사하게, 가시파편충들은 블록 안에 숨어 지낸다. 서로 친척 관계인 걸까?", + "book.spectrum.guidebook.splinterspawns.page1.title": "벌레 먹은 블록", + "book.spectrum.guidebook.splinterspawns.page1.text": "지상의 친척뻘 되는 녀석들과는 달리, 이놈들은 숨어 지내면서 충돌을 피하려는 성향이 짙어 보인다. 매우 관찰력이 뛰어나며, 더 이상 도망칠 곳이 없을 때만 모습을 드러낸다.\\\n\\\n이 지하 생태계에서 살아남기 위한 타당한 생존 전략일까?", + + "book.spectrum.guidebook.eternal_slumber.page0.text": "내가 여기서 대체 뭘 기대했는지조차 모르겠다. 이건 [졸음증](entry://brewing/effects/somnolence)의 형제뻘 되는 효과인데, [#](449900)훨씬 더 강력하고 때로는 끝이 나지 않는다.[#]() 비교도 안 되게 끔찍한 일격을 가하며, 어지간히 정신력이 강인한 생명체가 아니고서야(그러니까, 나는 안 된다!) 스스로 풀려나지 *않는다*. 대낮의 밝은 환경을 뚫고 잠에 빠져들게 만드는 능력은 없지만, 대신 내게 이 꿈결 같은 아지랑이만 잔뜩 선사할 뿐이다...", + "book.spectrum.guidebook.ethereal_platform.page0.text": "건축물의 외관을 망치지 않으면서도 나만 자유롭게 통과할 수 있는 블록을 찾아 헤매던 중, [별똥별](entry://general/stargazing)이 내게 정답을 쥐여 주었다.\\\n\\\n[오닉스](entry://general/onyx_shards)가 가진 증폭의 힘을 사용하여, 나는 한낱 입자들에 불과했던 것을 단단한 고체로 느낄 수 있을 만큼 강화해 내는 데 성공했다.", + "book.spectrum.guidebook.ethereal_platform.page1.text": "이 블록의 또 다른 편리한 점은 오직 살아있는 생명체에게만 반응한다는 것이다. 아이템 같은 물건들은 그냥 통과해 버린다.", + "book.spectrum.guidebook.everpromise_ribbon.page0.text": "반려동물에게 지켜주고 보살펴주겠다는 영원한 약속의 징표로 달아주는 리본이다.\\\n이름을 지어 생명체에게 묶어줄 수 있다. 만약 그 동물이 죽게 된다면 이 리본은 [#](bb00bb)부서진 약속[#]()을 떨어뜨릴 것이다.\\\n\\\n내 반려동물은, 아직 나를 믿지 않았더라도 즉시 나를 깊이 신뢰하게 될 것이다.", + "book.spectrum.guidebook.everpromise_ribbon.page1.text": "이름을 적은 후, [](item://minecraft:crafting_table)를 사용하여 [#](bb00bb)리본[#]()에 [안료](entry://general/pigment)를 더하면 반려동물의 이름에 예쁜 색을 입힐 수 있다.", + "book.spectrum.guidebook.excavation_sites.name": "굴착 현장", + "book.spectrum.guidebook.excavation_sites.page0.text": "*작업장?*", + "book.spectrum.guidebook.excavation_sites.page1.text": "지하 깊은 곳, 정확히 말하자면 [하층석](entry://dimension/downstone) 층 사이의 가장 깊숙한 곳에서, 기묘하고 기계적인 냄새가 물씬 풍기는 구조물을 발견했다.", + "book.spectrum.guidebook.exchanging_staff.page0.text": "밋밋한 [#](bb00bb)조약돌[#]() 집이나 아예 벽조차 없는 평지에서 살지 않는 사람들을 위해(물론 난 아니다):\\\n교환의 지팡이는 서로 연결된 수많은 블록들을 눈 깜짝할 사이에 통째로 바꿔버릴 수 있다. 인테리어를 새로 할 때 그야말로 완벽하다!", + "book.spectrum.guidebook.exchanging_staff.page1.text": "*채굴 작업도 방금 훨씬 더 재밌어졌다*", + "book.spectrum.guidebook.exchanging_staff.page2.text": "채굴 도구에 행운 마법을 부여한 것처럼, 교환 시 광석 획득량을 배로 늘려준다.", + "book.spectrum.guidebook.exchanging_staff.page3.text": "유리나 광석처럼 연약한 블록을 부수지 않고 세상에 놓여있던 형태 그대로 내게 안겨준다.", + "book.spectrum.guidebook.exchanging_staff.page4.text": "일부 특수한 블록들을 그 형태 그대로 수확할 수 있는 힘을 부여한다.", + "book.spectrum.guidebook.extra_salty": "*겁나 짠맛*", + "book.spectrum.guidebook.exuberance.page0.text": "나의 저 멋들어진 마법 부여기는 유용하긴 하지만, 내가 경험치를 얻는 족족 마치 블랙홀처럼 빨아들여 버린다. 끊임없이 늘어만 가는 마법 도구들을 위해 저 끝없는 굶주림을 채워주는 건 정말이지 엄청난 고역이다.\\\n\\\n적들을 쓰러뜨릴 때 마지막 경험치 한 방울까지 쥐어짜 낼 수 있다면 꽤나 큰 도움이 될 것이다.", + "book.spectrum.guidebook.exuberance.page1.text": "몬스터를 죽이거나, 광석을 캐거나, 낚시를 하는 등 도구를 사용한 행동을 통해 떨어지는 경험치의 양을 증가시킨다.\\\n\\\n최대 레벨: 5\\\n근접 무기, 채굴 도구, 스펙트럼의 낚시대에 적용 가능.", + "book.spectrum.guidebook.fabrication_chest.page0.text": "안료 받침대는 아이템을 자동으로 조합하는 데 훌륭한 해결책이긴 하지만, 자리를 너무 많이 차지한다.\\\n\\\n오늘 나는 그보다 훨씬 더 적절한 해결책을 찾아냈다! 이 상자는 안료 받침대가 가진 구조물이 없기 때문에, 오직 평범한 레시피들만 자동화할 수 있다.", + "book.spectrum.guidebook.fabrication_chest.page1.text": "[제작 석판](entry://equipment/crafting_tablet)을 끼워 넣을 수 있는 네 개의 슬롯을 제공한다. 상자 안의 재료가 허락하는 한, 내가 석판에 정의해 둔 레시피의 아이템들을 항상 재고로 채워둔다.", + "book.spectrum.guidebook.fading.name": "실험 #1: 쇠퇴", + "book.spectrum.guidebook.fading.page0.text": "나는 이 새로운 기술의 한계를 어디까지 밀어붙일 수 있을지 확인해 보고 싶었다. 그리고 머지않아 생물학적인 청사진에 대한 아이디어가 내 머릿속에 떠올랐다.\\\n\\\n그렇게 탄생한 유기체는 나약했지만, 새로운 생명을 창조하려던 내 계획은 적어도 원리적으로는 대성공이었다! 비록 지금은 그저 미생물 덩어리에 불과할지라도, 이것들은 분명 살아 숨 쉬고 *있다*!", + "book.spectrum.guidebook.fading.page1.text": "모든 살아있는 것들은 동일한 목표를 가진다. 먹고, 번식하는 것. 그렇다면... 이것들은 번식을 위해 무얼 먹을까? 다른 블록들? 분명 소화하기 쉬운 무언가일 것이다.", + "book.spectrum.guidebook.fading.alternative_recipe.text": "얼마나 활기찬 작은 생명체인가.", + "book.spectrum.guidebook.failing.name": "실험 #2: 결함", + "book.spectrum.guidebook.failing.page0.text": "내 가슴속에 야망이 끓어오르지 않는다고 하면 거짓말일 것이다. 이것이 바로 세상을 바꿀 나의 위대한 첫걸음이란 것이 뼛속까지 느껴진다!\\\n강력한 [오닉스](entry://general/onyx_shards)[#]()와 [스트라틴](entry://general/stratine)의 힘을 불어넣어 탄생한 이 두 번째 유기체는, 지난번 피조물보다 확실히... 더 활동적이다.\\\n**그리고 확실히 더 굶주려 있다.\\\n압도적으로 말이다.**", + "book.spectrum.guidebook.failing.page1.text": "아마도 내가 아는 가장 단단한 물질 중 하나라면 그 굶주림을 채워줄 수 있지 않을까?", + "book.spectrum.guidebook.fatal_slumber.page0.text": "[#](449900)이 효과가 끝까지 지속되도록 방치하면 대상은 즉사한다.[#]() 내가 죽음의 문턱을 헤맬 때, 무언가를 보았다. 바닥 없는 바다, 끝없는 꿈, 벨벳 사이로 희미한 빛의 파편들이 반짝거렸고, 거의 은빛 실에 가까운 무언가가 나를 더 깊은 곳으로 유혹하고 있었다.... 물론 나는 그것을 따라갈 만큼 멍청하지 않았다.", + "book.spectrum.guidebook.fatal_slumber.page1.text": "이것은 근원적인 벨벳의 마법이 잠재된 밤의 연금술이 낳은 위대한 걸작이다. 따라서 대상의 정신력과 수면 저항력에 영향을 받는다.\\\n\\\n물론, 그 고요한 바다의 유혹을 견뎌낼 수 있는 건 오직 압도적인 힘을 지닌 존재들뿐이겠지만 말이다.", + "book.spectrum.guidebook.first_strike.page0.text": "심사숙고하여 내지른 단 한 번의 일격이면 충분하다... 뭐 그런 옛말이 있지 않았던가.\\\n\\\n어쨌든.\\\n그와 관련하여, 나는 선제공격 마법을 발명해 냈다! 약한 적들이 떼거지로 몰려올 때 엄청난 도움이 될 거라 확신한다.", + "book.spectrum.guidebook.first_strike.page1.text": "대상의 체력이 가득 차 있을 때 입히는 피해가 대폭 증가한다.\\\n\\\n최대 레벨: 2\\\n근접 무기에 적용 가능.", + "book.spectrum.guidebook.forgotten_cities.name": "잊혀진 도시", + "book.spectrum.guidebook.forgotten_cities.page0.text": "*활기 넘치던 중심지, 이제는 버려진 곳*", + "book.spectrum.guidebook.forgotten_cities.page1.text": "그러니까 이 아래에 지적인 생명체가 **존재했다는** 뜻이다! 아니... 존재했었다는 건가.\\\n이 도시는 당장 누군가 살고 있다 해도 믿을 만큼 번듯하지만, 정작 거주민의 흔적은 단 하나도 찾아볼 수 없다.\\\n\\\n다 어디 있지?\\\n대체 어디로 사라져버린 걸까?", + "book.spectrum.guidebook.forsaken_cathedral.page0.text": "*마지막 이정표*", + "book.spectrum.guidebook.forsaken_cathedral.page1.text": "지금으로서 내 여정의 종착지다.\\\n\\\n때로는 고단하고 험난한 여정이었지만, 나는 정말 많은 것을 배웠다.\\\n\\\n언젠가 다시 보자, 나의 *다채로운 세계*여.", + "book.spectrum.guidebook.undergrowth_manor.page0.text": "*꼭꼭 숨겨져 있다, 하지만 도대체 왜?*", + "book.spectrum.guidebook.undergrowth_manor.page1.text": "이런 지하 깊은 곳에서 대저택을 발견할 줄은, 그것도 정원의 구석진 곳에 숨겨져 있을 줄은 상상도 못 했다.\\\n\\\n이 저택의 드높은 기품과 화려한 스테인드글라스만 보아도 한때 대단한 위상을 누렸음이 명백하다... 나는 왜 이 저택이 이 무성한 덤불 속 깊은 곳에 은둔하듯 숨겨져 있는지 궁금해질 수밖에 없었다.", + "book.spectrum.guidebook.undergrowth_manor.page4.title": "드레이톤", + "book.spectrum.guidebook.undergrowth_manor.page5.text": "이곳에서 사람을, 그것도 잠들어 있는 여인을 발견할 줄은 꿈에도 몰랐다.\\\n\\\n처음엔 죽은 줄로만 알았지만, 이내 그녀가 숨을 쉬고 있다는 사실을 깨달았다. 아주 얕고, 아주 부드러운... 고요한 숨결이었다.\\\n\\\n*이곳은 허물어져 가고 있다... 그녀는 아마 수십 년, 어쩌면 수 세기 동안 이곳에 있었을 것이다.*", + "book.spectrum.guidebook.undergrowth_manor.page4.text": "*...그녀가 다시 깨어날 수 있을 거라고는 생각지 않는다.*", + "book.spectrum.guidebook.undergrowth_manor.pyrite_projector.text": "비록 (적어도 겉보기에는) 이 물건들을 거의 완벽하게 재현해 내긴 했지만, 여전히 이걸 어떻게 작동시켜야 할지 전혀 감이 잡히지 않는다.\\\n무슨 용도지...?", + "book.spectrum.guidebook.foundry.page0.text": "내가 이 세계에 처음 발을 들였던 날들을 아직도 기억한다. 광석을 녹이겠다고 돌덩이에 매달려 애타게 석탄을 캐내던 그 시절을. 하지만 그런 날들도 이젠 끝이다. 미래가 바로 여기 있다, 과거의 나여.\\\n\\\n물론 치러야 할 대가는 있는데, 제련을 통해 얻을 수 있었던 경험치는 포기해야 한다.", + "book.spectrum.guidebook.foundry.page1.text": "채굴한 블록을 자동으로 제련한다. [#](bb00bb)낚시대[#]()에 부여하면 찌에 불을 붙인다.\\\n\\\n최대 레벨: 1\\\n채굴 도구 및 [#](bb00bb)스펙트럼의 낚시대[#]()에 적용 가능.\\\n섬세한 손길과 동시에 부여할 수 없음.", + "book.spectrum.guidebook.four_upgrade_slots": "4개의 강화 슬롯", + "book.spectrum.guidebook.freigeist.page0.text": "첫 방울이 입술에 닿자마자, 내 몸은 이미 폭발할 듯한 강력한 힘으로 채워졌다. 그 느낌을 떠올리는 것만으로도 긴장감에 손이 다시 *덜덜* 떨린다. 이건 좋지 않다.\\\n그럼에도 불구하고 나는 내 생애 그 어느 순간보다도 강렬하게 살아 숨 쉬고 있음을 느꼈다.\\\n\\\n정말 이 병을 남김없이 비워버릴 가치가 있는 걸까? 만에 하나 모든 예상을 뒤엎고 내가 죽기라도 한다면, 그 대가는 상상할 수조차 없을 만큼 끔찍할 것이다.", + "book.spectrum.guidebook.freigeist.page1.text": "*쓰다듬어라, 그 유일한 것을,\\\n 결코 바래지 않는 것을\\\n네 마음속에 내리는 비,\\\n 눈처럼 새하얀\\\n 슬픔의 눈물을\\\n그 유일을 쓰다듬으라,\\\n 숨어버린 아마란스를\\\n동틀 녘의 대지에서*", + "book.spectrum.guidebook.frenzy.page0.text": "적을 처치할 때마다 내 공격력, 공격 속도, 이동 속도, 밀침 저항이 폭발적으로 증가했다. 효과의 레벨이 높을수록 버프도 강력해졌다.\\\n하지만 10초 내에 처치를 기록하지 못하면, 대신 끔찍한 디버프에 걸려버렸다.", + "book.spectrum.guidebook.frenzy.page1.text": "광란 효과를 새로 받으면 지속 시간이 초기화되는 것이 아니라, 이미 존재하는 레벨 위에 새로운 레벨이 쌓이면서 효과의 위력이 점점 더 증폭된다.", + "book.spectrum.guidebook.fusion_shrine.page0.text": "[검은 조각](entry://general/onyx_shards)을 창조하기 위해 나는 아주 특별한 구조물을 설계했다.\\\n이 위에 아이템이나 양동이를 클릭해서 올리거나, 아니면 그냥 던져버릴 수도 있다. 심지어 융합 재료를 한 번에 묶음 단위로 한꺼번에 처리할 수 있어서, 한 번에 아이템을 하나씩 깔짝대며 조합하는 것보다 훨씬 효율적이다. 정확한 타이밍이 필요한 레시피들에 특히 유용하다.", + "book.spectrum.guidebook.fusion_shrine.page1.text": "[#](bb00bb)방해석[#]()이나 [#](bb00bb)현무암[#]() 중 어느 것을 쓰든 상관없다.\\\n구조물과 하늘이 뻥 뚫린 맑은 시야가 필요하다.", + "book.spectrum.guidebook.fusion_shrine.page2.text": "크기: 9x9x5 블록.", + "book.spectrum.guidebook.fusion_shrine.page3.text": "- 1 융합의 성소\n- 4 윤나는 보석 블록\n- 4 조각된 윤나는 블록\n- 8 윤나는 기둥\n- 12 윤나는 반 블록\n- 77 윤나는 블록\n\n\\\n언제나 그렇듯 [#](bb00bb)현무암[#]()을 [#](bb00bb)방해석[#]()으로 바꿀 수 있고, [보석 블록](entry://decoration/gemstone_deco) 역시 내 취향에 맞게 선택할 수 있다.", + "book.spectrum.guidebook.gather_node.name": "수집 노드", + "book.spectrum.guidebook.gather_node.page0.text": "수집 노드는 다른 노드들로부터 아이템을 능동적으로 요청하여 연결된 인벤토리에 집어넣는다.\\\n\\\n어떤 아이템을 수집할지는 [#](449900)필터[#]()를 통해 지정할 수 있다.", + "book.spectrum.guidebook.gather_node.page1.text": "수집 우선순위:\n1. [송신 노드](entry://pastel_network/sender_node)\n2. [제공 노드](entry://pastel_network/provider_node)\n3. [저장 노드](entry://pastel_network/storage_node)", + "book.spectrum.guidebook.gemstone_armor.name": "보석 방어구", + "book.spectrum.guidebook.gemstone_armor.page0.text": "나만의 독자적인 전투 스타일을 개발할 시간은 차고 넘쳤다.\\\n그 전투를 가장 잘 보조해 줄 일련의 장비들을 직접 설계했다.\\\n\\\n단점이 있다면, 제작에 쓰인 재료들이 무척이나 깨지기 쉽다는 점이다. 따라서 이 장비들의 내구도는 상대적으로 낮은 편이다.", + "book.spectrum.guidebook.gemstone_armor.checklist.helmet": "투구: 공허와 지옥의 조우", + "book.spectrum.guidebook.gemstone_armor.checklist.chestplate": "흉갑: 황금 비율", + "book.spectrum.guidebook.gemstone_armor.checklist.leggings": "레깅스: 네더의 애도", + "book.spectrum.guidebook.gemstone_armor.checklist.boots": "부츠: 악몽의 근원", + "book.spectrum.guidebook.gemstone_armor.page1.text": "\\\n이 장비들은 [모루](item://minecraft:anvil)에서 [보석 조각](entry://general/shards)을 사용하여 수리할 수 있다.\\\n\\\n이 방어구들의 고유한 능력을 끌어내기 위해서는 몇 가지 특별한 재료들이 필요하다.", + "book.spectrum.guidebook.gemstone_armor.page2.text": "나를 공격한 적들에게 나약함과 구속 효과를 부여하여, 마치 그림자처럼 적들의 손아귀에서 스르륵 빠져나갈 수 있게 해준다.", + "book.spectrum.guidebook.gemstone_armor.page3.text": "피격 시 내게 흡수와 저항 효과를 부여하여, 짧은 시간 동안 나를 난공불락의 거대한 성벽으로 만들어준다.", + "book.spectrum.guidebook.gemstone_armor.page4.text": "피격 시 짧은 시간 동안 강력한 재생 효과를 부여하여, 훌훌 털고 일어나 즉시 반격할 수 있게 해준다.", + "book.spectrum.guidebook.gemstone_armor.page5.text": "피격 시 짧은 시간 동안 신속과 투명 효과를 부여하여 신속하게 후퇴할 수 있게 해준다. 원거리 전투에 완벽하다.", + "book.spectrum.guidebook.gemstone_chimes.name": "보석 차임", + "book.spectrum.guidebook.gemstone_chimes.page0.text": "보석들을 가지고 오랫동안 뚝딱거리다 보니, 어느새 이 연약한 자원들을 아주 정교하게 다듬어 낼 수 있는 경지에 올랐다. 미풍에 부드럽게 흔들리는 차임 소리를 듣고 있자니 내 여정의 첫 시작인, 처음 정동에 발을 들였던 그 순간이 떠오른다. 아직도 생생하다. 정말 엄청난 순간이었지!\\\n각 차임은 그 재료가 된 보석 특유의 평온한 소리를 낸다.", + "book.spectrum.guidebook.gemstone_glass.name": "보석 유리", + "book.spectrum.guidebook.gemstone_glass.page0.text": "보석들은 본래 약간 투명한 성질을 띠고 있다. 그렇다면 이걸 이용해 일종의 유리를 만들어 보는 것만큼 자연스러운 발상이 어디 있겠는가?\\\n당연히 그에 맞는 유리판도 만들 수 있다.", + "book.spectrum.guidebook.gemstone_glass.page1.text": "내가 발견한 모든 종류의 보석을 이용해 만들어낼 수 있다.", + "book.spectrum.guidebook.gemstone_lights.name": "보석 광원", + "book.spectrum.guidebook.gemstone_lights.page0.text": "처음 정동에 발을 들였을 때, 가장 먼저 나를 반겨준 건 기분 좋고 아늑한 불빛이었다.\\\n\\\n[미광석](entry://general/shimmerstone)의 힘을 빌리니, 이 빛을 증폭시켜 근사한 광원을 만들어내는 건 식은 죽 먹기였다.", + "book.spectrum.guidebook.gemstone_lights.page1.text": "내가 발견한 모든 종류의 보석을 이용해 만들어낼 수 있다.\\\n[조각된 방해석과 조각된 현무암](entry://decoration/block_variants@chiseled_and_notched) 둘 다 훌륭한 밑받침이 되어줄 것이다.", + "book.spectrum.guidebook.gemstone_powder.name": "보석 가루", + "book.spectrum.guidebook.gemstone_powder.description": "눈부신 색채와 지독하게 섞이지 않는 성질에 대하여", + "book.spectrum.guidebook.gemstone_powder.page0.text": "안료 받침대를 사용하는 대부분의 레시피는 촉매로서 일정량의 보석 가루를 요구할 것이다.\\\n\\\n만약 가루를 구하지 못했다면, [아이템 분쇄](entry://general/item_crushing)를 통해 [보석 조각](entry://general/shards)을 빻아서 만들어낼 수 있다.", + "book.spectrum.guidebook.gemstone_powder.page1.text": "새내기 화가에게 알맞은 색을 조합하는 것보다 더 중요한 일은 없다.\\\n하지만 안타깝게도, 보석 가루의 경우에는 처음 생각했던 것만큼 결코 호락호락하지 않았다. *이 가루들은 도무지 서로 섞이려 들지를 않았고*, 결과물은 항상 칙칙하고 여러 색이 엉망으로 섞인 덩어리에 불과했다.\\\n\\\n나중에 뭔가 다른 좋은 방법이 떠오르려나?", + "book.spectrum.guidebook.gemstone_powder.page1.title": "색상 혼합", + "book.spectrum.guidebook.gemstone_powder.page2.text": "보석 가루를 압축하면 보관하거나 장식용으로 훌륭한 블록을 만들 수 있다.", + "book.spectrum.guidebook.gemstone_runes.name": "조각된 보석 블록", + "book.spectrum.guidebook.gemstone_runes.page0.text": "[#](bb00bb)방해석[#]()과 [#](bb00bb)현무암[#]()이 정동을 완전히 둘러싸고 있는 한 보석의 에너지를 억제할 수 있다는 사실만큼은 확실하다. 하지만 때때로 수 세기에 걸쳐 응축된 에너지가 너무나도 강렬한 나머지 말 그대로 정동에 구멍을 뚫고 터져 나오는 경우가 있는 것 같다.\\\n\\\n나는 그 현상을 아주 작은 축소판으로 재현해 냈다.", + "book.spectrum.guidebook.gemstone_runes.page1.text": "내가 발견한 모든 종류의 보석을 이용해 만들어낼 수 있다. [조각된 방해석과 조각된 현무암](entry://decoration/block_variants@chiseled_and_notched) 둘 다 테두리로 쓰기에 안성맞춤이다.", + "book.spectrum.guidebook.gemstone_runes.page2.text": "온전한 보석 군집을 구할 수만 있다면, 이런 것들을 만드는 게 훨씬 더 수월해질 것이다.", + "book.spectrum.guidebook.gemstone_runes.page2.title": "대체 레시피", + "book.spectrum.guidebook.gemstone_deco.name": "보석 장식", + "book.spectrum.guidebook.gemstone_deco.page0.text": "보석들은 그 자체로도 비할 데 없이 아름다운 자태를 뽐낸다.\\\n하지만 정동에서 갓 캐낸 거친 원석 덩어리의 모습은, 내 다소 각 잡힌 건축물들에 쓰기에는 너무 거친 자연의 느낌이 강하다. 이를 온전한 블록 형태로 매끄럽게 가공해 내니, 이제야 주변 환경에 아주 아름답게 어우러진다.\\\n\\\n만약 어느 순간 보석이 바닥난다면, 이 윤나는 블록들을 다시 부숴서 사용할 수도 있다.", + "book.spectrum.guidebook.gemstone_deco.bricks.title": "보석 벽돌", + "book.spectrum.guidebook.gemstone_deco.bricks.text": "문득 그런 생각이 들었다. *벽돌 형태로 만들어도 여전히 예쁘지 않을까*?\\\n\\\n안료 받침대나 [](item://minecraft:stonecutter)에서 제작 가능하다.", + "book.spectrum.guidebook.geodes.name": "정동", + "book.spectrum.guidebook.geodes.page0.text": "지하에 어떤 기묘한 현상이 존재한다는 이야기는 들었지만, 당장 나에게 남은 단서라고는 이 그림 한 장이 전부다.", + "book.spectrum.guidebook.geodes.page1.text": "군집을 부수면 보석 조각을 얻을 수 있는데, 이 조각들은 원본 보석의 특성을 대부분 고스란히 간직하고 있는 듯하다.\\\n각 보석의 종류마다 세상의 어떤 근본적인 특성 하나씩을 대변하고 있는 것 같다.\\\n\\\n높이에 따라 형성되는 보석의 종류가 달라지는 모양이다. 이들을 전부 찾아내려면 다양한 깊이를 골고루 뒤져보는 편이 현명할 것이다.", + "book.spectrum.guidebook.gemstone_ores.generation.text": "가장 거대한 보석들은 [](item://minecraft:calcite)과 [](item://minecraft:smooth_basalt) 층에 의해 철저히 보호받고 있지만, 간혹 자잘한 광상들이 그 너머까지 뻗어 나가기도 한다.", + "book.spectrum.guidebook.gemstone_ores.ores.text": "이제 와서 주의 깊게 살펴보니, 정동 주변 암석 곳곳에 자잘한 보석들이 박혀 있는 게 눈에 띄었다. 즉, 앞으로 이런 광석을 발견한다면 근처에 분명 정동이 숨겨져 있다는 뜻이다!\\\n\\\n보석 군집처럼 계속해서 자라나진 않지만, 보석 광석을 캐면 꽤 많은 [조각](entry://general/shards)과 약간의 [가루](entry://general/gemstone_powder)를 얻을 수 있다. 행운 마법이 부여된 도구로 캐면 금상첨화다.", + "book.spectrum.guidebook.gemstone_ores.name": "보석 광석", + "book.spectrum.guidebook.geodes.page4.text": "토파즈 정동은 다른 것들과 비교를 불허할 정도로 거대하며, [#](5bffed)**물질**[#]()이라는 요소에 걸맞은 위용이다. 이것들은 오로지 거대한 언덕이나 높이 솟은 산맥의 고지대에서만 발견된다.", + "book.spectrum.guidebook.geodes.page4.title": "토파즈 정동", + "book.spectrum.guidebook.geodes.page5.text": "[#](ff4ff6)**시간**[#]()의 요소로서, 자수정 정동은 다른 모든 세상사의 번잡함으로부터 완전히 단절된 채 세계의 가장 깊숙한 밑바닥에서 묵묵히 그 존재를 이어가는 경향이 있다.\\\n여유로우면서도, 압도적인 위압감이 느껴진다.", + "book.spectrum.guidebook.geodes.page5.title": "자수정 정동", + "book.spectrum.guidebook.geodes.page6.text": "황수정 정동은 세계의 중간 깊이쯤에서 발견되며, 때로는 지표면에서 바로 접근할 수 있을 때도 있다. 이 정동들은 크기는 작지만, 그 안에 엄청난 [#](eded00)**에너지**[#]()를 품고 있다. 유독 금이 간 황수정 블록을 자주 발견했던 것도 무리가 아니다.", + "book.spectrum.guidebook.geodes.page6.title": "황수정 정동", + "book.spectrum.guidebook.geodes.page7.text": "지저 너머를 탐험하던 중 월장석 정동을 우연히 발견했다! 나는 언제나 이 변종이 어딘가에 *반드시* 존재할 거라고 의심해 왔다.\\\n\\\n이 장엄한 정동은 그 어떤 것보다도 눈부신 순백의 빛을 발한다. 지저 너머의 칠흑 같은 어둠에 익숙해진 눈에는 거의 실명할 것만 같이 눈이 부시다.", + "book.spectrum.guidebook.geodes.page7.title": "월장석 정동", + "book.spectrum.guidebook.gilded_book.page0.text": "이럴 수가! 도금된 책은 [마법 부여기](entry://enchanting/enchanter)에서 평범한 [#](bb00bb)책들[#]()을 대체할 아주 완벽한 수단이 되어줄 것이다.\\\n\\\n하지만 그게 끝이 아니다!", + "book.spectrum.guidebook.gilded_book.page1.text": "- 마법을 흡수하는 성질이 훨씬 강해서, 마법 부여 과정이 훨씬 빠르고 비용도 저렴해진다.\n- 마법 부여기 주변의 아이템 그릇들에 놓인 [#](bb00bb)모든 종류의 아이템으로부터 마법 부여를 복사해 와서[#]() 이 책에 옮겨 담을 수 있다!\n\n\\\n*반짝인다고 다 금은 아니다.\\\n하지만 이 책만큼은, 진정한 금이다.*", + "book.spectrum.guidebook.glass_ampoules.name": "유리 앰플", + "book.spectrum.guidebook.glass_ampoules.page0.text": "종잇장처럼 얇은 유리로 만들어진 병들이다. 어찌나 연약한지 그저 쳐다보는 것만으로도 깨져버질 것만 같다. 그 안에 담긴 내용물은... 솔직히 말해 정말 장관이다. 이걸 깨트리면 내용물이 즉시 기화되어 공기 중으로 흩어진다. 오직 내 적들의 머리 위로 고통의 비를 내리게 하기 위해서.", + "book.spectrum.guidebook.glass_ampoules.page1.text": "방어용이든 공격용이든, 이 물건들은 확실히 아주 기상천외한 전술들에 써먹을 수 있다.\\\n심지어 발사기에서도 작동한다.", + "book.spectrum.guidebook.glass_arrows.name": "유리 화살", + "book.spectrum.guidebook.glass_arrows.page0.text": "이 면도날처럼 날카로운 화살은 엄청난 피해를 입히며, 마치 공기를 가르듯 유체를 꿰뚫고 날아간다. 보석을 덧대면 훨씬 더 다재다능한 효능을 발휘한다.", + "book.spectrum.guidebook.glass_arrows.page1.text": "대상을 내 쪽으로 끌어당겨, 즉시 치명적인 근접 공격을 먹일 수 있는 완벽한 사정거리로 배달해 준다.", + "book.spectrum.guidebook.glass_arrows.page2.text": "대상을 꽁꽁 얼려버린다. 녀석들의 발을 묶어버리고 서서히 얼어붙는 고통을 선사한다.", + "book.spectrum.guidebook.glass_arrows.page3.text": "가공할 만한 충격으로 적을 들이받아, 저 멀리 까마득하게 날려버린다.", + "book.spectrum.guidebook.glass_arrows.page4.text": "대상의 무적 시간을 깔끔하게 무시하고 피해를 욱여넣으며, 무적 시간을 초기화시켜버린다. 방패에는 추가 피해를 안겨준다.", + "book.spectrum.guidebook.glass_arrows.page5.text": "순수한 에너지의 구체로 폭발하여, 주변에 있는 모든 생명체들을 한꺼번에 날려버린다.", + "book.spectrum.guidebook.glass_crest_tools.name": "유리 장식 도구", + "book.spectrum.guidebook.glass_crest_tools.page0.text": "[공작석 도구](entry://dimension/malachite_tools)에 [월장석 코어](entry://dimension/moonstone_cores)를 박아 넣으면, 도구에 강력하고도 새로운 능력이 깃들게 된다.", + "book.spectrum.guidebook.glass_crest_tools.page1.text": "충돌 시 블록을 파괴해 버리는 [#](b9bebe)하얀색 잉크[#]()를 발사한다. 마법 부여를 전환할 때 [공명](entry://enchanting/enchantments/resonance)을 선택할 수도 있다.", + "book.spectrum.guidebook.glass_crest_tools.page2.text": "입히는 피해의 일부를 단단한 장갑도 종잇장처럼 뚫어버리는 [#](449900)마법[#]() 피해로 변환하여 꽂아 넣는다. 또한 내 주변의 모든 것을 날려버리는 [#](449900)지면 강타[#]()를 시전할 수도 있다. 이 능력은 [#](449900)휩쓸기[#]() 레벨에 비례하여 강해진다.", + "book.spectrum.guidebook.glass_crest_tools.page2.title": "특대검", + "book.spectrum.guidebook.glass_crest_tools.page3.text": "화살을 장전한 후 웅크린 채로 사용하여 과충전하여, 화살의 명중률, 속도, 피해량을 무시무시하게 증가시킨다.", + "book.spectrum.guidebook.glass_crest_tools.page4.text": "쌍지창과 휴대형 뇌우를 결합한 환장할 만한 결과물이다. 이걸 쓰면 하늘로 내 몸을 냅다 집어 던져 내 경로에 있는 모든 것을 갈가리 찢어버릴 수 있다. 심지어 비 한 방울 안 내리는 바싹 마른 사막에서조차도! ...물론 잉크가 바닥나지 않는다는 전제하에 말이다. 이 능력은 [#](449900)급류[#]() 레벨에 비례하여 강해진다. *날아오르는 게 문제가 아니다. 살아서 착지하는 게 문제지.*", + "book.spectrum.guidebook.glass_crest_tools.page4.title": "사나운 쌍지창", + "book.spectrum.guidebook.glass_crest_tools.page5.text": "[#](bb00bb)메아리 조각[#]()을 덧댄 이 쌍지창은 던졌을 때 무기 본체가 날아가는 대신, 자신과 똑 닮은 메아리의 환영을 발사하여 충돌 시 조각이 된다.\\\n\\\n*이 능력은 [#](449900)효율[#]()과 [#](449900)힘[#]() 마법 부여에 비례하여 강해지며, 생산량과 피해량이 모두 증가한다.*", + "book.spectrum.guidebook.glass_crest_tools.page5.title": "프랙탈 쌍지창", + "book.spectrum.guidebook.glass_panes.text": "당연히 그에 맞는 유리판도 만들 수 있다.", + "book.spectrum.guidebook.gleaming_pin.page0.text": "최근 탐험을 나갔다가 사방에서 화살을 맞는 바람에 패닉에 빠져 주변을 두리번거렸지만 정작 날 쏜 놈은 코빼기도 보이지 않았는데, 이미 모퉁이 너머로 도망쳐버린 뒤였다.\\\n\\\n하지만 이 미광의 핀을 꽂고 있으면, 내가 공격받는 즉시 벽조차 뚫고 나가는 마법의 파동이 뿜어져 나와 주변의 생명체들에게 달라붙어, 도망친 놈을 추적하는 건 일도 아니게 된다.", + "book.spectrum.guidebook.gleaming_pin.page1.text": "*도망쳐봤자, 숨을 곳은 없다*", + "book.spectrum.guidebook.gleaming_pin.page2.text": "저격 마법을 부여하면 이 파동이 훨씬 더 빽빽한 물질들을 뚫고 나아갈 수 있게 되어, 탐지 범위가 획기적으로 늘어난다.", + "book.spectrum.guidebook.glistering_jelly_tea.page0.text": "[비취 덩굴](entry://general/jade_vines)이 [#](bb00bb)반짝이는 수박[#]()과 비슷한 재생 능력을 품고 있다는 사실은 이미 알고 있었다. 우연히도 이 둘을 함께 섞어보니 놀라울 정도로 조화롭고 달콤한 맛이 탄생했다.\\\n\\\n일시적으로 체력을 소폭 증가시켜 준다.", + "book.spectrum.guidebook.glistering_melons.name": "반짝이는 수박", + "book.spectrum.guidebook.glistering_melons.page0.text": "[묘목들을 완전히 다른 무언가로 변형](entry://general/colored_trees)시키는 데 성공했는데, 이 방법을 다른 식물들에 적용해 보지 않을 이유가 있을까?\\\n절대 내가 금은보화에 눈이 멀어서 그런 건 아니다. 순수한 학구적 호기심일 뿐이다.", + "book.spectrum.guidebook.glistering_melons.page0.title": "반짝이는 수박 식물", + "book.spectrum.guidebook.gloves_of_dawns_grasp.page0.text": "이웃에게 대체 허구한 날 떠들어대는 그 \"[#](bb00bb)고버[#]()\"라는 게 뭐냐고 물어봤더니, 돌아온 대답이라곤 그 신에 필적하는 물질은 \"네깟 보잘것없는 화가의 손에는 닿을 수 없는 곳에 있다\"는 말뿐이었다.\\\n그들이 말한 \"손에 닿지 않는다\"는 말이 물리적인 의미가 아니라는 걸 미처 설명하기도 전에, 나는 이미 내 사정거리를 획기적으로 늘려줄 이 장갑의 설계를 끝마친 뒤였다. 이런.", + "book.spectrum.guidebook.gloves_of_dawns_grasp.page1.text": "뭐, 어찌 됐든 아이디어를 떠올렸으니, *이제 써먹을 시간이다*!\\\n\\\n[하늘색 잉크](entry://ink/ink)를 주입하면 장갑이 제공하는 사정거리가 한층 더 길어진다.", + "book.spectrum.guidebook.glow_vision_goggles.page0.text": "만약 내가 가장 좋아하는 몬스터에 투표해야 한다면, 나는 *한 치의 망설임 없이* 발광 오징어에게 몰표를 던질 것이다! 끝없는 동굴의 어둠 속에서 내 앞길을 은은하게 비춰주는 그 자태를 어찌 사랑하지 않을 수 있단 말인가. 하지만 안타깝게도, 그 아름다운 녀석들은 너무나 자주 물가로 떠밀려와 슬픈 최후를 맞이하곤 한다.\\\n나는 내 앞길을 비춰주던 그들의 서투르지만 눈부신 유산을 기리기 위해, 그들의 빛을 이어받아 나를 계속 인도해 줄 안경을 설계했다.", + "book.spectrum.guidebook.glow_vision_goggles.page1.text": "어두운 곳에 있을 때 인벤토리에 발광 먹물 주머니를 소지하고 있으면, 이 발광 시야 고글이 내게 [#](449900)야간 투시[#]() 효과를 선사한다.", + "book.spectrum.guidebook.glowblocks.name": "발광 블록", + "book.spectrum.guidebook.glowblocks.page0.text": "이제 나는 이 세상 그 어떤 것보다도 순수한 안료를 손에 넣었다. 그렇다면 이 세상 그 어떤 것보다도 순수한 색을 뿜어내는 블록을 만들지 못할 이유가 없지 않은가!\\\n\\\n처음에는 이 블록들의 이름을 [#](449900)안티블록[#]()이라고 지을까 고민했지만, 어찌 됐든 이것들도 결국 블록인데 그렇게 부르면 너무 바보 같지 않은가?", + "book.spectrum.guidebook.glowblocks.page1.text": "발광 블록은 블록의 심장부에서부터 자체적으로 빛을 뿜어내기 때문에, 표면에 빛이 얼마나 닿든 상관없이 언제나 똑같이 눈부신 자태를 유지한다.", + "book.spectrum.guidebook.greater_potion_pendant.page0.text": "그 [작은 형제](entry://brewing/lesser_potion_pendant)와 작동 방식은 매우 흡사하다.\\\n하지만 이 상급 버전에는 공간이 세 개나 달려 있어, 각각의 공간에 서로 다른 물약을 채워 넣을 수 있지만, 레벨 I 효과들만 품을 수 있다는 제약이 있다.", + "book.spectrum.guidebook.concealing_oils.page0.text": "독살자의 핸드북을 훑어보던 중 이 묘약이 내 시선을 확 사로잡았다. 음식에 물약의 효과를 은밀하게 스며들게 할 수 있다니! 작업장에서 병을 채워 넣기만 하면 모든 준비는 끝이다...", + "book.spectrum.guidebook.hardcore_revival.name": "하드코어 부활", + "book.spectrum.guidebook.hardcore_revival.page0.text": "한 가지 놀라운 사실을 발견했다. 이 우주는 내 주변의 다른 그 어떤 것들보다 나라는 존재에게 훨씬 더 관대한 것 같다. 치명적인 피해를 입고 눈앞이 새카매질 때마다, 나는 항상 완전히 건강하고 생생한 모습으로 다시 눈을 떴으니까. 마치 누군가 내게 새로운 목숨을 거저 쥐여준 것처럼 말이다.\\\n하지만 만약 내가 죽음을 영원히 속일 수 없다면? 모든 것이 끔찍하게 꼬여버릴 최악의 상황을 대비하여 이 안전장치를 고안해 냈다.", + "book.spectrum.guidebook.hardcore_revival.page0.title": "하드코어 플레이어 부활", + "book.spectrum.guidebook.hardcore_revival.page1.text": "[#](449900)하드코어[#]() 모드에서 죽어버린 플레이어를 부활시키려면, [#](bb00bb)그 플레이어 본인의 머리[#](), 엄청난 양의 자원, 그리고 약간의 시간이 필요하다.", + "book.spectrum.guidebook.harvesting_spawners": "생성기 회수", + "book.spectrum.guidebook.heartbound_chest.page0.text": "물건을 보관하려고 상자를 설치해 뒀다가, 나중에 돌아와 보니 싹 다 털려있는 꼴을 한두 번 겪은 게 아니다.\\\n\\\n이 특별한 상자는 내 소중한 물건들을 지켜주는 것은 물론이고, 운이 좋으면 도둑놈의 덜미를 현장에서 잡을 수 있게 도와주기까지 한다.", + "book.spectrum.guidebook.heartbound_chest.page1.text": "오직 이 상자를 설치한 본인만이 열 수 있으며, 일반 상자 두 개를 합친 것과 똑같은 보관 공간을 제공한다.", + "book.spectrum.guidebook.heartbound_chest.page2.text": "덫 상자와 비슷하게, 이 물건도 [#](449900)레드스톤 신호[#]()를 뿜어낸다.\\\n주인인 내가 열면 최대 강도의 신호를 내뿜지만, 만약 낯선 도둑놈이 내 물건에 함부로 손을 대려 하면 신호의 세기가 절반으로 뚝 떨어진다.", + "book.spectrum.guidebook.heartbound_chest.page2.title": "레드스톤 요소", + "book.spectrum.guidebook.heartsingers_reward.page0.text": "이 작고 앙증맞은 반지 하나에 필요한 모든 게 담겨 있다. 약간의(어쩌면 엄청나게 많은!) [#](d6658f)분홍색 잉크[#]()의 힘을 빌려, 이 반지는 내면에서부터 나를 강인하게 만들어주며 내게 추가 체력을 선사한다.", + "book.spectrum.guidebook.heartsingers_reward.page1.text": "[색상 추출기](entry://ink/color_picker)에서 [분홍색 잉크](entry://ink/ink)를 주입하면 내게 부여되는 추가 체력의 양이 늘어난다.", + + "book.spectrum.guidebook.idea": "하나의 발상", + "book.spectrum.guidebook.ideas.a_gemstone": "보석에 대하여", + "book.spectrum.guidebook.ideas.a_new_ore": "새로운 광석에 대하여", + "book.spectrum.guidebook.ideas.a_new_resource": "새로운 자원에 대하여", + "book.spectrum.guidebook.ideas.amethyst.page0.text": "정동은 보통 지하 아주 깊은 곳에서나 발견되곤 한다.", + "book.spectrum.guidebook.ideas.azurite.page0.text": "용암 바닥 높이 근처의 특정 구역에서 눈에 띄는 푸른색 기운을 목격했다. 대체 무엇이 이런 현상을 일으키는 걸까?", + "book.spectrum.guidebook.ideas.azurite.page1.text": "부드러운 공명음과 함께 일렁이는 이 기운들은, 짙은 푸른빛 광석의 거대한 매장지에서 뿜어져 나오는 것 같다! 바위 깊은 곳에 파묻힌 채로 아주 드물지만 거대한 군집을 이루고 있는 게 틀림없다.", + "book.spectrum.guidebook.ideas.citrine.page0.text": "세상을 돌아다니다 보니, 어떤 정동들은 지표면 가까이까지 튀어나와 있는 것을 볼 수 있었다. 대개 해안가나 협곡 근처에서 말이다.", + "book.spectrum.guidebook.ideas.clover.page0.text": "전에 평원에서 아주 평범한 식물들을 본 적이 있다! 그땐 딱히 운이 좋지 않았지만, 지금이라면 어떨까?", + "book.spectrum.guidebook.ideas.clover.page1.text": "평원 생물군계에서 작은 군락을 이루며 자라던 클로버들은 대개 잎이 세 개였지만, 아주 드물게 네 개인 것도 섞여 있었다! 뼛가루나 자연의 지팡이를 사용하면 이것들을 더 넓게 퍼뜨릴 수도 있을 것 같다.", + "book.spectrum.guidebook.ideas.concise_instructions": "간결한 지침", + "book.spectrum.guidebook.ideas.downstone_fragments.page0.text": "지저 너머의 지하로 파고들면 파고들수록, 절대로 부서지지 않을 것 같은 바위들과 점점 더 자주 마주치게 된다. 이게 정말 자연적으로 형성된 걸까, 아니면 누군가 저 아래에 무언가를 지어둔 걸까?", + "book.spectrum.guidebook.ideas.downstone_fragments.page1.text": "단언컨대 자연의 산물은 아니다! 이곳에 살았던 옛 거주민들이 이 돌을 깎아내기 위해 거대한 구조물들을 세웠던 모양이다. 분명 그들이 남겨둔 흔적이 어딘가에 있을 것이다. 직감이 말해주길, 그들은 더 이상 그 구조물이 필요하지 않을 테니까.", + "book.spectrum.guidebook.ideas.dragonbone.page0.text": "거대한 생명체의 잔해를 발견했다.\\\n이 블록들은 도저히 평범한 방법으로는 캘 수 없어 보이는데, 캐내려고 시도할 때마다 순식간에 마법의 기운이 스스로를 재구성하며 보호하기 때문이다.\\\n이 기운을 깨트릴 수 있는 파격적인 방법이 없을까, 이를테면 엄청난 물리력을 가한다든가?", + "book.spectrum.guidebook.ideas.dragonbone.page1.text": "분명 마법적인 기운이 스스로를 재구성하기 전에 단숨에 뚫어버릴 수만 있다면 이 블록들을 캐내는 것도 충분히 가능할 것이다! 마법적인 폭발이든, 강력한 물리적 폭발이든, 단순한 TNT보다 조금 더 강한 폭발력—이를테면 백열의 혼합물 같은 것—이라면 먹혀들지도 모른다.", + "book.spectrum.guidebook.ideas.fading.name": "실험 #1", + "book.spectrum.guidebook.ideas.fading.page0.text": "쇠퇴는 작고 연약하지만 살아 숨 쉬는 유기체니까, 옆에 유기물 블록을 놓아두어 먹이로 줘보면 어떨까? 병의 내용물을 우클릭으로 블록처럼 설치할 수 있는 것처럼, 다시 병에 담아낼 수도 있다.", + "book.spectrum.guidebook.ideas.fading.page1.text": "나랑 똑같은 걸 먹고 싶어 할지도 모르잖아! 호박이나 수박 같은 유기물 블록은 어떨까? 심지어 잎이라도! (물론 내가 잎을 특별히 즐겨 먹는다는 뜻은 아니다). 쇠퇴 블록 옆에 저런 것들을 놓아두고 잠시 기다려봐야겠다.\\\n과연 이것이 소화 과정을 거쳐 어떤 결과물을 토해낼지 몹시 흥미롭다.", + "book.spectrum.guidebook.ideas.failing.name": "실험 #2", + "book.spectrum.guidebook.ideas.failing.page0.text": "쇠퇴와 마찬가지로, 이건 자신들 바로 옆에 놓인 특정 블록 형태의 먹이를 선호한다. 하지만 이번엔 훨씬 더 튼튼한 먹이다. 정확히 말하자면, '내가 캐기 지독하게 싫어하는' 튼튼함 말이다.", + "book.spectrum.guidebook.ideas.failing.page1.text": "이건 채울 수 없는 굶주림을 가진 듯하다. 기회만 주어지면 엄청난 양을 먹어 치우니까... 그런데 이것이 가장 좋아하는 먹이가 흑요석인 모양이다! 기이한 식성이지만, 뭐 알 게 뭔가.", + "book.spectrum.guidebook.ideas.malachite.page0.text": "지저 너머를 탐험하던 중, 돌 속에 박힌 자그마한 광물 조각들을 보았다. 그때는 별생각 없이 지나쳤지만. 지금 생각해 보면...", + "book.spectrum.guidebook.ideas.malachite.page1.text": "그 밝은 초록색 광석은 지저 너머의 가장 깊숙한 곳에서 발견할 수 있다. 공기 중에 노출되어 생성되는 경우가 드물기 때문에, 가장 확실한 방법은 굴을 파서 캐내는 것이다.", + "book.spectrum.guidebook.ideas.mermaids_gems.page0.text": "근처 마을에서 약탈해 온 책에서 반짝이는 보석들이 바다 표면에 떠올라 파도에 이리저리 휩쓸리는 묘사를 본 적이 있다.\\\n그저 흔한 동화 속 이야기일까, 아니면 진실의 파편이 숨겨져 있는 걸까?", + "book.spectrum.guidebook.ideas.mermaids_gems.page1.text": "이 보석 같은 묘목들의 진정한 근원은 해저에서 작은 군락을 이루며 자라나는 산호 같은 식물이다. 처음엔 해초와 구분하기가 쉽지 않다. 대부분의 식물들이 그렇듯, 이 식물이 소중한 보물을 내어줄 때까지 뼛가루를 뿌릴 수 있다. 이 지식을 기억해 둔다면, 앞으로는 그 식물의 진정한 모습을 훨씬 더 또렷하게 알아볼 수 있을 것이다.", + "book.spectrum.guidebook.ideas.midnight_chip.page0.text": "이 액체는, 자정의 기형물을 만들어내는 과정에서 뿜어져 나왔는데... 닿는 모든 생명체에게 고통을 안겨준다.", + "book.spectrum.guidebook.ideas.midnight_chip.page0.title": "문득 든 생각", + "book.spectrum.guidebook.ideas.midnight_chip.page1.text": "자정의 용액은 그 안에 무엇이 떨어지느냐에 따라 다른 효과를 나타낸다. 마법이 부여된 아이템은 그 마법의 힘을 잃어버리고, 어떤 아이템들은 완전히 다른 형태로 변형되며, 이 용액에 의해 죽음을 맞이한 생명체는 작고 신비한 조각을 떨어뜨린다.", + "book.spectrum.guidebook.ideas.moonstone_cores.page0.text": "지저 너머의 하층 평원 일대는 한때 매우 고도로 발달한 문명의 터전이었던 것 같다.", + "book.spectrum.guidebook.ideas.moonstone_cores.page1.text": "그들이 남긴 몇몇 도시들에는 철통같이 방어되고 있는 구조물들이 자리하고 있다. 그곳의 수호자들은 기계로 이루어진 듯하며 매우 적대적이고, 정교한 마도 공학을 동력원으로 삼고 있는 것 같다.", + "book.spectrum.guidebook.ideas.nightdew_sprout.page0.text": "흙 속에서 무언가 향긋한 냄새가 나는데, 도무지 정확한 위치를 집어낼 수가 없다... 분명, 나보다 후각이 예민한 녀석이라면 도움이 될 텐데.", + "book.spectrum.guidebook.ideas.nightdew_sprout.page1.text": "범상찮은 덩굴의 동면 중인 잔가지들이 내 발밑의 흙 속에 흩어져 있다. 내 손으로 직접 파내기엔 너무 섬세하고 포착하기 어렵지만, 스니퍼라면 이 일에 천부적인 소질을 발휘할 것이다!", + "book.spectrum.guidebook.ideas.paltaeria.page0.text": "처음엔 그렇게 보였을지 몰라도, 엔드가 그저 순수한 엔드 스톤으로만 이루어져 있는 것은 아니다.", + "book.spectrum.guidebook.ideas.paltaeria.page1.text": "엔드의 중앙 섬과 외곽 지역 모두에서 어떤 광석을 보았다. 다만 공기 중에 노출되어 생성되는 경우가 드무니, 섬 안쪽으로 파고들어 가는 것이 최선일 것이다. 이 광석은 일반적인 전리품과 희귀한 전리품을 모두 떨어뜨린다.", + "book.spectrum.guidebook.ideas.preservation_ruins.name": "3개의 구조물", + "book.spectrum.guidebook.ideas.preservation_ruins.page0.text": "어떤 주민이 말하길, 오버월드의 상층 심층암 지대 근처에서 부서지지 않는 돌로 만들어진 각기 다른 세 종류의 은밀한 구조물들을 보았다고 한다. 심지어 모든 생물군계에 걸쳐서 존재한다고 한다.", + "book.spectrum.guidebook.ideas.preservation_ruins.page1.text": "입구는 아주 강력한 역장에 의해 가로막혀 있는 것 같다. 하지만, 이 구조물을 지은 자는 다행히도 내게 몇 가지 단서를 남겨둘 만큼은 친절했다! 역장 양옆에 새겨진 하트 문양은 내게 [#](2c2e8e)담청 방벽[#]()을 활성화해야 함을 암시하고 있다.", + "book.spectrum.guidebook.ideas.preservation_ruins.page1.title": "파란 하트", + "book.spectrum.guidebook.ideas.preservation_ruins.page2.text": "천장에 달린 채색된 포자 꽃들과 그 뒤 벽에 새겨진 조각들이 해답의 실마리다. 가루가 새겨진 문양은 내가 예전에 알아냈던, [보석 가루 혼합](entry://general/color_mixing_cmy)에 대한 힌트다.", + "book.spectrum.guidebook.ideas.preservation_ruins.page2.title": "채색된 포자 꽃", + "book.spectrum.guidebook.ideas.preservation_ruins.page3.text": "이 기반암을 깨트릴 방법이 있을까?\\\n일단 안으로 들어가기만 한다면, 그곳에서 발견한 블록들에 대해 알기 위해 내 일지에서 관련된 페이지들을 뒤져보는 편이 좋을 것이다.", + "book.spectrum.guidebook.ideas.preservation_ruins.page3.title": "기반암 봉인", + "book.spectrum.guidebook.ideas.quitoxic_reeds.page0.text": "지상으로 모험을 떠날 시간이다. 늪지대나 맹그로브 늪처럼 습하고 따뜻한 곳이야말로 새로운 발견을 하기에 딱 들어맞는 곳이 아닌가!", + "book.spectrum.guidebook.ideas.quitoxic_reeds.page1.text": "모든 종류의 따뜻하고 습한 곳에서, 점토나 진흙 위 얕은 물가에 자라나는 기이한 식물들을 발견했다. 이것들은 성장하기 위해 주변에 놓인 점토나 진흙을 양분으로 삼아 흙으로 바꿔버린다.", + "book.spectrum.guidebook.ideas.radiating_ender.page0.text": "최근에 블록을 들고 다니는 엔더맨을 보았다. 평범한 블록이 아니었다. 무언가... 기이한 기운이 맴돌고 있었다.", + "book.spectrum.guidebook.ideas.radiating_ender.page1.text": "일부 엔더맨들은 엔드 자체의 작은 유물이라고 볼 수 있는 블록들을 들고 다니는 것 같다. 처음에는 그냥 조약돌인 줄 알았고, 바닥에 내려놓은 모습도 영락없는 조약돌이지만, 만약 엔더맨이 그 블록을 들고 있을 때 처치할 수 있다면 내 손에 넣을 수 있을 것이다. 비록 드물긴 하지만, 이런 블록을 들고 있는 엔더맨은 엔드에서도 찾아볼 수 있다.", + "book.spectrum.guidebook.ideas.resonance_shards.page0.text": "[액체 수정](entry://general/liquid_crystal) 호수 사이에서, 상호작용하면 꽤나 흥미로운 특성을 띠는 블록들로 이루어진 결정질 구조물들을 종종 발견하곤 한다.", + "book.spectrum.guidebook.ideas.resonance_shards.page1.text": "[수정 정원](entry://dimension/crystal_gardens)의 결정 군락 일부인 음명석은 무언가 건드리면 진동하기 시작하며, 그 진동은 근처의 다른 음명석들까지 함께 떨리게 만든다. 뭉쳐 있는 수가 많을수록, 그 메아리도 훨씬 더 강해지는 것 같다.", + "book.spectrum.guidebook.ideas.resonant_lily.page0.text": "[수정 정원](entry://dimension/crystal_gardens)에서, [액체 수정](entry://general/liquid_crystal) 근처에 자라나는 꽃들은 매우 기이한 특성을 지니고 있다. 그 액체 곁에 피어났다는 사실이 이 꽃들을 변화시킨 걸까?", + "book.spectrum.guidebook.ideas.resonant_lily.page1.text": "처음부터 완전히 새로운 식물을 길러낼 만큼 시간적 여유는 없다. 그렇다면 차라리 이미 자라난 꽃을 액체에 던져 넣어 변화의 과정을 단축시켜 버리는 건 어떨까?", + "book.spectrum.guidebook.ideas.ruin.name": "실험 #3", + "book.spectrum.guidebook.ideas.ruin.page0.text": "파멸이라 이름 붙인 이 지독하게 공격적인 버전은, 이 세상에 존재하는 가장 단단한 물질조차 집어삼킬 수 있는 능력을 갖추고 있다. 심지어 내가 예전에는 도저히 부술 엄두조차 내지 못했던 그 광물까지도 말이다.", + "book.spectrum.guidebook.ideas.ruin.page1.text": "절대로 부서지지 않는 기반암 바닥 그 자체보다 더 튼튼한 게 어디 있겠는가? 상황이 걷잡을 수 없이 커질 때를 대비하여, 부패 제거의 병을 비상용으로 소매에 챙겨두는 편이 좋겠다.", + "book.spectrum.guidebook.ideas.shimmerstone.page0.text": "세상에 대한 내 이해가 넓어짐에 따라, 이변을 감지하는 내 시야도 한층 더 트였다. 오버월드의 지표면이나 그보다 높은 곳에서 아직 알려지지 않은 노란색 광석을 본 것 같다.", + "book.spectrum.guidebook.ideas.shimmerstone.page1.text": "그 광석은 오버월드의 중상층에 해당하는 모든 생물군계에서 거대한 광상을 이루며 생성된다. 깎아지른 절벽이나 산자락에서 노출된 채로 가장 흔하게 발견된다.", + "book.spectrum.guidebook.ideas.small_clue": "하나의 관찰", + "book.spectrum.guidebook.ideas.stargazing.page0.text": "밤에 내 주변에서 그리 멀지 않은 곳에 별똥별이 떨어지는 걸 봤다! 정말 눈부시게 아름다웠다. 어둠 속에서 별똥별을 관측할 수 있게 도와줄 무언가가 있다면 다음 별똥별을 찾는 데 큰 도움이 될 것이다. 떨어질 때 눈에 확 띄는 입자의 꼬리를 남기니까.", + "book.spectrum.guidebook.ideas.stargazing.page0.title": "무엇을 찾아야 할까", + "book.spectrum.guidebook.ideas.stargazing.page1.text": "별똥별을 목격할 확률을 가장 높이는 방법은 야간 투시와 망원경을 활용하는 것이다. 만약 별똥별이 떨어지는 걸 발견한다면, 그 궤적을 쫓아가서 어디에 착륙했는지 찾아내야겠다. 땅에 떨어지면 하늘을 향해 기둥 모양으로 입자들을 뿜어 올린다.", + "book.spectrum.guidebook.ideas.storm_stones.page0.text": "뇌우는 자연이 보여줄 수 있는 가장 압도적인 힘이다. 어마어마한 에너지가 얽혀 든다.", + "book.spectrum.guidebook.ideas.storm_stones.page1.text": "벼락이 내리친 곳에서 기이한 현상이 일어났다. 심지어 특정 위치에 벼락을 유도하여 이 현상을 훨씬 더 효율적으로 재현해 낼 아주 간단한 방법도 존재한다.", + "book.spectrum.guidebook.ideas.stratine.page0.text": "네더랙의 어떤 부분은 다른 곳보다 유독 더 새빨갛게 눈길을 끌었다.", + "book.spectrum.guidebook.ideas.stratine.page1.text": "마치 광석처럼 생겼고, 네더의 용암층 아래에 위치한 모든 생물군계의 깊은 곳에서 흔히 발견된다. 이 광석은 일반적인 전리품과 희귀한 전리품을 모두 떨어뜨린다.", + "book.spectrum.guidebook.ideas.topaz.page0.text": "정동이 언덕이나 구름을 찌를 듯한 산꼭대기처럼 높은 곳에서 발견될 수 있을 거라곤 상상조차 하지 못했는데, 이를 부정하듯 떡하니 자리 잡고 있다.", + "book.spectrum.guidebook.ideas.where_to_find": "어디서 찾아야 할까", + "book.spectrum.guidebook.ideas.where_to_look": "어디를 봐야 할까", + + "book.spectrum.guidebook.hoverblock.page0.text": "[스트라틴](entry://general/stratine)과 [팔타에리아](entry://general/paltaeria)가 서로 충돌하며 빚어낸 이 블록은 그저... 공중을 둥둥 떠다니며 이 분위기를 즐긴다.", + "book.spectrum.guidebook.hoverblock.page1.text": "...뭐, 다른 설치된 블록들도 이유가 어떻든 허공에 아주 잘만 떠 있긴 하지만, 이건 좀 특별하게도, [#](bb00bb)피스톤[#]()같은 것으로 가해진 [#](449900)관성을 그대로 유지한다[#](). 내가 그 위에 올라타 있더라도 말이다.\\\n\\\n웅크려서 사용하면 다시 주울 수 있다.", + "book.spectrum.guidebook.howling_spires.ashen_blackslag.text": "처음엔 눈인 줄 알았지만, 이제 보니 이곳은 온통 하얀 재로 뒤덮여 있다는 사실을 깨달았다. 매서운 바람이 으르렁대며, 마치 잔잔하고 영원한 눈보라처럼 재의 비를 쏟아붓고 있다.\\\n\\\n이 모든 재가 어디서 날아오는 건지 궁금해진다.", + "book.spectrum.guidebook.howling_spires.page0.text": "은빛 안개가 대지를 하얀 베일로 감싸고 있다. 매서운 바람이 깎아낸 이 동굴들은 얼어붙을 듯 춥지만, 놀랍게도 이곳에는 눈이 존재하지 않는다.", + "book.spectrum.guidebook.howling_spires.varia_sprout.text": "두꺼운 풀 더미와 다를 바 없는 빛을 머금은 지피식물이다. 우아하면서도, 동시에 내게는 어딘가 이세계의 존재처럼 느껴진다.", + "book.spectrum.guidebook.hummingstone.page0.text": "결정질 블록들 사이에서, 상호작용 시 기분 좋은 공명음을 내뿜는 기이한 재질을 발견했다. *음명석*이라는 이름이 아주 제격일 것 같다.", + "book.spectrum.guidebook.hummingstone.page1.text": "이 매우 단단하고 폭발에도 거뜬히 버티는 수정은 [수정 정원](entry://dimension/crystal_gardens) 전역에 널리 퍼져 있다.", + "book.spectrum.guidebook.idols.name": "우상", + "book.spectrum.guidebook.idols.page0.text": "블록의 형태로 강림한 생명체의 형상이다.\\\n\\\n이것을 사용하거나, 위를 걷거나, 투사체로 맞히면 그 우상에 깃든 생명체와 연관된 고유한 행동이 촉발된다.", + "book.spectrum.guidebook.idols.page1.text": "짧은 시간 동안 재생 효과를 부여한다.", + "book.spectrum.guidebook.idols.page10.text": "최대 16블록 내의 무작위 위치로 순간이동시킨다.", + "book.spectrum.guidebook.idols.page11.text": "직선상 최대 16블록 내에 있는 다른 들쭉날쭉한 우상으로 순간이동시킨다.", + "book.spectrum.guidebook.idols.page12.text": "벡스를 소환한다.", + "book.spectrum.guidebook.idols.page13.text": "짧은 시간 동안 수중 호흡 효과를 부여한다.", + "book.spectrum.guidebook.idols.page14.text": "짧은 시간 동안 성급함 효과를 부여한다.", + "book.spectrum.guidebook.idols.page15.text": "화염구를 발사한다.", + "book.spectrum.guidebook.idols.page16.text": "짧은 시간 동안 발광 효과를 부여한다.", + "book.spectrum.guidebook.idols.page17.text": "넉백을 일으킨다.", + "book.spectrum.guidebook.idols.page18.text": "짧은 시간 동안 채굴 피로 효과를 부여한다.", + "book.spectrum.guidebook.idols.page19.text": "짧은 시간 동안 힘 효과를 부여한다.", + "book.spectrum.guidebook.idols.page2.text": "반경 8블록 내의 생물들을 음파 탐지로 찾아낸다.", + "book.spectrum.guidebook.idols.page20.text": "짧은 시간 동안 투명 효과를 부여한다.", + "book.spectrum.guidebook.idols.page21.text": "짧은 시간 동안 야간 투시 효과를 부여한다.", + "book.spectrum.guidebook.idols.page22.text": "짧은 시간 동안 흡수 효과를 부여한다.", + "book.spectrum.guidebook.idols.page23.text": "불면증을 유발한다.\\\n하늘이 뻥 뚫린 곳에 있을 경우, 플레이어는 즉시 [#](449900)팬텀[#]()의 습격을 받게 된다.", + "book.spectrum.guidebook.idols.page24.text": "반경 6블록 내의 동물들에게 주변에 널려 있는 먹이를 먹인다.", + "book.spectrum.guidebook.idols.page25.text": "내게서 [#](bb00bb)금괴[#]()를 가져가고 교환해 준다.", + "book.spectrum.guidebook.idols.page26.text": "주변의 블록들을 얼린다 ([#](bb00bb)물[#]()은 [#](bb00bb)얼음[#]()으로, [#](bb00bb)용암[#]()은 [#](bb00bb)흑요석[#]()으로 식히는 식이다).", + "book.spectrum.guidebook.idols.page27.text": "짧은 시간 동안 멀미 효과를 부여한다.", + "book.spectrum.guidebook.idols.page28.text": "짧은 시간 동안 점프 강화 효과를 부여한다.", + "book.spectrum.guidebook.idols.page29.text": "반경 6블록 내의 생명체들에게 가위질을 한다.", + "book.spectrum.guidebook.idols.page3.text": "바로 옆에 있는 식물들에게 비료를 준다.", + "book.spectrum.guidebook.idols.page30.text": "짧은 시간 동안 공중 부양 효과를 부여한다.", + "book.spectrum.guidebook.idols.page31.text": "자신과 인접한 블록들을 좀벌레로 감염시킨다.", + "book.spectrum.guidebook.idols.page32.text": "[#](bb00bb)화살[#]()을 쏜다.", + "book.spectrum.guidebook.idols.page33.text": "반경 6블록 내의 슬라임들의 크기를 부풀린다.", + "book.spectrum.guidebook.idols.page34.text": "[#](bb00bb)눈덩이[#]()를 던진다.", + "book.spectrum.guidebook.idols.page35.text": "짧은 시간 동안 독 효과를 부여한다.", + "book.spectrum.guidebook.idols.page36.text": "짧은 시간 동안 실명 효과를 부여한다.", + "book.spectrum.guidebook.idols.page37.text": "짧은 시간 동안 속도 감소 효과를 부여한다.", + "book.spectrum.guidebook.idols.page38.text": "짧은 시간 동안 화염 저항 효과를 부여한다.", + "book.spectrum.guidebook.idols.page39.text": "짧은 시간 동안 저항 효과를 부여한다.", + "book.spectrum.guidebook.idols.page4.text": "광석이나 기타 블록들을 제련한다 ([#](bb00bb)네더랙[#]()을 [#](bb00bb)마그마 블록[#]()으로 굽는 등)\\\n또한 자신을 작동시킨 생명체와 인접한 블록들에 불을 지른다.", + "book.spectrum.guidebook.idols.page40.text": "짧은 시간 동안 나약함 효과를 부여한다.", + "book.spectrum.guidebook.idols.page41.text": "거대한 폭발을 일으킨다.", + "book.spectrum.guidebook.idols.page42.text": "짧은 시간 동안 시듦 효과를 부여한다.", + "book.spectrum.guidebook.idols.page43.text": "주민을 좀비 주민으로 타락시킨다.", + "book.spectrum.guidebook.idols.page5.text": "착지 시 모든 낙하 피해를 무효화한다. 또한 작동 시 누적된 낙하 피해를 초기화한다.", + "book.spectrum.guidebook.idols.page6.text": "짧은 시간 동안 느린 낙하 효과를 부여한다.", + "book.spectrum.guidebook.idols.page7.text": "반경 6블록 내의 모든 소, 염소, 무시룸의 우유를 짠다.", + "book.spectrum.guidebook.idols.page8.text": "작은 폭발을 일으킨다.", + "book.spectrum.guidebook.idols.page9.text": "드래곤의 투사체를 발사한다.", + "book.spectrum.guidebook.imbrifer_cookbook.page0.text": " *임브리퍼의 셰프 로레인*", + "book.spectrum.guidebook.imbrifer_cookbook.page0.title": "임브리퍼 파인 다이닝", + "book.spectrum.guidebook.imbrifer_cookbook.page1.text": "환영한다. 쓸데없는 자기소개로 시간 낭비하지는 말자. 너희는 요리하는 법을 배우고 싶어서 이곳에 왔고, 나는 그걸 가르쳐 줄 수 있다. 나는 심연 최고의 요리 학교인 메릴루스 요리 대학에서 배웠고, [#](ff3d71)진홍의 달 혈통[#]()을 모시던 수석 황실 셰프, 아에버스트론의 멘토링 아래에서 훈련받았으며, 나만의 수습생 팀을 이끌고 임브리퍼에 최초의 완전한 연꽃 요리 전문 레스토랑을 일궈냈다. \\\n\\\n*나의 지시를 따른다면, 너희에게 진정한 미각을 가르쳐주겠다.*", + "book.spectrum.guidebook.imbrifer_cookbook.page10.text": "\\\n나는 양조가가 아니기에, 왕수를 만드는 데 필요한 재료 이상의 정보는 알려줄 수 없다.\\\n\\\n하지만 이 점은 확실히 짚고 넘어갈 수 있다. 훌륭한 셰프가 되기 위해서는 자신이 다루는 재료가 무엇이며, 그것이 어떻게 만들어지는지 이해하는 것이 필수적이다. 품질이 어떻게 완성되는지 모른다면, 품질의 좋고 나쁨을 결코 평가할 수 없다.", + "book.spectrum.guidebook.imbrifer_cookbook.page10.title": "필수적인 와인", + "book.spectrum.guidebook.imbrifer_cookbook.page11.text": "*재료를 알아라, 배우고, 이해해라.*", + "book.spectrum.guidebook.imbrifer_cookbook.page2.text": "\\\n누구에게나 시작점은 있는 법이고, 내 학생들에게는 바로 이것이 그 시작점이다. 가재 칵테일은 기만적인 요리다. 보기엔 단순해 보이지만, 이를 진정으로 통달하려면 엄청난 기교와 연습이 필요하다. 가재를 익히지 않은 채로 복숭아와 향신료를 플람베하여 달콤하고 걸쭉하며 매콤한 소스를 만들어내는 것은 가능하지만, 이는 상상을 초월하는 세심함을 요구한다. 나는 이 요리로 신입생들의 자질을 걸러낸다.", + "book.spectrum.guidebook.imbrifer_cookbook.page2.title": "간단한 앙트레", + "book.spectrum.guidebook.imbrifer_cookbook.page3.text": "*처음 한 번 성공하기까지 수백 번의 시도가 필요할지도 모른다.\\\n\\\n많은 이들이 그전에 무너져 내릴 것이다.*", + "book.spectrum.guidebook.imbrifer_cookbook.page4.text": "\\\n바그눈은 요리 학교의 클래식이다. 신선한 크림 한 덩이가 부드럽게 감싸주는 향신료 가득한 호화로운 수프. 후추 향이 진동하는 진홍빛 수프와 진주처럼 빛나는 상큼한 크림의 대비는 시각과 미각 모두를 만족시키는 만찬이다. 예전에 멜로카이트 출신의 한 여인을 알았는데, 그녀가 이 수프와 아주 비슷한 요리를 즐겨 먹곤 했다. 우리는 아주 오래전 꽤 친한 친구 사이였고, 그녀는 날 이기주의자라고 불렀었지.", + "book.spectrum.guidebook.imbrifer_cookbook.page4.title": "우울한 비스크", + "book.spectrum.guidebook.imbrifer_cookbook.page5.text": " *.....*", + "book.spectrum.guidebook.imbrifer_cookbook.page6.text": "\\\n비취 속에 속하는 다양한 식물들은 일반적으로 식재료로서 가치가 높다.\\\n\\\n특히 그 구근들은 식감이 양파와 비슷하면서도 훨씬 섬세하고, 달콤하며, 환상적인 풍미를 지니고 있어 심연의 트러플이라는 별명으로 불리며 불티나게 팔려나간다. 이 레시피는 두 토착종을 교배시켜 만들어낸 현대적인 교배종인, 그 매혹적인 [비취 덩굴](entry://general/jade_vines)을 활용한다.", + "book.spectrum.guidebook.imbrifer_cookbook.page6.title": "밤의 수프", + "book.spectrum.guidebook.imbrifer_cookbook.page7.text": "*비취 덩굴의 넥타르에 재생 능력이 있다는 소문을 들었는데...\\\n\\\n참으로 흥미로운 교배종이다.*", + "book.spectrum.guidebook.imbrifer_cookbook.page8.text": "\\\n만약 누군가 네게 어묵을 불에 익혀야 한다고 말한다면, 그놈은 그냥 틀린 게 아니라 멍청한 거다. 어묵을 준비하는 올바른 방법은 생선 살을 다져 향신료로 간을 한 뒤, 연옥 식초에 담가 최소 72시간 동안 발효시키는 것이다. 이렇게 하면 생선에 기생하는 모든 기생충을 죽일 뿐만 아니라, 어묵을 완벽하게 숙성시켜 특유의 고운 분홍빛을 띠게 만든다.", + "book.spectrum.guidebook.imbrifer_cookbook.page8.title": "도도한 저온 잉어 토막", + "book.spectrum.guidebook.imbrifer_cookbook.page9.text": "*가장 훌륭한 어묵은 수개월, 때로는 수년에 걸쳐 숙성된다.*", + "book.spectrum.guidebook.immunity.page0.text": "면역이 활성화되어 있는 동안 [#](449900)다른 모든 효과를 지워버리고[#]() 새로운 효과가 걸리는 것을 차단해 버렸다.", + "book.spectrum.guidebook.immunity.page1.text": "하지만 몇몇 희귀한 효과들은 이 면역조차 뚫어버릴 만큼 강력한 것 같다.", + "book.spectrum.guidebook.imperial_cookbook.page0.text": " *진홍의 달 궁정의\\\n 아에버스트론 셰프*", + "book.spectrum.guidebook.imperial_cookbook.page0.title": "왕국을 먹여 살리다", + "book.spectrum.guidebook.imperial_cookbook.page1.text": "안녕하신가 어린 친구들! 부디 이 늙은이의 요리 사랑을 나누기 위해 이곳에 찾아왔기를 바라네.\\\n\\\n내 소개를 하자면, 나는 쿠리빈다의 아에버스트론이고, 지난 80년 동안 수석 황실 셰프로서 [#](ff3d71)진홍의 달 궁정[#]()을 모셔왔다네. 뭐, 요새는 주로 황족들을 위한 요리만 전담하고 있지만 말이야. 이 책을 읽어 내려가다 내가 이따금 삼천포로 빠지더라도 너그럽게 용서해 주시게, 170년 넘게 살다 보면 추억할 거리가 꽤 많아지는 법이거든!", + "book.spectrum.guidebook.imperial_cookbook.page10.text": "\\\n아, 와인. 이 얼마나 다채롭고 활기 넘치는 세계인가. 이 레시피는 나보다 더 오래된 것이라네. 아, 나보다 오래된 것들이 존재한다는 사실이 조금 놀라울 수도 있겠군, 허허. 이 술은 우리 궁정에서 인기 있는 일종의 디저트 와인이고, 자네들이 봤을 법한 수많은 레시피에 두루 쓰인다네.\\\n\\\n하지만 경고하건대, 술술 넘어가도 조심하시게. 이 술은 보기보다 훅 가는 수가 있으니까.", + "book.spectrum.guidebook.imperial_cookbook.page10.title": "푸딩 와인", + "book.spectrum.guidebook.imperial_cookbook.page11.text": "*벌꿀술을 연상시키지만, 알코올이 섞인 넥타르에 더 가깝다.*", + "book.spectrum.guidebook.imperial_cookbook.page2.text": "\\\n황제들과 복숭아, 이 둘은 떼려야 뗄 수 없는 사이지! 이 지역에서 자라나는 연옥 나무들은 사실 이 땅이 고향이 아니라네. 저 멀리, 동쪽 깊은 곳에서 건너온 고유종이지. 유리 복숭아를 향한 우리 황제들의 사랑이 어찌나 지극했던지, 그들이 발을 들이는 곳마다 이 나무를 심어댔지 뭐야. 솔직히 말해서, 연옥 꽃나무가 피어난 곳만 따라가도 그들의 영토가 어디까지 뻗어있었는지 지도를 그릴 수 있을 정도일세!", + "book.spectrum.guidebook.imperial_cookbook.page2.title": "서유기", + "book.spectrum.guidebook.imperial_cookbook.page3.text": "*수라들은 금빛을 가졌고, 우아하지 못한 인간들은 보랏빛을 가졌지. 하지만 우리는? 황족의 색은 바로 분홍빛이다! 하하하하!*", + "book.spectrum.guidebook.imperial_cookbook.page4.text": "\\\n도마뱀 고기를 와인과 꽃잎에 푹 졸여낸 이 요리는 그야말로 진미라네. 자네가 처음 시도했을 때, 아니면 스무 번을 시도하고도 이 요리를 망친다 해도 난 자네를 탓하지 않을 걸세. 이 요리는 수많은 연약한 재료들을 오랫동안 정성껏 다뤄야 하는, 나에게조차 아직까지도 매번 까다로운 요리 중 하나니까. 하지만 그 결과물은 진정으로 황홀함 그 자체라네.", + "book.spectrum.guidebook.imperial_cookbook.page4.title": "호화로운 스튜", + "book.spectrum.guidebook.imperial_cookbook.page5.text": "*솔직히 말하자면, 난 아직도 이 요리의 이름을 헷갈린다네.*", + "book.spectrum.guidebook.imperial_cookbook.page6.text": "\\\n소박한 정킷, 이 달콤하고 끈적한 간식의 변형은 온갖 형태로 존재하지만, 이 버전은 그중에서도 유독 괴짜스럽지! 꽃잎에서 기름을 추출하는 과정이 너무 길고 지루해서 솔직히 이 요리를 준비하는 걸 썩 즐기지는 않지만, 이 과자를 볼 때마다 궁정의 아이들이 어찌나 신나 하던지! 그걸 보면 이 늙은 심장이 다 뭉클해진다네.", + "book.spectrum.guidebook.imperial_cookbook.page6.title": "공상적인 과자", + "book.spectrum.guidebook.imperial_cookbook.page7.text": "*아바 황제께서 아직 핏덩이 아기 토끼이던 시절에 이걸 정말 좋아하셨지.\\\n\\\n분명 그 바보 같은 양반은 지금도 이 맛을 잊지 못할 거야.*", + "book.spectrum.guidebook.imperial_cookbook.page8.text": "\\\n이 레시피에는 꽤 재밌는 사연이 하나 얽혀있다네. 비단잉어는 그 우아한 자태만큼이나 가장 독특하고 환상적인 황실 요리의 훌륭한 재료가 되어주지. 하지만 이런 요리들은 종종 기이하고 이국적인 재료들을 요구하곤 했는데, 연회가 열리기 바로 전날 밤에 재료가 다 떨어져 버린 게 아니겠어. 나는 기지를 발휘해 발효제를 [황야의 어머니](entry://general/fading)로 대체해버렸고, 그 결과 탄생한 것이 바로 이 꽃을 닮은 요리라네.", + "book.spectrum.guidebook.imperial_cookbook.page8.title": "바다의 연꽃", + "book.spectrum.guidebook.imperial_cookbook.page9.text": "*이걸 너무 오래 발효시키지 말게, 안 그러면 그 '어머니'가 생선을 통째로 집어삼키기 시작할 테니까!*", + "book.spectrum.guidebook.improved_critical.page0.text": "점프하면서 적을 공격하면 평소보다 훨씬 더 끔찍한 피해를 입힌다는 사실을 알아냈다.\\\n\\\n이 점프 공격을 한계까지 끌어올리기 위해, 나는 추가 피해량을 훨씬 더 증폭시키는 마법 부여를 창조해 냈다.", + "book.spectrum.guidebook.improved_critical.page1.text": "치명타를 가할 때 추가 피해를 입힌다.\\\n\\\n최대 레벨: 2\\\n근접 무기에 적용 가능.\\\n날카로움과 동시에 부여할 수 없음.", + "book.spectrum.guidebook.incandescent_amalgam.page0.text": "*손바닥 위의 태양*이라는 말은 머릿속에선 참 근사하게 들렸다. \\\n\\\n막상 내 손에 올려져 있는 이 빌어먹을 녀석은... 음, 불타오르고 있다. 이게 존재한다는 사실 자체가 기적에 가깝다. 애초에 통째로 폭발했어야 정상인, 이 불안정하고 부글부글 끓어오르는 에탄올과 촉진제들의 끔찍한 혼합물은 자신들이 이 세상에 존재한다는 사실 자체를 혐오하는 것 같다.", + "book.spectrum.guidebook.incandescent_amalgam.page1.text": "단 한 번의 작은 실수만으로도 이 혼합물은 손쉽게 기폭 되어, 나를 포함해 주변의 모든 것을 날려버릴 수 있다. 그럼에도 불구하고, 아니 바로 그렇기 때문에, 이 젤에서 뿜어져 나오는 부드럽고 따스한 빛은 내 마음속 끝없는 호기심을 자극한다. 모든 것은 불꽃에 이끌리기 마련이다.\\\n\\\n이 사실상 엄청난 폭발력을 지닌 마법 폭발물이 무궁무진한 잠재력을 품고 있다는 점에는 의심의 여지가 없다. 내게 필요한 것은 그저 약간의 세심함과, 산더미 같은 용기, 그리고 한 줌의 무모함뿐이다.", + "book.spectrum.guidebook.incandescent_amalgam.page2.text": "합성 시간이 길어질수록, 폭발의 위력은 걷잡을 수 없이 커진다... 천사들이 이런 무시무시한 힘을 나눠 가지려 하지 않는 것도 충분히 이해가 간다.", + "book.spectrum.guidebook.incandescent_amalgam.page2.title": "적정 합성", + "book.spectrum.guidebook.incandescent_amalgam.page3.text": "*...너무나도 눈부신 백열이다!*", + "book.spectrum.guidebook.incandescent_amalgam.page3.title": "순수 합성", + "book.spectrum.guidebook.incandescent_amalgam.page4.title": "단순 합성", + "book.spectrum.guidebook.incandescent_amalgam.page5.text": "이 혼합물의 완벽에 가까운 연소 효율은 순수한 알코올을 증류하는 데 유일무이하게 이상적인 연료가 되어준다.", + "book.spectrum.guidebook.incandescent_amalgam.page5.title": "증류", + "book.spectrum.guidebook.indestructible.page0.text": "이토록 먼 길을 달려왔지만, 여전히 나는 [#](bb00bb)부싯돌과 부시[#]() 같은 평범한 도구들이 너무 자주 쓰다 보면 부서져버리는 현실과 끊임없이 씨름해야만 한다. 그리고 내 인벤토리에는 너무 연약해서 오랫동안 쥐고 있지 못했던 장비들이 산더미처럼 쌓여 있다.\\\n\\\n하지만 이제 거의 부서지지 않는 견고함을 자랑하는 내 무적의 함대들에서 얻은 영감을 적용한다면? 전혀 문제없다.", + "book.spectrum.guidebook.indestructible.page1.text": "도구를 절대로 파괴되지 않는 완전한 무적 상태로 만든다.\\\n\\\n최대 레벨: 1\\\n몇 가지 단일 예외를 제외한, 내구도가 존재하는 모든 도구에 적용 가능.\\\n내구성, 수선, 효율, 무한, 보호 및 귀속의 저주와 동시에 부여할 수 없음.", + "book.spectrum.guidebook.inertia.page0.text": "이 마법 부여는 내 도구들에 작은 생명력을 불어넣는 것만 같다.\\\n\\\n마치 살아있는 생명체처럼, 이 도구는 내가 캐고 있는 블록에 점차 적응하며 그 블록에만 특화되어 간다. 그 대가로, 다른 종류의 블록으로 채굴 대상을 바꾸면 채굴 속도가 눈에 띄게 느려진다.", + "book.spectrum.guidebook.inertia.page1.text": "기본 채굴 속도가 감소한다. 하지만 동일한 종류의 블록을 연속해서 캘 때마다 속도가 점차 빨라진다.\\\n\\\n최대 레벨: 3\\\n채굴 도구에 적용 가능.\\\n효율과 동시에 부여할 수 없음.", + "book.spectrum.guidebook.inexorable.page0.text": "먼 길을 달려오며 이제 나를 막아설 수 있는 건 그리 많지 않다. 채굴 피로를 거는 바다 유적이나, 구속 효과, 숨 막히는 수중 채굴, 공중을 날아다닐 때의 제약 등 몇몇 지독한 환경들만 빼면 말이다...\\\n\\\n*음, 이렇게 쭉 나열해 놓고 보니, 생각했던 것보다 날 가로막는 게 좀 많긴 하군*.", + "book.spectrum.guidebook.inexorable.page1.text": "(도구의 경우) 채굴 속도 저하를 막아주고, (흉갑의 경우) 이동 속도 저하를 방지한다.\\\n\\\n최대 레벨: 1\\\n채굴 도구와 흉갑에 적용 가능.", + "book.spectrum.guidebook.infused_beverages.name": "침출된 음료", + "book.spectrum.guidebook.infused_beverages.page0.text": "양조는 예술이다!\\\n세상에는 다양하게 시도해 볼 만한 것들이 너무나도 넘쳐나서, 아마 내 평생을 바쳐도 그 모든 조합을 다 시도해 보지는 못할 것이다.\\\n이 음료들은 그저 맛만 다른 것이 아니라, 내게 불어넣는 효과마저 각양각색이다.", + "book.spectrum.guidebook.infused_beverages.page11.text": "색깔 나무의 영향을 받아 한층 더 깊어진 강렬한 풍미를 자랑한다. [#](449900)흡수[#]()와 [#](449900)저항[#]() 효과를 부여한다.", + "book.spectrum.guidebook.infused_beverages.page12.text": "꿀의 높은 당분은 발효를 위한 완벽한 조건을 갖추고 있다. 그 결과, 아주 강렬하면서도 여전히 달콤함을 머금은 술이 탄생했다.", + "book.spectrum.guidebook.infused_beverages.page13.text": "발효된 사과는 보통 달콤하고 톡 쏘며, 기분 좋은 산미를 남긴다. 내가 제때 통에서 빼내는 걸 잊어버리지만 않는다면 말이다.", + "book.spectrum.guidebook.infused_beverages.page14.text": "지상에서 구하는 평범한 버전들과 비교하면 훨씬 더 강력하다. 시간이 지나도 결코 상하지 않으며, 황홀한 맛을 선사한다.", + "book.spectrum.guidebook.infused_beverages.page15.text": "사과 사이다보다 훨씬 더 과일 향이 터진다. 발광 열매는 발효가 조금 더 빨리 진행되는 것 같은데, 대신... 나까지 빛나게 만든다. 흠.", + "book.spectrum.guidebook.infused_beverages.page16.text": "열매를 사용해 리큐어를 만들 수도 있다. 훨씬 더 걸쭉하고, 혀끝이 아릴 만큼 달콤하며 강력하지만, 발효되는 데 시간이 더 오래 걸린다.", + "book.spectrum.guidebook.infused_beverages.page17.text": "*액체 행운*", + "book.spectrum.guidebook.infused_beverages.page20.text": "시간이 지날수록 오직 더 강력해질 뿐이다. 딱 하나 명심할 점은: 오늘은 내가 얼마나 치명적으로 취하고 싶은가?", + "book.spectrum.guidebook.infused_beverages.page21.text": "시간이 지날수록 오직 더 강력해질 뿐이다. 마치 술집 난투극을 혀로 맛보는 기분이다.", + "book.spectrum.guidebook.infused_beverages.page22.text": "입안에 머금으면 솜털처럼 가볍다. 부드럽고 달콤하게 타오르는 느낌이 내 모든 걱정을 잠시나마 잊게 해준다. 그리고 그 대가로, 나를 괴롭히던 것들도 잠시나마 나를 잊어버릴 것이다.\\\n\\\n*마치 달 위를 걷는 듯한 맛이다.*", + "book.spectrum.guidebook.infused_beverages.page23.text": "보기보다 훨씬 맵고 자극적이다.", + "book.spectrum.guidebook.infused_beverages.page24.text": "지저 너머의 온갖 것들이 뒤섞인 기이하고 흥미로운 조합이다. 아직 뜨거울 때 들이켜는 게 제일이다!", + "book.spectrum.guidebook.infused_beverages.page3.text": "배를 든든하게 채워주며 달콤함과 짭짤함이 절묘하게 어우러진다. 이 얼마나 사랑스러운 조합인가.", + "book.spectrum.guidebook.infused_beverages.page4.text": "상쾌하지만, 입안에 씁쓸한 뒷맛이 감돈다.", + "book.spectrum.guidebook.infused_beverages.page5.text": "달콤함 끝에 시나몬 향이 감돈다.", + "book.spectrum.guidebook.infused_beverages.page6.text": "대낮에도 코를 골며 잘 수 있을 만큼 나를 몽롱하게 만든다.", + "book.spectrum.guidebook.infused_beverages.page7.text": "성급함 효과에 더해, 얼마나 오래 발효시켰느냐에 따라 약간의 포만감도 제공한다.", + "book.spectrum.guidebook.infused_beverages.page8.text": "그냥... 너무 오래 양조하지는 마라. 풍미가 완전히 변질되어 끔찍한 쓰레기 맛이 날 테니까.", + "book.spectrum.guidebook.infused_beverages.page9.text": "그냥... 너무 오래 양조하지는 마라. 풍미가 완전히 변질되어 끔찍한 쓰레기 맛이 날 테니까.", + "book.spectrum.guidebook.infused_beverages.page10.text": "[아마란스](entry://cuisine/amaranth)로 만들어져, [#](449900)행운[#]()과 [#](449900)성급함[#]() 효과를 부여한다.", + "book.spectrum.guidebook.infused_beverages.poisonous_vodka.title": "...그리고 특별한 변종", + "book.spectrum.guidebook.ink.name": "잉크", + "book.spectrum.guidebook.ink.page0.text": "이제 나도 [안료](entry://general/pigment)를 다루는 데 제법 익숙해졌으니, 중세 시대 사람마냥 이 가루들을 무식하게 짊어지고 다닐 이유가 전혀 없다. 나는 이 [안료](entry://general/pigment)를 더 고차원적인 형태의 에너지로 변환할 방법을 찾아냈다!\\\n\\\n나는 이것을 [#](5bffed)**잉**[#](aa32a0)**크**[#]()라고 부르기로 했다.\\\n\\\n[안료와 그 블록 형태](entry://general/pigment)는 [색상 추출기](entry://ink/color_picker)를 거쳐 잉크로 변환될 수 있다.", + "book.spectrum.guidebook.ink.pigment_converting.text": "\\\n평범한 염료도 쓸 수는 있지만, 효율이 *어마어마하게* 떨어진다. 그래도 최악의 순간에 쥐어짤 수 있는 마지막 선택지로는 나쁘지 않다.\\\n\\\n변환이 끝나면, 추출된 잉크를 [잉크 플라스크](entry://ink/ink_flask) 같은 전용 용기에 담아 보관할 수 있다.", + "book.spectrum.guidebook.ink.pigment_converting.title": "생산 및 보관", + "book.spectrum.guidebook.ink.page2.text": "잉크는 기체와 비슷하게 움직인다. 잉크가 넘치는 곳에서 잉크가 부족한 곳으로 자연스럽게 흘러간다.", + "book.spectrum.guidebook.ink.page2.title": "잉크 전송", + "book.spectrum.guidebook.ink.page3.text": "\\\n잉크를 품은 두 물체가 연결되면, 예를 들어 [색상 추출기](entry://ink/color_picker) 안에 [잉크 플라스크](entry://ink/ink_flask)를 꽂아 넣었을 때처럼 두 물체 사이의 잉크 양이 서서히 평형을 이룰 때까지 흘러간다.\\\n두 물체 간의 잉크 양 차이가 클수록, 플라스크가 채워지는 속도도 훨씬 빨라진다.", + "book.spectrum.guidebook.ink_assortment.page0.text": "자그마한 유리병들이 옹기종기 모여 있는 이 컬렉션은, 비록 양은 적더라도 온갖 종류의 [잉크](entry://ink/ink)를 빠짐없이 보관할 수 있게 해준다.", + "book.spectrum.guidebook.ink_flask.page0.text": "잉크 플라스크는 단일 색상의 [잉크](entry://ink/ink)를 아주 넉넉하게 담아둘 수 있다.", + "book.spectrum.guidebook.ink_flask.page1.text": "[색상 추출기](entry://ink/color_picker)를 이용해 이 병을 채울 수 있으며 [#](449900)조합창[#]()에서 비울 수 있다.", + + "book.spectrum.guidebook.about.name": "모드에 대하여", + "book.spectrum.guidebook.about.description": "인터넷 세상의 스펙트럼", + "book.spectrum.guidebook.curseforge.name": "CurseForge의 스펙트럼", + "book.spectrum.guidebook.discord.name": "Discord의 다채로운 스펙트럼 세계", + "book.spectrum.guidebook.discord.description": "다른 플레이어들과 이야기를 나누거나 질문해 보세요", + "book.spectrum.guidebook.github.name": "Github의 스펙트럼", + "book.spectrum.guidebook.github.description": "버그를 제보하거나 개발에 기여하세요. 기술적인 정보가 담긴 위키도 이곳에 있습니다", + "book.spectrum.guidebook.kofi_dafuqs.name": "Ko-fi의 DaFuqs", + "book.spectrum.guidebook.kofi_dafuqs.description": "기술 및 크리에이티브 리드, 프로그래밍", + "book.spectrum.guidebook.modrinth.name": "Modrinth의 스펙트럼", + + "book.spectrum.guidebook.intro.description": "모드에 대한 소개 및 시작하는 방법", + "book.spectrum.guidebook.intro.name": "도입부", + "book.spectrum.guidebook.intro.page0.text": "스펙트럼(Spectrum)은 색을 혼합하며 나아가는 진행과 탐험 중심 마법 모드입니다.", + "book.spectrum.guidebook.intro.page0.title": "스펙트럼에 오신 것을 환영합니다!", + "book.spectrum.guidebook.intro.page1.text": "당신은 감산 혼합 방식(CMYK)을 통해 색을 섞고 다루게 될 것입니다. 수채화나 인쇄에서 쓰이는 색 혼합 방식과 같으니 아마 익숙하실 겁니다.\\\n\\\n스펙트럼의 주요 색상들은 세상 곳곳에 흩어진 정동에서 캐낼 수 있는 보석들로 대변되며, 그중 바닐라의 자수정은 자홍색을 상징합니다.", + "book.spectrum.guidebook.intro.page2.text": "스펙트럼은 게임을 플레이하며 새로운 것들을 단계적으로 잠금 해제해 나가는 독특한 진행 시스템을 갖추고 있습니다.\\\n앞으로 나아갈수록, 세상이 변화하는 것을 눈치채게 될 것입니다. 오직 *당신*만이 볼 수 있는 변화들 말이죠.\\\n\\\n당신이 배워나가는 모든 것들은 당신을 궁극적인 목표로 이끌어 줄 것입니다. 결코 뚫을 수 없는 기반암 바닥, 그 아래에 과연 무엇이 잠들어 있는지 알아내는 것 말입니다.", + "book.spectrum.guidebook.intro.page2.title": "진행 시스템", + "book.spectrum.guidebook.intro.page3.link_text": "스펙트럼의 Discord", + "book.spectrum.guidebook.intro.page3.text": "\\\n시작하려면 (x) 또는 마우스 우클릭을 누르세요!\\\n\\\n\\\n스펙트럼은 아직 개발 중입니다. 버그를 발견하시거나 제안할 점이 있다면, 스펙트럼의 Discord를 방문하시거나 GitHub에 제보해 주세요.\\\n\\\n즐거운 시간 보내시길! – DaFuqs", + "book.spectrum.guidebook.intro.stuck.title": "어떻게 진행해야 할지 막막한가요?", + "book.spectrum.guidebook.intro.stuck.text": "이 책이나 스펙트럼 발전 과제를 확인해 보세요. 두 곳 모두 다음에 무엇을 해야 할지 부드럽게 힌트를 던져주고 있을 겁니다.\\\n\\\n여러 갈래의 발전 과제 트리가 준비되어 있으며, 당신의 여정에서 마주할 각 챕터마다 하나씩 열리게 됩니다.", + "book.spectrum.guidebook.intro.hints.title": "선택적 힌트 시스템", + "book.spectrum.guidebook.intro.hints.text": "당신의 일지에는 힌트 시스템이 포함되어 있습니다. 진행이 막혔다면 주저하지 말고 이 항목들을 펼쳐 작은 힌트나 완전한 해답을 얻어 보세요.\\\n\\\n이것들은 선택사항으로, 힌트를 본다고 무언가를 놓치거나 손해 보는 일은 전혀 없습니다. 물론, 힌트 없이 스스로의 힘만으로 모드의 끝자락에 도달하는 자부심을 가지셔도 좋습니다!", + "book.spectrum.guidebook.intro.guidebook_recipe.title": "또 다른 다채로운 세계", + "book.spectrum.guidebook.intro.guidebook_recipe.text": "혹시라도 일지를 잃어버렸다면 이렇게 다시 만들 수 있습니다. 새 일지에도 당신이 이전에 기록해 둔 모든 메모가 그대로 유지될 것입니다.\\\n잃어버리지 않게 잘 간수하세요, 앞으로 지겹도록 많이 필요할 테니까요.", + "book.spectrum.guidebook.inventory_insertion.page0.text": "채굴한 광석이 [#](bb00bb)용암[#]()에 빠져버릴 때마다 [#](bb00bb)흙 블록[#]()을 얻었다면, 난 지금쯤 [#](bb00bb)흙[#]() 부자가 되어 있었을 것이다.\\\n솔직히 그 많은 흙을 어디다 써야 할진 모르겠지만. 갓 이 세상에 뚝 떨어진 친구 녀석 첫날밤 집 지으라고 던져주려나?\\\n\\\n어쨌든, 캔 물건이 자꾸 [#](bb00bb)용암[#]()으로 다이빙하는 꼴은 이제 그만 볼 때도 됐다. 난 널 잊지 않았다, 나의 소중한 [#](bb00bb)가스트의 눈물[#]()이여.", + "book.spectrum.guidebook.inventory_insertion.page1.text": "파괴한 블록과 몬스터가 떨어뜨린 전리품을 땅바닥에 흩뿌리는 대신 내 인벤토리로 직접 회수한다.\\\n\\\n최대 레벨: 1\\\n채굴 도구, 가위, 무기, 활, 쇠뇌, 스펙트럼의 낚시대에 적용 가능.", + "book.spectrum.guidebook.item_bowl.name": "아이템 그릇", + "book.spectrum.guidebook.item_bowl.page0.text": "기지를 떠날 때마다 멍청하게 꼭 하나씩 까먹고 안 챙기는 물건이 있다... 이 장식용 그릇에 올려두면 까먹지 않도록 훌륭한 알림장이 되어주지 않을까?\\\n*아마 아니겠지.*\\\n\\\n[#](bb00bb)현무암[#]()과 [#](bb00bb)방해석[#]() 변형 모두 만들어 보았다.", + "book.spectrum.guidebook.item_bowl.page1.text": "단일 품목의 아이템 묶음을 그릇 위에 동동 띄워 전시한다.\\\n아이템을 직접 올려두거나, 그냥 그릇 쪽으로 던져 넣어도 쏙 들어간다.", + "book.spectrum.guidebook.item_conversion": "아이템 변환", + "book.spectrum.guidebook.item_detector.page0.text": "아이템 감지기는 반경 10블록 내의 땅바닥에 떨어져 굴러다니는 아이템의 개수를 세는 데 사용된다.\\\n\\\n[#](449900)레드스톤 신호[#]()의 강도는 주변에 얼마나 많은 아이템이 떨어져 있느냐에 따라 달라진다.", + "book.spectrum.guidebook.item_detector.page1.text": "64개의 아이템이 모이면 최대 강도의 신호를 뿜어낸다.", + "book.spectrum.guidebook.item_roundel.page0.text": "저 고대의 구조물들에서 빙글빙글 돌고 있던 라운델들이 너무 마음에 들어서, 아예 그 디자인을 통째로 베껴왔다. 내 아이템들을 전시하거나 보관하기엔 이만한 물건이 없다.\\\n\\\n*특허권이 진작에 만료되었기를 바랄 뿐이다.*", + "book.spectrum.guidebook.item_roundel.page1.text": "내가 현무암과 방해석을 짜맞춰 만든 이 변형은 아이템을 최대 6세트까지 보관할 수 있다.", + "book.spectrum.guidebook.jade_vines.page0.text": "억겁의 세월을 견뎌온 이 식물에 남은 에너지라곤 이제 거의 느껴지지 않을 정도로 희미하다. 너무나도 깃털처럼 가볍고 연약해서, 내가 실수로 손끝이라도 스치면 이 연약한 구근에서 마지막 남은 생명의 숨결마저 끊어져 버릴 것만 같다.\\\n\\\n*이 식물이 품고 있는 역사는 영원히 내게 닿지 않는 수수께끼로 남고 마는 걸까?*", + "book.spectrum.guidebook.jade_vines.page1.text": "거의 포기할 뻔했던 나에게, 이제는 비장의 카드가 하나 생겼다.\\\n[영혼 주입기](entry://creating_life/spirit_instiller)의 힘을 빌린다면, 이 죽어가는 작은 구근에 다시 생명의 숨결을 불어넣을 수 있을 것이라 확신한다.", + "book.spectrum.guidebook.jade_vines.page1.title": "발아", + "book.spectrum.guidebook.jade_vines.page2.text": "창백하고 연약하지만 눈부시게 아름다운 늘어지는 식물로, 목재 울타리를 타고 자라나기 때문에 그 아래에 넉넉한 공간이 필요하다.\\\n[#](8f2121)그 긴 세월 동안 강렬한 빛을 본 적이 없기에, 너무 밝은 햇빛에 노출되면 말라 죽어버린다.\\\n[#](449900)오직 밤에 달이 내어주는 한결 부드럽고 은은한 빛을 받을 때만 하룻밤에 한 단계씩 성장한다.", + "book.spectrum.guidebook.jade_vines.page2.title": "심고 기르기", + "book.spectrum.guidebook.jade_vines.page3.text": "이 식물 중 하나를 강렬한 햇빛 아래에 둬 보았더니, 금세 시들어버렸다. 이 시든 덤불은 내게 새로운 구근을 남겨주었을 뿐만 아니라, 이 젤리처럼 물컹한 덩어리까지 남겨주었다!\\\n\\\n*생각보다 맛있다*.", + "book.spectrum.guidebook.jade_vines.page4.text": "비취 젤리를 순식간에 달아오르게 가열한 뒤 다시 식히면, 몹시 끈적거리면서도 설탕처럼 달콤한 덩어리가 만들어진다.\\\n\\\n*설탕이 땡기지 않는가?*", + "book.spectrum.guidebook.jade_vines.page5.text": "조금 자라났을 때에는 반짝이는 꽃잎을 뜯어낼 수 있다.\\\n장식용으로 쓸 수도 있고, 아주 운이 좋으면 꽃잎 사이를 뒤적이다 [#](449900)또 다른 구근[#]()을 발견할 수도 있다.\\\n\\\n하지만 비취 덩굴을 자르지 않고 끝까지 자라게 내버려 둔다면, 과연 어떤 모습이 될까?", + "book.spectrum.guidebook.jade_vines.page5.title": "꽃잎", + "book.spectrum.guidebook.jade_vines.page6.text": "수많은 밤을 지새우고 마침내 보름달이 뜨면, 식물들은 만개한다. 나는 [#](bb00bb)유리병[#]()을 사용해 이 꽃들에서 약간의 넥타르를 모을 수 있었다.\\\n\\\n이 넥타르는 엄청난 회복 능력을 품고 있다.\n- 마셔서 체력을 회복할 수 있다\n- 손상된 어떤 아이템이든 수리할 수 있다.", + "book.spectrum.guidebook.jade_wine.page0.text": "[비취 덩굴](entry://general/jade_vines)이 그 탁월한 회복 능력으로 주목받는다는 걸 생각하면, 발효시켰을 때 그 능력이 완벽하게 옮겨간다는 사실도 놀랍지 않다.\\\n구근에서 느껴지는 약간의 쓴맛과는 대조적으로, 꽃잎을 한가득 섞어 넣으면 훨씬 더 꽃내음이 강하고 약간 새콤한 풍미가 끌어올려지며, 흙내음이 이를 기저에서 부드럽게 받쳐준다. 비취 특유의 색감을 띤, 거의 와인에 가까운 무언가로 변모하는 것이다.", + "book.spectrum.guidebook.jade_wine.page1.text": "[#](bb00bb)물 한 양동이[#]()에 [#](bb00bb)구근 1개[#]()와 [#](bb00bb)꽃잎 3개[#]()를 넣는 것이 꽤나 적절한 시작점인 것 같다.\\\n발효 시간이 길어질수록, 그 풍미는 한층 더 강렬해진다.\\\n\\\n여기에 *약간의 [#](bb00bb)단맛을 더해준다면[#]()* 훨씬 훌륭해질 거라 확신한다.", + "book.spectrum.guidebook.jade_wine.page2.text": "[#](bb00bb)달빛에 취한 넥타르[#]()를 한 방울 떨어뜨리니 와인의 목 넘김이 훨씬 부드러워졌다. 발효 과정도 가속되며, 부정적인 효과들은 눈에 띄게 완화된다.", + "book.spectrum.guidebook.jade_wine.page2.title": "감미료 더하기", + "book.spectrum.guidebook.jadeite.name": "경옥", + "book.spectrum.guidebook.jadeite.page0.text": "위압적인 덩굴들이 높은 천장에서부터 늘어져 내려와, 그 빛으로 어둠을 갈라놓고 있다. 이 덩굴들은 맛이 꽤 훌륭하며 [물약 반응물](entry://brewing/complex_reagents)으로도 쓸 수 있다.", + "book.spectrum.guidebook.jadeite.page0.title": "경옥 연꽃", + "book.spectrum.guidebook.jadeite.page1.title": "경옥 블록", + "book.spectrum.guidebook.jadeite.page2.title": "경옥 양탄자", + "book.spectrum.guidebook.jeopardant.page0.text": "위급 상황이라고 해서 내 혈관을 타고 흐르는 게 아드레날린 하나뿐일 이유는 없다.\\\n\\\n내 체력이 한 칸 깎여나갈 때마다, 이 반지에 박힌 [스트라틴 결정](entry://general/stratine)은 요동치는 내 심장 박동에 맞춰 점점 더 밝게 빛나며, 내게 기하급수적으로 증폭되는 피해량 보너스를 선사한다.", + "book.spectrum.guidebook.jeopardant.page1.text": "*네가 처한 상황에 대해 어떻게 생각하는지 말해봐\\\n난처하고 골치 아프다*", + "book.spectrum.guidebook.karak_chai.page0.text": "[밤이슬 새싹](entry://general/nightdew_sprout)이 가진 수면 효과에 내 시선이 쏠려있긴 했지만, 진정 효과 역시 조금 더 애정을 쏟아줄 만한 가치가 있다.\\\n잎사귀를 끓이면 마음을 진정시키는 마법만을 분리해 낼 수 있지만, 이렇게 우려낸 차는 혀가 오그라들 정도로 떫은맛이 난다. 하지만 수많은 시음 끝에, 농축 우유와 향신료를 잔뜩 섞어주었더니 그 떫은맛을 완전히 감출 수 있었다!", + "book.spectrum.guidebook.karak_chai.page1.text": "*크리미한 차라고? 뭐, 끔찍한 차보단 낫잖아...*", + "book.spectrum.guidebook.kindlings.name": "불망울", + "book.spectrum.guidebook.kindlings.page0.text": "심연 곳곳에 흩어져 있는 거대한 뼈들... 죽음의 순간조차 용들은 이토록 어마어마한 힘과 생명력을 품고 있다. 그렇다면 이 [용골 덩어리](entry://creating_life/dragonbone@dragonbone_chunks)를 매개로 그 찬란했던 영광을 되살릴 방법도 분명 존재할 터.\\\n\\\n신성한 용의 시대를 다시 열어젖힐 자가 바로 내가 되는 건 아닐까?", + "book.spectrum.guidebook.kindlings.page1.text": "*나만의 맹렬한 수호룡이라. 이거 진짜 끝내주겠는걸.*", + "book.spectrum.guidebook.kindlings.page2.text": "*나만의 사설 쥬라기 공원을 세우려던 원대한 계획이 이렇게 끝나는군. 차라리 동물 농장을 차리는 게 더 낫지 않았을까?*\\\n\\\n결과물은 솔직히 말해서 내가 상상했던 것만큼... 맹렬하지는 않다. 뭐 이제는 실패에 꽤 익숙해졌다고 해도 과언이 아니지만, 이 귀여운 결과물을 보고 내가 무슨 자격으로 불평을 하겠는가?\\\n\\\n솜털은 부드럽다 못해 구름을 만지는 것 같다. 조용히 다가가 [가위](item://minecraft:shears)를 들이밀면, 깃털 한두 개쯤은 잘라낼 수 있지 않을까?", + "book.spectrum.guidebook.kindlings.page2.title": "작은 서프라이즈", + "book.spectrum.guidebook.kindlings.page3.text": "내가 발견해 낸 이 밤의 연금술은... 의지력과 참으로 기묘한 방식으로 상호작용하는 것 같다. 만약 용이 순수한 의지력의 덩어리라면, 이 둘이 만났을 때 분명 뭔가 일어날 텐데.\\\n\\\n*낮잠 좀 재운다고 녀석들이 잘못되진 않겠지. 하지만... 이놈들이 여태 쳐왔던 사고들을 생각하면, 내가 아끼는 물건들에서는 멀찍이 떨어진 곳에서 시도하는 게 좋겠다.*", + "book.spectrum.guidebook.kindlings.page3.title": "기묘한 발상", + "book.spectrum.guidebook.knowledge_gem.page0.text": "적을 쓰러뜨릴 때마다 떨어지는 이 작고 초록색인 구슬들을 줍다 보면 내 머리도 덩달아 똑똑해지는 기분이다, 적어도 기분상으로는.\\\n\\\n하지만 내 주체할 수 없는 덜렁거림으로 인한 피할 수 없는 죽음은, 내가 이 경험치들을 모으는 족족 허무하게 날려버리게 만들었다. 하지만 이걸 결정화시켜 내 상자 안에 안전하게 쑤셔 박아둔다면, 그 어떤 것보다도 안전하게 보관할 수 있을 것이다.", + "book.spectrum.guidebook.knowledge_gem.page1.text": "최대 10,000의 경험치를 저장한다. [#](449900)효율[#]()을 부여하면 이 최대 한도가 늘어나고, [#](449900)빠른 장전[#]()을 부여하면 경험치 전송 속도가 증가한다.", + "book.spectrum.guidebook.knowledge_gem.page2.text": "지식의 보석을 [블랙홀 상자](entry://magical_blocks/black_hole_chest)에 넣어두면 주변의 경험치 구슬을 흡수하여 보석 안으로 경험치를 저장할 수 있게 된다.", + "book.spectrum.guidebook.knowledge_gem.page2.title": "경험치 구슬 흡수", + "book.spectrum.guidebook.koi.page0.text": "[액체 수정](entry://general/liquid_crystal) 웅덩이에서 제집인 양 헤엄치는 창백하고 커다란, 생명력 넘치는 물고기다.", + "book.spectrum.guidebook.lagoon_rod.page0.text": "안마당에 앉아 한가로운 날들을 보내던 중, 나는 예전에 주워왔던 [인어의 붓](entry://general/mermaids_brush)에 해양 생물들이 기이할 정도로 이끌린다는 사실을 눈치챘다. 이건 자연스럽게 물에 동동 뜨는 성질이 있으니, 찌 대신 사용해 보는 건 어떨까.\\\n\\\n아니나 다를까, 낚시 성공률을 올려줄 뿐만 아니라 꽤나 흥미로운 부가 효과들도 딸려 왔다...", + "book.spectrum.guidebook.lagoon_rod.page1.text": "*물 밖으로 뭘 낚아 올릴 수 있을지 기대되는데.*", + "book.spectrum.guidebook.laurels_of_serenity.page0.text": "누구에게도 방해받지 않고 혼자만의 시간을 가지는 건 정말 최고다! 하지만 빌어먹을 잎 즙을 15분마다 들이켜느라 혀가 마비되는 건 전혀 최고가 아니다. 내 문제를 해결할 방법은 자명하다. 그냥 밤이슬을 입어버리면 되잖아!... 거기에 보라색 잉크도 잔뜩 주입해 넣고 말이다.\\\n\\\n*잠깐, 이거 꽃으로 만든 거니까, 화환이라고 불러야 하는 거 아냐?*", + "book.spectrum.guidebook.laurels_of_serenity.page1.text": "[색상 추출기](entry://ink/color_picker)에서 [보라색 잉크](entry://ink/ink)를 주입하면 은신 능력이 더 강해진다.\\\n\\\n*~ 수면 저항 효과는 덤 ~*", + "book.spectrum.guidebook.lava_gliding.page0.text": "레벨이 오를 수록 [#](449900)용암 속에서의 내 이동 속도와 시야를 향상시켜 주었다.[#]()", + "book.spectrum.guidebook.lava_gliding.page1.text": "하지만 이게 불이나 용암으로 인한 피해로부터 날 지켜주지는 **못했다**.\\\n\\\n*나중에 날 주제로 슬랩스틱 코미디라도 한 편 찍어달라고 아우성치는 것 같지 않은가?*", + "book.spectrum.guidebook.lava_sponge.page0.text": "내 손에 [](item://minecraft:wet_sponge)를 쥐었을 때, 나는 당연하게도 [#](bb00bb)용암[#]()을 위한 스펀지도 반드시 존재할 거라고 생각했다. 아직 그런 물건을 발견하지는 못했지만, 그렇다고 내가 직접 하나 발명해 내는 걸 막을 수는 없었다.\\\n\\\n이게 있으면 세계의 깊은 심연과 저 지옥 같은 차원문 너머를 항해하는 게 훨씬 수월해질 것이다.", + "book.spectrum.guidebook.lava_sponge.page1.text": "...라고 생각했었지. 용암을 흠뻑 머금은 스펀지가 아주 *치명적인* 부작용을 가지고 있다는 걸 깨닫기 전까지는 말이다.\\\n당연히 그럴 거라 예상했어야 했는데.", + "book.spectrum.guidebook.lava_sponge.page2.text": "용암 스펀지는 상당히 효율적인 연료로 땔 수 있으며, 이 과정에서 스펀지는 바싹 마르게 된다.", + "book.spectrum.guidebook.lava_sponge.page2.title": "화로 연료", + "book.spectrum.guidebook.lesser_potion_pendant.page0.text": "물약은 정말 편리하다. 하지만 그걸 인벤토리에 절반이나 꽉꽉 채워 들고 다니는 건 전혀 편리하지 않다.\\\n물약 펜던트에는 물약을 딱 채워 넣을 수 있는 조그마한 공간이 하나 달려있다. 이 펜던트를 목에 걸고 잉크를 가지고 있는 한, 그 물약의 효과는 계속해서 내 몸을 타고 흐를 것이다.\\\n\\\n다만 물약을 직접 들이켜는 게 아니기 때문에, 그 효과는 최대 레벨 III까지만 발휘된다.", + "book.spectrum.guidebook.life_drain.page0.text": "생명력 흡수는 내가 처음 겪었을 때 문자 그대로 속을 다 뒤집어놓았던 끔찍하기 짝이 없는 효과다.\\\n이 효과는 [#](449900)내 최대 체력을 서서히 갉아먹어[#](), 스치기만 해도 골로 갈 만큼 나를 한없이 나약하게 만들었다.", + "book.spectrum.guidebook.light_level_detector.page0.text": "[#](bb00bb)햇빛 감지기[#]()는 빛을 정밀하게 측정하는 데 있어서는 형편없다. 거기에 쓰이는 [](item://minecraft:quartz)은 워낙 거칠게 가공된 터라 오직 내리쬐는 직사광선에만 반응하기 때문이다.\\\n그에 비해 자수정은 빛을 포착하는 데 있어 훨씬, 훨씬 더 예민하다.\\\n\\\n심지어 [](item://minecraft:torch)의 은은한 불빛조차도 꽤나 쓸만한 측정값을 뽑아낼 수 있다.", + "book.spectrum.guidebook.light_level_detector.page1.text": "블록 빛 감지기는 햇빛뿐만 아니라 빛을 뿜어내는 다른 모든 블록 등 다양한 광원에 반응한다.", + "book.spectrum.guidebook.lightweight.page0.text": "레벨이 오를수록 [#](449900)내 몸을 점점 더 가볍게 만들어[#](), 더 멀리 뛰고 깃털처럼 천천히 떨어지게 해 주었다.\\\n높은 레벨에 도달하자 아예 [#](449900)낙하 피해를 전혀 입지 않게[#]() 되었다.", + "book.spectrum.guidebook.liquid_crystal.page0.text": "액체 형태로 녹아내린 순수한 보석의 에너지다. 무언가를 치유하는 힘을 품고 있는 것 같다.", + "book.spectrum.guidebook.liquid_crystal.page1.text": "이 액체를 다른 액체들과 맞닿게 하면 꽤나 흥미로운 특성을 지닌 갖가지 물질들이 탄생한다.", + "book.spectrum.guidebook.liquid_crystal.page2.text": "액체 수정을 [진흙탕](entry://magical_blocks/sludge)과 충돌시키니 [#](bb00bb)점토[#]()가 만들어졌다! 분명 이 밖에도 내가 아직 발견하지 못한 수많은 조합이 존재할 것이다!\\\n\\\n*토마스도 이런 부조화는 한 번도 본 적이 없었다.*", + "book.spectrum.guidebook.liquid_crystal.page3.text": "액체 수정 한 블록 전체가 용암의 무시무시한 열기를 온전히 집어삼키도록 내버려 두었더니 이런 결과물이 나왔다.\\\n마치 [](item://minecraft:magma_block) 같은 질감이지만, 그보다 비교도 안 될 정도로 뜨겁다.", + "book.spectrum.guidebook.liquid_crystal.page4.text": "[#](bb00bb)물[#]()이 꽉 찬 액체 수정 블록 속으로 흘러 들어오자, 수정이 그대로 얼어붙어 버렸다.\\\n살짝 스치기만 해도 뼛속까지 시린 오한이 밀려오길래, 나는 이것에 '동상의 결정'이라는 찰떡같은 이름을 붙여주었다.", + "book.spectrum.guidebook.liquid_crystal_essences.name": "결정화", + "book.spectrum.guidebook.liquid_crystal_essences.page0.text": "[액체 수정](entry://general/liquid_crystal) 한 블록 전체가 [#](bb00bb)용암[#]()의 무시무시한 열기를 온전히 집어삼키도록 내버려 두었더니 이런 결과물이 나왔다.\\\n마치 [#](bb00bb)마그마 블록[#]() 같은 질감이지만, 그보다 비교도 안 될 정도로 뜨겁다.", + "book.spectrum.guidebook.liquid_crystal_essences.page1.text": "[#](bb00bb)타오르는 결정[#]()을 [분쇄해보니](entry://general/item_crushing) 만지는 것만으로도 손에 불이 붙을 것 같은 이 시뻘겋게 달아오른 정수를 얻었다. [#](bb00bb)마그마 블록[#]()을 분쇄하는 것도 통하긴 하지만, 얻어지는 양이 턱없이 적다.", + "book.spectrum.guidebook.liquid_crystal_essences.page2.text": "[#](bb00bb)물[#]()이 [액체 수정](entry://general/liquid_crystal) 원천 블록에 닿자, 수정이 단단하게 굳어버렸다.\\\n살짝 스치기만 해도 뼛속까지 시린 오한이 밀려오길래, 나는 이에 어울리도록 '동상의 결정'이라는 이름을 붙여주었다.", + "book.spectrum.guidebook.liquid_crystal_essences.page3.text": "[#](bb00bb)동상의 결정[#]()을 [분쇄해보니](entry://general/item_crushing) 쥐고 있는 것만으로도 내 손을 꽁꽁 얼려버릴 듯한 이 얼음장 같은 정수를 얻었다. [#](bb00bb)얼음[#]()을 분쇄하는 것도 통하긴 하지만, 역시나 얻어지는 양이 턱없이 적다.", + "book.spectrum.guidebook.lizards.name": "잠복 도마뱀", + "book.spectrum.guidebook.lizards.page0.text": "*결코 붙임성 좋은 이웃은 아니다.*", + "book.spectrum.guidebook.lizards.page1.text": "허구한 날 시비 걸 상대를 찾아 헤매는 호전적인 짐승들이다.\\\n\\\n솔직히 이 녀석들이 내 팔다리를 뜯어 먹으려고 안달 나지만 않았으면 꽤 귀여웠을 텐데.\\\n...아무래도 이놈들은 [#](bb00bb)유리판[#]() 너머에 가둬두는 게 낫겠다. 내 사지가 뜯겨나가는 것보단 나으니까.", + "book.spectrum.guidebook.lizards.page2.text": "딱히 맛이 좋은 편은 아니고 꽤나 질기지만, 뱃가죽이 등에 들러붙을 정도로 배가 고플 땐 그럭저든 요깃거리가 된다.", + "book.spectrum.guidebook.lucky_roll.page0.text": "예술가라는 본업에 더해 이제는 파티시에까지 겸업하게 되는 걸까? 이건 겉보기에도 그리 나쁘지 않은데 (심지어 맛있다!).\\\n\\\n[아마란스](entry://cuisine/amaranth), [](item://minecraft:sugar), [우유](item://minecraft:milk_bucket), [네잎클로버](entry://general/clover)를 섞어 만들었더니, 아주 특별한 효과가 나타나는 걸 깨달았다. 행운이나 약탈처럼 운에 맡기는 도구들을 사용할 때 결과가 묘하게 더 좋아진 것이다.", + "book.spectrum.guidebook.lucky_roll.page1.text": "*행운의 롤, 이름값 한다구???*", + "book.spectrum.guidebook.magic_annulation.page0.text": "[#](449900)나에게 들어오는 마법 피해를[#]() 레벨당 1씩 줄여주었다.\\\n자잘한 피해들이 덜 치명적이게 되긴 했지만, 묵직한 한 방은 여전히 내 목숨을 앗아갈 위협으로 남아있었다.", + "book.spectrum.guidebook.malachite.name": "공작석", + "book.spectrum.guidebook.malachite.page0.text": "깊고 짙은 초록빛으로 반짝거리는 청정무결한 광물이다. 마치 지저 너머의 [남동석](entry://general/azurite)이라고 해도 과언이 아닐 만큼 강력한 마법의 기운을 품고 있다. [남동석](entry://general/azurite)과 또 다른 공통점이 있다면, 이 공작석 역시 정제 과정을 거쳐야 한다는 것이다. 내가 주운 이 작은 파편들을 온전하고 쓸모 있는 수정으로 길러내야만 하는데, 싹 틔우는 블록을 도무지 찾을 수가 없으니, 내 평생에 이게 완전히 자라나는 꼴을 볼 수 있을지는 미지수다.", + "book.spectrum.guidebook.malachite.page1.text": "싹 틔우는 블록을 대체할 수 있는 유일한 수단은 [결정생성기](entry://ink/crystallarieum)뿐인 것 같다. 이 과정을 위해선 [월장석](entry://general/moonstone_shards)이 필수 조건이라는 사실도 깨달았다. 월장석이 지저 너머의 기이한 환경을 모방해 주기 때문이다.", + "book.spectrum.guidebook.malachite.page1.title": "공작석 정제", + "book.spectrum.guidebook.malachite_tools.name": "공작석 도구", + "book.spectrum.guidebook.malachite_tools.page0.text": "[공작석](entry://dimension/malachite)은 도구를 만들기 위한 재료로서 그야말로 흠잡을 데가 없다. [#](bb00bb)다이아몬드[#]()와 비견될 만한 성능을 자랑하면서도, 다른 재료들과 섞어 쓰는 게 훨씬 수월하다.\\\n\\\n이 다른 재료들과의 조합에서 진짜 재미가 시작된다. 이 조합 덕분에 독보적으로 정교하고 다재다능한 도구들을 만들어낼 수 있다.", + "book.spectrum.guidebook.malachite_tools.page1.text": "완벽한 [멀티툴](entry://equipment/tools_and_armor/multitool)을 완성했다!\n- 웅크리기+사용을 눌러 [#](449900)섬세한 손길[#]()과 [#](449900)행운[#]() 사이를 오갈 수 있다\n- 거대한 터널을 단숨에 팔 수 있으며, 동시에 [#](449900)껍질 벗기기[#](), [#](449900)경작[#](), [#](449900)평탄화[#]() 작업까지 해낸다.", + "book.spectrum.guidebook.malachite_tools.page2.text": "이 무지막지한 크기 덕분에 저 멀리 떨어져 있는 적들조차 아주 가볍게 후려칠 수 있다.\\\n\\\n*[팔타에리아](entry://general/paltaeria)가 아니었다면, 아마 이 무기를 들어 올리는 것조차 불가능했을 것이다.*", + "book.spectrum.guidebook.malachite_tools.page2.title": "특대검", + "book.spectrum.guidebook.malachite_tools.page3.text": "수중 생물들을 상대할 때 그 진가를 발휘하는 진정한 학살 병기다.\\\n\\\n*평범한 [#](bb00bb)삼지창[#]()에 비교하면 날이 둘 뿐이지만, 대신 두 배로 더 뾰족하게 갈아냈지!*", + "book.spectrum.guidebook.malachite_tools.page4.text": "어디 굴러다니는 흔해 빠진 [#](bb00bb)쇠뇌[#]() 따위와는 비교도 안 될 정도로 압도적인 속도와 정밀함으로 투사체를 쏘아 보낸다.", + "book.spectrum.guidebook.melochites_cookbook_vol_1.name": "멜로카이트의 요리책 1권", + "book.spectrum.guidebook.melochites_cookbook_vol_1.page0.title": "멜로카이트 요리", + "book.spectrum.guidebook.melochites_cookbook_vol_1.page1.text": "호이 조카들! 요리책을 처음 펼쳐보는 조카든, 아니면 내 수다를 오랫동안 들어온 베테랑 요리사든, 멜라야 이모와 함께 이 환상적인 레시피들을 탐험할 준비가 되었길 바라. 심연의 내 고향 구석에서 전해져 내려오는, 너희가 사랑에 빠질 수밖에 없을 아름다운 전통 요리들을 함께 파헤쳐 보자꾸나~!\\\n\\\n *~ 멜로카이트의 메룬 첼라야*", + "book.spectrum.guidebook.melochites_cookbook_vol_1.page2.text": "\\\n푸짐하고, 든든하며, 활력을 불어넣는 바냐시야말로 멜로카이트의 뼈대라 부르기에 손색이 없지!\\\n가재를 넣은 이 소박한 요리는 내가 유독 아끼는 메뉴인데, 최근 지상의 상황이 영 좋지 않아서 달콤한 열매를 구하기가 꽤 힘들어졌어. 그럼에도 불구하고, 이 요리가 공작석 광부들에게 최고의 만찬으로 꼽히는 데는 다 그만한 이유가 있는 법이지!", + "book.spectrum.guidebook.melochites_cookbook_vol_1.page2.title": "달콤하고 숲내음 나는 스튜", + "book.spectrum.guidebook.melochites_cookbook_vol_1.page3.text": "*숲내음이 살짝 감도는 달콤하고 짭짤한 바냐시. 가재와 사랑을 듬뿍 담아 끓여냈어~*", + "book.spectrum.guidebook.melochites_cookbook_vol_1.page4.text": "\\\n새끼 토끼는 이곳 멜로카이트뿐만 아니라, 드레이톤들이 어슬렁거리는 곳이라면 어디서든 알아주는 진미지. 만약 기회가 된다면, 제발, *제발* 장인이 직접 빚어낸 남동석 흑맥주를 이 요리에 써보렴. 그런 맥주는 멜로카이트 내에서도 아주 손에 꼽히는 곳에서만 만들어지지만, 날 믿어봐. 구하기 더럽게 힘들긴 해도, 토끼 고기와 곁들이는 순간 네 인생이 바뀔 테니까.", + "book.spectrum.guidebook.melochites_cookbook_vol_1.page4.title": "맥주를 곁들인 푸짐한 통구이", + "book.spectrum.guidebook.melochites_cookbook_vol_1.page5.text": "*몰트 비어를 쓰는 게 전통이긴 하지만, 장인이 만든 훌륭한 맥주라면 어떤 것이든 괜찮아.*", + "book.spectrum.guidebook.melochites_cookbook_vol_1.page6.text": "\\\n온 가족을 먹여 살린다는 건 결코 만만한 일이 아니지만, 세상 모든 어머니들이 일상처럼 해내는 일이기도 하지. 나 역시 그 고충을 뼈저리게 잘 알고 있단다. 이 미트로프 레시피는 우리 집안에서 대대로 며느리에게, 또 며느리에게 전해져 내려온 비법이야. 우리 엄마가 이걸 요리해 주시던 때를 떠올리기만 해도 눈시울이 살짝 붉어진다니까... 너희도 나중에 너희 아이들에게 이 레시피를 꼭 물려주었으면 해.", + "book.spectrum.guidebook.melochites_cookbook_vol_1.page6.title": "온 가족을 위한 고기빵", + "book.spectrum.guidebook.melochites_cookbook_vol_1.page7.text": "*네 조카들에게 배불리 먹일 사랑스러운 방법이지...\\\n\\\n온 가족을 먹여 살릴 계획, 맞지?*", + "book.spectrum.guidebook.melochites_cookbook_vol_1.page8.text": "*혼자 사는 사람에게 훨씬 더 어울리는 요리지.\\\n뭐 인정하긴 싫지만, 혼자 다 먹어 치우기엔 여전히 너무 큰 양이긴 해.*", + "book.spectrum.guidebook.melochites_cookbook_vol_1.page8.title": "고기 소를 채운 빵", + "book.spectrum.guidebook.melochites_cookbook_vol_1.page9.text": "*정말로 독특한 취향을 가진 너희들을 위해 준비했어. 문자 그대로 숨이 턱 막힐 거다.*", + "book.spectrum.guidebook.melochites_cookbook_vol_1.page9.title": "발효된 생선", + "book.spectrum.guidebook.melochites_cookbook_vol_2.name": "멜로카이트의 요리책 2권", + "book.spectrum.guidebook.melochites_cookbook_vol_2.page0.title": "멜로카이트 디저트", + "book.spectrum.guidebook.melochites_cookbook_vol_2.page1.text": "호이 조카들! 요리책을 처음 펼쳐보는 조카든, 아니면 내 수다를 오랫동안 들어온 베테랑 요리사든, 너희의 멜라야 이모와 함께 이 환상적인 레시피들을 탐험할 준비가 되었길 바라. 함께 내 고향에서 전해 내려오는 기막힌 디저트와 음료 레시피들을 파헤쳐보자꾸나. 부디 입맛에 맞길 바라~!\\\n\\\n *~ 멜로카이트의 메룬 첼라야*", + "book.spectrum.guidebook.melochites_cookbook_vol_2.page10.text": "\\\n믿든 안 믿든 자유지만, 유리 복숭아는 든든한 식사뿐만 아니라 디저트용으로도 아주 훌륭한 재료란다. 한번 해 봐! 병조림에 들이붓는 엄청난 설탕에 더해 한 줌 더 쑤셔 넣으면, 이 잼은 네 혈관을 타고 미친 듯이 질주하는 쾌감을 선사할 테니까.", + "book.spectrum.guidebook.melochites_cookbook_vol_2.page10.title": "슈가 러시", + "book.spectrum.guidebook.melochites_cookbook_vol_2.page11.text": "*너무 달아서 피마저 오렌지색으로 물들여버릴 거야.*", + "book.spectrum.guidebook.melochites_cookbook_vol_2.page2.text": "\\\n멜로카이트는 엄청난 양의 끝내주는 품질의 공작석 수출품으로 가장 잘 알려져 있긴 하지만, 내가 사랑하는 이 고향에는 그것보다 훨씬 더 많은 매력이 숨겨져 있단다. 이 동굴 구석구석에 자리잡고 있는 양조장과 증류소들은 그야말로 환상적이고, 그들이 빚어내는 끝내주는 술들은 수많은 칵테일과 음료의 탄생을 이끌어냈지!", + "book.spectrum.guidebook.melochites_cookbook_vol_2.page2.title": "크리미 샷", + "book.spectrum.guidebook.melochites_cookbook_vol_2.page3.text": "*마음속 깊은 곳까지 아늑해지는 기분이야*", + "book.spectrum.guidebook.melochites_cookbook_vol_2.page4.text": "\\\n오, 세상에나. 지상의 수많은 경이로움 중에서도 달콤한 카카오와 초콜릿에 비견될 만한 건 단연코 없단다.\\\n\\\n만약 내가 영영 짐을 싸서 지상으로 이사 가게 만들 유일한 한 가지를 꼽으라면 단연 이 두 녀석일 거야. 정말 환상적이지. 혹시 내 말에 동의하지 않는다면, 이 레시피가 네 생각을 완전히 뒤집어 놓을 거라고 장담하마.", + "book.spectrum.guidebook.melochites_cookbook_vol_2.page4.title": "통통하고 초콜릿이 가득하지", + "book.spectrum.guidebook.melochites_cookbook_vol_2.page5.text": "*수라들이 여전히 우릴 보살피고 있고 세상이 아름답다는 증거가 있다면, 바로 이게 그 증거지.*", + "book.spectrum.guidebook.melochites_cookbook_vol_2.page6.text": "\\\n있잖아, 가끔은 너무 자잘한 디테일이나 뉘앙스, 끝도 없이 긴 레시피 목록에 갇혀버리기 십상이야.\\\n때로는 심플한 게 최고일 때가 있지. 이 사랑스러운 페이스트리가 바로 그 완벽한 예시란다. 우유, 밀가루, 버터, 설탕, 이거면 끝이야. 콧대 높은 임브리퍼 미식가들이 뭐라고 지껄이든 신경 끄렴!", + "book.spectrum.guidebook.melochites_cookbook_vol_2.page6.title": "디저트 타르트", + "book.spectrum.guidebook.melochites_cookbook_vol_2.page7.text": "*달콤하고, 바삭하고, 섬세하지.*\\\n\\\n*차와 곁들이면 완벽해!*", + "book.spectrum.guidebook.melochites_cookbook_vol_2.page8.text": "\\\n많은 이들이 우리 멜로카이트 사람들을 대식가라고 부르곤 해. 뭐 인정하자면, 우리가 좀 통통한 편이긴 하지.\\\n\\\n하지만 조카야, 솔직해져 봐. 내가 여태 보여줬던 것들처럼 끝내주는 요리 전통을 가진 곳에 산다면, 너도 입이 좀 심심해지지 않겠어? 어쨌거나, 내 사랑스러운 독자들 대부분은 나의 이 통통함을 꽤 매력적이라 생각해 주는 것 같으니 불만은 없어...", + "book.spectrum.guidebook.melochites_cookbook_vol_2.page8.title": "속을 꽉 채운 간식!", + "book.spectrum.guidebook.melochites_cookbook_vol_2.page9.text": "*달걀 한 파운드, 설탕 한 파운드, 밀가루 한 파운드, 그리고 크림 한 파운드.*", + "book.spectrum.guidebook.melochites_cookbooks.aunt_melaya": " *멜라야 이모가*", + "book.spectrum.guidebook.memories.name": "기억", + "book.spectrum.guidebook.memories.page0.text": "[영혼 주입기](entry://creating_life/spirit_instiller) 덕분에, 마침내 나는 이미 숨을 거둔 생명체에게 새로운 생명을 불어넣는 데 성공했다!\\\n이 존재는 처음에는 에테르 형태를 띠며 형체화되는데, 나는 이를 *기억*이라 이름 붙였다.", + "book.spectrum.guidebook.memories.page1.text": "한 생명체의 기억을 되살려 내려면, 그 생명체의 [머리](entry://creating_life/mob_heads)와 그들이 가장 아꼈던 물건, 그리고 결합제 역할을 해줄 [베지탈](entry://general/vegetal)이 필요하다.\\\n[네오리스](entry://general/neolith)를 쓰면 피조물의 에너지를 완전히 집어삼켜 버려, 기억이 온전히 형체화되기 전까지는 알 수 없는 모습으로 만들어버리는 것 같다.", + "book.spectrum.guidebook.memories.page2.text": "기억이 온전히 형체화되려면 마치 알을 부화시키는 것처럼 약간의 시간이 필요하며, 바닥에 내려놓고 기다려야 한다. 생명체의 종류에 따라 꽤 빨리 형체화될 수도 있고, 영겁의 시간이 걸릴 수도 있다.\\\n\\\n*기억을 특정한 블록 위에 올려두면 이 형체화 과정을 가속시키거나 아예 멈춰버릴 수도 있는 것 같다.*", + "book.spectrum.guidebook.memories.page2.title": "형체화", + "book.spectrum.guidebook.memories.page3.text": "내가 쌓아 올린 방대한 지식 덕분에, 이제 나는 엔더 드래곤이나 위더, 심지어 워든 같은 무시무시한 괴수들조차 되살려낼 수 있게 되었다.", + "book.spectrum.guidebook.memories.page3.title": "보스 부활", + "book.spectrum.guidebook.memory_to_head.name": "기억에서 머리로", + "book.spectrum.guidebook.memory_to_head.page0.text": "생명체의 목을 댕강 썰어버리는 건 썩 신사적인 방식이 아니다. 그렇다고 동물 학대 논란에서 자유로운 평화로운 방식도 아니고, 딱히 효율적인 방식도 아니다. 그냥 그런 방식이 존재할 뿐이다.\\\n나는 내가 방금 고안해 낸 이 새로운 방식이 훨씬 마음에 든다. 그때의 나는 도대체 무슨 생각으로 목을 썰고 다녔던 거지?", + "book.spectrum.guidebook.memory_to_head.page1.text": "*불살 엔딩, 달린다!*", + "book.spectrum.guidebook.mermaids_brush.name": "인어의 붓", + "book.spectrum.guidebook.mermaids_brush.page0.text": "인어의 붓은 인간의 손길이 단 한 번도 닿지 않은 바다의 밑바닥에서 자라나는 눈에 띄지 않는 식물이다.\\\n\\\n이 식물은 단 한 송이의 꽃만 피우는데, 그 꽃은 서서히 진주 모양의 씨앗으로 여문다. 완전히 자라나면, 이 속이 텅 빈 씨앗은 해수면 위로 둥둥 떠올라 파도에 몸을 맡긴 채 끝없이 떠돈다.", + "book.spectrum.guidebook.mermaids_brush.page0.title": "인어의 붓", + "book.spectrum.guidebook.mermaids_brush.page1.text": "이 씨앗을 심으면 새로운 인어의 붓을 길러낼 수 있다.\\\n\\\n인어의 보석은 물과 극도로 강한 유대감을 가지고 있다. 어느 정도냐면, 내가 이걸 깨트려 열었을 때 그 안에서 물이 콸콸 쏟아져 나왔을 정도다.\\\n\\\n*물이 찰랑거리는 무거운 양동이를 낑낑대며 들고 다니는 것보다 백배는 낫군...*\\\n*근데 이 많은 물이 도대체 어디서 쏟아지는 걸까?*", + "book.spectrum.guidebook.mermaids_brush.page1.title": "인어의 보석", + "book.spectrum.guidebook.mermaids_jam.page0.text": "*바다의 맛이 난다*\\\n\\\n[인어의 보석](entry://general/mermaids_brush)으로 만들어낸 아주 특별한 [청](entry://cuisine/cheong)이다.", + "book.spectrum.guidebook.mermaids_jam.page1.text": "이 레시피가 내 마음을 사로잡은 건 결코 그 맛 때문이 아니란 것만큼은 확실하다 (특히 그냥 퍼먹었을 때는 더더욱).\\\n하지만 이 잼이 선사하는 수중 호흡이라는 부가 효과만큼은 확실히 끝내준다.\\\n\\\n다른 잼들만큼 달콤하지는 않지만, 그래도 꽤 맛있다. 은은하게 감도는 짭짤한 짠맛이 매력적이다.", + "book.spectrum.guidebook.mermaids_popcorn.page0.text": "이 인어의 붓에서 나온 작은 씨앗들, 사실 구워 먹으면 꽤 맛있다는 걸 알고 있는가? 뭐, 나는 당연히 먹어봐야 직성이 풀렸지.\\\n하지만 단단한 껍질에서 알맹이를 빼내는 건 항상 고역이었다 (마치 내 수줍음 많은 친구들처럼 말이다!).\\\n그래서 안쪽에서 압력이 팽창해 껍질이 스스로 터져버릴 때까지 미친 듯이 열을 가해버렸다.\\\n\\\n*바삭하군*", + "book.spectrum.guidebook.mermaids_popcorn.page1.text": "*내 몹타워가 돌아가는 걸 구경하면서 이거 한 봉지쯤은 그 자리에서 뚝딱 비울 수 있을 것 같다.*", + "book.spectrum.guidebook.midnight_aberration.description": "위대한 실패", + "book.spectrum.guidebook.midnight_aberration.page0.text": "*이 끔찍하고 흉측한 보석 덩어리에서 섬뜩한 기운이 뿜어져 나온다.*\\\n\\\n그저 간신히 모양만 유지하고 있을 뿐, 순식간에 바스라져 내리는 게 당연해 보인다. 총체적 난국이다. 나는 지금 완전히 *정신붕괴* 상태고 나 자신에게 너무나도 실망했다.", + "book.spectrum.guidebook.midnight_aberration.page1.text": "그 직후 들이닥친 대혼란은 내가 원하던 결과와는 *거리가 한참 멀었지만*, 결과적으로 내 손에 쥐어진 이 잔해물은 어마어마한 힘을 품고 있었다.\\\n어찌나 강력한지 빨리 써먹지 않으면 제 힘을 이기지 못하고 스스로 가루가 되어버릴 정도다.\\\n\\\n그리고 이 과정에서 정체불명의 위험하고 시커먼 액체가 흘러나왔다. 그 색깔 때문에 나는 이 액체를 [자정의 용액](entry://general/midnight_solution)이라 이름 붙였다.", + "book.spectrum.guidebook.midnight_chip.page0.text": "자정의 용액 안에서 비참한 최후를 맞이한 생명체들은 [자정의 기형물](entry://general/midnight_aberration)을 쏙 빼닮았지만 훨씬 더 작고, 날카롭고, 사악한 기운을 뿜어내는 작은 파편을 떨어뜨린다.\\\n\\\n이 끔찍한 과정 속에서 목숨을 잃은 녀석들은 신기하게도 [#](449900)마치 플레이어에게 죽었을 때처럼 전리품을 떨어뜨리는 것 같다[#]().", + "book.spectrum.guidebook.midnight_chip.page1.text": "이 사나운 액체로 생명체를 학살하고 얻은 바로 이 전리품이, 역설적이게도 이 액체를 더 많이 만들어낼 수 있게 해준다. 곱씹어볼수록 참으로 섬뜩하다.", + "book.spectrum.guidebook.midnight_solution.page0.text": "이 기괴한 액체는 [나의 처참하게 실패한 융합 실험](entry://general/midnight_aberration)이 낳은 직접적인 결과물이다. 참으로 안타까운 일이지만, 어찌 됐든 지금 내 손에 무엇이 들어왔는지 보라.\\\n\\\n이 액체에 닿은 생명체들은 마치 그들의 생명력 자체를 통째로 빨아먹히는 것 같다. 흥미로운데...\\\n나 자신도 여기에 발을 들이지 않도록 조심해야겠다.", + "book.spectrum.guidebook.midnight_solution.page3.text": "자정의 용액 웅덩이 주변에서 굳는 쓸모없어 보이는 덩어리다.", + "book.spectrum.guidebook.midnight_solution.page4.text": "몇몇 아이템을 이 액체에 던져 넣으면, 아이템이 완전히 오염되어 아예 다른 무언가로 변형되는 것 같다.", + "book.spectrum.guidebook.midnight_solution.page5.text": "마법이 부여된 아이템을 이 안에 던져 넣으면, 그 특별한 마법의 힘을 모조리 잃어버리게 된다. 남는 것이라곤 평범한 아이템과 약간의 경험치 덩어리뿐이다.", + "book.spectrum.guidebook.midnight_solution.page5.title": "마법 부여 벗겨내기", + "book.spectrum.guidebook.milky_resin.page0.text": "카라멜 색깔을 띠는 이 수액은 달콤한 아로마 향을 내뿜으며 놀라울 정도로 호화로운 맛을 자랑한다! 약간의 발효 과정만 거치면 우유와 완벽하게 똑같은 용도로 써먹을 수 있다.\\\n\\\n*이 수지 자체만으로도 훌륭한 맛이 나지만, 그냥 마시기엔 너무 끈적거려서 목이 턱 막힐 지경이다.*", + "book.spectrum.guidebook.milky_resin.page1.text": "*~ 약간의 설탕과 사랑 한 스푼이면, 짜잔, [클로티드 크림](entry://cuisine/titration_barrel#4) 완성! ~*", + "book.spectrum.guidebook.milky_resin.page1.title": "식물성 우유", + "book.spectrum.guidebook.mob_heads.name": "몬스터 머리", + "book.spectrum.guidebook.mob_heads.page0.text": "몬스터 머리를 하나 손에 넣었는데, 내가 아는 그 평범한 녀석들의 머리가 아니라, 여태 단 한 번도 본 적 없는 머리다.\\\n\\\n이것들은 내 벽을 장식하기에 아주 훌륭한 전리품이 되어줄 뿐만 아니라, 그 생명체의 존재를 증명하는 작은 불씨를 여전히 머금고 있는 것 같다.", + + "book.spectrum.guidebook.mod_integration.colorfulazaleas.name": "Colorful Azaleas", + "book.spectrum.guidebook.mod_integration.colorfulazaleas.page0.text": "색깔 나무들!\\\n음, 조금 다르긴 하다. 그래도 어쨌든.\\\n\\\n비슷하지만, [내가 직접 만들어낸 색깔 나무](entry://general/colored_trees)와 똑같지는 않다. 분명 뭔가가 있을 텐데...", + "book.spectrum.guidebook.mod_integration.colorfulazaleas.page1.text": "만개한 변종을 포함한 색깔 진달래 잎들은 상당한 마법 에너지를 품고 있으며, 잉크로 변환할 수 있다.", + "book.spectrum.guidebook.mod_integration.colorfulazaleas.page2.text": "효율이 아주 좋지는 않지만, 꽃이 핀 잎이나 늘어진 잎도 사용할 수 있다.", + + "book.spectrum.guidebook.mod_integration.ae2.name": "Applied Energistics", + "book.spectrum.guidebook.mod_integration.ae2.page0.text": "\"충분히 발달한 기술은 마법과 구별할 수 없다.\" 예전에 이런 말을 들은 적이 있다.\\\n\\\n이 시스템이 도대체 어떻게 그 수많은 블록들을 이토록 작은 공간에 압축해 넣는 건지 아직도 완벽히 이해하진 못했지만, 나 역시 평소에 수백 제곱미터 분량의 흙을 주머니에 넣고 돌아다니는 처지니, 굳이 따지고 들고 싶진 않다.", + "book.spectrum.guidebook.mod_integration.ae2.page1.text": "[#](bb00bb)수정 성장 가속기[#]()가 모든 수정 봉오리의 성장 속도를 획기적으로 끌어올려 주는 것 같다!", + "book.spectrum.guidebook.mod_integration.ae2.page1.title": "성장 가속", + "book.spectrum.guidebook.mod_integration.ae2.page2.text": "[수정 채집장](entry://ink/crystal_apothecary)으로 [#](bb00bb)서투스 석영[#]()을 수확할 수 있다.", + "book.spectrum.guidebook.mod_integration.ae2.page2.title": "석영 자동 수확", + "book.spectrum.guidebook.mod_integration.ae2.page3.text": "[공명](entry://enchanting/enchantments/resonance) 마법이 부여된 도구로 [#](bb00bb)싹 틔우는 석영[#]()을 수확할 수 있으며, 심지어 *흠잡을 데 없는* 상태를 그대로 유지하기까지 한다.", + "book.spectrum.guidebook.mod_integration.ae2.page3.title": "싹 틔우는 석영 옮기기", + "book.spectrum.guidebook.mod_integration.ae2.page4.text": "AE2의 수많은 아이템들은 [모루로 분쇄해 가루로 만들 수 있다](entry://general/item_crushing): [#](bb00bb)서투스 석영[#](), [#](bb00bb)액정 수정[#](), [#](bb00bb)천령석[#](), [#](bb00bb)엔더 진주[#]().", + "book.spectrum.guidebook.mod_integration.ae2.page5.text": "[#](bb00bb)충전된 서투스 석영[#]()이 절실하게 필요한가? [폭풍석](entry://general/storm_stones)이 눈 깜짝할 사이에 충전시켜 줄 것이다.", + "book.spectrum.guidebook.mod_integration.ae2.page6.text": "...그리고 도저히 기다릴 인내심이 없다면, 즉시 [#](bb00bb)액정[#]()을 만들어낼 수도 있다.", + "book.spectrum.guidebook.mod_integration.ae2.silicon_from_rock_crystal.text": "백수정이 실리콘을 얻기 위한 아주 훌륭한 자원이었던 모양이다!", + "book.spectrum.guidebook.mod_integration.ae2.silicon_from_rock_crystal.title": "효율적인 실리콘", + "book.spectrum.guidebook.mod_integration.ae2.pure_resources.title": "순수한 서투스 & 액정", + "book.spectrum.guidebook.mod_integration.ae2.pure_resources.text": "결정질 구조를 띠고 있기에, [#](bb00bb)서투스 석영[#]()과 [#](bb00bb)액정 수정[#]() 모두 [결정생성기](entry://ink/crystallarieum) 안에서 길러낼 수 있다.", + "book.spectrum.guidebook.mod_integration.ae2.pure_certus_quartz_growing.title": "순수한 서투스 석영 성장시키기", + "book.spectrum.guidebook.mod_integration.ae2.pure_certus_quartz_growing.text": "", + "book.spectrum.guidebook.mod_integration.ae2.pure_fluix_crystal_growing.title": "순수한 액정 수정 성장시키기", + "book.spectrum.guidebook.mod_integration.ae2.pure_fluix_crystal_growing.text": "", + + "book.spectrum.guidebook.mod_integration.alloy_forgery.forge_controller": "용광로 제어기", + "book.spectrum.guidebook.mod_integration.alloy_forgery.name": "Alloy Forgery", + "book.spectrum.guidebook.mod_integration.alloy_forgery.intro0.text": "열과 압력으로 단단해진 합금 용광로는 방해석과 현무암으로 만들 수 있다.\\\n\\\n아마 다음 모험에서는 이에 써먹을 수 있는 더 많은 광물들을 발견하게 될지도 모른다. 발견하는 족족 이곳에 모두 적어 두는 편이 좋겠다.", + "book.spectrum.guidebook.mod_integration.alloy_forgery.intro1.text": "추가로, 일부 아이템들은 합금 용광로의 특별한 연료로 사용될 수 있으며, 몇몇 광석들은 이 용광로에서 제련할 때 산출량이 증가한다.\\\n\\\nNoaaan에게 안부 전해줘!", + "book.spectrum.guidebook.mod_integration.alloy_forgery.pyrite_alloy_forge.text": "비교를 불허하는 엄청난 온도로 제련해 내는 최고급 용광로다. 용량은 적다.", + "book.spectrum.guidebook.mod_integration.alloy_forgery.bone_ash_alloy_forge.text": "막대한 압력을 가해 융해 속도를 끌어올리는 초월적인 용광로다. 꽤 적당한 양의 연료를 수용하지만, 속도는 다소 느린 편이다.", + "book.spectrum.guidebook.mod_integration.alloy_forgery.pure_resources.text": "순수한 자원들은 평범한 원본 자원으로 변환될 때 아주 짭짤한 증폭 배율을 받는다.", + "book.spectrum.guidebook.mod_integration.alloy_forgery.stratine_ore.text": "높은 티어의 [#](449900)합금 용광로[#]()를 사용하면 원석에서 훨씬 더 많은 [스트라틴](entry://general/stratine)을 쥐어짜 낼 수 있다.", + "book.spectrum.guidebook.mod_integration.alloy_forgery.paltaeria_ore.text": "...당연히 자매 광석인 [팔타에리아](entry://general/paltaeria)에도 똑같이 적용된다.", + "book.spectrum.guidebook.mod_integration.alloy_forgery.wet_lava_sponge.text": "용암이 뚝뚝 떨어지는 [#](bb00bb)용암 스펀지[#]()는 합금 용광로를 꽤 오랫동안 돌리고도 남을 만큼 충분한 열기를 품고 있다.", + "book.spectrum.guidebook.mod_integration.alloy_forgery.incandescent_essence.text": "합금 용광로를 위한 훌륭한 열원이 될 수도 있다.", + "book.spectrum.guidebook.mod_integration.alloy_forgery.basalt_alloy_forge.text": "꽤 느리긴 하지만, 연료를 *엄청나게* 많이 품을 수 있다.", + "book.spectrum.guidebook.mod_integration.alloy_forgery.calcite_alloy_forge.text": "현무암 변형보다 두 배 빠르지만, 훨씬 더 자주 연료를 채워줘야 한다.", + "book.spectrum.guidebook.mod_integration.alloy_forgery.blackslag_alloy_forge.text": "적당한 속도와 연료 용량을 지닌 고급 용광로다.", + "book.spectrum.guidebook.mod_integration.alloy_forgery.shale_clay_alloy_forge.text": "믿을 수 없는 용량과 꽤 합리적인 제련 속도를 갖춘 최고급 용광로다.", + "book.spectrum.guidebook.mod_integration.biomemakeover.name": "Biome Makeover", + "book.spectrum.guidebook.mod_integration.biomemakeover.page0.text": "최근에 눈부시게 아름다운 새로운 지형 곳곳에 흩어진 낯선 재료들을 발견했다. 분명 뭔가 흥미로운 방식으로 써먹을 수 있을 것이다.", + "book.spectrum.guidebook.mod_integration.biomemakeover.page1.title": "해독 물약", + "book.spectrum.guidebook.mod_integration.biomemakeover.page2.title": "야행성 물약", + "book.spectrum.guidebook.mod_integration.biomemakeover.page3.text": "[수정 채집장](entry://ink/crystal_apothecary)은 [#](bb00bb)일루나이트 조각[#]()도 거뜬히 수확할 수 있다.", + "book.spectrum.guidebook.mod_integration.biomemakeover.page3.title": "일루나이트 자동 수확", + "book.spectrum.guidebook.mod_integration.botania.black_lotus_reagent.text": "- +1 긍정적 효과\n- 50%% 확률로 부정적 효과 부여\n- 물약을 식별 불가능하게 만듦.\\\n\\\n*도박 한 번 해볼까?*", + "book.spectrum.guidebook.mod_integration.botania.blacker_lotus_reagent.text": "- +2 긍정적 효과\n- +1 부정적 효과\n- 물약을 식별 불가능하게 만듦.\\\n\\\n*도박 한 번 해볼까?*", + "book.spectrum.guidebook.mod_integration.botania.blackest_lotus.text": "인류에 반하는 마나.", + "book.spectrum.guidebook.mod_integration.botania.blackest_lotus_reagent.text": "- +3 긍정적 효과\n- +1 부정적 효과\n- 물약을 식별 불가능하게 만듦.\\\n\\\n*도박 한 번 해볼까?*", + "book.spectrum.guidebook.mod_integration.botania.least_black_lotus.text": "이건... 음.... 흐음, 그래.", + "book.spectrum.guidebook.mod_integration.botania.least_black_lotus_reagent.text": "- +1 긍정적 효과\n- +3 부정적 효과\n- 물약을 식별 불가능하게 만듦.\\\n\\\n*도박 한 번 해볼까?*", + "book.spectrum.guidebook.mod_integration.botania.life_essence_reagent.text": "- +2.5 효력\n- -3 생산량\\\n\\\n생산량을 늘려줄 다른 반응물들을 첨가해야만 한다. 안 그러면 하나도 남지 않을 테니까...", + "book.spectrum.guidebook.mod_integration.botania.mana_powder_reagent.text": "- +25%% 지속 시간\n- 15%% 확률로 마지막 효과 추가", + "book.spectrum.guidebook.mod_integration.botania.pixie_dust_reagent.text": "- 잔류형 물약 및 물약이 묻은 화살 생성\n- -25%% 효력", + "book.spectrum.guidebook.mod_integration.botania.name": "Botania", + "book.spectrum.guidebook.mod_integration.botania.intro.text": "숲과 평원 곳곳에 다채로운 꽃들이 작게 무리 지어 피어있는 걸 잔뜩 발견했다! 저건 또 뭘까? 이건 분명 살펴볼 가치가 있다. 이것저것 만져보고 망가진 내 원예 솜씨를 단련해 보자.", + "book.spectrum.guidebook.mod_integration.botania.anvil_crushing.text": "이 아름다운 꽃들을 모루로 짓이기는 게 조금 야만적으로 보일진 몰라도, 확실히 *효과*는 있었다. 납작해진 꽃송이에서 꽃잎을 뜯어내는 건 전혀 문제 될 게 없지.", + "book.spectrum.guidebook.mod_integration.botania.petal_picking.text": "색채 이론과 식물학을 두루 섭렵하고 나니, 확실히 몇 가지 공통점이 보인다. 이 다채로운 꽃들은 여러모로 [색깔 나무](entry://general/colored_trees)와 닮은 구석이 있다.\\\n\\\n이 꽃잎들이 아주 훌륭한 [잉크](entry://ink/ink) 공급원이 되어준다는 사실도 전혀 놀랍지 않다.", + "book.spectrum.guidebook.mod_integration.botania.petal_picking.title": "꽃잎에서 얻은 잉크", + "book.spectrum.guidebook.mod_integration.botania.glimmering.text": "마법의 꽃에 [미광석](entry://general/shimmerstone)을 조금 덧입히면 은은하게 반짝이게 만들 수 있다.", + "book.spectrum.guidebook.mod_integration.botania.glimmering.title": "빛나는 꽃", + "book.spectrum.guidebook.mod_integration.botania.mushrooms.text": "버섯에 [안료](entry://general/pigment)를 바르면 해당 색상으로 예쁘게 물들일 수 있다.", + "book.spectrum.guidebook.mod_integration.botania.mushrooms.title": "색깔 버섯", + "book.spectrum.guidebook.mod_integration.botania.floral_fertilizer.text": "[#](bb00bb)꽃의 비료[#]()를 만들 때 [#](bb00bb)염료[#]() 대신 [안료](entry://general/pigment)를 쓰면 결과물이 훨씬 더 많아진다.", + "book.spectrum.guidebook.mod_integration.botania.black_hole_talisman.text": "건축가의 지팡이와 교환의 지팡이는 내 부적에서 직접 블록을 끌어다 쓸 수 있다.", + "book.spectrum.guidebook.mod_integration.botania.black_hole_talisman.title": "건축 블록 공급", + "book.spectrum.guidebook.mod_integration.botania.blacker_lotus.text": "[#](bb00bb)검은 연꽃[#]()이 훌륭한 마나 공급원이라는 건 두말할 필요도 없다. 하지만 여기에 [#](449900)비취 꽃잎[#]()을 조금 첨가해주면 훨씬 더 완벽해진다.", + "book.spectrum.guidebook.mod_integration.byg.name": "Oh The Biomes You'll Go", + "book.spectrum.guidebook.mod_integration.chalk.name": "Chalk", + "book.spectrum.guidebook.mod_integration.chalk.page0.text": "끝없이 펼쳐진 지하에서 수십 번씩 길을 잃다 보니, 되돌아갈 길을 표시할 수 있게 항상 약간의 [#](bb00bb)분필[#]()을 들고 다니게 되었다. 불행히도 이 조그마한 방해석 조각들은 툭하면 부러져버려 오래 쓰질 못했다.", + "book.spectrum.guidebook.mod_integration.chalk.page1.text": "염료 대신 [안료](entry://general/pigment)를 사용하자, 이 [#](bb00bb)분필[#]()은 부러지지 않고 영원히 표시를 남길 수 있게 되었다.", + "book.spectrum.guidebook.mod_integration.chalk.page1.title": "부서지지 않는 분필", + "book.spectrum.guidebook.mod_integration.chalk.page2.text": "당연히 [#](bb00bb)발광 분필[#]()도 부서지지 않게 만들 수 있었다.", + "book.spectrum.guidebook.mod_integration.chalk.page2.title": "부서지지 않는 발광 분필", + "book.spectrum.guidebook.mod_integration.chalk.page3.text": "오 그래, *색칠된* 분필들! 내가 널 잊었을 리가 없지.", + "book.spectrum.guidebook.mod_integration.chalk.page3.title": "분필 컬러풀 애드온", + "book.spectrum.guidebook.mod_integration.conjuring.name": "Conjuring", + "book.spectrum.guidebook.mod_integration.conjuring.page0.text": "*영혼, 정령, 우리*\\\n이게 지독하고 교활한 오컬트의 산물이 아니면 대체 뭐란 말인가.", + "book.spectrum.guidebook.mod_integration.conjuring.page1.text": "증류된 영혼을...\\\n음... 증류하면?\\\n*더 증류하면?*\\\n효과가 엄청나게 오래 지속되는 [#](449900)저항[#]() 물약을 얻을 수 있다.", + "book.spectrum.guidebook.mod_integration.conjuring.page1.title": "저항 물약", + "book.spectrum.guidebook.mod_integration.conjuring.page2.text": "내가 도대체 어떻게 이 레시피를 떠올린 건지 이젠 나조차도 모르겠다.\\\n갖가지 재료들을 섞어대다가 [#](bb00bb)맹독 가루[#]()를 좀 과하게 들이마셨던 모양이다. 하지만 의심할 여지 없이 결과물은 아주 흥미롭다.", + "book.spectrum.guidebook.mod_integration.conjuring.page3.text": "생성기 전문가이자 안료를 다루는 공예가로서 배운 모든 지식을 총동원하여, 마침내 나만의 [#](bb00bb)몬스터 생성기[#]()를 만들어내는 데 성공했다!\\\n[영혼 주입기](entry://creating_life/spirit_instiller)를 이용해 소환할 생명체를 할당해 주기만 하면 된다.", + "book.spectrum.guidebook.mod_integration.create.name": "Create", + "book.spectrum.guidebook.mod_integration.create.page0.text": "사방에서 덜컹거리고, 쉭쉭거리고, 증기 소리와 함께 연기가 자욱하다. 기계 부품들이 자아내는 앙상블이다.\\\n\\\n분명 이 기계들 중 몇몇은 아주 요긴하게 쓰일 것이다.", + "book.spectrum.guidebook.mod_integration.create.page1.text": "[#](bb00bb)보석[#]()을 갈아버리면, [#](bb00bb)보석 가루[#]()를 뱉어낸다.", + "book.spectrum.guidebook.mod_integration.create.page2.text": "[#](bb00bb)색깔 잎사귀[#]()를 분쇄기에 갈아버리면, [안료](entry://general/pigment)를 얻을 수 있고 [#](bb00bb)색깔 묘목[#]()이 나올 확률도 훨씬 높아진다.", + "book.spectrum.guidebook.mod_integration.create.page2.title": "잎사귀 제분하기", + "book.spectrum.guidebook.mod_integration.create.page3.text": "[#](449900)색깔 원목[#]()을 분쇄기에 넣으면 [안료](entry://general/pigment)를 내어준다.", + "book.spectrum.guidebook.mod_integration.create.page4.text": "[맹독 갈대](entry://general/quitoxic_reeds)를 맷돌에 갈아 가루로 만들 수 있다.", + "book.spectrum.guidebook.mod_integration.create.page4.title": "맹독 갈대 제분하기", + "book.spectrum.guidebook.mod_integration.create.page5.text": "[아마란스](entry://cuisine/amaranth)를 제분하여 곡물로 만들 수 있다.", + "book.spectrum.guidebook.mod_integration.create.page5.title": "아마란스 제분하기", + "book.spectrum.guidebook.mod_integration.create.page6.text": "[동상의 결정](entry://general/crystallisation)을 제분하면 꽤 짭짤한 양의 [#](bb00bb)동상의 정수[#]()를 쏟아낸다.", + "book.spectrum.guidebook.mod_integration.create.page6.title": "동상의 결정 제분하기", + "book.spectrum.guidebook.mod_integration.create.page7.text": "[타오르는 결정](entry://general/crystallisation)을 제분하면 꽤 짭짤한 양의 [#](bb00bb)백열의 정수[#]()를 쏟아낸다.", + "book.spectrum.guidebook.mod_integration.create.page7.title": "타오르는 수정 제분하기", + "book.spectrum.guidebook.mod_integration.create.pure_zinc.title": "순수한 아연", + "book.spectrum.guidebook.mod_integration.create.pure_zinc.text": "", + "book.spectrum.guidebook.mod_integration.create.pure_zinc_growing.title": "순수한 아연 성장시키기", + "book.spectrum.guidebook.mod_integration.create.pure_zinc_growing.text": "", + "book.spectrum.guidebook.mod_integration.create.pure_brass_fusion.title": "황동 융합", + "book.spectrum.guidebook.mod_integration.create.pure_brass_fusion.text": "", + "book.spectrum.guidebook.mod_integration.dimdoors.name": "Dimensional Doors", + "book.spectrum.guidebook.mod_integration.dimdoors.page0.text": "나는 그저 이리저리 방황하며 *또다시* 정동이나 찾고 있었고, 솔직히 그리 즐거운 시간은 아니었다. 그러다 우연히... 별의 균열... 틈새... 뭐라 부르든 간에, 그걸 발견했다.\\\n\\\n이런 속담도 있지 않은가: 한쪽 문이 닫히면...", + "book.spectrum.guidebook.mod_integration.dimdoors.altered_fabric_resonance.title": "가장 섬세한 손길", + "book.spectrum.guidebook.mod_integration.dimdoors.altered_fabric_resonance.text": "쉽게 부서지지만, 아무리 조심스럽게 캐내려고 노력해도, 흔적조차 남지 않는다고? 이거 어디서 많이 본 패턴인데?\\\n 역시나 예상대로, 공명 마법이 완벽한 해결책이었다.", + "book.spectrum.guidebook.mod_integration.ecologics.name": "Ecologics", + "book.spectrum.guidebook.mod_integration.ecologics.page0.text": "새로운 생물군계는 언제나 새로운 기회를 가져다준다. 하지만 구체적으로 어떤 기회일까?\\\n*이제 알아낼 시간이다!*", + "book.spectrum.guidebook.mod_integration.ecologics.page1.title": "미끄러짐 물약", + "book.spectrum.guidebook.mod_integration.extraalchemy.name": "Extra Alchemy", + "book.spectrum.guidebook.mod_integration.extraalchemy.page0.text": "무지한 자들의 눈에는 연금술사가 마법사와 다를 바 없어 보일 것이다. 이제 그 둘의 차이점을, 그리고 그 기저에 깔린 공통점까지도 파헤쳐 볼 시간이다.", + "book.spectrum.guidebook.mod_integration.extraalchemy.page1.title": "연소 물약", + "book.spectrum.guidebook.mod_integration.extraalchemy.page10.title": "평화주의 물약", + "book.spectrum.guidebook.mod_integration.extraalchemy.page11.title": "광합성 물약", + "book.spectrum.guidebook.mod_integration.extraalchemy.page12.title": "파이퍼 물약", + "book.spectrum.guidebook.mod_integration.extraalchemy.page13.title": "귀환 물약", + "book.spectrum.guidebook.mod_integration.extraalchemy.page14.title": "복귀 물약", + "book.spectrum.guidebook.mod_integration.extraalchemy.page15.title": "돛 물약", + "book.spectrum.guidebook.mod_integration.extraalchemy.page16.title": "축소 물약", + "book.spectrum.guidebook.mod_integration.extraalchemy.page2.title": "집중 물약", + "book.spectrum.guidebook.mod_integration.extraalchemy.page3.title": "붕괴 물약", + "book.spectrum.guidebook.mod_integration.extraalchemy.page4.title": "탐지 물약", + "book.spectrum.guidebook.mod_integration.extraalchemy.page5.title": "도화선 물약", + "book.spectrum.guidebook.mod_integration.extraalchemy.page6.title": "중력 물약", + "book.spectrum.guidebook.mod_integration.extraalchemy.page7.title": "성장 물약", + "book.spectrum.guidebook.mod_integration.extraalchemy.page8.title": "학습 물약", + "book.spectrum.guidebook.mod_integration.extraalchemy.page9.title": "자력 물약", + "book.spectrum.guidebook.mod_integration.farmersdelight.name": "Farmer's Delight", + "book.spectrum.guidebook.mod_integration.farmersdelight.page0.text": "고된 일을 마치고 나면, 식물들이 자라나는 모습을 지켜보는 것만큼 마음이 편안해지는 일도 없다. 도마도 준비됐고, 식초도 완벽하다.\\\n\\\n다음 추수의 달이 뜰 때 보자고, 엄청난 만찬을 벌일 테니까.", + "book.spectrum.guidebook.mod_integration.farmersdelight.page1.title": "절단 도구", + "book.spectrum.guidebook.mod_integration.farmersdelight.page1.text": "멀티툴이라는 이름값이 아깝지 않군, 허. 비록 모양새는 조금 괴상하지만 식칼로서의 역할도 완벽하게 수행해 내어, 도축과 수확을 아주 쉽게 해치울 수 있다.\\\n거기에 더해, 도마 위에서는 그야말로 *기적*을 행한다. 사실상... 내가 그 위에 뭘 올려놓든 베고, 썰고, 다져버릴 수 있는 만능 도구가 되어준다.", + "book.spectrum.guidebook.mod_integration.farmersdelight.amaranth_cutting.title": "아마란스 썰기", + "book.spectrum.guidebook.mod_integration.farmersdelight.amaranth_cutting.text": "저 장엄한 색채를 뽐내는 훌륭한 곡물, 아마란스. 어째서 나는 저 아름다운 걸 무식하게 박살 내버리려 했던 걸까? 쌀을 다룰 때처럼, 부드러운 접근 방식이 훨씬 나을 것이다.\\\n칼로 쓱쓱 썰어주면 덤불이 쉽게 잘려나가며, 쓸만한 볏짚도 함께 남겨준다.", + "book.spectrum.guidebook.mod_integration.farmersdelight.rice_crushing.text": "*쾅 쾅 쾅 모조리 산산조각으로 박살 내버려 부드럽게 다루는 게 대체 다 무슨 소용이야*", + "book.spectrum.guidebook.mod_integration.farmersdelight.gemstone_cutting.title": "보석 썰기", + "book.spectrum.guidebook.mod_integration.farmersdelight.gemstone_cutting.text": "정동 안에는 그 많은 보석들이 블록 안에 꽉꽉 뭉쳐 있는데... 이걸 일일이 부숴서 빼낼 수가 없다고? 뭐, 조금 더 창의력을 발휘해 볼 수밖에.\\\n아무 곡괭이나 들고 도마 위에서 보석 블록을 썰어대면, 그 안에 갇힌 조각들을 고스란히 빼낼 수 있다.", + "book.spectrum.guidebook.mod_integration.geode_plus.name": "Geode+", + "book.spectrum.guidebook.mod_integration.gobber.name": "Gobber", + "book.spectrum.guidebook.mod_integration.gobber.page0.text": "이 광물은 흔한 정도에 비하면 말도 안 되게 강력한 힘을 품고 있다. 그래서 내가 이렇게 우스꽝스러운 이름을 붙여준 거지. 어디 이걸로 뭘 할 수 있는지 볼까.", + "book.spectrum.guidebook.mod_integration.gobber.page1.text": "이게 자란다!", + "book.spectrum.guidebook.mod_integration.gobber.page2.text": "이것도 자란다!", + "book.spectrum.guidebook.mod_integration.gobber.page3.text": "이 말을 하면 안 믿겠지만...", + "book.spectrum.guidebook.mod_integration.gofish.name": "Go Fish", + "book.spectrum.guidebook.mod_integration.gofish.page0.text": "오늘은 뭐가 좀 낚일지 한번 볼까.", + "book.spectrum.guidebook.mod_integration.gofish.page1.text": "나의 마법 낚시대들은 Go Fish 모드의 낚시대들처럼 용암이나 엔드에 서식하는 물고기들도 낚아 올릴 수 있게 해준다.\\\n하늘이 탁 트인 곳이라면 상자도 낚아 올릴 수 있다.", + "book.spectrum.guidebook.mod_integration.gofish.page1.title": "용암 낚시", + "book.spectrum.guidebook.mod_integration.gofish.page2.text": "이 마법 부여가 평소처럼 낚은 물고기를 바로 구워주긴 하지만, 안료로 만든 이 낚시대들에 미끼를 달 방법은 아직 찾지 못했다. 하지만 나중에 다른 방법으로 이 낚시대들을 강화할 수 있을 거라 굳게 믿는다.\\\n낚시대에 바르는 지옥불 구이 마법은 용해 마법과 동시에 부여할 수 없다.", + "book.spectrum.guidebook.mod_integration.gofish.page2.title": "지옥불 구이", + "book.spectrum.guidebook.mod_integration.hexcasting.name": "Hex Casting", + "book.spectrum.guidebook.mod_integration.hexcasting.page0.text": "내 다른 보석들과 달리, [#](bb00bb)자수정[#]()은 주문을 시전하는 지팡이에 마력을 불어넣는 능력이 있는 것 같다. 이 능력 때문에 여러 번 뇌가 과부하 걸릴 뻔하긴 했지만, 그 결과물만큼은 실로 인상적이다.\\\n또 다른 게 뭐가 있을까?", + "book.spectrum.guidebook.mod_integration.hexcasting.page1.text": "헥스 시전자들은 안타깝게도 자수정을 제외한 다른 광물들은 도무지 인식하지 못하는 것 같다. 이 청록색 잎사귀들이 [#](bb00bb)토파즈[#]()의 정수를 품고 있는 게 *이리도 명백한데* 말이다...", + "book.spectrum.guidebook.mod_integration.hexcasting.page2.text": "[#](bb00bb)잎[#]()에 [#](bb00bb)자수정[#](), [#](bb00bb)황수정[#]() 또는 [#](bb00bb)토파즈[#]()를 불어넣으면, 반짝이고 다채로운 [#](bb00bb)보석 잎사귀[#]()를 얻을 수 있다. 호기심을 자극할 만큼 다르면서도, 내가 만든 [색깔 나무](entry://general/colored_trees)와 묘하게 비슷한 구석이 있다.", + "book.spectrum.guidebook.mod_integration.hexcasting.page2.title": "교화된 잎 조합", + "book.spectrum.guidebook.mod_integration.hexcasting.page3.text": "[융합의 성소](entry://general/fusion_shrine)를 사용하면 [#](bb00bb)자수정 조각[#]()을 충전시킬 수 있다.", + "book.spectrum.guidebook.mod_integration.hexcasting.page3.title": "자수정 충전", + "book.spectrum.guidebook.mod_integration.hexcasting.page4.text": "- +15~120초 지속 시간. 때로는 더 길게, 때로는 더 짧게\\\n\\\n내 예상대로, [#](bb00bb)충전된 자수정[#]()은 지속 시간을 늘리는 데 있어 평범한 [#](bb00bb)자수정[#]() 반응물보다 훨씬 강력한 성능을 발휘한다. 물론 그만큼 변동성이 커서 복불복이 심하긴 하지만 말이다.", + "book.spectrum.guidebook.mod_integration.hexcasting.page5.text": "발효된 거미 눈을 넣으면 그 효과가 **반전될** 것이다.", + "book.spectrum.guidebook.mod_integration.immersive_weathering.name": "Immersive Weathering", + "book.spectrum.guidebook.mod_integration.immersive_weathering.page0.text": "이건 정말 내 풍화를 실감 나게 만들어주는군.", + "book.spectrum.guidebook.mod_integration.immersive_weathering.enchanted_golden_moss.text": "*이끼 앞에서는 혼돈도 질서도 아무 의미 없다.*", + "book.spectrum.guidebook.mod_integration.immersive_weathering.charred_wood_resonance.title": "까맣게 탄 나무", + "book.spectrum.guidebook.mod_integration.immersive_weathering.charred_wood_resonance.text": "불타고 남은 나무의 잔해를 공명 마법이 부여된 도구로 캐내면, 내 인벤토리 안에서도 이것들이 계속 연기를 피우며 타오르는 것 같다.\\\n\\\n*... 이 정도는 괜찮아.*", + "book.spectrum.guidebook.mod_integration.immersive_weathering.sandy_stone_resonance.title": "모래투성이 돌", + "book.spectrum.guidebook.mod_integration.immersive_weathering.sandy_stone_resonance.text": "불타는 나무와 마찬가지로, 이 돌에 묻어있던 여분의 모래들까지 고스란히 챙겨올 수 있는 모양이다. 매니악하긴 해도, 꽤나 편리하다!", + "book.spectrum.guidebook.mod_integration.little_ants.name": "Little Ants", + "book.spectrum.guidebook.mod_integration.little_ants.page0.text": "이 성실한 작은 벌레 녀석들은 나무에서 잎사귀들을 끊임없이 물어 나른다. 그리고 녀석들의 노동의 결과는 고스란히 그 생산물로 나타난다. 녀석들이 주로 만들어내는 건 [#](449900)점토[#]()지만, 어쩌면 다른 게 튀어나올지도 모른다...\\\n\\\n이 멋진 모드를 만들어준 MastroCaleb에게 큰 감사를 표한다!", + "book.spectrum.guidebook.mod_integration.little_ants.page1.text": "개미들은 [#](bb00bb)비취 꽃잎[#]()을 갈아 거의 비단에 가까운 물질을 뱉어낸다.", + "book.spectrum.guidebook.mod_integration.little_ants.page2.text": "색깔 나무의 잎사귀를 잔뜩 긁어모아 배를 불린 개미집을 삽으로 퍼내면, [#](bb00bb)염료[#]()를 얻어낼 수 있다.", + "book.spectrum.guidebook.mod_integration.little_ants.page3.text": "훨씬 더 끝내주는 건, 녀석들에게 [#](449900)베지탈[#]()을 뇌물로 쥐여주면 순수한 [#](449900)안료[#]()를 뜯어낼 수 있다는 것이다.", + "book.spectrum.guidebook.mod_integration.malum.name": "Malum", + "book.spectrum.guidebook.mod_integration.malum.page0.text": "아르카나가 이토록... 음울하고 섬뜩한 학문일 줄은 상상도 못 했다.\\\n\\\n어쨌든 뛰어들어보자. 내 정신머리가 무사히 빠져나올 수 있기를 바라면서.", + "book.spectrum.guidebook.mod_integration.malum.scythe_enchants.title": "낫 마법 부여", + "book.spectrum.guidebook.mod_integration.malum.scythe_enchants.text": "다른 무기들과 마찬가지로, 내가 고안해 낸 새로운 마법 부여들을 낫에도 걸어줄 수 있다. 다만... 몇몇 마법 부여들이 서로 *호환되지 않는* 약간의 골칫거리들이 존재하긴 하지만.", + "book.spectrum.guidebook.mod_integration.malum.scythe_incompats.text": "- 아무리 마법을 불어넣었다 한들, 이 무지막지한 낫을 꽉 움켜쥔 채로 냅다 휘두르는 건 영 힘든 일이다.\n- 영령 강탈은 내 예상대로 약탈과 충돌하는 모든 마법 부여와 호환되지 않는다.\n- 비슷하게, 날카로움과 궁합이 맞지 않는 것들은 강령 마법과도 사이가 나쁠 것이다.", + "book.spectrum.guidebook.mod_integration.malum.void_salts_reagent.text": "- +200%% 지속 시간\n- -2 생산량", + "book.spectrum.guidebook.mod_integration.malum.crystal_burning.text": "영혼 그 자체를 숯덩이로 만들어버리는 불꽃... 결정화된 파편들도 예외 없이 잉걸불 속에서 에너지를 남김없이 뜯어먹히며 똑같은 취급을 받는다.", + "book.spectrum.guidebook.mod_integration.malum.silenced.text": "강력한 대 마법 효과로, 내가 잉크의 힘을 끌어다 쓰는 것마저 틀어막아 버리는 것 같다.", + "book.spectrum.guidebook.mod_integration.more_geodes.name": "More Geodes", + "book.spectrum.guidebook.mod_integration.mythicmetals.name": "Mythic Metals", + "book.spectrum.guidebook.mod_integration.mythicmetals.page0.text": "지하는 정말이지 믿을 수 없을 정도로 수많은 비밀을 품고 있다! 곡괭이를 쥐고 땅 밑으로 뛰어들 때마다, 나는 여태껏 본 적 없는 온갖 다채로운 보물 보따리를 한가득 짊어지고 올라오곤 한다.\\\n단순히 구리, 철, 금 따위가 다가 아니다. 이 끝없는 지하 세계에는 아직 발견해야 할 것들이 차고 넘친다.", + "book.spectrum.guidebook.mod_integration.mythicupgrades.name": "Geode+", + "book.spectrum.guidebook.mod_integration.neepmeat.name": "NEEPMeat", + "book.spectrum.guidebook.mod_integration.neepmeat.page0.text": "도축업자가 되려면 먼저 기계공 훈련부터 받아야 한다는 사실은 꿈에도 몰랐다.", + "book.spectrum.guidebook.mod_integration.neepmeat.leaf_crushing.text": "[](item://neepmeat:large_crusher)가 안료를 산더미처럼 뽑아내 주진 못하더라도, 묘목을 뱉어낼 확률만큼은 기가 막힌다!", + "book.spectrum.guidebook.mod_integration.neepmeat.amaranth_crushing.text": "[](item://neepmeat:grinder)나 [](item://neepmeat:large_crusher)를 사용하면 아마란스에서 훨씬 더 많은 곡물을 털어낼 수 있다.", + "book.spectrum.guidebook.mod_integration.neepmeat.grinding.text": "몇몇 아이템들은 갈려 나가는 걸 꽤나 잘 견뎌낸다.\\\n모루로 무식하게 때려 부수는 것보단 이쪽이 단연코 낫다.", + "book.spectrum.guidebook.mod_integration.neepmeat.enlightening.text": "좀벌레와 엔더마이트가 서로 친척 관계라는 걸 알고 있었나?\\\n나는 *진짜* 몰랐다.", + "book.spectrum.guidebook.mod_integration.neepmeat.kindling_vivisection.title": "더 많은 깃털 얻기.", + "book.spectrum.guidebook.mod_integration.neepmeat.kindling_vivisection.text": "...\\\n\\\n\\\n\\\n*하지만 대체 무슨 대가를 치르고?*", + "book.spectrum.guidebook.mod_integration.neepmeat.whisper_brass_instilling.text": "나는 온갖 재료에 생명을 불어넣는 일이라면 질릴 정도로 많은 경험을 쌓았다... 마침내 이 짓거리도 좀 더 효율적으로 굴려볼 수 있을 것 같다.", + "book.spectrum.guidebook.mod_integration.neepmeat.sedatives.title": "마음의 약", + "book.spectrum.guidebook.mod_integration.neepmeat.sedatives.text": "내 연구는 나를... 결코 마주하고 싶지 않은 끔찍한 공포에 노출시켰다.\\\n\\\n 이 약을 삼키고 나면 그 끔찍한 환상들이 물러가고, 아주 조금이나마 다시 나 자신으로 돌아온 듯한 기분이 든다.", + "book.spectrum.guidebook.mod_integration.paginatedadvancements.name": "Paginated Advancements", + "book.spectrum.guidebook.mod_integration.paginatedadvancements.page0.text": "나는 간지나는 발전 과제 헌터다!\\\n\\\nPaginated Advancements 모드 덕분에, 스펙트럼의 발전 과제들이 아주 새롭고 독특한 프레임을 뽐내게 되었다.", + "book.spectrum.guidebook.mod_integration.paginatedadvancements.page1.text": "발전 과제 트리의 시작과 끝을 장식하며, 내 여정에서 가장 중요한 이정표다.", + "book.spectrum.guidebook.mod_integration.paginatedadvancements.page1.title": "이정표", + "book.spectrum.guidebook.mod_integration.paginatedadvancements.page2.text": "이 약간 변형된 프레임을 두른 발전 과제들은 무언가를 새로 잠금 해제해 준다. 새로운 레시피라든가, 새로운 깨달음이라든가, 아니면 무언가 다른 쏠쏠한 보상이 딸려 온다 (저 바깥에 있는 모든 완벽주의자들을 위해!).\\\n\\\n추가적인 해금이 없는 발전 과제들은 그냥 기본 프레임을 사용한다.", + "book.spectrum.guidebook.mod_integration.paginatedadvancements.page2.title": "추가 잠금 해제", + "book.spectrum.guidebook.mod_integration.paginatedadvancements.page3.text": "내가 새롭게 지어 올려야 할 구조물이 생긴다는 걸 암시한다.", + "book.spectrum.guidebook.mod_integration.paginatedadvancements.page3.title": "구조물 건축", + "book.spectrum.guidebook.mod_integration.paginatedadvancements.page4.text": "디테일을 캐치하는 비범한 눈썰미를 요구하는, 지독히도 섬세한 일들을 위한 프레임이다.", + "book.spectrum.guidebook.mod_integration.paginatedadvancements.page4.title": "독특한 발전 과제", + "book.spectrum.guidebook.mod_integration.paginatedadvancements.page5.text": "상상을 초월할 정도로 멍청한 짓을 저질렀을 때 받는 업적이다.\\\n이건 그저 밈을 위한 완전히 선택적인 발전 과제들이며, 아무것도 해금해 주지 않는다.", + "book.spectrum.guidebook.mod_integration.paginatedadvancements.page5.title": "개소리 같은 발전 과제", + "book.spectrum.guidebook.mod_integration.sandwichable.name": "Sandwichable", + "book.spectrum.guidebook.mod_integration.sandwichable.page0.text": "오늘 아침은 뭘 먹을까?\\\n\\\n토스트에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 스테이크에 비트 하나를 살포시 얹어주는 건 어떨까. 살찌는 건 딱 질색이니까.", + "book.spectrum.guidebook.mod_integration.sandwichable.salty_resonance.title": "가장 섬세한 손길", + "book.spectrum.guidebook.mod_integration.sandwichable.salty_resonance.text": "쉽게 부서지지만, 아무리 조심스럽게 캐내려고 노력해도, 흔적조차 남지 않는다고? 이거 어디서 많이 본 패턴인데?\\\n 역시나 예상대로, 공명 마법이 완벽한 해결책이었다.", + "book.spectrum.guidebook.mod_integration.spelunkery.name": "Spelunkery", + "book.spectrum.guidebook.mod_integration.spelunkery.page0.text": "이 캄캄한 동굴 속에서 내 동굴 탐험가의 두 눈에 반짝거리고 빛나는 저게 대체 뭐람?\\\n\\\n새로운 반짝이는 것들이잖아!\\\n\\\n난 이런 게 너무 좋아!", + "book.spectrum.guidebook.mod_integration.spelunkery.black_materia_sluice.title": "실수 씻어내기", + "book.spectrum.guidebook.mod_integration.spelunkery.black_materia_sluice.text": "끔찍한 실패가 내게 이... *구역질 나는 물질*을 안겨주었다. 온통 어긋나고 썩어빠진 악취가 진동하지만... 혹시라도 이 오물 속에서 뭔가 쓸만한 걸 걸러낼 수 있는 방법이 있지 않을까?\\\n\\\n거미. 거미, 그리고 또 거미. 난 이놈들이 정말 싫다. 싫어, 싫어...\\\n분명 뭔가 다른 게 있을 거다. 만약 무언가를 이걸 *통과시켜서* 걸러낸다면 어떨까? 꽤나 비슷한 성질을 가진 무언가를...", + "book.spectrum.guidebook.mod_integration.starry_skies.name": "Starry Skies", + "book.spectrum.guidebook.mod_integration.starry_skies.page0.text": "오버월드의 푸른 하늘 그 까마득히 높은 곳 위에는 완전히 다른 차원이 하나 존재하는데, 마치 작은 행성들처럼 둥둥 떠다니는 수많은 구체들로 가득 찬 세상이다.\\\n\\\n[](item://minecraft:packed_ice)로 차원문을 만들어 그곳에 닿을 수 있을 것이다. (모드팩 제작자가 레시피를 마개조해 놓지 않았다면)", + "book.spectrum.guidebook.mod_integration.starry_skies.page1.text": "그곳에서는 오버월드에서 죽어라 파고들어도 구하기 힘들었던 수많은 자원들을 만날 수 있다. 정동 구체들, 스펙트럼의 고유 광석들, 그리고 내 마음이 갈망하는 그 어떤 것이든... 내가 발을 헛디뎌 행성 밖으로 떨어져 확정적인 죽음을 맞이하지만 않는다면 말이다.", + "book.spectrum.guidebook.mod_integration.supplementaries.name": "Supplementaries", + "book.spectrum.guidebook.mod_integration.supplementaries.page0.text": "이 다채로운 세계를 한층 더 풍성하게 만들어 줄 훌륭한 보충제다.", + "book.spectrum.guidebook.mod_integration.supplementaries.page1.text": "*하루 종일 떠돌이 상인이나 기다리고 앉아 있는 것보단 낫지.*", + "book.spectrum.guidebook.mod_integration.supplementaries.page2.text": "*위대하신 비누의 신들을 달래기 위한 숭고한 제물*", + "book.spectrum.guidebook.mod_integration.supplementaries.page3.title": "잿가루 조각", + "book.spectrum.guidebook.mod_integration.supplementaries.page3.text": "*그냥 재다.*\\\n\\\n\\\n\\\n재를 가져다 쓰는 그 어떤 짓거리에든 자유롭게 써먹을 수 있다.", + "book.spectrum.guidebook.mod_integration.tconstruct.name": "Tinkers / Hephaestus", + "book.spectrum.guidebook.mod_integration.tconstruct.page0.text": "부품을 끼워 맞추는 모듈형 도구들은 항상 내 호기심을 지독하게 자극하는 분야였다. 내 험난한 인생을 조금이라도 편하게 만들어 줄 무언가를 발명해 낼 수 있을지 두고 볼 일이다.", + "book.spectrum.guidebook.mod_integration.tech_reborn.name": "Tech Reborn", + "book.spectrum.guidebook.mod_integration.tech_reborn.page0.text": "*전기*라는 엄청난 신문물이 등장했다. 당장 파헤쳐 봐야겠다.\\\n\\\n공장은 더 커져야 한다.", + "book.spectrum.guidebook.mod_integration.tech_reborn.refined_iron_ingot.text": "잿불화로는 정제된 철을 구워내는 데 아주 탁월한 재능을 보였다! 열기를 아주 살짝만 더해줬을 뿐인데 이런 기적이 일어날 줄이야.", + "book.spectrum.guidebook.mod_integration.tech_reborn.refined_iron_ingot.title": "효율적인 정제된 철", + "book.spectrum.guidebook.mod_integration.tech_reborn.advanced_alloy_ingot.text": "고급 합금을 뽑아낼 때도 이 방법이 기가 막히게 잘 먹혀든다.", + "book.spectrum.guidebook.mod_integration.tech_reborn.advanced_alloy_ingot.title": "효율적인 고급 합금", + "book.spectrum.guidebook.mod_integration.tech_reborn.page2.text": "분쇄기와 산업용 분쇄기를 거치면 내 마법 광석들의 대부분을 훌륭하게 가공해 낼 수 있다.", + "book.spectrum.guidebook.mod_integration.tech_reborn.page2.title": "광석 가공", + "book.spectrum.guidebook.mod_integration.tech_reborn.page3.text": "당연히 보석 조각들도 갈아버릴 수 있지!\\\n\\\n*난 게임에서 노가다에 시간을 갈아버리는 게 제일 싫어*", + "book.spectrum.guidebook.mod_integration.tech_reborn.page3.title": "보석 분쇄", + "book.spectrum.guidebook.mod_integration.the_bumblezone.name": "The Bumblezone", + "book.spectrum.guidebook.mod_integration.the_bumblezone.page0.text": "벌통 한가운데다 대체 왜 엔더 진주를 냅다 던져버렸는지조차 기억나지 않을 만큼 꿀을 너무 많이 퍼먹었다.\\\n\\\n덕분에 이 정신 나간 세계에 떨어져 버렸다. 맹세코 장난이 아니다.", + "book.spectrum.guidebook.mod_integration.the_bumblezone.essence_ink.title": "색채와 대혼란", + "book.spectrum.guidebook.mod_integration.the_bumblezone.essence_ink.text": "이 정수들... 그야말로 에너지가 터질 듯이 **가득 차 있다**. 유용한 건 맞지만, 만약 내가 이것들을 기꺼이 희생할 각오가 되어 있다면 엄청난 잉크의 **보물창고**가 되어줄 것이다.\\\n하지만 아무리 용을 써봐도, 꿀벌들의 그 지독하게 혼돈스러운 정수는 잉크로 변환될 만큼 얌전하게 안정화되려 하질 않는다...", + "book.spectrum.guidebook.mod_integration.vein_mining.name": "Vein Mining", + "book.spectrum.guidebook.mod_integration.vein_mining.page0.text": "*아직도 광석을 일일이 하나씩 캐고 있나? 중력이 당신을 구원해 줄 것이다.*\\\n\\\n광맥 채굴은 연결된 모든 블록을 통째로 뜯어내 버린다.\\\n\\\n최대 레벨: 1\\\n모든 도구에 적용 가능.", + "book.spectrum.guidebook.mod_integration.victus.name": "Victus", + "book.spectrum.guidebook.mod_integration.victus.page0.text": "심장을 얻었다... 그리고 또 얻고, 계속 얻어냈다. 그랬더니 아주 심장이 한 보따리로 생겨버렸다. 신나지 않은가.", + "book.spectrum.guidebook.mod_integration.victus.page1.title": "회생", + "book.spectrum.guidebook.mod_integration.victus.page2.title": "심장 출혈", + "book.spectrum.guidebook.mod_integration.waystones.name": "Waystones", + "book.spectrum.guidebook.mod_integration.waystones.page0.text": "나누는 것이 곧 배려라는데... 그럼 대체 왜 이건 짝도 없이 외톨이로 만들어지는 걸까?\\\n\\\n내가 여태껏 쌓아온 지식을 동원하면, 이 중심부의 워프 코어를 광채의 엔더로 갈아치우는 것쯤이야 식은 죽 먹기일 것이다. 이제 골머리 앓을 필요 없이 이 기둥들을 산더미처럼 만들어 낼 수 있다!", + "book.spectrum.guidebook.mod_integration.waystones.sharestones_recipe.text": "*거의* 모든 안료가 먹힌다", + "book.spectrum.guidebook.arcane_charges.name": "마법 폭약", + "book.spectrum.guidebook.arcane_charges.about.text": "이 장치들을 설계하다가 자폭해버린 횟수가 솔직히 인정하고 싶지 않을 정도로 많다. 실패는 성공의 어머니(라고 끊임없이 위안 삼았으리)라, 나는 한 가지 사실을 알아냈다. 폭발물에 마법 부여가 개입하게 만들면 훨씬 더 예술적인 폭발이 된다.\\\n\\\n\\\n*도화선으로 칭칭 감아놓은 마법의 감정 기복*", + "book.spectrum.guidebook.arcane_charges.enchanting.title": "마법 부여", + "book.spectrum.guidebook.arcane_charges.enchanting.text": "이것들을 [](item://minecraft:enchanting_table)에서 강화하면 성능이 무시무시하게 향상된다.\\\n\\\n그리고 맙소사, 이 쬐끄마난 것들은 절대 편식하지 않는다. 내가 어떤 마법을 쑤셔 넣든 군말 없이 전부 흡수한 다음, 상상할 수 있는 가장 극적인 방식으로 그 힘을 뿜어낸다. 솔직히 말해, 그 엄청난 헌신에는 존경심마저 들 정도다.", + "book.spectrum.guidebook.arcane_charges.parametric_mining_device.text": "던지거나, 벽에 설치한 뒤 기폭 시킬 수 있다.\\\n\\\n기본적으로 생명체에게는 아무런 피해를 주지 않는다.", + "book.spectrum.guidebook.arcane_charges.threat_conflux.text": "설치하면 몇 초 뒤 활성화되며, 그 이후부터 생명체가 살짝 스치기만 해도 폭발한다. 오직 [](item://spectrum:midnight_chip)을 사용해서만 해체할 수 있다.\\\n\\\n기본적으로 생명체에게는 아무런 피해를 준다.", + "book.spectrum.guidebook.arcane_charges.enchanting2.text": "대부분의 마법 부여는 내 예상과 정확히 일치하게 작동한다는 사실을 알아냈다.\n- **행운**은 채굴 전리품을 배로 늘려준다.\n- **날카로움**과 그 비슷한 마법들은 생명체에게 입히는 피해를 증가시킨다.\n- **약탈**은, 뭐 당연히, *전투 전리품*에 영향을 미친다.\n- ...", + "book.spectrum.guidebook.arcane_charges.enchanting3.text": "하지만 그중에는 꽤나 흥미로운 것들도 몇 가지 존재한다.\n- **힘**은 폭발이 블록을 파괴하도록 만든다. 레벨이 오를수록 폭발 반경이 무시무시하게 커진다.\n- **날카로움 또는 다른 피해 관련 마법 부여들**은 폭발이 생명체에게(나를 포함해서) 피해를 입히도록 만든다.\n- **발화**는 사방에 불을 지른다.\n- **내구성**은 폭발 후에도 폭약이 소모되지 않고 살아남을 확률을 부여한다.", + "book.spectrum.guidebook.molten_rod.page0.text": "따스함을 상징하는 주황색은 가장 흥미로운 일들을 해내는 데 쓰일 수 있다.\\\n\\\n평범한 [](item://minecraft:fishing_rod)와는 달리, 이건 훨씬 더 튼튼하며 일반 낚시대로는 어림도 없는 곳에서조차 낚시를 할 수 있게 해준다.", + "book.spectrum.guidebook.molten_rod.page1.text": "*화상 주의!*\\\n불타는 낚싯바늘은 그저 내 손가락만 태워 먹는 데 그치지 않을 테니까...", + "book.spectrum.guidebook.monstrosity.name": "아래에 도사린 공포?", + "book.spectrum.guidebook.monstrosity.page0.text": "분명 저 어둠 속에서 *무언가가* 나를 노리고 숨어있다. 확실하다. 내가 미쳐가고 있는 걸까? 그저 내 신경이 곤두서서 만들어낸 환상일까?", + "book.spectrum.guidebook.moonstone_cores.name": "월장석 코어", + "book.spectrum.guidebook.moonstone_cores.page0.text": "이 무지막지한 출력의 물건은 엄청난 양의 [잉크](entry://ink/ink)를 순식간에 끌어다 쓸 수 있다. 다른 장비나 기계의 능력을 한계 이상으로 끌어올리는 데 사용된다.\\\n\\\n*아주 먼 고대의 유물이다*.", + "book.spectrum.guidebook.aether_vestiges.page0.text": "이걸 쳐다볼 때마다 말문이 턱 막힌다. 이 감각에 대해 더 자세히 적어두고 싶지만...\\\n\\\n이걸 응시할 때마다 나는 시공간의 감각을 잃어버린다. 마치 내 뇌가 덫에 걸려 확정된 파멸로부터 도망치려 발버둥 치는 쥐새끼가 된 것처럼 끔찍하게 머리를 울려댄다. 가슴 깊은 곳에서부터 목구멍까지 밀려오는 압도적인 공포감이, 눈물이 터져 나올 때까지 나를 조여오고 숨을 막히게 한다.", + "book.spectrum.guidebook.aether_vestiges.page1.title": "잔재", + "book.spectrum.guidebook.aether_vestiges.page1.text": "*이것들은 그저 시간과 상식을 아득히 초월한 더 위대한 무언가에서 떨어져 나온, 아주 희미한 찌꺼기에 불과하다.\\\n\\\n필멸자의 인지를 한참 벗어난 존재지만, 그럼에도 나는 이것이 품었을 그 찬란한 본질을 꿈꾸지 않을 수 없다.*", + "book.spectrum.guidebook.moonstone_geodes.name": "월장석 정동", + "book.spectrum.guidebook.moonstone_geodes.page0.text": "*순수*", + "book.spectrum.guidebook.moonstone_geodes.page1.text": "저 아래에서부터 눈이 멀 듯한 새하얀 빛이 나를 향해 쏟아졌다. 나는 그 순간 내가 도달한 곳이 어딘지 단번에 깨달았다. 운명이 나를 이곳으로 이끈 걸까? 이게 그저 단순한 우연일 리 없지 않은가?\\\n\\\n[월장석](entry://general/moonstone_shards), 내 [거대한 퍼즐](entry://general/color_mixing_white)의 마지막 조각이다.", + "book.spectrum.guidebook.moonstone_shards.name": "월장석 조각", + "book.spectrum.guidebook.moonstone_shards.page0.text": "불과 얼마 전까지만 해도 참 순진했었지, 안 그런가? 세상 모든 이치를 통달했다고 생각했지만, 그 모든 것은 언제나 진실의 절반에 불과했다.\\\n\\\n이제 나는 깨달았다. 내 손안에서 은은하고 따스한 빛으로 일렁이는 이 하얗고 순수한 보석은, 그동안 내가 이루어낸 성장의 빛나는 기념비다.", + "book.spectrum.guidebook.moonstone_shards.page1.text": "나는 단 한 번도 전지전능함의 발끝에조차 닿아본 적이 없으며, 앞으로도 영원히 그럴 것이다. 세상의 모든 마법을 그러쥔다 해도 말이다. 그 누구도 전지전능해질 수는 없다. 하지만 약간의 겸손과 인내, 그리고 보살핌이 있다면, 적어도 그 경지에 한 발짝 더 다가설 수는 있다.\\\n\\\n**[#](b9bebe)순수.**", + "book.spectrum.guidebook.moving_budding_blocks": "싹 틔우는 블록 옮기기", + "book.spectrum.guidebook.sludge.page0.text": "이건... 뭐랄까. 나는 뭔가 끝내주게 멋진 걸 만들고 싶었는데, 장대하게 실패한 끝에 내 손에 남은 건 이 끈적이는 오물 덩어리뿐이다. 게다가 애초에 내가 뭘 만들려고 했었는지 그 목적조차 까먹어버렸다, 젠장.\\\n이 자체로는 딱히 예쁘지도, 쓸모가 있지도 않지만, 그나마 *쓸모를 찾는다면* 다른 액체와 충돌할 때 나타난다. [#](bb00bb)물[#]()과 닿으면 [](item://minecraft:dirt)이, [#](bb00bb)용암[#]()과 닿으면 [](item://minecraft:mud)이 만들어진다.", + "book.spectrum.guidebook.sludge.page1.text": "*진흙 목욕이 건강에 좋을 것 같다고 생각하겠지만, 절대 추천하지 않는다. 날 믿어라, 내가 직접 해봤으니까.*", + "book.spectrum.guidebook.sludge.page2.text": "이 진흙과 접촉한 일부 아이템들은 무두질될 것이다.\\\n예를 들어, [](item://minecraft:rotten_flesh)은 [가죽](item://minecraft:rabbit_hide)으로 변형된다.", + "book.spectrum.guidebook.sludge.page3.text": "반대로 어떤 아이템들은 경화되기도 한다.\\\n[](item://minecraft:wheat)은 아주 약간의 애정 어린 손길만 거치면 [](item://minecraft:string)로 둔갑한다.", + "book.spectrum.guidebook.sludge.page4.text": "실수로 진흙 속에 [네잎클로버](entry://general/clover)를 떨어뜨려 버렸다.\\\n허둥지둥 찾아보려 했지만 헛수고였는데, 대신 뜻밖의 행운으로 [초록빛이 도는 단단한 껍데기](item://minecraft:turtle_scute) 조각을 발견했다!", + "book.spectrum.guidebook.multitool.page0.text": "나는 집을 나설 때마다 공구 창고의 절반은 족히 될 법한 도구들을 짊어진다. 수 톤에 달하는 돌덩이도 가뿐히 들고 다니는 걸 생각하면 그깟 도구 무게야 무시할 만한 수준이긴 하다. 그럼에도 불구하고, 곡괭이, 도끼, 삽, 괭이의 능력을 하나로 합친 만능 도구가 있다면 훨씬 완벽할 것이다.", + "book.spectrum.guidebook.multitool.page1.text": "각각의 도구를 따로 쓸 때만큼 효율이 압도적이지는 않지만, 3초마다 도구를 바꿔 들어야 하는 빌어먹을 번거로움에 비하면 훨씬 낫다.", + "book.spectrum.guidebook.myceylon.page0.text": "[#](bb00bb)도끼[#]()나 [멀티툴](entry://equipment/tools_and_armor/multitool)을 사용하여, [어스름버섯](entry://dimension/noxshroom_forest)에서 작지만 예상외로 아주 질긴 껍질 조각들을 벗겨낼 수 있었다. 버섯치고는 놀라울 정도로 튼튼하고... 무엇보다 맛이 끝내준다.\\\n\\\n내가 균사피라 이름 붙인 이 조각은 제빵이나 음료에 곁들였을 때 확실히 환상적인 풍미를 더해준다.", + "book.spectrum.guidebook.mysterious_locket.name": "신비로운 로켓", + "book.spectrum.guidebook.mysterious_locket.page0.text": "보존 상자 안에서 이 수수께끼의 로켓을 발견했다. 단단하게 잠겨 있어 열리질 않는다.\\\n\\\n표면에는 흠집처럼 파인 기묘한 장식이 새겨져 있으며, 은은한 순백색으로 반짝이는 것이 꼭 달빛을 닮았다.", + "book.spectrum.guidebook.mysterious_locket.page1.text": "안에 무언가 들어있는 것 같다. 뒷면에는 무언가 각인되어 있는데, 이게 만약 언어라면 내가 태어나서 단 한 번도 본 적 없는 문자다.\\\n\\\n이건 대체 어디에 쓰는 물건일까?\\\n원래 주인은 누구였을까?\\\n이게 왜 그 상자 안에 들어있었던 걸까?\\\n\\\n의문이 꼬리를 문다.", + "book.spectrum.guidebook.mysterious_locket.page2.text": "자세히 보니, 파인 흠집의 모양이 [월장석 코어](entry://dimension/moonstone_cores)와 톱니바퀴처럼 완벽하게 맞아떨어질 것 같다.", + "book.spectrum.guidebook.mysterious_locket.page2.title": "코어 끼워 넣기", + "book.spectrum.guidebook.mysterious_locket.page3.text": "로켓 안에는 작고 희미하지만 따스한 빛을 품은 수정이 들어 있었다.\\\n\\\n[기반암 아래의 심연](entry://dimension/delving_deeper_down)에 있는 동안, 내가 몸을 틀 때마다 이 수정이 미세하게 진동하는 것이 느껴진다.", + "book.spectrum.guidebook.natures_staff.page0.text": "[#](98ff37)풍요[#]()의 정수를 이끌어내어, 나는 마침내 이 천재적인 발명품을 빚어냈다.\\\n뼛가루 따위는 이제 우스운 장난감에 불과하다. 이 지팡이는 [#](bb00bb)뼛가루[#]()로는 어림도 없던 수많은 블록에서마저 생명을 틔워낸다.\\\n\\\n게다가 이걸 사용하면 주변의 온갖 동물들까지 홀린 듯이 다가온다.", + "book.spectrum.guidebook.natures_staff.page1.text": "*꽃피우길 원하는 곳을 향해 지팡이를 겨누어라*", + "book.spectrum.guidebook.natures_staff.page2.text": "촉매로 쓰인 [베지탈](entry://general/vegetal)이 소모될 확률을 줄여준다.", + "book.spectrum.guidebook.neat_ring.page0.text": "*그냥 깔끔하고 예쁘지 않은가.*", + "book.spectrum.guidebook.nectardew_burgeon.name": "넥타르이슬 봉오리", + "book.spectrum.guidebook.nectardew_burgeon.page0.text": "밤이슬이 꽃을 피우는 것 자체는 지극히 자연스러운 일이다. 하지만, 그 꽃이... *이런* 형태일 줄은 꿈에도 몰랐다. 식물 줄기의 그저 마음을 진정시키던 에너지가 끔찍할 정도로 깊은 수면 마법의 응어리로 만개해 버렸다. 마치 내가 너무 깊이 잠수해 버린 끝없는 바다의 심연을 들여다보는 것만 같다. \\\n\\\n*...오, 저건 절대 친근한 녀석이 아니야...*", + "book.spectrum.guidebook.nectardew_burgeon.page1.text": "이 봉오리는 너무나도 희귀하다는 점이 꽤나 문제다. 하지만 해결책은 있다. 이 식물들은 주변에 잠든 생명체가 있을 때 훨씬 더 열정적으로 꽃을 피워내는 경향이 있다...\\\n이건 너무 이상하지 않은가? 단순히 잠과 연관되어 있다기엔... 이런 끔찍한 기운을 뿜어내는 마법이 자연적으로 혼자 피어날 리가 없다. 이 마법의 뿌리는 너무나도 깊이, 저 수면 아래 깊숙이 감춰진 무언가와 맞닿아 있다.", + "book.spectrum.guidebook.nectardew_burgeon.page1.title": "부록 – 수면의 열매", + "book.spectrum.guidebook.neolith.page0.text": "흑요석이 문자 그대로 가루가 되었다. 이게 바로 압도적인 힘이지!\\\n\\\n그리고 그 결과물로 이 지독하게 단단한 반응물이 탄생했다.\\\n\\\n엄청나게 강력하다.\\\n위대한 성공이다.\\\n하지만 내 한계는 아직 여기에서 멈추지 않는다.", + "book.spectrum.guidebook.nephrite.name": "연옥 꽃나무", + "book.spectrum.guidebook.nephrite.page0.text": "이 지하에서 볼 수 있는 것들 중에선 꽤 큰 편인, 작은 나무다. 사실 큰 덤불... 아니면 거대한 관목에 가깝다.\\\n\\\n*에이, 디테일은 대충 넘어가자.*", + "book.spectrum.guidebook.nephrite.page1.text": "이 나무에 맺힌 열매는 유리가 아닐 게 분명한데도, 마치 진짜 유리인 양 반짝거린다. 심지어 맛도 기가 막힌다!\\\n한 입 베어 물면 짧은 시간 동안 폭발적인 [강인함](entry://brewing/effects/toughness) 효과를 내 몸에 불어넣어 준다.\\\n\\\n당연히 이걸 [발효시키거나](entry://cuisine/infused_beverages) [물약을 양조하는 데](entry://brewing/potion_workshop_brewing) 써먹을 수도 있다.", + "book.spectrum.guidebook.night_salts.page0.text": "마음 같아선 밤낮없이 연구에 매진하고 싶지만, 결국 수면은 필수 불가결하고, 내 수면 패턴은 심각하게 망쳐졌다. 새로운 발견과 탐험으로 꽉 채워진 기나긴 밤은 내 정신을 갉아먹기에 충분하다.\\\n\\\n\\\n*거기에 팬텀 녀석들까지 가세해서 내 육체까지 너덜너덜하게 만들어 주지.*", + "book.spectrum.guidebook.night_salts.page1.text": "이 작은 병들이 내 모든 불면증을 한 방에 해결해 줄 것이다. 병마개를 열고 이 소금을 코끝에 살짝 대고 숨을 들이켜기만 하면, 10초도 안 돼서 나를 기절시켜 버릴 테니까.\\\n\\\n*클로로포름 냄새 같은데?~*", + "book.spectrum.guidebook.night_salts.page1.title": "적정 합성", + "book.spectrum.guidebook.nightdew.page0.text": "결국 모든 것은 돌고 도는 법이다. 밤이슬의 진정한 모체가, 기반암 바로 밑바닥에 몸을 숨긴 채 마침내 내 앞에 그 자태를 드러냈다. 차를 우려낸 듯한 향긋한 내음을 내는, 은빛 줄기에 부채꼴 모양의 잎을 가진 덩굴...\\\n\\\n*...잠깐, 근데 꽃은 어디 있지?*", + "book.spectrum.guidebook.nightdew.page1.text": "*이 덩굴 근처에 갈 때마다 나는 도무지 주체할 수 없는 졸음에 빠져 바닥에 눕고 싶어진다.\\\n그리고 잠에 빠져들 때마다, 끝없이 황량한 바다의 기괴한 꿈을 꾼다.\\\n\\\n...맹세컨대 내가 잠들었을 때 덩굴에 꽃봉오리가 맺히는 걸 분명히 봤지만, 깨어나 보면 항상 흔적도 없이 사라져 있다.*", + "book.spectrum.guidebook.nightdew.page1.title": "꿈의 덩굴", + "book.spectrum.guidebook.nightdew_sprout.name": "밤이슬 새싹", + "book.spectrum.guidebook.nightdew_sprout.page0.text": "찻잎을 쏙 빼닮은 조그맣고 기이한 잔가지다! 이것의 추출물은 기분 좋게 달콤하며 마음을 평온하게 가라앉히는 능력을 듬뿍 품고 있다. 단 한 가지 골칫거리는, 도대체 이걸 어디에 심어야 자라날지 도통 감을 잡을 수가 없다는 것이다.\\\n\\\n*~ 향긋한 나의 작은 친구 ~*", + "book.spectrum.guidebook.nightdew_sprout.page1.text": "아아. 끈질긴 관찰 끝에, 마침내 이걸 재배하는 방법이 내 눈앞에 모습을 드러냈다. 이 덩굴은 아주 까다로워서, 오직 심연의 토착 환경에서 형성된 특정한 자연 블록 위에서만 뿌리를 내리려 든다.", + "book.spectrum.guidebook.nightdew_sprout.page1.title": "부록 – 재배", + "book.spectrum.guidebook.nightfalls_blade.page0.text": "이 자그마한 칼날은 상대에게 치명상을 입히기엔 너무 가냘프지만, 내 적의 살점을 무자비하게 파고들 수많은 날카로운 가시들을 품고 있다.\\\n\\\n[물약 작업장](entry://brewing/potion_workshop)에서 마법을 불어넣으면, 내게 충분한 [잉크](entry://ink/ink)만 있다면 이 칼날에 베인 적은 그 물약의 끔찍한 효과에 중독될 것이다.", + "book.spectrum.guidebook.nightfalls_blade.page1.text": "*잔인하기 그지없다. 하지만 끝내주게 효과적이지.*", + "book.spectrum.guidebook.no_milk_pls": "나 자신에게 남기는 메모:\\\n*[우유](item://minecraft:milk_bucket)를 섞어서 차를 마시겠다는 끔찍한 발상은 제발 머릿속에서 지워버리자.*", + "book.spectrum.guidebook.noxshroom_forest.page0.text": "나무와 버섯이 기괴하게 뒤섞인 형태가 이 생물군계를 빽빽하게 뒤덮고 있다.", + "book.spectrum.guidebook.noxshroom_forest.page1.text": "얇은 균사 곰팡이 층이 흑작암을 부드럽게 덮고 있다.", + "book.spectrum.guidebook.noxwood.name": "어스름나무", + "book.spectrum.guidebook.noxwood.page0.text": "버섯의 일종인가? 아니면 오히려 나무에 가까운가? 이들은 [어스름버섯 숲](entry://dimension/noxshroom_forest) 전역에서 질리도록 찾아볼 수 있다. 그 색깔 또한 매우 다채롭다.\\\n\\\n기둥은 나무처럼 단단하지만, 갓 부분은 거의 푹신하고 물컹거린다. 생물 발광을 내뿜는 주름살은 아주 기분 좋은 빛을 퍼뜨려, 아주 훌륭한 광원으로 손색이 없다.", + "book.spectrum.guidebook.noxwood.page1.text": "너무 훌륭해서, 한 입 베어 물 때마다 기쁨에 몸서리가 쳐질 지경이다.", + "book.spectrum.guidebook.noxwood.page2.title": "온갖 활동을 위한", + "book.spectrum.guidebook.noxwood.page3.title": "너무나도 넉넉한 공간", + "book.spectrum.guidebook.noxwood.page4.text": "껍질이 벗겨진 형태와 벗겨지지 않은 형태 모두 존재한다.", + "book.spectrum.guidebook.noxwood.page4.title": "균사", + "book.spectrum.guidebook.noxwood.page5.text": "[#](bb00bb)레드스톤[#]()으로 동력을 공급하면 밝게 빛난다.", + "book.spectrum.guidebook.noxwood.page5.title": "조명", + "book.spectrum.guidebook.noxwood.page6.text": "[#](bb00bb)통[#]()과 비슷하지만, 보관 공간이 두 배나 더 크다.", + "book.spectrum.guidebook.noxwood.page6.title": "암포라", + "book.spectrum.guidebook.noxwood.page8.title": "대들보", + "book.spectrum.guidebook.noxwood.page7.text": "바닥에 세우거나 천장에 매달 수 있다. [#](449900)웅크린 채로[#]() 설치하면 또 다른 형태의 랜턴이 놓일 것이다.", + "book.spectrum.guidebook.noxwood.page7.title": "랜턴", + "book.spectrum.guidebook.omni_accelerator.page0.text": "내가 이 장난감에 이름을 붙여줄 때, 난 한 치의 거짓 없이 진심이었다.\\\n\\\n만물-가속기에는 아이템이나 블록을 장전할 수 있으며, 그것들을 먼 거리까지 멀리 발사할 수 있다. [월장석 코어](entry://dimension/moonstone_cores)라는 압도적인 에너지원만 달아주면 모든 준비는 끝이다.\\\n블록은 날아간 자리에 설치되며, 허공을 가르는 아이템에 직격당한 불쌍한 생명체는 그 아이템의 효과를 고스란히 뒤집어쓰게 될 것이다.", + "book.spectrum.guidebook.omni_accelerator.page1.text": "뾰족한 점적석만이 훌륭한 투사체인 것은 아니다. 알맞은 탄환만 준비한다면 아주... *재미있는*... 장난을 칠 수 있다.", + "book.spectrum.guidebook.only_works_when_owner_online": "주인이 온라인 상태일 때만 작동한다.", + "book.spectrum.guidebook.onyx_shards.name": "오닉스 조각 만들기", + "book.spectrum.guidebook.onyx_shards.page0.text": "갈색 안료를 만들기 위해선 주황색을 더 어둡게 만들어야 한다.\\\n**어둡게!**\\\n\\\n이제 와서 생각해 보면 너무나도 논리적이다! 내가 찾아낸 세 개의 보석은 색채 이론의 기본이 되는 세 가지 원색과 정확히 일치한다!\\\n이 세 가지를 모두 섞는다면, 현실이 아닌 것처럼 보일 정도로 새카만 칠흑의 조각을 창조해 낼 수 있다.", + "book.spectrum.guidebook.onyx_shards.page1.text": "이 '가장 완벽한 어둠'을 [융합의 성소](entry://general/fusion_shrine)에서 빚어내야 하는데, 결정에 단 한 줄기의 통제되지 않은 불순한 빛조차 스며들지 못하도록 해야 한다. *그러니 신월의 자정에 시작하겠다*!\\\n\\\n[](item://minecraft:clock)를 꼭 챙겨가는 편이 좋겠다.", + "book.spectrum.guidebook.onyx_shards.page2.text": "태양과 달의 위치 관계에 따라, 달은 더 많은 빛을 반사하거나 혹은 덜 반사한다.", + "book.spectrum.guidebook.onyx_shards.page2.title": "달의 위상", + "book.spectrum.guidebook.onyx_shards.page3.text": "이것을 [#](449900)달의 위상[#]()이라고 부른다.\\\n\\\n달이 가장 눈부시게 빛날 때를 [#](449900)보름[#]()이라 하고, 반대로 달빛이 완전히 자취를 감추어 가장 어두울 때를 [#](449900)신월[#]()이라 부른다.\\\n\\\n어느 한 신월에서 다음 신월까지 이어지는 전체 달의 위상 주기를 [#](449900)삭망월[#]()이라고도 한다.", + "book.spectrum.guidebook.overchanting.name": "마법 과부여", + "book.spectrum.guidebook.overchanting.page0.text": "마법과 [마법 부여기](entry://enchanting/enchanter) 모두에 통달한 나의 축적된 경험은 나를 또 다른 새로운 발견으로 이끌었다.\\\n바로 [#](449900)마법 과부여[#]()다.\\\n\\\n단 하나의 [#](bb00bb)마법이 부여된 책[#]()에 이토록 엄청난 마법적 에너지를 우겨넣는 작업은 결코 저렴하지 않을 것이다. *엄청나게 비싸겠지*.", + "book.spectrum.guidebook.overchanting.page1.text": "- 클로버의 호의: 3 → 6\n- 무장 해제: 2 → 4\n- 풍요: 5 → 10\n- 선제공격: 2 → 5\n- 향상된 치명타: 2 → 4\n- 관성: 2 → 5\n- 기민한 손놀림: 2 → 4\n- 보물 사냥꾼: 3 → 5\n- 저격: 2 → 4", + "book.spectrum.guidebook.overchanting.page1.title": "스펙트럼 마법 부여", + "book.spectrum.guidebook.overchanting.page2.text": "- 살충: 5 → 8\n- 폭발로부터 보호: 4 → 8\n- 물갈퀴: 3 → 3\n- 효율: 5 → 8\n- 가벼운 착지: 4 → 6\n- 발화: 2 → 4\n- 화염으로부터 보호: 4 → 8\n- 행운: 3 → 5\n- 차가운 걸음: 2 → 4\n- 찌르기: 5 → 8\n- 밀치기: 2 → 5\n- 약탈: 3 → 6\n- 충성: 3 → 4", + "book.spectrum.guidebook.overchanting.page3.text": "- 바다의 행운: 3 → 5\n- 미끼: 3 → 5\n- 관통: 4 → 8\n- 힘: 5 → 8\n- 발사체로부터 보호: 4 → 8\n- 보호: 4 → 8\n- 밀어내기: 2 → 5\n- 빠른 장전: 3 → 5\n- 호흡: 3 → 6\n- 급류: 3 → 4\n- 날카로움: 5 → 8\n- 강타: 5 → 8\n- 영혼 가속: 3 → 4\n- 휩쓸기: 3 → 7\n- 가시: 3 → 6\n- 내구성: 3 → 6", + "book.spectrum.guidebook.paintbrush.page0.text": "수많은 도구들 중 대체 왜 *붓*일까?\\\n\\\n좋은 질문이다, 이걸 처음 떠올렸을 때 나조차도 스스로에게 던졌던 질문이니까. 솔직히 말하자면 순전히 직관이었다. 다채로운 색을 뿜어내는 안료 받침대와 수정들의 찬란한 색채는, 지금 내가 내면의 예술가라 부르는 무언가를 각성시키기에 충분했다.", + "book.spectrum.guidebook.paintbrush.page1.text": "붓을 들고 [안료 받침대](entry://general/pedestal)를 두드려 주면 조합을 시작할 것이다.", + "book.spectrum.guidebook.paintbrush.page1.title": "조합 레시피", + "book.spectrum.guidebook.paintbrush.page2.text": "[안료](entry://general/pigment)를 색칠하는 데 쓰는 것보다 더 완벽한 용도가 또 어디 있겠는가?\\\n\\\n[#](449900)붓을 든 상태에서 웅크려 사용하면 색상 선택 메뉴를 띄울 수 있다[#]().\\\n\\\n원하는 색을 고른 뒤, 색칠이 가능한 블록을 붓끝으로 가볍게 건드려주기만 하면 [안료](entry://general/pigment)가 블록 속으로 스며들어 새로운 색으로 물들여버린다.", + "book.spectrum.guidebook.paintbrush.page2.title": "블록 색칠하기", + "book.spectrum.guidebook.paintbrush.page3.text": "나는 붓을 휘둘러 잉크를 둥글게 뭉친 다음 투사체처럼 냅다 집어 던질 수 있다.\\\n\\\n이 투사체에 직격당한 표면은 (그리고 생명체도!) 색칠이 가능한 대상이라면 그 색으로 물들 것이며, 덤으로 꽤 강하게 밀지기도 한다.", + "book.spectrum.guidebook.paintbrush.page3.title": "물감 던지기", + "book.spectrum.guidebook.paltaeria.name": "팔타에리아", + "book.spectrum.guidebook.paltaeria.page0.text": "오직 엔드에서만, 그것도 자그마한 군집으로만 발견되는 이 광석의 상징은 단연 그 창백한 푸른빛이다.\\\n\\\n이 물질이 지닌 기묘한 특성들은 엔드 그 자체만큼이나 결코 간과해서는 안 될 위험성을 내포하고 있다.", + "book.spectrum.guidebook.paltaeria.page2.text": "내가 지난번에 겪었던 팔타에리아의 끔찍한 경험을 고려해 보면, 이 블록을 야외에 덜렁 설치해 두는 건 별로 좋은 생각이 아닐 것이다. 미래의 내가 분명 감사해할 참고 사항이다.", + "book.spectrum.guidebook.paltaeria.page3.text": "*~ 저 멀리 날아가라 ~*\\\n\\\n[아이템을 분쇄할](entry://general/item_crushing) 수도 있다... 내 방 천장에서!", + "book.spectrum.guidebook.particle_spawner.page0.text": "내가 목격했던 [별똥별](entry://general/stargazing)은 떨어지면서 숨이 멎을 만큼 아름다운 입자의 소나기를 남겼다. 그 장관에 완전히 매료된 나는, 내 입맛대로 세세하게 설정할 수 있는 입자 생성기를 만들어 냈다.[#]()\\\n굴뚝에서 피어오르는 연기? 로켓이 뿜어내는 화염 입자? 아니면 내 받침대를 위한 몽환적인 입자 비? 이 입자 생성기 하나면 뭐든 가능하다.\\\n*어쩌면 여정을 계속하면서 더 많은 입자들로부터 새로운 영감을 얻을 수 있을지도 모른다!*", + "book.spectrum.guidebook.particle_spawner.page1.text": "인터페이스를 조작하여 내 취향에 맞게 입자를 세팅한 다음, [#](449900)레드스톤 신호[#]()를 주면 나만의 환상적인 디스플레이 쇼가 시작된다.", + "book.spectrum.guidebook.pastel_network.name": "파스텔 네트워크", + "book.spectrum.guidebook.pastel_network.page0.text": "[#](449900)호퍼, 광산 수레, 파이프[#]() 같은 평범한 운송 수단들도 나쁘진 않지만, 어딘가 *부족하다*. 남동석의 힘을 빌려 돌아가는 이 노드들... 내가 [#](449900)파스텔 네트워크[#]()라 이름 붙인 이 시스템이야말로 끔찍한 물류 문제를 해결해 줄 훨씬 우아하고 압도적으로 뛰어난 해결책이다.\\\n\\\n여러 가지 이유로 인해, 이 노드들은 서로의 모습이 보이지 않더라도 벽을 뚫고 아이템을 전송할 수 있다. 내 천부적인 천재성을 증명하는 또 다른 증거가 아닐 수 없다! 심지어 내가 [필터](entry://magical_blocks/filtering) 기능까지 달아줬으니까!", + "book.spectrum.guidebook.pedestal.page0.text": "[내가 찾아낸 보석](entry://general/shards)을 보고 번뜩이는 영감을 얻어 만들었다. 이 아름다운 자태를 보라! 어떤 보석을 올려두어도 완벽하게 어우러지는 기가 막힌 디자인이다.\\\n\\\n이건 [](item://minecraft:crafting_table)를 닮아서 평범한 레시피들도 척척 만들어낼 수 있지만, 이 진보된 디자인 덕분에 세상에 단 한 번도 존재하지 않았던 완전히 새로운 블록을 창조해 낼 수도 있을 것이다!", + "book.spectrum.guidebook.pedestal.topaz_pedestal.text": "생생한 청록색은 무척이나 고결해 보인다.", + "book.spectrum.guidebook.pedestal.amethyst_pedestal.text": "자홍색은 나무의 결과 아름다운 대조를 이룬다.", + "book.spectrum.guidebook.pedestal.citrine_pedestal.text": "강렬한 노란색은 생동감이 넘쳐흐른다.", + "book.spectrum.guidebook.pedestal.page2.title": "조합 요구 사항", + "book.spectrum.guidebook.pedestal.page2.text": "바닥에 내려놓긴 했는데... 아무 일도 일어나지 않았다.\\\n\\\n하지만 나는 곧 내가 무엇을 놓쳤는지 깨달았다. 마법의 힘을 더해줄 [보석 가루](entry://general/gemstone_powder)와, [붓](entry://general/paintbrush)이나 [#](449900)레드스톤 신호[#]()처럼 조합을 시작하게 만들 스위치가 필요했던 것이다. 만약 받침대 위쪽이 텅 비어있다면, 완성된 아이템은 바닥에 툭 떨어질 것이다. 만약 위에 인벤토리가 있다면 아이템은 그 안으로 들어갈 것이다.", + "book.spectrum.guidebook.pedestal.automation.title": "받침대 자동화", + "book.spectrum.guidebook.pedestal.automation.text": "[제작 석판](entry://equipment/crafting_tablet)을 사용하면 안료 받침대를 자동화할 수 있다.\\\n지정된 슬롯에 석판을 끼워 넣으면, 받침대는 호퍼로 들어오는 아이템들을 알아서 제자리에 배치할 것이다.\\\n만약 받침대 위쪽이 막혀있다면 조합된 결과물들을 내부 슬롯에 보관하므로, 아래쪽에서 아이템을 빼낼 수 있게 된다.", + "book.spectrum.guidebook.pedestal_customisation.text": "현무암 블록을 방해석으로 갈아 끼울 수도 있고, 내 취향에 맞춰 보석 블록의 종류를 마음대로 선택할 수도 있다.\\\n\\\n[#](bb00bb)방해석[#]()과 [#](bb00bb)현무암[#]()을 적절히 섞어주면, 구조물에 나만의 개성을 불어넣을 수 있다.", + "book.spectrum.guidebook.pedestal_customisation.title": "맞춤 디자인!", + "book.spectrum.guidebook.pedestal_upgrade_cmy.name": "받침대 CMY 업그레이드", + "book.spectrum.guidebook.pedestal_upgrade_cmy.page0.text": "이제 내 손엔 세 종류의 보석이 쥐어져 있다. *그리고 기막힌 아이디어도!* 내가 찾은 이 세 가지 보석을 전부 사용해 내 [받침대](entry://general/pedestal)를 업그레이드할 수 있을 것이다! 이렇게 하면 훨씬 예뻐질 뿐만 아니라 활용도도 미친 듯이 올라갈 게 분명하다.", + "book.spectrum.guidebook.pedestal_upgrade_cmy.page0.title": "CMY 변형", + "book.spectrum.guidebook.pedestal_upgrade_cmy.page1.text": "이렇게 진화한 [안료 받침대](entry://general/pedestal)의 고등 마법 능력을 끌어내려면, 주변에서 에너지를 집중시켜 줄 특별한 보조 구조물이 필요하다.\\\n\\\n나는 이 구조물을 **스펙트럼 중점**이라 부르기로 했다.", + "book.spectrum.guidebook.pedestal_upgrade_cmy.page1.title": "받침대 구조물", + "book.spectrum.guidebook.pedestal_upgrade_cmy.page2.text": "크기: 11x11x4 블록. 하지만 만약을 대비해 주변에 블록 몇 칸 정도 여유 공간을 남겨두는 게 좋을 것이다.", + "book.spectrum.guidebook.pedestal_upgrade_cmy.page3.text": "- 1 안료 받침대\n- 4 윤나는 보석 블록\n- 4 조각된 윤나는 블록\n- 4 홈이 파인 윤나는 블록\n- 8 윤나는 기둥\n- 68 윤나는 블록", + "book.spectrum.guidebook.pedestal_upgrade_moonstone.dimensions": "크기: 13x13x7 블록", + "book.spectrum.guidebook.pedestal_upgrade_moonstone.name": "월장석 받침대", + "book.spectrum.guidebook.pedestal_upgrade_moonstone.page0.text": "[월장석 조각](entry://general/shards@moonstone)을 사용하면 내 [안료 받침대](entry://general/pedestal)를 한계 이상으로 업그레이드할 수 있다.", + "book.spectrum.guidebook.pedestal_upgrade_moonstone.page2.text": "- 1 안료 받침대\n- 4 조각된 오닉스 블록\n- 4 홈이 파인 윤나는 블록\n- 8 보석 광원\n- 4 조각된 보석 블록\n- 12 윤나는 보석 블록\n- 16 CMYK 조각된 블록\n- 36 윤나는 기둥\n- 52 윤나는 문장\n- 172 윤나는 블록", + "book.spectrum.guidebook.pedestal_upgrade_moonstone.page3.text": "- 4 조각된 오닉스 블록\n- 4 윤나는 보석 블록\n- 36 윤나는 문장\n- 12 윤나는 블록", + "book.spectrum.guidebook.pedestal_upgrade_moonstone_2.name": "월장석 받침대 (2)", + "book.spectrum.guidebook.pedestal_upgrade_moonstone_2.page0.text": "나의 가장 최근 구조물은 무언가... 턱없이 부족한 느낌이 든다. 그리고 이제 그 이유를 정확히 알 것 같다. [#](b9bebe)월장석[#]()이 더 필요하다! 하지만 이게 정말 골치 아픈 게, 내가 [#](bb00bb)조각된 월장석 블록[#]()을 만들어내려면 이미 [#](bb00bb)월장석 받침대[#]()의 능력을 완전히 활용할 수 있어야만 하는데, 정작 이 구조물을 완성하기 전까지는 월장석 가루를 쓸 수조차 없다는 모순에 빠져버린 것이다.\\\n*이 빌어먹을 교착 상태를 피할 방법이 없을까? 말하자면 마중물 역할을 해줄 무언가가?*", + "book.spectrum.guidebook.pedestal_upgrade_moonstone_2.page2.text": "- 1 안료 받침대\n- 4 조각된 오닉스 블록\n- 4 홈이 파인 윤나는 블록\n- 8 보석 광원\n- 4 조각된 보석 블록\n- 12 윤나는 보석 블록\n- 16 CMY 조각된 보석 블록\n- 28 조각된 월장석 블록\n- 36 윤나는 기둥\n- 52 윤나는 문장\n- 144 윤나는 블록", + "book.spectrum.guidebook.pedestal_upgrade_moonstone_2.page3.text": "- 28 조각된 월장석 블록", + "book.spectrum.guidebook.pedestal_upgrade_onyx.name": "받침대 오닉스 업그레이드", + "book.spectrum.guidebook.pedestal_upgrade_onyx.page0.text": "[오닉스 조각](entry://general/shards@onyx)을 사용해 내 [안료 받침대](entry://general/pedestal)를 업그레이드하면, 그 마법적인 위력을 한 차원 더 끌어올릴 수 있다.", + "book.spectrum.guidebook.pedestal_upgrade_onyx.page0.title": "오닉스 변형", + "book.spectrum.guidebook.pedestal_upgrade_onyx.page1.text": "크기: 13x13x6 블록", + "book.spectrum.guidebook.pedestal_upgrade_onyx.page2.text": "- 1 안료 받침대\n- 8 윤나는 보석 블록\n- 8 보석 광원\n- 4 조각된 윤나는 블록\n- 16 조각된 보석 블록\n- 16 윤나는 문장\n- 4 홈이 파인 윤나는 블록\n- 36 윤나는 기둥\n- 160 윤나는 블록", + "book.spectrum.guidebook.pedestal_upgrade_onyx.page3.text": "- 4 윤나는 보석 블록\n- 8 보석 광원\n- 16 조각된 보석 블록\n- 16 윤나는 문장\n- 28 윤나는 기둥\n- 92 윤나는 블록", + "book.spectrum.guidebook.perturbed_eye.name": "엔드 차원문 재배치", + "book.spectrum.guidebook.perturbed_eye.page0.text": "엔더맨들의 고향으로 들어가고 싶을 때마다, 나는 세상의 절반이나 가로지르는 고생을 해야만 했다. 옛날에 엔드 차원문을 만들었던 자가 누구든 간에... 이제 내가 그들보다 훨씬 더 똑똑해졌다.\\\n\\\n뭐, 거의.\\\n아직 내 손으로 이 차원문들을 직접 창조하는 방법은 알아내지 못했지만, 이걸 뜯어다가 내 집에 설치하는 건? *식은 죽 먹기다.*", + "book.spectrum.guidebook.perturbed_eye.page1.text": "근거지에서 발견할 수 있는 바로 그 엔드 차원문 말이다.", + "book.spectrum.guidebook.perturbed_eye.page2.text": "차원문 틀은 무식할 정도로 단단하기 때문에, 이걸 뜯어내려면 꽤나 파괴적인 방식을 동원해야 한다. 이걸 틀에 끼워 넣은 다음엔 곧장 뒤로 물러서는 편이 좋을 것이다.", + "book.spectrum.guidebook.perturbed_eye.page3.text": "이제 원래 있던 모양 그대로 차원문을 다시 조립하고 엔더의 눈을 꽂아 넣기만 하면, 짠! 완벽하다!", + "book.spectrum.guidebook.pest_control.page0.text": "엔드를 향한 여정 도중, 나보다 훨씬 오래전에 존재했던 고대 문명의 요새처럼 보이는 거대한 지하 구조물과 마주쳤다.\\\n\\\n다른 세계로 향하는 차원문을 열어젖힐 만큼 뛰어난 기술력을 가졌던 놈들이, 어째서 이 끔찍한 해충 문제는 해결하지 못한 건지 도무지 이해할 수가 없다.", + "book.spectrum.guidebook.pest_control.page1.text": "[#](bb00bb)벌레 먹은 블록[#]()을 파괴할 때 튀어나오는 좀벌레들을 완벽하게 짓뭉개버리며, 그 대가로 두 배의 경험치를 뜯어낸다.\\\n\\\n최대 레벨: 1\\\n채굴 도구에 적용 가능.\\\n공명과 동시에 부여할 수 없음.", + "book.spectrum.guidebook.phantom_frame.page0.text": "내 가장 소중한 전리품들을 벽에 걸어 자랑하고 싶었고, 여태껏 나는 항상 아이템 액자를 사용해왔다.\\\n\\\n하지만 내 수집품 중 일부는 그 거추장스러운 액자 테두리가 보이지 않을 때 훨씬 더 폼이 난다는 걸 깨달았다. 그래서 이걸 만들었다!", + "book.spectrum.guidebook.phantom_frame.page0.title": "팬텀 액자", + "book.spectrum.guidebook.phantom_frame.page1.text": "팬텀 액자는 안에 아이템을 꽂아 넣는 즉시 완벽하게 투명해진다.", + "book.spectrum.guidebook.phantom_frame.page2.text": "이 액자에는 괜찮은 옵션이 하나 더 있는데, 전시된 아이템을 눈부신 빛으로 감싸, 훨씬 더 위엄 있고 인상적으로 보이게 만들어 준다는 것이다.", + "book.spectrum.guidebook.pigment.name": "안료", + "book.spectrum.guidebook.pigment.description": "나의 색채 이론 체크리스트", + "book.spectrum.guidebook.pigment.page0.text": "마침내! 절대적으로 순수한 안료를 얻어냈다! 오늘, [색깔 나무](entry://general/colored_trees)의 잎에서 이것을 수확하는 데 성공했다.\\\n괭이를 쓰니 수확하는 속도도 꽤나 만족스럽다.\\\n이 안료들은 만지면 기이한 마법의 파동이 느껴진다.\\\n\\\n나는 아직 이 세상의 [모든 색상](entry://general/color_mixing_cmy)이 이런 순수한 형태로 존재할 거라곤 완전히 믿지 않는다. 과연 내가 몇 가지나 찾아낼 수 있을까?", + "book.spectrum.guidebook.pigment.page1.checklist.entry0": "[#](302951)검은색", + "book.spectrum.guidebook.pigment.page1.checklist.entry1": "[#](2432ff)파란색", + "book.spectrum.guidebook.pigment.page1.checklist.entry10": "[#](f97b2d)주황색", + "book.spectrum.guidebook.pigment.page1.checklist.entry11": "[#](ff9fc6)분홍색", + "book.spectrum.guidebook.pigment.page1.checklist.entry12": "[#](802bc4)보라색", + "book.spectrum.guidebook.pigment.page1.checklist.entry13": "[#](f12a34)빨간색", + "book.spectrum.guidebook.pigment.page1.checklist.entry14": "[#](b9bebe)하얀색", + "book.spectrum.guidebook.pigment.page1.checklist.entry15": "[#](eded00)노란색", + "book.spectrum.guidebook.pigment.page1.checklist.entry2": "[#](70400d)갈색", + "book.spectrum.guidebook.pigment.page1.checklist.entry3": "[#](5bffed)청록색", + "book.spectrum.guidebook.pigment.page1.checklist.entry4": "[#](464646)회색", + "book.spectrum.guidebook.pigment.page1.checklist.entry5": "[#](526b0f)초록색", + "book.spectrum.guidebook.pigment.page1.checklist.entry6": "[#](7a9eff)하늘색", + "book.spectrum.guidebook.pigment.page1.checklist.entry7": "[#](adadad)회백색", + "book.spectrum.guidebook.pigment.page1.checklist.entry8": "[#](98ff37)연두색", + "book.spectrum.guidebook.pigment.page1.checklist.entry9": "[#](ff4ff6)자홍색", + "book.spectrum.guidebook.pigment.page1.text": "가설에 불과한 리스트다.", + "book.spectrum.guidebook.pigment.page10.text": "이 과즙 같은 연두색에선 포근한 봄날 아침의 향기가 피어오르는 것 같다. 아니면 그저 내 상상일 뿐일까?\\\n\\\n[#](98ff37)연두색[#]()은 *행복*과 *풍요*를 상징한다.", + "book.spectrum.guidebook.pigment.page11.text": "부드러운 자홍색은 언제나 나를 차분하고 만족스러운, 거의 평온한 듯한 기분에 젖어들게 한다.\\\n\\\n[#](ff4ff6)자홍색[#]()은 *시간*, *친절*, *관용*을 상징한다.", + "book.spectrum.guidebook.pigment.page12.text": "이 주황색은 내게 가을을 떠올리게 한다. 타오르는 벽난로 앞에서 안락의자에 파묻혀 있는 듯한 포근함을 선사한다.\\\n\\\n[#](f97b2d)주황색[#]()은 *따스함*과 *안락함*을 상징한다.", + "book.spectrum.guidebook.pigment.page13.text": "이 눈이 시리도록 생기 넘치는 솜사탕 같은 분홍색을 보고 있으면 저절로 미소가 지어진다.\\\n\\\n[#](ff9fc6)분홍색[#]()은 *건강*과 *감탄*을 상징한다.", + "book.spectrum.guidebook.pigment.page14.text": "이 색을 보고 있으면 내 머리가 미친 듯이 팽팽 돌기 시작한다. 지식에 대한 갈증을 미친 듯이 자극할 뿐만 아니라, 창의적인 아이디어들이 번뜩이게 불을 지펴준다.\\\n\\\n[#](802bc4)보라색[#]()은 *지혜*와 *창의성*을 상징한다.", + "book.spectrum.guidebook.pigment.page15.text": "무언가 아름다운 것을 당장 창조해 내고 싶다는 충동과 욕망이 끓어오른다.\\\n\\\n[#](f12a34)빨간색[#]()은 *열정*과 *의지력*을 상징한다.", + "book.spectrum.guidebook.pigment.page16.text": "이 감각을 정확한 말로 담아낼 수가 없다. 압도적이고 숨이 멎을 것 같지만, 결코 나쁜 의미가 아니다. 이 안료에는 말로 다 할 수 없을 만큼 경이로운 무언가가 서려 있다.\\\n\\\n[#](b9bebe)하얀색[#]()은 *생명*, *빛*, *순수*를 상징한다.", + "book.spectrum.guidebook.pigment.page17.text": "이 생동감 넘치는 노란색은 거의 폭발할 듯한 에너지를 뿜어낸다.\\\n\\\n[#](eded00)노란색[#]()은 *에너지*와 *환희*를 상징한다.", + "book.spectrum.guidebook.pigment.page18.text": "언제든 다시 안료 형태로 만들 수 있다.", + "book.spectrum.guidebook.pigment.page18.title": "안료 블록", + "book.spectrum.guidebook.pigment.page2.text": "내가 살면서 쥐어본 것 중 단연코 가장 어두운 물질이다. 마치 현실에 존재해선 안 될 것만 같은 비현실적인 어둠이다.\\\n\\\n[#](302951)검은색[#]()은 아무것도 없는 *공허*, *권력*, *신비*를 상징한다.", + "book.spectrum.guidebook.pigment.page3.text": "이걸 손에 쥐고 있으면 알 수 없는 안도감이 밀려온다. 물론 다 헛소리다, 결국 이건 그저 색깔일 뿐이니까. 하지만 그래도...\\\n\\\n[#](2432ff)파란색[#]()은 *안전*과 *영속성*을 상징한다.", + "book.spectrum.guidebook.pigment.page4.text": "이 진한 갈색은 나를 대자연의 품으로 돌아가고 싶게 만든다.\\\n\\\n[#](70400d)갈색[#]()은 *자연*과 *안정성*을 상징한다.", + "book.spectrum.guidebook.pigment.page5.text": "마치 산꼭대기 정상에 앉아, 이 세계의 끝없이 펼쳐진 광활함을 바라보는 듯한 기분을 선사한다.\\\n\\\n[#](5bffed)청록색[#]()은 *물질*과 *무결성*을 상징한다.", + "book.spectrum.guidebook.pigment.page6.text": "내 눈에 이 색은 패배의 쓴맛을 본 회백색의 형처럼 보인다. 바라보고 있으면 어딘가 조금 슬퍼지지만, 정확히 그 이유가 뭔지는 나도 모르겠다.\\\n\\\n[#](464646)회색[#]()은 *덧없음*을 상징한다.", + "book.spectrum.guidebook.pigment.page7.text": "이 안료는 부드러운 내면의 평화를 잔잔하게 발산한다.\\\n\\\n[#](526b0f)초록색[#]()은 *균형*과 *조화*를 상징한다.", + "book.spectrum.guidebook.pigment.page8.text": "낙관적인 기분이 들지만, 동시에 이별의 감정도 느껴진다.\\\n\\\n[#](7a9eff)하늘색[#]()은 *행운*과 *평화*를 상징한다.", + "book.spectrum.guidebook.pigment.page9.text": "고요히 앉아 풍경을 바라보며, 내 곁을 스쳐 지나가는 삶을 온몸으로 느끼면서도 모든 게 완벽하게 괜찮다고 느껴지는 그 감각을 아는가?\\\n\\\n[#](adadad)회백색[#]()은 *변화*를, 그리고 동시에 *침묵*을 상징한다.", + "book.spectrum.guidebook.pigment_palette.page0.text": "내 마법 장비들을 굴리기 위해 그 많은 [잉크](entry://ink/ink)를 바리바리 싸 들고 다니는 건 이제 중노동이 된 지 오래고, 인벤토리 공간도 지독하게 잡아먹는다.\\\n이제 새로운 창조물이 나설 차례다. 안료 팔레트.\\\n\\\n*꽤나 잘 어울리지 않는가? 이제야 비로소 진짜 화가가 된 기분이다.*", + "book.spectrum.guidebook.pigment_palette.page1.text": "상당한 양의 [잉크](entry://ink/ink)를 저장할 수 있어, 내 모든 마법 장비들에 동력을 공급하는 데 이보다 완벽할 순 없다. 다만 기계에 동력을 공급할 수는 없다.", + "book.spectrum.guidebook.pipe_bomb.page0.text": "[월장석 코어](entry://dimension/moonstone_cores)는 그야말로 에너지가 폭발할 듯이 꽉 들어차 있다. 이걸 단 몇 밀리초 만에 한꺼번에 방출시킨다는 건 누가 봐도 끔찍하게 좋지 못한 짓이다.\\\n\\\n*...하지만 때로는 최악의 아이디어가 최고의 결과물을 낳기도 하지, 안 그런가?*\\\n\\\n이것들의 폭발은 블록에 흠집 하나 내지 못하지만, 그 대신 [어마어마하게 공격적인 화염](entry://dimension/primordial_fire)을 사방에 뿌려버린다.", + "book.spectrum.guidebook.pipe_bomb.page1.text": "*선물용으로 딱 좋겠군!*", + "book.spectrum.guidebook.player_detector.page0.text": "쓸데없이 거대한 문 하나 열겠다고 [#](bb00bb)레드스톤[#]()으로 산더미만 한 장치를 만드는 부류의 사람들을 나는 안다. 그래 놓고는 그걸 볼품없는 [#](bb00bb)압력판[#]() 하나로 작동시키곤 하지.\\\n하지만 내 플레이어 감지기는 원거리에서 내 존재를, 혹은 다른 불청객 플레이어들을 감지해 내고 그에 맞는 [#](449900)레드스톤 신호[#]()를 방출한다.\\\n\\\n*이게 더 근사하지.*", + "book.spectrum.guidebook.player_detector.page1.text": "감지 반경은 10블록이다.\\\n자신을 설치한 주인을 감지하면 최대 강도의 신호를 내고, 그렇지 않은 불청객이라면 8강도의 신호를 낸다.", + "book.spectrum.guidebook.polishing": "연마", + "book.spectrum.guidebook.potion_reagent": "새로운 물약 반응물", + "book.spectrum.guidebook.potion_workshop.page0.text": "물약 작업장은 [#](bb00bb)양조기[#]()를 아득히 뛰어넘는 물건이다. 가장 큰 변화는 [#](bb00bb)블레이즈 가루[#]() 대신 [인어의 보석](entry://general/mermaids_brush)에서 얻은 액체를 사용했다는 점인데, 이 덕분에 [마법 아이템들을 추가 반응물로 활용](entry://brewing/simple_reagents)할 수 있게 되었다.\\\n\\\n또 다른 장점은 병에 물을 미리 채워둘 필요조차 없어졌다는 것이다.", + "book.spectrum.guidebook.potion_workshop.page1.text": "", + "book.spectrum.guidebook.potion_workshop_brewing.low_yield": "*온갖 수단을 다 동원해 보았음에도 불구하고, 이 양조품은 태생적으로 생산량이 적다.*", + "book.spectrum.guidebook.potion_workshop_brewing.low_potency_mod": "*이 양조품은 효력 반응물을 잘 받아들이지 않아서, 위력을 끌어올리기 위해선 평소보다 훨씬 더 많은 양의 반응물이 필요하다.*", + "book.spectrum.guidebook.potion_workshop_brewing.fillable_only": "*이 양조품은 너무 농축되어서 평범한 물약이나 물약 묻은 화살로는 쓸 수 없고, 물약 효과를 채워 넣을 수 있는 더 복잡한 다른 아이템들에만 유용하게 쓸 수 있다.*", + "book.spectrum.guidebook.potion_workshop_brewing.name": "물약 양조", + "book.spectrum.guidebook.potion_workshop_brewing.page0.text": "양조기로 만들 수 있었던 모든 물약에 더해 그 이상까지도 완벽하게 재현해 냈다! (다만 몇몇은 강화된 효과를 끌어내는 난이도에 약간 차이가 있다)\\\n\\\n나는 [반응물](entry://brewing/simple_reagents)을 사용해 이 물약들의 효과를 내 입맛대로 이리저리 주무를 수 있다.", + "book.spectrum.guidebook.potion_workshop_brewing.page1.text": "[#](bb00bb)양조기[#]()에서 쓰던 것과 똑같은 재료들을 사용해 **모든 바닐라 물약**을 만들어낼 수 있다.", + "book.spectrum.guidebook.potion_workshop_brewing.page1.title": "바닐라 물약", + "book.spectrum.guidebook.potion_workshop_brewing.page2.strong.text": "우유빛 수지를 사용하면 지속 시간을 희생하는 대신 효력 변화를 훨씬 더 잘 받아들이는 혼합물이 만들어진다.", + "book.spectrum.guidebook.potion_workshop_brewing.page4.text": "발효된 거미 눈을 추가하면 효과가 **채굴 피로**로 변질될 것이다.", + "book.spectrum.guidebook.potion_workshop_brewing.page5.text": "발효된 거미 눈을 추가하면 효과가 **허기**로 변질될 것이다.", + "book.spectrum.guidebook.potion_workshop_brewing.page7.text": "발효된 거미 눈을 추가하면 효과가 **불운**으로 변질될 것이다.", + "book.spectrum.guidebook.potion_workshop_brewing.page19.text": "*[독살자의 핸드북](entry://dimension/poisoners_handbook)의 기록에서 발췌함.\\\n\\\n이 양조품 역시 태생적으로 생산량이 적다.*", + "book.spectrum.guidebook.potion_workshop_crafting": "작업장 조합", + "book.spectrum.guidebook.potion_workshop_crafting.page0.text": "이름에서 알 수 있듯, 나는 애초에 강력한 물약들을 빚어내기 위한 목적으로 [물약 작업장](entry://brewing/potion_workshop)을 설계했다.\\\n하지만 이 정교하고 세밀하게 조절 가능한 스위치들과 밸브들 덕분에, 나는 이 장치가 다른 물건들을 만들어내는 데에도 엄청나게 유용하다는 사실을 깨달았다!\\\n\\\n이러한 조합 레시피들에는 [반응물](entry://brewing/simple_reagents)이 필요하지 않다.", + "book.spectrum.guidebook.potion_workshop_crafting.page1.title": "물", + "book.spectrum.guidebook.potion_workshop_crafting.page10.text": "[#](bb00bb)지식의 보석[#]()에서 100의 경험치를 소모한다.", + "book.spectrum.guidebook.potion_workshop_crafting.page2.text": "[용암 스펀지](entry://magical_blocks/lava_sponge)는 소모되지 않는다.", + "book.spectrum.guidebook.potion_workshop_crafting.page2.title": "용암", + "book.spectrum.guidebook.potion_workshop_crafting.page7.title": "꿀 액화하기", + "book.spectrum.guidebook.potion_workshop_crafting.page8.title": "눈 가루로 만들기", + "book.spectrum.guidebook.potion_workshop_crafting.page9.text": "[#](bb00bb)지식의 보석[#]()에서 10의 경험치를 소모한다.", + "book.spectrum.guidebook.potion_workshop_crafting.page9.title": "경험치 병", + "book.spectrum.guidebook.simple_reagents.name": "반응물 사용하기", + "book.spectrum.guidebook.simple_reagents.about.text": "[#](bb00bb)양조기[#]()에서 하듯 물약에 재료를 찔끔찔끔 넣는 대신, 나는 [인어의 보석](entry://general/mermaids_brush)에 담겨있던 액체 속에 모든 재료를 한꺼번에 녹여버릴 수 있다. 물론 반응물들도 포함해서 말이다!\\\n\\\n[물약 작업장](entry://brewing/potion_workshop)에는 반응물 슬롯이 여러 개 달려있어 한 번에 다양한 강화 효과를 몰아넣을 수 있지만, 각 종류별로 한 번의 양조당 한 개씩만 넣을 수 있다.", + "book.spectrum.guidebook.complex_reagents.name": "복합 반응물", + "book.spectrum.guidebook.complex_reagents.order_of_application.title": "적용 순서", + "book.spectrum.guidebook.complex_reagents.order_of_application.text": "**획기적이다!** 내가 세상 곳곳에서 긁어모은 온갖 종류의 마법적 수집품들을 반응물로 삼아, 물약에 광범위한 추가 보너스를 잔뜩 넣을 방법을 마침내 찾아냈다.\\\n\\\n이것들을 섞을 때는 다음과 같은 규칙이 적용된다.\n- 반응물을 넣는 순서는 상관없다\n- 고정 수치 보너스가 먼저 적용된 후, 퍼센트 기반 보너스가 그 최종값을 수정한다", + "book.spectrum.guidebook.potion_workshop_reagents.aether_vestiges.text": "- 초기 효력을 극적으로 끌어올리지만, 시간이 지남에 따라 효력이 빠르게 약해지며, 즉발성 효과에는 작동하지 않음\n- 잔류형 물약을 생성", + "book.spectrum.guidebook.potion_workshop_reagents.amethyst_powder.text": "- +60초 지속 시간", + "book.spectrum.guidebook.potion_workshop_reagents.ash_flakes.text": "- 부정적 효과의 지속 시간 -120초", + "book.spectrum.guidebook.potion_workshop_reagents.bedrock_dust.text": "- +50%% 효력\n- -75%% 지속 시간\n- -1 생산량", + "book.spectrum.guidebook.potion_workshop_reagents.bismuth_flake.text": "- 긍정적 효과의 효력 +1\n- 물약을 무작위 색상으로 물들임", + "book.spectrum.guidebook.potion_workshop_reagents.bitter_oils.text": "- 효과를 치유하기 매우 어렵게 만듦\n- -4 생산량", + "book.spectrum.guidebook.potion_workshop_reagents.bone_ash.text": "- 이전 물약에서 상속받은 주 효과의 효력 및 지속 시간 +100%%", + "book.spectrum.guidebook.potion_workshop_reagents.citrine_powder.text": "- +25%% 효력", + "book.spectrum.guidebook.potion_workshop_reagents.dragon_breath.text": "- 잔류형 물약을 생성하며 화약도 반응물로 함께 넣어야 함\n- 유리병 대신 화살을 공급하면 물약이 묻은 화살을 만들어냄", + "book.spectrum.guidebook.potion_workshop_reagents.echo_shard.text": "- 50%% 확률로 직전에 양조했던 물약의 주 효과를 추가함", + "book.spectrum.guidebook.potion_workshop_reagents.fermented_spider_eye.text": "- 긍정적 효과를 그에 상응하는 부정적 효과로 뒤집음\n- -25%% 지속 시간", + "book.spectrum.guidebook.potion_workshop_reagents.fissure_plum.text": "- +30초 지속 시간\n- 50%% 확률로 +1 효력\n- 50%% 확률로 +1 생산량\n- 부정적 효과의 경우 스탯 수정치가 반전됨", + "book.spectrum.guidebook.potion_workshop_reagents.four_leaf_clover.text": "- 무작위 스탯 하나를 크게 증폭함", + "book.spectrum.guidebook.potion_workshop_reagents.glowstone_dust.text": "- +1 효력", + "book.spectrum.guidebook.potion_workshop_reagents.gunpowder.text": "- 투척용 물약 생성", + "book.spectrum.guidebook.potion_workshop_reagents.jadeite_petals.text": "- 긍정적 효과의 지속 시간 +120초", + "book.spectrum.guidebook.potion_workshop_reagents.lapis_lazuli.text": "- 50%% 확률로 +1 생산량", + "book.spectrum.guidebook.potion_workshop_reagents.midnight_chip.text": "- +1 효력\n- +30초 지속 시간\n- -2 생산량", + "book.spectrum.guidebook.potion_workshop_reagents.moonstone_powder.text": "- 부정적 효과를 그에 상응하는 긍정적 효과로 뒤집음\n- -25%% 효력", + "book.spectrum.guidebook.potion_workshop_reagents.moonstruck_nectar.text": "- 물약의 목 넘김을 훨씬 부드럽게 만들어, 훨씬 더 빨리 마실 수 있게 해줌", + "book.spectrum.guidebook.potion_workshop_reagents.nectardew_burgeon.text": "- +100%% 효력\n- +100%% 지속 시간\n- -3 생산량\n- 결과물에 수면성 특성을 불어넣을 수도 있음", + "book.spectrum.guidebook.potion_workshop_reagents.neolith.text": "- 물약에 아주 기괴한 맛과 냄새를 더해 정체불명으로 만들어버리며, 색깔 또한 완전히 새카맣게 물들임", + "book.spectrum.guidebook.potion_workshop_reagents.nightdew_sprout.text": "- +1 효력\n- +50%% 지속 시간\n- -1 생산량", + "book.spectrum.guidebook.potion_workshop_reagents.onyx_powder.text": "- +2 생산량", + "book.spectrum.guidebook.potion_workshop_reagents.paltaeria_fragments.text": "- +1 무작위 긍정적 효과", + "book.spectrum.guidebook.potion_workshop_reagents.prickly_bayleaf.text": "- 부정적 효과의 효력 -2", + "book.spectrum.guidebook.potion_workshop_reagents.pure_echo.text": "- 직전에 양조했던 물약의 주 효과를 항상 추가함", + "book.spectrum.guidebook.potion_workshop_reagents.pure_glowstone.text": "- +2 효력\n- -50%% 지속 시간\n- -1 생산량", + "book.spectrum.guidebook.potion_workshop_reagents.pure_lapis.text": "- +1 생산량", + "book.spectrum.guidebook.potion_workshop_reagents.pure_redstone.text": "- +200%% 지속 시간\n- -50%% 효력\n- -1 생산량", + "book.spectrum.guidebook.potion_workshop_reagents.quitoxic_powder.text": "- 부정적 효과의 효력 +1", + "book.spectrum.guidebook.potion_workshop_reagents.raw_azurite.text": "- 잔류형 물약과 물약이 묻은 화살에 적용되는 지속 시간 페널티를 무효화", + "book.spectrum.guidebook.potion_workshop_reagents.raw_bloodstone.text": "- +100%% 효력\n- -2 생산량\n- 물약을 마시는 속도를 훨씬 느리게 만듦", + "book.spectrum.guidebook.potion_workshop_reagents.raw_malachite.text": "- +100%% 지속 시간\n- -1 생산량\n- 물약을 마시는 속도를 훨씬 느리게 만듦", + "book.spectrum.guidebook.potion_workshop_reagents.redstone.text": "- +100%% 지속 시간", + "book.spectrum.guidebook.potion_workshop_reagents.shimmerstone_gem.text": "- +20%% 효력\n- +20%% 지속 시간", + "book.spectrum.guidebook.potion_workshop_reagents.star_fragment.text": "- 50%% 확률로 직전에 양조했던 물약의 주 효과를 추가함\n- 이전 물약에서 상속받은 주 효과의 효력 +100%% 및 지속 시간 -33%%", + "book.spectrum.guidebook.potion_workshop_reagents.stardust.text": "- 이전 물약에서 상속받은 주 효과의 효력 +50%% 및 지속 시간 +50%%", + "book.spectrum.guidebook.potion_workshop_reagents.storm_stone.text": "- 초기 효력을 극적으로 끌어올리지만, 시간이 지남에 따라 효력이 빠르게 약해지며, 즉발성 효과에는 작동하지 않음", + "book.spectrum.guidebook.potion_workshop_reagents.stratine_fragments.text": "- +1 효력\n- +1 부정적 효과\n- -1 생산량", + "book.spectrum.guidebook.potion_workshop_reagents.topaz_powder.text": "- 효과의 입자가 보이지 않게 만듦", + "book.spectrum.guidebook.potion_workshop_reagents.vegetal.text": "- +200%% 지속 시간\n- -25%% 효력", + "book.spectrum.guidebook.preenchanted_tools.name": "마법 선부여 도구", + "book.spectrum.guidebook.preenchanted_tools.page0.text": "저 멍청한 흑요석 탁자가 또 내가 원하는 마법 부여를 주지 않으려고 고집을 피우고 있다. *그래, 나 지금 잔뜩 열받았다.*\\\n\\\n내게 남은 선택지라곤 소 떼를 학살하거나 수십 개 마을의 책들을 몽땅 털어오는 것뿐이다 (주민 녀석들이 그렇게 멍청하고 좀비한테 잡아먹히는 걸 좋아하는 데는 다 이유가 있지).", + "book.spectrum.guidebook.preenchanted_tools.page1.text": "내가 무엇을 원하는지 정확히 알고 있다는 이점은, 나에게 도구 자체가 태생적으로 특정한 능력을 머금도록 빚어낼 수 있는 능력을 안겨주었다. 색채 마법이 이를 가능케 했다.\\\n\\\n불행히도, 이런 특성 탓에 이 도구들 대부분은 아주 깨지기 쉽고 연약하다.", + "book.spectrum.guidebook.preenchanted_tools.page2.text": "가장 섬세한 재질조차 돌에서 완벽하게 도려내기 위해 토파즈가 촘촘히 박힌 곡괭이다.\\\n**섬세한 손길**이 선부여되어 있다.", + "book.spectrum.guidebook.preenchanted_tools.page3.text": "황수정으로 제작되어, 모든 광맥에서 마지막 광석 한 톨까지 남김없이 긁어낼 수 있게 해준다.\\\n**행운 III**이 선부여되어 있다.", + "book.spectrum.guidebook.preenchanted_tools.page4.text": "짧고 면도날처럼 날카로운 보석 칼날이 이 무기를 치명적으로 만들어준다.\\\n**약탈 III**이 선부여되어 있다.", + "book.spectrum.guidebook.preenchanted_tools.page5.text": "이 그룹의 이단아인 망각의 곡괭이는 엄청난 내구도와 채굴 속도를 자랑한다. 하지만 캐낸 모든 블록들은 [완전히 소멸해 버린다](entry://enchanting/enchantments/curse_of_the_void).", + "book.spectrum.guidebook.preenchanted_tools.page6.text": "부드러운 진동을 이용해, 평소라면 산산조각 났을 블록들을 [온전한 상태로 캐낼 수 있게 해준다](entry://enchanting/enchantments/resonance).", + "book.spectrum.guidebook.preenchanted_tools.page7.text": "단단한 블록들을 때려 부수고 싶을 때 쓰기 좋은 진정한 화력덕후 곡괭이다.\\\n[돌파 III](entry://enchanting/enchantments/razing)이 선부여되어 있다.", + "book.spectrum.guidebook.present.page0.text": "내 주변 사람들은 내가 힘든 상황을 헤쳐 나갈 때 큰 도움을 주었다. 이제 보답을 할 시간이다. [미광석](entry://general/shimmerstone)을 한 줌 곁들이면 선물 상자가 열릴 때 다채로운 입자가 폭죽처럼 터져 나오게 할 수 있다.\\\n\\\n내가 선물하고 싶은 아이템을 선물 상자로 클릭해 담은 다음, 예쁘게 포장해서 바닥에 내려놓기만 하면 된다. 그러면 받는 사람이 그걸 열어볼 수 있고, 기뻐서 팔짝 뛰는 걸 구경할 수 있겠지.", + "book.spectrum.guidebook.present.page1.text": "*(아니면 뭐, 미래의 나에게 선물할 수도 있고!)*\\\n\\\n몇몇 아이템들은 포장을 풀 때 특별한 효과가 있다.", + "book.spectrum.guidebook.present.page2.text": "- 속을 채운 선물을 조합창에 올려 포장한다\n- 선택 사항: 화려한 입자 폭죽을 위해 [안료](entry://general/pigment)를 추가한다\n- 선택 사항: 특정한 아이템을 추가하여 포장지를 선택한다 (오른쪽 참고)", + "book.spectrum.guidebook.present.page2.title": "포장 & 커스터마이징", + "book.spectrum.guidebook.present.page3.text": "- 빨간색 염료: 빨간색\n- 파란색 염료: 파란색\n- 청록색 염료: 청록색\n- 초록색 염료: 초록색\n- 보라색 염료: 보라색\n- 케이크: 케이크 무늬\n- 꽃: 줄무늬\n- 폭죽 별: 별무늬\n- 눈덩이: 겨울 무늬\n- 포자 꽃: 무지개 무늬", + "book.spectrum.guidebook.present.page3.title": "포장지", + "book.spectrum.guidebook.preservation_ruins.name": "보존 유적", + "book.spectrum.guidebook.preservation_ruins.page0.text": "지하 깊은 곳에서 이 기이한 구조물을 발견했는데, 무지막지하게 튼튼한 돌로 지어진 것 같다. 이걸 세운 자가 누구든 간에 내 이해를 아득히 뛰어넘는 지식을 가졌음이 분명하다.\\\n안으로 들어갈 방법이 반드시 있을 것이다! 당장이 아니라면 나중에라도... 위치를 잘 기억해 두는 게 좋겠다.", + "book.spectrum.guidebook.preservation_ruins.page1.text": "지금까지 나는 나의 이 창조적인 탐구 여정에 나 홀로 있다고 굳게 믿어왔다. 하지만 내가 틀린 것 같다. 아주, 아주 단단히 틀렸다.\\\n이 구조물들을 지은 자는 분명 나와 비슷한 길을 걸었지만, 나보다 수백 리는 앞서 나갔다.\\\n그래도, 어쨌거나. 나는 기꺼이 이 도전을 받아들이겠다. 내게는 놈들이 가지지 못한 압도적인 무기가 하나 있다.\\\n*난 아직 살아있다고.*", + "book.spectrum.guidebook.preservation_ruins.page1.title": "도전인가?", + "book.spectrum.guidebook.preservation_ruins.page2.checklist.entry0": "보존 유적 #1", + "book.spectrum.guidebook.preservation_ruins.page2.checklist.entry1": "보존 유적 #2", + "book.spectrum.guidebook.preservation_ruins.page2.checklist.entry2": "보존 유적 #3", + "book.spectrum.guidebook.preservation_ruins.page2.text": "이 구조물들은 각기 다른 변형들로 존재하는 것 같다. 각각의 유적에서 나는 각기 다른 도전에 직면하게 될 것이다.", + "book.spectrum.guidebook.preservation_ruins.page2.title": "얼마나 많이 있는 걸까?", + "book.spectrum.guidebook.preservation_ruins.page3.text": "강력하고 마법적인 역장이다. [담청 방벽 장비](entry://equipment/trinkets/azure_dike_equipment)를 착용하자 안으로 발을 들이밀 수 있었다.", + "book.spectrum.guidebook.preservation_ruins.page3.title": "보호받는 입구", + "book.spectrum.guidebook.preservation_ruins.page4.text": "결국엔 모든 게 명확했다! 난 [이미 이 해답을 다 알고 있었다](entry://general/color_mixing_cmy).", + "book.spectrum.guidebook.preservation_ruins.page4.title": "색상 조합", + "book.spectrum.guidebook.preservation_ruins.page5.text": "정말 기괴한 유적이었다. 수중에 몇 가지 색상을 가지고 있었던 게 큰 도움이 되었다.", + "book.spectrum.guidebook.preservation_turrets.name": "보존 포탑", + "book.spectrum.guidebook.preservation_turrets.page0.text": "*진정한 공학적 성취의 결정체다. 하지만 세상에, 그 망할 결정체가 사람을 찢는다.*", + "book.spectrum.guidebook.preservation_turrets.page1.text": "현무암과 방해석으로 이루어진 강화된 외장으로 감싸여 있고, 이 장치의 심장부에서 부드럽게 고동치는 정체불명의 에너지를 동력으로 삼는 최첨단 기계 장치다.\\\n\\\n내 존재를 드러내기 무섭게 몸뚱아리에 바람 구멍을 내버릴 준비가 되어 있다.", + "book.spectrum.guidebook.primordial_fire.page0.text": "[#](bb00bb)부싯돌과 부시[#]()로 지피는 평범한 [#](bb00bb)불[#]()보다 훨씬 더 공격적인, 파멸꽃이 방출한 이 [#](bb00bb)태고의 불[#]()은 만족을 모르는 맹렬한 열기로 타오르는 듯하다. 마치 물질과 영혼을 똑같이 집어삼키는 것만 같다. 손상되지 않는 유일한 건 *에너지*다.\\\n끔찍하다.", + "book.spectrum.guidebook.primordial_fire.page1.text": "*영혼*이 없다면, 남는 것은 *횃불* 뿐이다.", + "book.spectrum.guidebook.primordial_fire.primordial_torch.text": "*어둠 속의 보랏빛 불빛.*", + "book.spectrum.guidebook.projectile_rebound.page0.text": "레벨이 오를수록 [#](449900)날아오는 투사체를 튕겨낼[#]() 확률이 조금씩 생겼다.", + "book.spectrum.guidebook.provider_node.name": "제공 노드", + "book.spectrum.guidebook.provider_node.page0.text": "연결된 인벤토리 안의 아이템들을 [파스텔 네트워크](entry://pastel_network/pastel_network) 상에서 사용할 수 있도록 제공해 준다.\\\n\\\n스스로 아이템을 밀어내지는 않지만, [수집 노드](entry://pastel_network/gather_node)의 요청을 받으면 내어준다.", + "book.spectrum.guidebook.puff_circlet.page0.text": "이 반짝이는 후프는 내 주변에 보호용 공기막을 형성해 준다.\\\n\\\n[#](2c2e8e)담청 방벽[#]()을 [#](495b24)4[#]() 단위만큼 부여한다. 충전량을 약간 소모하여, 투사체로부터 나를 보호해주며 높은 곳에서 떨어질 때 충격을 흡수해 줄 수도 있다.\\\n추가로 바람의 서클릿은 내가 [#](bb00bb)경작지[#]()를 짓밟아도 망가지지 않게 지켜준다.", + "book.spectrum.guidebook.puff_circlet.page1.text": "*스켈레톤 놈들에게 등짝을 저격당하던 날들도 이젠 안녕이다.*", + "book.spectrum.guidebook.pure_alcohol.page0.text": "내 기억력이 항상 완벽한 건 아닌 모양이다. 어쩌다 보니 내 손에 이 병이 들려있었다. 애초에 계획했던 것보다 *조금* 많이 독해진 게 틀림없다...", + "book.spectrum.guidebook.pure_resources.name": "순수한 자원", + "book.spectrum.guidebook.pure_resources.page0.text": "[결정생성기](entry://ink/crystallarieum)에서 재료를 성장시킨 결과, [#](bb00bb)원석[#]()과 비교하면 압도적으로 순수한, 결정화된 변종이 탄생했다.\\\n\\\n자세히 들여다보면 거의 보이지 않는 얇은 광택이 이것을 부드럽게 감싸 외부 환경으로부터 보호해 주는 것 같다. 이 장막이야말로 [#](bb00bb)순수한 구리[#]()가 산화되지 않도록 막아주는 비결인 듯하다.", + "book.spectrum.guidebook.pure_resources.page1.text": "아이러니하게도, 이 보호막 광택 덕분에 이것들이 [](item://minecraft:furnace)의 열기조차 가뿐히 견뎌낸다는 사실을 알아냈다. [](item://minecraft:blast_furnace)를 가져오니 그제야 간신히 녹아내렸다 (형편없는 효율이었지만, 어쨌든 녹긴 녹았다!).", + "book.spectrum.guidebook.pure_resources.page1.title": "용광로 제련", + "book.spectrum.guidebook.pure_resources.page2.text": "[잿불화로](entry://ink/cinderhearth)에서 구워내면 훨씬 더 만족스러운 결과물을 얻을 수 있다.", + "book.spectrum.guidebook.pure_resources.page2.title": "잿불화로 제련", + "book.spectrum.guidebook.pure_resources.page3.text": "조합하면 다시 해당하는 [#](bb00bb)순수한 자원[#]()으로 부술 수 있다.", + "book.spectrum.guidebook.pure_resources.page3.title": "압축", + "book.spectrum.guidebook.pure_resources.page4.text": "이보다 더 효율적이고 위험 부담 없는 방법은 없을 것이다.", + "book.spectrum.guidebook.pure_resources.page4.title": "네더라이트 제작", + "book.spectrum.guidebook.pyrite.page0.text": "단단하고 날카롭지만 놀라울 정도로 잘 부서진다. [칼날의 경계](entry://dimension/razor_edge) 전역에서 이 황철석을 발견했다.", + "book.spectrum.guidebook.pyrite.page1.text": "[#](449900)섬세한 손길[#]()로 캐지 않는 이상 황철석은 산산조각 나서 아이템으로 떨어지며, 다시 뭉치기 위한 조합 과정을 거쳐야만 한다.", + "book.spectrum.guidebook.pyrite.page1.title": "반 블록 & 계단", + "book.spectrum.guidebook.pyrite.page2.text": "이것의 성질에서 영감을 얻어 수많은 장식용 블록들을 설계했다. [#](bb00bb)조합[#]()하거나 [#](bb00bb)석재 절단기[#]()를 사용해 만들 수 있다.", + "book.spectrum.guidebook.pyrite.page3.text": "*저 날카로운 것들이 날 갈가리 찢어놓고 있다.*\\\n\\\n뭐, 정확히는 내 옷을 찢어먹는 거지만. 어쨌든 찢기는 건 매한가지다.", + "book.spectrum.guidebook.pyrite.page3.title": "황철석 단애", + "book.spectrum.guidebook.quitoxic_reeds.page0.text": "외계 생물처럼 생긴 이 식물은 습하고 축축한 생물군계에서 자라나고 있었다.\\\n[#](bb00bb)흙을 통째로 게걸스럽게 집어삼켜[#]() 양분으로 삼는 것 같다.", + "book.spectrum.guidebook.quitoxic_reeds.page1.text": "[줄기를 으깨버리자](entry://general/item_crushing) 그 안에서 보랏빛으로 반짝이는 가루를 추출해 낼 수 있었다!\\\n\\\n손가락으로 문질러보면 냄새도, 점도도 굉장히 기묘하다.\\\n*...잠깐만, 손가락이 뭐더라?*", + "book.spectrum.guidebook.radiance_pin.page0.text": "이 핀의 이름을 [광채의 지팡이](entry://equipment/radiance_staff)에서 따온 건 우연이 아니다. 여러모로 아주 비슷한 물건이니까.\\\n\\\n어두운 곳으로 들어가면, 이 핀은 내 주변에 자동으로 투명한 불빛들을 생성한다. 하지만 [광채의 지팡이](entry://equipment/radiance_staff)의 빛과 달리 이 불빛들은 아무런 자원을 소모하지 않는 대신, 시간이 지나면 서서히 빛을 잃고 희미해진다.", + "book.spectrum.guidebook.radiance_pin.page1.text": "동굴을 탐험할 때 내가 지나온 길을 빛의 흔적으로 되돌아보는 건 정말이지 매혹적이다.", + "book.spectrum.guidebook.radiance_staff.page0.text": "횃불에는 치명적인 약점이 하나 있다. 횃불을 꽂으려면 우선 내가 직접 그 소름 끼치는 어둠 속으로 기어 들어가야 한다는 것이다.\\\n\\\n반면에 광채의 지팡이가 지닌 '투광' 능력은 저 멀리 허공에다 불빛을 던져둘 수 있어, 안전한 곳에서 거대한 동굴을 훤히 밝힐 수 있다.\\\n마지막 최고의 장점은 이 불빛들이 눈에 보이지 않는 투명한 상태라는 것이다. 내 건축물들에 분위기 있는 조명을 연출하는 데 아주 기가 막힌다.", + "book.spectrum.guidebook.radiance_staff.page1.text": "설치된 불빛에 지팡이로 상호작용하여 빛의 밝기를 입맛대로 조절할 수 있다.\\\n심지어 물속에 띄워둘 수도 있다.", + "book.spectrum.guidebook.radiance_staff.page2.text": "[미광석](entry://general/shimmerstone)이 소모될 확률을 줄여준다.", + "book.spectrum.guidebook.radiant_glass.page0.text": "내 은신처와 건축물들을 효율적으로 밝힐 방법이 필요하다. 말하자면 [#](bb00bb)차광 유리[#]()의 완벽한 대척점이랄까?\\\n\\\n[미광석](entry://general/shimmerstone)이 지닌 발광 특성을 써먹는 것보다 더 완벽한 방법이 있을까? 제조 과정에서 들어간 [미광석](entry://general/shimmerstone) 덕분에, 이 유리는 그 자체의 내부에서부터 눈부신 빛을 뿜어낸다.", + "book.spectrum.guidebook.radiating_ender.page0.text": "이 지긋지긋한 엔더맨 자식들!\\\n\\\n이놈들은 밤만 되면 스멀스멀 기어 나와서 내 집 마당의 블록들을 파먹고 도망간다. 이대로 가다간 한 달 뒤엔 이 일대가 통째로 크레이터로 변해버릴 것 같은 불길한 예감이 든다.", + "book.spectrum.guidebook.radiating_ender.page1.text": "엔더맨들은 굳이 이 세계로 건너와 이 기이한 블록들을 내려놓고 간다. *이게 대체 뭐지*? 그리고 *도대체 왜* 이걸 여기에 두고 가는 걸까?\\\n\\\n내 손에 이걸 하나 쥐고 둘러보니... 세상에, 사방에 널려 있잖아! 왜 진작 눈치채지 못했을까? 어찌 됐든, 이 흥미로운 물질을 어떻게든 써먹을 구석이 분명히 있을 것이다.", + "book.spectrum.guidebook.rare_intact_gem": "아주 드물게 온전한 보석을 발견할 때가 있는데, 파편으로는 너무 작아서 시도할 수 없었던 레시피에 유용하게 쓸 수 있다. 물론 약간의 수고만 들이면 산산조각 난 파편들을 다시 온전하게 이어 붙일 수도 있다.", + "book.spectrum.guidebook.razing.page0.text": "너무 길어져서 이젠 읽기조차 벅찬 내 마법 부여 리스트를 동원해도, 여전히 내 우월한 시선을 피해 가는 끔찍한 블록들이 몇 개 남아있다.\\\n\\\n[#](bb00bb)흑요석[#](), 네놈은 오늘부로 끝이다.", + "book.spectrum.guidebook.razing.page1.text": "부수기 힘든 단단한 블록일수록 채굴 속도가 더 빠르게 증가한다.\\\n\\\n최대 레벨: 3\\\n채굴 도구에 적용 가능.\\\n행운과 동시에 부여할 수 없음.", + "book.spectrum.guidebook.razor_edge.page0.text": "이곳의 모든 것들은 오로지 나를 찔러 죽이기 위해 번성하는 것 같다. 환영받는 기분을 느끼기엔 최악의 장소다.", + "book.spectrum.guidebook.razor_edge.page1.text": "심지어 바닥마저도 그렇다. 빛과 물의 결핍으로 메말라 비틀어진 채 면도날처럼 날카롭게 벼려져 있으며, 칼날의 경계라는 이름이 붙은 것도 그 때문이다.", + "book.spectrum.guidebook.razor_edge.page2.text": "스치기만 해도 끔찍한 고통을 안겨주는 작고 사악한 식물들이다.", + "book.spectrum.guidebook.redstone_calculator.page0.text": "지하에서 캐낸 그 새빨간 수학 가루를 가지고, 나는 고작 앵무새 수준의 계산을 시키겠답시고 거대한 구조물들을 지어댔다. 그걸 보고 있자면 정말 숨이 턱 막힌다 (*세상도 숨이 막혀서 버벅거리고 멈춰버리는 건 덤이다*). 에너지로 가득 찬 [황수정](entry://general/shards@citrine)은 아주 비좁은 공간 안에 기초적인 산술 논리를 우겨넣기에 완벽한 재료다.", + "book.spectrum.guidebook.redstone_calculator.page1.text": "모드: 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지, 최솟값, 최댓값. 첫 번째 입력은 뒤쪽을, 두 번째 입력은 양옆에서 들어오는 가장 높은 신호를 기준으로 한다.", + "book.spectrum.guidebook.redstone_interaction.name": "레드스톤 상호작용", + "book.spectrum.guidebook.redstone_interaction.page0.text": "[#](bb00bb)파스텔 노드[#]()에 [#](449900)레드스톤 신호[#]()를 가하면, 노드는 자신과 연결되어 있던 인벤토리와의 고리를 끊어버린다.", + "book.spectrum.guidebook.redstone_interaction.page1.text": "- [수집 노드](entry://pastel_network/gather_node)는 아이템 요청을 중단한다\n- [제공 노드](entry://pastel_network/provider_node)는 자신의 아이템을 내어주지 못하게 된다\n- [송신 노드](entry://pastel_network/sender_node)는 자신의 인벤토리를 비우는 작업을 멈춘다\n- [저장 노드](entry://pastel_network/storage_node)는 아이템을 받거나 내어주는 모든 기능을 상실한다", + "book.spectrum.guidebook.redstone_interaction.page2.text": "[#](bb00bb)파스텔 노드[#]()에 내장된 이 레드스톤 차단 기능도 훌륭하긴 하지만, 때로는 훨씬 더 전문적이고 세밀한 통제가 필요한 상황이 찾아온다. 내가 최근에 알게 된 순수한 자원들이 바로 그런 정밀한 임무를 수행하기에 딱 알맞은 특성을 지니고 있는 것 같다.", + "book.spectrum.guidebook.redstone_sand.page0.text": "[#](449900)레드스톤 신호[#]()를 다루면서 가장 짜증나는 일 중 하나를 꼽으라면, 수직으로 신호를 끌어올리는 게 단연코 최악이었다.\\\n\\\n비록 [](item://minecraft:redstone_block)만큼 빽빽하진 않더라도, 레드스톤을 뭉쳐서 고체 블록 형태로 만들었더니, [](item://minecraft:redstone) 특유의 신호 전달 능력을 고스란히 간직하고 있는 것 같다.", + "book.spectrum.guidebook.redstone_sand.page1.text": "...뭐, *거의* 완벽한 고체긴 하다.", + "book.spectrum.guidebook.redstone_sand.features.title": "특성", + "book.spectrum.guidebook.redstone_sand.features.text": "- 어느 방향으로든 [#](449900)신호[#]()를 전달한다\n- 인접한 [](item://minecraft:redstone)에는 즉시 신호를 전송하지만, 다른 레드스톤 모래로 전송될 때는 서서히 증폭되는 신호를 만들어낸다\n- 에너지를 머금고 저장한다. 입력을 끊어도 신호가 즉시 꺼지지 않고 천천히 약해진다", + "book.spectrum.guidebook.redstone_sand.features2.text": "- 동력을 받았을 때 아래를 받쳐주는 블록이 없으면 떨어진다\n- 추락하는 동안에도 머금고 있던 에너지를 잃지 않는다", + "book.spectrum.guidebook.redstone_timer.page0.text": "시간을 계산하는 방법은 수도 없이 많지만, 그중 대부분은 솔직히 좀... 구닥다리 같다.\\\n\\\n하지만 내 소매 속에 숨겨둔 이 새로운 비장의 무기에는 비할 바가 못 된다. 바로 시간과 깊은 친화력을 지닌 [자수정 조각](entry://general/shards@amethyst)이다.", + "book.spectrum.guidebook.redstone_timer.page1.text": "신호의 활성화 시간(상호작용)과 비활성화 시간(빈손으로 웅크리고 상호작용) 둘 다 내 입맛대로 조절할 수 있다.", + "book.spectrum.guidebook.redstone_transceiver.page0.text": "부드러운 공명은 [오닉스](entry://general/shards@onyx)를 통해 어마어마하게 증폭되어, 알맞은 수신기만 있다면 벽 너머에서조차 그 파동을 감지할 수 있을 정도가 된다.\\\n이전에 [보석 조각](entry://general/shards)을 가지고 했던 수많은 실험 데이터들 덕분에, 이런 송수신기 시스템을 고안해 내는 건 내게 식은 죽 먹기였다.\\\n도달 거리: 16블록.", + "book.spectrum.guidebook.redstone_transceiver.page1.text": "빈손으로 상호작용하면 송신과 수신 모드를 오간다. 수신 모드일 때는 출력 방향이 고정된다. 염료나 안료, 혹은 붓을 사용해 주파수를 바꿀 수 있다.", + "book.spectrum.guidebook.remembering": "기억해 내기", + "book.spectrum.guidebook.reprise.page0.text": "[#](bb00bb)후렴화[#]()를 끓여 빚어낸 이 술은 그 식물의 독특한 맛뿐만 아니라, 그 기이한 특성까지 고스란히 물려받기는 커녕 오히려 증폭시켜 버렸다.\\\n\\\n이 술을 들이켜면 나는 먼 거리의 무작위 위치로 순간이동하게 될 것이다. 알코올 도수가 높을수록, 나는 더 머나먼 곳으로 날아갈 것이다.", + "book.spectrum.guidebook.reprise.page1.text": "*분명 라즈베리 맛이 나는데, 라즈베리는 한 톨도 안 들어갔다. 기묘하다.*", + "book.spectrum.guidebook.resonance.page0.text": "내 호기심을 지독하게 자극하지만, 아무리 조심스럽게 캐내려 해도 절대 흠집 하나 없이 온전하게 캐낼 수 없었던 블록들이 항상 존재해 왔다. 그런데 최근, 나는 그 블록들이 요즘 내가 푹 빠져 있는 보석들과 아주 비슷한 방식으로 진동한다는 사실을 눈치챘다.\\\n만약 내가 완벽하게 일치하는 주파수만 찾아낼 수 있다면, 마침내 그 블록들을 온전한 형태로 내 두 손에 거머쥘 수 있을지도 모른다.", + "book.spectrum.guidebook.resonance.page1.text": "부드러운 진동을 이용해 일부 블록을 세상에 놓여있던 모습 그대로 캐거나, 특별한 마법적 특성을 보존하거나, 혹은 아예 완전히 다른 무언가로 변형시켜 버린다.\\\n\\\n최대 레벨: 1\\\n채굴 도구에 적용 가능.\\\n섬세한 손길, 행운, 해충 방제와 동시에 부여할 수 없음.", + "book.spectrum.guidebook.resonance.page10.text": "리스폰 정박기가 자신이 머금고 있던 충전량을 그대로 유지한다.", + "book.spectrum.guidebook.resonance.page11.text": "표지판이 쓰여 있던 글귀와 염색된 색상을 고스란히 간직한다.", + "book.spectrum.guidebook.resonance.page11.title": "표지판", + "book.spectrum.guidebook.resonance.page12.text": "부드러운 진동이 블록 속에 똬리를 틀고 숨어 있던 좀벌레들을 깊은 잠에 빠뜨린다.\\\n\\\n나는 잠든 좀벌레가 들어있는 그 블록들을 통째로 주머니에 쑤셔 넣고, 놈들이 자기들에게 무슨 일이 벌어지고 있는지도 모르는 채로 끌고 다닐 수 있게 되었다.\\\n달콤하고도 훌륭한 복수다.", + "book.spectrum.guidebook.resonance.page12.title": "벌레 먹은 블록", + "book.spectrum.guidebook.resonance.page3.text": "작은 보석 봉오리들은 대개 너무나도 연약해서 곡괭이를 들이대면 부서져 버리기 십상이다.\\\n\\\n하지만 딱 들어맞는 주파수를 가해주면, 마치 [#](449900)섬세한 손길[#]()을 쓴 것처럼 이 작은 봉오리들이 스스로 돌에서 미끄러지듯 깔끔하게 떨어져 나온다.", + "book.spectrum.guidebook.resonance.page3.title": "보석 봉오리", + "book.spectrum.guidebook.resonance.page4.text": "공명 마법으로 [#](bb00bb)광석[#]()을 부수면 거친 원석 대신 [순수한 자원](entry://ink/pure_resources)을 토해낸다.", + "book.spectrum.guidebook.resonance.page5.text": "색깔 잎에 자극을 주어 훨씬 더 많은 [#](bb00bb)묘목[#]()이 떨어지게 만든다.\\\n\\\n이 마법을 괭이에 바르면, 드디어 지긋지긋한 묘목 부족에서 벗어나 [색깔 나무](entry://general/colored_trees)를 무한정 길러낼 수 있는 핵심 열쇠가 되어줄 것이다.", + "book.spectrum.guidebook.resonance.page5.title": "색깔 잎", + "book.spectrum.guidebook.resonance.page6.text": "심연을 헤매던 중, 적들을 끝없이 토해내는 섬뜩한 철창들과 마주쳤다. 어떤 미치광이가 이런 흉물을 박아두었는지, 대체 무슨 목적인지, 저딴 쓰레기 같은 전리품을 위해 이런 수고를 감수할 가치가 있었는지는 내게도 미스터리다. 하지만 나는 분명 이걸 써먹을 완벽한 계획을 떠올렸다. 이 끔찍한 걸 만든 자가 내가 몇 개 훔쳐 갔다고 징징대지 않기만을 바랄 뿐이다.", + "book.spectrum.guidebook.resonance.page7.text": "지하의 잊혀진 도시에서 발견되는 이 무지막지하게 단단한 돌을 수확할 수 있게 해 준다.", + "book.spectrum.guidebook.resonance.page8.text": "스컬크 비명체가 워든을 불러내는 그 끔찍한 능력을 고스란히 간직한 채 캐진다.", + "book.spectrum.guidebook.resonance.page9.text": "솔질 가능한 블록들이 속에 품고 있던 전리품을 그대로 유지한다. 나중에 집에 가서 느긋하게 솔질하면 된다.", + "book.spectrum.guidebook.resonance.page9.title": "솔질 가능한 블록", + "book.spectrum.guidebook.resonance_harvesting": "[공명](entry://enchanting/enchantments/resonance) 마법이 부여된 도구는 이제 그 까다로운 [#](bb00bb)싹 틔우는 블록[#]()마저 온전하게 캐낼 수 있다.", + "book.spectrum.guidebook.resonance_shards.page0.text": "[음명석](entry://dimension/hummingstone)이 내뿜는 아름다운 소리들이 서로 중첩되고 얽혀들며 마지막 찬가로 끝내 산산조각으로 터져 나온다는 사실을 알게 되었다.\\\n\\\n그 부서진 잔해들은 내 손안에 들어와서도 결코 떨림을 멈추지 않는다. 마치 돌 자체가 어떤 고유한 에너지를 부여받아 생명력이라도 얻은 것처럼 말이다.", + "book.spectrum.guidebook.resonant_lily.page0.text": "참으로 흥미로운 현상이다. [#](bb00bb)꽃[#]()이 뿌리를 통해 [액체 수정](entry://general/liquid_crystal)을 빨아들이면, 어느새 이 신출귀몰한 식물로 탈바꿈한다.", + "book.spectrum.guidebook.restoration_tea.page0.text": "비 오는 저녁, 따뜻한 난로가에 앉아 느긋하게 차 한 잔을 홀짝이는 것보다 더 완벽하게 아늑한 일이 있을까?\\\n물론 있다. 보스를 작살내고 온 다음 그러는 것이다.\\\n\\\n[비취 덩굴](entry://general/jade_vines)의 꽃잎을 끓여 우려낸 이 차는 지친 심신을 달래줄 뿐만 아니라, 위더가 뿜어내는 그 치명적이고 끔찍한 저주로부터 나를 완벽하게 보호해 준다. *이보다 편리할 순 없지.*", + "book.spectrum.guidebook.ring_of_aerial_grace.page0.text": "이제 나도 내가 몽상가처럼 붕 떠 있는 걸 좋아하는 구제 불능이라는 사실쯤은 아주 잘 안다.\\\n\\\n물론, 이번엔 은유가 아니라 *문자 그대로* 구름 위를 둥둥 떠다니게 되었지만 말이다!", + "book.spectrum.guidebook.ring_of_aerial_grace.page1.text": "*오늘 기분이 정말 깃털처럼 가볍군*", + "book.spectrum.guidebook.ring_of_denser_steps.page0.text": "난 예전부터 내 작고 앙증맞은 장신구들에 그 엄청난 양의 잉크를 쑤셔넣을 때마다 그게 다 어디로 빨려 들어가는 건지 정말 궁금했다. 최고급 와인이 포도알에 스며들 듯 재질 속으로 흔적도 없이 스며드는 걸까?\\\n사실 그걸 알아내려고 저울을 하나 만들려 했는데. 뭐, 썩 잘 되진 않았다. 하지만 이 위대한 탐험가가 겨우 그깟 실패 하나에 이 엄청난 발견을 그냥 썩혀둘 리가 없지.\\\n\\\n보아라, *바로 이 반지를*!", + "book.spectrum.guidebook.ring_of_denser_steps.page1.text": "*지금까지 내 머릿속에서 나온 가장 묵직한 아이디어일 거다*", + "book.spectrum.guidebook.ring_of_pursuit.page0.text": "광질이야말로 내 주특기다.\\\n그저 도구를 강화하는 데만 매달릴 게 아니라, 내 채굴 숙련도 그 자체를 통째로 끌어올린다는 발상을 이제야 떠올렸다는 게 오히려 기적에 가까울 지경이다. 심지어 이 반지는 내 능력이 발전함에 따라 함께 성장할 것이다.", + "book.spectrum.guidebook.ring_of_pursuit.page1.text": "[색상 추출기](entry://ink/color_picker)에서 [자홍색 잉크](entry://ink/ink)를 주입하면 채굴 속도가 더 향상된다.", + "book.spectrum.guidebook.rock_candy.about.text": "만약 [액체 수정](entry://general/liquid_crystal)에 [](item://minecraft:sugar) (정확히 말하면 4개)을 듬뿍 녹여 넣고 [](item://minecraft:stick)을 꽂아 둔다면, 시간이 지나면서 막대기에 달콤하고 바삭바삭한 **사탕**이 주렁주렁 열리게 된다!\\\n\\\n단순히 설탕만 넣는 것 말고 다른 것도 넣을 수 있지 않을까? 애초에 액체 *수정*이기도 하고...", + "book.spectrum.guidebook.rock_candy.growing.text": "부록: 바삭바삭한 사탕 부분만 핥아 먹어라. *절대로* 막대기까지 씹어 삼키려 들지 마라! 내 이가 부러질 뻔한 경험담이니 날 믿어라.", + "book.spectrum.guidebook.rock_candy.growing.title": "락캔디 기르기", + "book.spectrum.guidebook.gemstone_rock_candy.name": "보석 락캔디", + "book.spectrum.guidebook.gemstone_rock_candy.about.text": "설탕 대신 [보석 가루](entry://general/gemstone_powder)를 액체에 진하게 녹여내면, [락캔디](entry://cuisine/rock_candy)가 그 보석을 똑 닮은 빛깔을 띠게 된다!\\\n항상 저 반짝이는 돌멩이들이 무슨 맛일까 핥아보고 싶었는데, 드디어 소원 성취다!\\\n\\\n정답은: *끝내주게 맛있다*!", + "book.spectrum.guidebook.gemstone_rock_candy.that_joke_again.text": "\\\n\\\n\\\n\\\n\\\n\\\n\\\n\\\n\\\n\\\n\\\n\\\n\\\n\\\n부록: 막대기는 *여전히* 톱밥 맛이 난다.", + "book.spectrum.guidebook.rock_crystal.page0.text": "[칼날의 경계](entry://dimension/razor_edge) 곳곳에는 거대한 석영 수정 군집들이 점점이 흩어져 있다.\\\n\\\n솔직히 고백하건대, 네더 석영이 작게 떨어져 나오는 부스러기 결정 형태로만 발견되다 보니, 석영이 이렇게 한데 융합되었을 때 얼마나 끔찍하게 단단해지는지 까맣게 잊고 있었다. 이 녀석은 진짜 **무식하게 단단하다**.", + "book.spectrum.guidebook.rock_crystal.page1.text": "솔직히, 수정이 깨지기 전에 내 모루가 먼저 두 동강 나버릴까 봐 살짝 걱정된다.", + "book.spectrum.guidebook.ruin.name": "실험 #3: 파멸", + "book.spectrum.guidebook.ruin.page0.text": "바로 이거다. 내 공식의 완벽한 결정체. 그깟 작은 실패 하나가 날 멈출 순 없지.\\\n이거라면 이전에 내가 절대 부술 수 없다고 단정 지었던 그 오만방자한 물질들조차 갈가리 찢어버릴 만큼 충분히 공격적일 것이다.\\\n애둘러 말하지 않겠다. 이 물질은 본질적으로 그야말로 [#](ff0000)끔찍하게[#]() 설계되었다. 내가 괜히 재미로 이런 이름을 붙인 게 아니다.", + "book.spectrum.guidebook.ruin.page1.text": "내 직감이 말해주고 있다. 조금만 삐끗해도 이 세상 전체를 시원하게 말아먹을 수 있을 거라고.\\\n뭐, 위대한 진보를 위해선 어쩔 수 없는 희생이 따르는 법이지.", + "book.spectrum.guidebook.sawblade_holly.name": "톱날 호랑가시나무", + "book.spectrum.guidebook.sawblade_holly.page0.text": "이 열매들을 보면 [#](bb00bb)달콤한 열매[#]()가 떠오른다. 하지만 그 달콤한 녀석들과는 달리, 이건 입안이 텁텁해질 정도로 퍽퍽하다.\\\n\\\n먹을 수는 있지만, 씹을 때의 질감이 꽤나 역겹다. 그래도 굶어 죽기 직전이라면 이거라도 감지덕지지.", + "book.spectrum.guidebook.sawblade_holly.page1.text": "톱날 호랑가시나무 덤불에 가위질을 해서 수확할 수 있다. [물약 반응물](entry://brewing/complex_reagents@prickly_bayleaf)이나 요리 재료로 써먹을 수 있다.\\\n\\\n*확실히 날것으로 씹어 먹는 것보다는 요리해서 먹는 게 소화하기 훨씬 편하다...*", + "book.spectrum.guidebook.scarred.page0.text": "자연적인 방법으로는 체력을 회복하지 못하게 억눌러버릴 뿐만 아니라, 달리는 것조차 틀어막아 버린다.\\\n\\\n*이 상태로 뭔가가 날 습격하기라도 한다면, 그야말로 끔찍한 악순환의 굴레에 빠질 것이리*", + "book.spectrum.guidebook.semi_permeable_glass.page0.text": "밤마다 기어 나오는 그 성가신 괴물들은 진작에 위협 수준을 벗어났고, 이젠 기껏해야 자원 공급책 정도로 전락했다. 하지만 그렇다고 놈들이 끈질기게 내 뒤를 밟고 귀찮게 구는 걸 멈추진 않는다.\\\n난 그 벌레 같은 놈들을 내 기지 밖으로 쫓아내는 데 생각보다 훨씬 많은 시간을 허비했다.", + "book.spectrum.guidebook.semi_permeable_glass.page1.text": "그러다 문득 내가 예전에 만들어뒀던 [보석 유리 레시피](entry://decoration/gemstone_glass)가 떠올랐다.\\\n\\\n거기에 마법의 에너지를 살짝 더해주니, 투명함을 유지하면서 오직 나만 자유롭게 통과할 수 있는 (하지만 그 녀석들은 절대 못 들어오는!) 유리를 만들어내는 건 일도 아니었다.\\\n\\\n보너스: 경쟁자 놈들을 완벽하게 속여 넘길 수 있도록, 겉보기엔 그냥 평범한 유리랑 똑같이 생기게 만들었다.", + "book.spectrum.guidebook.semi_permeable_glass.page2.text": "평범한 유리와 똑같이 생겼지만, 오직 플레이어만이 통과할 수 있다. 그 외의 모든 생명체들은 유리창에 머리를 박는 파리 떼처럼 그대로 튕겨 나갈 것이다.", + "book.spectrum.guidebook.semi_permeable_glass.page2.title": "단순한 변형", + "book.spectrum.guidebook.semi_permeable_glass.page3.text": "모든 보석의 색상뿐만 아니라, 몇 가지 추가적인 색상으로도 만들어낼 수 있다.", + "book.spectrum.guidebook.semi_permeable_glass.page3.title": "보석 변형", + "book.spectrum.guidebook.semi_permeable_glass.page4.title": "차광 변형", + "book.spectrum.guidebook.semi_permeable_glass.page5.title": "광채 변형", + "book.spectrum.guidebook.sender_node.name": "송신 노드", + "book.spectrum.guidebook.sender_node.page0.text": "송신 노드는 자신과 연결된 인벤토리를 어떻게든 비워내려고 끊임없이 시도할 것이다.\\\n\\\n아이템을 밀어내는 우선순위는 다음과 같다.\n1. [수집 노드](entry://pastel_network/gather_node)\n2. [저장 노드](entry://pastel_network/storage_node)", + "book.spectrum.guidebook.serendipity_reel.name": "행운의 릴", + "book.spectrum.guidebook.serendipity_reel.page0.text": "솔직히 말해, 이젠 굶어 죽지 않으려고 억지로 낚시질을 할 필요는 없다. 하지만 이건 여전히 내가 남몰래 즐기는 소소한 취미 중 하나다. 연못가에 걸터앉아 잔잔하게 일렁이는 파도를 보고 있자면 마음이 한없이 평온해진다.\\\n\\\n그렇다고 이따금씩 낚여 올라오는 수확물이 반갑지 않다는 뜻은 아니다. 두 개, 아니면 세 개. 그것도 아니면...", + "book.spectrum.guidebook.serendipity_reel.page1.text": "전리품을 두 배로 낚아 올릴 확률을 부여한다. 어쩌면 그 이상일지도!\\\n\\\n최대 레벨: 2\\\n스펙트럼의 낚시대에 적용 가능.", + "book.spectrum.guidebook.seven_league_boots.name": "축지법의 장화", + "book.spectrum.guidebook.seven_league_boots.page0.text": "이동하는 건 항상 끔찍하게 지루한 일이고, 특히 [정동](entry://general/geodes)들이 세상 곳곳에 제멋대로 흩어져 있는 상황에선 길 위에서 버리는 시간이 기하급수적으로 늘어날 뿐이다.\\\n\\\n이 고질적인 문제를 해결하기 위해, 나는 이전과는 비교도 안 되는 기동성을 선사해 줄 이 축지법의 장화를 고안해 냈다.", + "book.spectrum.guidebook.seven_league_boots.page1.text": "이동 속도와 딛고 올라설 수 있는 블록의 높이를 모두 증가시켜 준다.", + "book.spectrum.guidebook.seven_league_boots.page2.text": "이동 속도 보너스를 한층 더 끌어올린다.", + "book.spectrum.guidebook.shale_clay.page0.text": "음, 그러니까... 셰일과 점토가 겹겹이 층을 이뤄 쌓인 퇴적암이다. 뭐, 보기에 예쁘다는 것 말고는 딱히 눈에 띄게 특별한 점은 없다.", + "book.spectrum.guidebook.shale_clay.page1.text": "[#](bb00bb)조합[#]()이나 [#](bb00bb)석재 절단기[#]()를 사용해 이 셰일 점토를 수많은 장식용 블록들로 깎아낼 수 있다.", + "book.spectrum.guidebook.shale_clay.page2.text": "셰일 점토를 윤나게 다듬으면, 아주 근사한 잿빛 색감이 드러난다.\\\n하지만 이 돌덩이는 비바람이나 직사광선 같은 환경에 노출되면 [#](449900)시간이 지남에 따라 풍화되어[#]() 본래의 칙칙한 갈색빛으로 되돌아가 버리는 것 같다.", + "book.spectrum.guidebook.shale_clay.page4.text": "생긴 것도 경작지 같고, 입에 넣어봐도 경작지 맛이 나지만, 정작 진짜 경작지로 쓰기엔 끔찍하게 부적합하다. 작물을 심을 수는 있지만, 문자 그대로 단 1인치도 자라지 않을 것이다.", + "book.spectrum.guidebook.shards.illustration.amethyst.text": "*시간의 흐름*", + "book.spectrum.guidebook.shards.illustration.citrine.text": "*생명의 열정*", + "book.spectrum.guidebook.shards.illustration.moonstone.text": "*영원의 우울*", + "book.spectrum.guidebook.shards.illustration.onyx.text": "*절대의 끝없음*", + "book.spectrum.guidebook.shards.illustration.topaz.text": "*세계의 무게*", + "book.spectrum.guidebook.shards.name": "보석 조각", + "book.spectrum.guidebook.shards.page0.text": "[정동](entry://general/geodes) 안에서 이 흥미로운 보석을 발견했다. 이건 세상에 굴러다니는 흔해 빠진 여타 아이템들과는 질적으로 다르다. 이건 특별하다.\\\n\\\n각각의 보석은 하나의 원색을 상징하는 동시에, 특정한 자연의 힘을 대변하고 있다.", + "book.spectrum.guidebook.shards.page1.text": "토파즈 조각은 손에 쥐었을 때 믿을 수 없을 만큼 묵직하다. 이 보석은 내가 지금껏 다뤄본 물질 중 가장 단단하고 파괴 불가능한 것 중 하나임이 즉시 증명되었으며, 아마 다이아몬드만이 이에 필적할 것이다. 나는 가파른 언덕 꼭대기나 구름을 찌르는 산맥의 정상에 박힌 정동에서 이 토파즈를 찾아냈다.\\\n토파즈는 [#](5bffed)**물질**[#]()을 상징한다.", + "book.spectrum.guidebook.shards.page1.title": "토파즈 조각", + "book.spectrum.guidebook.shards.page2.text": "눈부신 자홍빛이 이 보석 안에서 굴절되며 찬란하게 빛난다.\\\n정동 안에서 억겁의 세월을 견디며 응축된 이 보석은 경외감마저 뿜어낸다. 나는 영속성을 상징하는 이 보석을 세계의 가장 깊숙한 심연에서 찾아냈다.\\\n\\\n자수정은 [#](ff4ff6)**시간**[#]()을 상징한다.", + "book.spectrum.guidebook.shards.page2.title": "자수정 조각", + "book.spectrum.guidebook.shards.page3.text": "태양의 눈부신 빛이 흩어져 대지의 따스함으로 스며드는 지표면 근처에서 이 노란색 보석을 우연히 발견했다.\\\n\\\n이 보석의 눈부신 노란빛은 순수한 [#](eded00)**에너지**[#]()를 뿜어내며, 쥐고 있으면 언제나 기분 좋은 미열이 전해져 온다.", + "book.spectrum.guidebook.shards.page3.title": "황수정 조각", + "book.spectrum.guidebook.shards.page4.text": "오닉스는 거의 칠흑에 가까운 새까만 색이다. 마치 주변의 빛마저 집어삼켜 버리는 듯한 착각을 불러일으킨다.\\\n\\\n에너지, 물질, 시간의 완벽한 융합체인 오닉스는, 내 마법 도구와 장치들의 힘을 집중시키는 훌륭한 [#](302951)**촉매**[#]() 역할을 톡톡히 해낸다.", + "book.spectrum.guidebook.shards.page4.title": "오닉스 조각", + "book.spectrum.guidebook.shards.page5.text": "이것이 뿜어내는 하얀빛은 선선한 여름밤 하늘에 뜬 달의 부드럽고 위로가 되는 달빛을 떠올리게 한다. 이것에서 뿜어져 나오는 평온함은 곤히 잠든 고양이처럼 내 마음을 고요하게 어루만지면서도, 동시에 언제든 날아오를 준비가 된 포식자처럼 묵직한 존재감을 남긴다. 내 영혼을 위한 연고이자, 틈을 보이지 않는 경계심이다.\\\n\\\n월장석은 [#](b9bebe)**순수**[#]()를 체현한다.", + "book.spectrum.guidebook.shimmerstone.name": "미광석", + "book.spectrum.guidebook.shimmerstone.page0.text": "빛이라는 형태의 에너지를 뿜어낼 뿐만 아니라, 그 빛을 조작할 수 있는 힘까지 지닌 생동감 넘치는 호박빛 광석이다.\\\n\\\n주로 고지대의 동굴이나, 태양의 강렬한 빛이 물러나고 아늑한 따스함이 깃드는 해수면보다 높은 곳에서 이 미광석 원석을 찾아냈다.", + "book.spectrum.guidebook.shimmerstone.page1.text": "온전한 미광석 블록은 눈부신 호박빛으로 빛나는 입자들을 사방으로 뿜어낸다.", + "book.spectrum.guidebook.shimmerstone_lights.name": "미광석 광원", + "book.spectrum.guidebook.shimmerstone_lights.page0.text": "이 경이로운 세계에서 보냈던 첫 며칠 밤, 나는 대충 얼기설기 지어 올린 오두막을 횃불 몇 개로 밝히곤 했다. 뭐 나름 분위기 있긴 했지만, 정말 원시적이었다.\\\n그 어두침침하고 횃불에 그을린 과거를 뒤로하기 위해, 나는 [미광석](entry://general/shimmerstone)의 힘을 빌려 이 근사한 광원을 창조해 냈다.", + "book.spectrum.guidebook.shimmerstone_lights.page1.text": "어떤 윤나는 블록을 받침으로 쓰느냐에 따라 다양한 변형을 만들어낼 수 있다.", + "book.spectrum.guidebook.shimmerstone_lights.page2.text": "흑작암을 사용할 수도 있으며, 이 경우 유독 어두운 분위기를 풍기는 변형이 탄생한다.", + "book.spectrum.guidebook.shimmerstone_lights.page2.title": "흑작암 변형", + "book.spectrum.guidebook.sleep.name": "수면의 연금술", + "book.spectrum.guidebook.sleep.page0.text": "밤의 물약들에 대해 곱씹어 볼수록, 내가 이 수면 효과에 얼마나 굴복하기 쉬운지는 참으로 다양한 요소들이 결정한다는 사실이 너무나도 명백해졌다. 다른 생명체들의 경우를 보자면... 가장 결정적인 요인은 정신적 구조와 생물학적 특성의 조합인 것 같다. 잠을 자지 않는 절지동물들은 이 마법에 꽤나 질긴 저항력을 보인 반면, 영원한 안식에 목마른 언데드들은 끔찍할 정도로 취약하다. 순수한 의지로만 이루어친 존재들이라면 거의 면역이나 다름없겠지.", + "book.spectrum.guidebook.sleep.page0.title": "수면과 의지력", + "book.spectrum.guidebook.sleep.page1.text": "이 연금술의 심연을 더 깊이 파고들수록, 내 안의 우려도 점점 더 짙어져 갔다. 마치 이 끝없는 수면의 파도가 나를 통째로 집어삼켜 버릴 것만 같은 불길한 예감이 든다. 처음에는 여러 효과들이 단 하나의 정수에 얽혀있는 걸 보고 조금 기이하다고 생각했지만, 별 대수롭지 않게 넘겨버렸었다. 하지만 지금은 장담할 수가 없다. 이 꽃망울들과 그것들이 제공하는 넥타르, 그리고 은은한 빛의 흔적을 남기는 [치명적 수면](entry://brewing/effects/fatal_slumber)까지... 이 모든 것들에 맴도는 기운은, 소름 끼칠 정도로 [신성](entry://brewing/effects/divinity)의 그것을 닮아있다.", + "book.spectrum.guidebook.sleep.page1.title": "벨벳과 은빛", + "book.spectrum.guidebook.sleep_resistance": "이 양조품은 벨벳 마법의 근원을 파고드는 밤의 연금술의 역작이다. 따라서 이 마법은 대상의 정신력에 강하게 영향을 받으며, 나의 경우에는 내 수면 저항력이 그 방패가 되어줄 것이다.", + "book.spectrum.guidebook.slush.page0.text": "믿을 수 없을 만큼 푹신하고 축축한 흙이다. 지렁이 냄새가 난다.", + "book.spectrum.guidebook.slush.page1.text": "언제나 촉촉함을 유지하며, 영양분을 듬뿍 머금은 경작지다. 식물들이 그야말로 번성한다.", + "book.spectrum.guidebook.smelting_back": "다시 녹여내기", + "book.spectrum.guidebook.sniping.page0.text": "[#](bb00bb)활[#]()에 비하면, [#](bb00bb)쇠뇌[#]()는 존재감이 희미한, 좀 불쌍한 신세를 면치 못하고 있었다.\\\n\\\n하지만 저격 마법을 바르면, 쇠뇌는 그 즉시 치명적인 원거리 병기로 탈바꿈한다.", + "book.spectrum.guidebook.sniping.page1.text": "피해량, 명중률, 투사체의 비행 속도를 대폭 끌어올린다.\\\n\\\n최대 레벨: 2\\\n쇠뇌에 적용 가능.\\\n다중 발사와 동시에 부여할 수 없음.", + "book.spectrum.guidebook.somnolence.page0.text": "[#](449900)레벨에 비례하여 강해지는, 대상을 멍하게 만드는 지독하게 끔찍한 효과다[#](). 이건 *나 자신을 포함해서* 그 어떤 생명체에게든 자비 없이 먹혀든다.\\\n\\\n어쨌거나, 이 효과는 나를 너무 몽롱하게 만들어서 [#](449900)시간이나 주변 환경에 상관없이 언제든 쓰러져 잘 수 있게[#]() 해주는데, 이건 꽤 쓸모가 있을지도 모르겠다!", + "book.spectrum.guidebook.soothing_bouquet.page0.text": "밤의 소금은 내 수면의 질을 획기적으로 개선해 준 동시에 내 허리 통증을 최악으로 만들어준 눈부신 실패작이자 성공작이었다. 하지만 밤의 연금술에 대한 내 지식이 한층 더 깊어지면서, 이제 이 구상을 훨씬 더 우아하게 실현해 낼 수 있을 것 같은 확신이 든다.\\\n\\\n\\\n*이 바닥에선 우아함이 생명이다. 꽃의 향기를 즐길 수 있는데 굳이 소금 가루나 들이마시고 있을 이유가 없잖아?*", + "book.spectrum.guidebook.soothing_bouquet.page1.text": "자정에 맞춰 제작 의식을 치러야만 할 것이다.\\\n\\\n*이건 단순히 너무 비싼 수면 가방이 아니다. 단연코 압도적이고 완벽한 너무 비싼 수면 가방이다!*", + "book.spectrum.guidebook.soporific": "수면 (저항력)", + "book.spectrum.guidebook.spawner_creature_change.name": "생성기 몬스터 바꾸기", + "book.spectrum.guidebook.spawner_creature_change.page0.text": "몬스터 생성기에 아예 새로운 종류의 몬스터를 덮어씌워, 엉뚱한 놈들을 쉴 새 없이 토해내게 만드는 방법을 마침내 알아냈다!\\\n내 입으로 말하긴 좀 그렇지만 상당히 소름 끼치는 능력이다.\\\n\\\n나는 생명이라는 고귀한 선물을 위한 창조자가 될 것인가, 아니면 오직 그것을 다시 갈가리 찢어버리기 위한 창조자가 될 것인가?", + "book.spectrum.guidebook.spawner_creature_change.page1.text": "나는 과연 어떤 사람일까? 이런 경우라면, 내 도덕성을 나침반으로 삼아야 할지도 모르겠다.", + "book.spectrum.guidebook.spawner_creature_change.page1.title": "생명체 결속하기", + "book.spectrum.guidebook.spawner_manipulation.name": "생성기 조작", + "book.spectrum.guidebook.spawner_manipulation.intro.text": "나의 위대한 발명품인 [공명](entry://enchanting/enchantments/resonance) 마법 덕분에 마침내 생성기를 통째로 뜯어낼 수 있게 되었다. 내 손에 쥐어진 이 전리품을 보라!\\\n비록 이 끔찍한 구조물을 무에서 유로 창조해 내는 방법까지는 아직 알아내지 못했지만, [영혼 주입기](entry://creating_life/spirit_instiller) 덕분에 이 이것의 속성을 내 입맛대로 이리저리 주무르는 것쯤은 이제 식은 죽 먹기가 되었다.\\\n*이거 아주 재밌어지겠는데.*", + "book.spectrum.guidebook.spawner_manipulation.spawn_count_change.text": "생성 주기마다 생성하는 생물의 숫자를 늘린다.", + "book.spectrum.guidebook.spawner_manipulation.spawn_count_change.title": "생성량", + "book.spectrum.guidebook.spawner_manipulation.spawn_delay_change.text": "생성 딜레이의 최솟값과 최댓값을 모두 극단적으로 줄여버린다.", + "book.spectrum.guidebook.spawner_manipulation.spawn_delay_change.title": "생성 딜레이", + "book.spectrum.guidebook.spawner_manipulation.max_nearby_entities_change.text": "생성기들은 주변에 이미 몬스터가 많으면 스스로 생성을 멈추는 것 같다. 마치 내게 살아남을 기회라도 던져주려는 듯이 말이다. *참으로 한심하지 않은가? 나한테 그딴 동정이 필요할 것 같나.*\\\n이 개조는 생성기 주변에 있어도 허용되는 몬스터들의 최대 상한선을 늘린다.", + "book.spectrum.guidebook.spawner_manipulation.max_nearby_entities_change.title": "소환 조건", + "book.spectrum.guidebook.spawner_manipulation.required_player_range_change.text": "내가 생성기에서 훨씬 더 멀리 떨어져 있어도 쉴 새 없이 돌아가도록 활성화 거리를 늘려준다.", + "book.spectrum.guidebook.spawner_manipulation.required_player_range_change.title": "활성화 거리", + "book.spectrum.guidebook.spirit_instiller.page0.text": "내가 긁어모은 모든 마법적 지식을 집대성하여, 나는 **영혼 주입기**를 탄생시켰다. 이 장치는 두 아이템의 에너지를 억지로 하나로 묶고 세 번째 물건을 결합제로 삼아버리도록 특별하게 설계되었다.\\\n다른 마법 장치들과 마찬가지로, 영혼 주입기 역시 에너지를 모아줄 구조물이 필요하다. 홀로그램의 방향을 내 입맛대로 돌리고 싶다면, 설치된 영혼 주입기를 살짝 클릭해주면 된다.", + "book.spectrum.guidebook.spirit_instiller.page1.text": "거의 영적인 의식이라, 그에 걸맞은 이름을 붙여주었다.", + "book.spectrum.guidebook.spirit_instiller.page2.text": "크기: 8x9x5 블록\\\n두 개의 [#](bb00bb)조각된 오닉스 블록[#]() 위에 [강화기](entry://magical_blocks/upgrades)를 달아 그 능력을 폭발적으로 끌어올릴 수 있다.", + "book.spectrum.guidebook.spirit_instiller.page3.text": "- 1 영혼 주입기\n- 2 아이템 그릇\n- 2 홈이 파인 윤나는 블록\n- 2 조각된 윤나는 블록\n- 2 조각된 오닉스 블록\n- 6 윤나는 기둥\n- 17 윤나는 반 블록\n- 41 윤나는 블록\n- 2 보석 차임", + "book.spectrum.guidebook.spirit_instiller_recipe": "영혼 주입기 레시피", + "book.spectrum.guidebook.stacking_effect": "중첩되는 효과", + "book.spectrum.guidebook.staff_of_remembrance.page0.text": "*모든 것을 지배할 절대 지팡이*\\\n...음, 물론 아주 정중하게 말이다.\\\n\\\n추억의 지팡이는 짐승들을 길든 짧든 내가 원하는 곳으로 아주 평화롭게 옮길 수 있게 해준다.", + "book.spectrum.guidebook.staff_of_remembrance.page1.text": "동물을 지팡이로 건드리면 안전한 [기억](entry://creating_life/memories)의 형태로 회수시킨다.", + "book.spectrum.guidebook.star_candy.name": "별사탕", + "book.spectrum.guidebook.star_candy.about.text": "노릇하게 구워진 [별가루](entry://general/stargazing@stardust)는 기묘할 정도로 상쾌한 맛이 난다. 이 하늘이 내린 사탕이 입안에서 녹아내리자 그 마법이 혀끝을 짜릿하게 자극했고, 왠지 모르게 한층 더 건강해진 듯한 착각에 빠졌다.\\\n\\\n*눈에 보이는 건 일단 모조리 입에 쑤셔 넣고 보는 내 고질병에 대해 변명하는 것도 진작에 때려치웠다.*", + "book.spectrum.guidebook.star_candy.recipe.text": "이 회복 능력을 극한으로 끌어올려 더 끝내주는 걸 구워낼 방법은 없을까?", + "book.spectrum.guidebook.star_candy_variants.variants.text": "오늘 나는 이 우주라는 놈이 뒤로는 거대한 과자 공장을 잔뜩 가동하고 있으면서 나한테만 쏙 빼놓고 비밀로 부쳤다는 사실을 깨달았다.\\\n도대체 우주가 무슨 심보로 나한테 이런 결핍을 안겨주기로 마음먹은 걸까? 참으로 터무니없다.\\\n\\\n...근데 뭐 솔직히, 쓸만한 놈이 하나 걸려들었을 때의 그 짜릿함은 인정할 수밖에 없군.", + "book.spectrum.guidebook.star_candy_variants.magnificent.text": "이건 정말 미친 듯이 귀한다. \"세상에 이런 게 실존한다고?\" 싶은 놈. \"이걸 먹어 치워야 할지, 아니면 제단에 모셔두고 절을 해야 할지\" 고민하게 만든다. 그야말로 간식의 탈을 쓴 기적 그 자체다.\\\n\\\n*먹을 수는 있지*.\\\n*점수를 매긴다면 만점이다*.", + "book.spectrum.guidebook.star_candy_variants.sugary.text": "오늘은 확실히 내 운이 바닥을 치는 날인가 보다. 마치 보이지 않는 전리품 테이블 주사위가 정확히 1을 띄운 것 같은 기분이다.\\\n자신을 구성하는 그 설탕 맛 그대로, 영양가마저도 설탕이랑 다를 바 없는 보잘것없고 조그마한 별 조각이다.\\\n\\\n*이 세계관에도 당뇨병이라는 게 존재하나? 내 얘기는 아니고, 그냥 아는 친구 녀석이 궁금해해서.*", + "book.spectrum.guidebook.star_candy_variants.name": "희귀한 발견물", + "book.spectrum.guidebook.stargazing.name": "별구경", + "book.spectrum.guidebook.stargazing.page0.text": "적막한 밤이 찾아오면, 나는 종종 잔디밭에 누워 쏟아질 듯한 별들을 올려다보곤 한다.", + "book.spectrum.guidebook.stargazing.page0.title": "별에게 소원을 빌어봐", + "book.spectrum.guidebook.stargazing.page1.text": "저 조그마한 별똥별들은 지금껏 내가 한 번도 보지 못한 미지의 물질로 이루어져 있다.\\\n\\\n저 하늘에서 떨어지는 걸 내 손으로 직접 낚아챌 수 있을까?\\\n\\\n*[](item://minecraft:spyglass)이나 야간 투시를 쓰면 포착이 훨씬 수월해질 게 틀림없다.*", + "book.spectrum.guidebook.stargazing.page1.title": "별똥별", + "book.spectrum.guidebook.stargazing.page2.text": "이제 모든 변종을 모았으니, 숨 좀 돌리며 놀 시간이다! 다이아몬드로 코팅한 별은 아무리 세게 후려쳐도 절대 깨지지 않는다.\\\n\\\n*친구들 다 불러 모아 스타볼 토너먼트 한판 어때?*", + "book.spectrum.guidebook.stargazing.page2.title": "별 단단하게 만들기", + "book.spectrum.guidebook.stargazing.page3.text": "별똥별은 아주 값비싼 전리품들을 내어준다. 별의 파편, 별가루, 그리고 그 외에도 수많은 진귀한 재료들을 토해낸다.\\\n\\\n별똥별을 웅크려 조심스럽게 주운 다음 [모루로 산산조각 내버리면](entry://general/item_crushing) 별의 파편을 무려 두 배나 뽑아낼 수 있다. 물론 다른 잡다한 전리품들은 영영 날아가 버리겠지만.", + "book.spectrum.guidebook.stargazing.page3.title": "별의 파편", + "book.spectrum.guidebook.stargazing.page4.text": "별들의 영혼이 깃든, 기원을 알 수 없는 신비로운 가루다.\\\n\\\n*눈에 띄진 않지만, 그 안에 무시무시한 잠재력을 품고 있다.*", + "book.spectrum.guidebook.steadfast.page0.text": "나라는 인간의 덜렁거림을 보건대, 분명 세상에서 가장 완벽한 도구를 만들어내고도 고작 5분 만에 발을 헛디뎌 용암 속으로 던져버릴 게 뻔하다. 게다가 엔더맨들의 고향이라는 저 차원은 작은 실수 하나에도 목숨을 내놓아야 할 만큼 끔찍하게 무자비하다.\\\n\\\n이 새로운 마법 부여는 내 뇌가 순간적으로 정지하는 대참사로부터(선인장에 냅다 도구를 던져버리는 짓거리를 포함해서) 내가 가장 아끼는 도구들을 완벽하게 지켜줄 것이다.", + "book.spectrum.guidebook.steadfast.page1.text": "바닥에 떨어진 도구가 그 어떤 피해를 입지 않도록 절대적으로 보호한다. 용암에 빠지거나 심지어 공허 아래로 추락하는 순간조차도 지켜낸다.\\\n\\\n최대 레벨: 1\\\n모든 도구에 적용 가능.", + "book.spectrum.guidebook.stiffness.page0.text": "레벨이 오를수록 [#](449900)내 공격 속도를 끔찍하게 늦춰버린다[#]().", + "book.spectrum.guidebook.storage_node.name": "저장 노드", + "book.spectrum.guidebook.storage_node.page0.text": "저장 노드는 자신에게 아이템을 쑤셔 넣으려는 [송신 노드](entry://pastel_network/sender_node)와 자신에게서 아이템을 빼가려는 [수집 노드](entry://pastel_network/gather_node)와 함께 쓰일 때 그 진가가 폭발한다.\\\n\\\n[#](449900)필터[#]()를 사용하면 어떤 아이템을 넣고 꺼낼지 자세히 지정할 수 있다. 필터를 비워두면, 연결된 인벤토리는 잡다한 물건을 모조리 넣는 공용 창고로 돌변한다.", + "book.spectrum.guidebook.storm_stones.name": "폭풍석", + "book.spectrum.guidebook.storm_stones.page0.text": "폭풍은 대자연이 보여주는 가장 압도적인 힘의 과시다.\\\n내가 [어떤 강력한 자원들](entry://general/onyx_shards)을 조합하느라 쩔쩔매고 있을 때, [융합의 성소](entry://general/fusion_shrine)를 통해 불러내기도 했었다.\\\n\\\n분명 내 앞으로의 여정에 피가 되고 살이 될 폭풍과 관련된 무언가를 찾아낼 수 있을 거라는 확신이 든다.", + "book.spectrum.guidebook.storm_stones.page0.title": "뇌우", + "book.spectrum.guidebook.storm_stones.page1.text": "벼락이 사납게 내리꽂힌 땅을 파헤치다, 통제할 수 없는 에너지를 머금은 채 내 손안에서 미친 듯이 요동치는 이 돌덩이들을 발견했다.\\\n이걸 [융합의 성소](entry://general/fusion_shrine)에 사용하면, 또 다른 뇌우를 불러낼 수 있다.\\\n\\\n*워낙에 변덕스럽고 불안정해서, 폭발에는 거의 견디질 못한다...*", + "book.spectrum.guidebook.stratine.name": "스트라틴", + "book.spectrum.guidebook.stratine.page0.text": "이 무식하게 무거운 광석은 네더의 가장 깊숙한 심연 곳곳에 흩어져 있다.\\\n욕심부려서 이걸 한 번에 산더미처럼 짊어지고 집으로 돌아가겠다는 발상은 아마 네 인생 최악의 판단이 될 것이다.", + "book.spectrum.guidebook.stratine.page2.text": "스트라틴은 이미 내 어깨뼈가 부서지며 깨달았듯, 끔찍하게 무거운 물질이다. 게다가 형태를 가공하는 것조차 지독하게 어렵다. 네더의 그 지옥 같은 열기조차 흠집 하나 내지 못했으니 말이다.\\\n\\\n하지만 내 [받침대](entry://general/pedestal)의 압도적인 힘을 빌린다면, 이걸 주무르는 것쯤은 코웃음 칠 일이다.", + "book.spectrum.guidebook.stratine.page3.text": "*헤비 메탈*\\\n\\\n내 적들의 뼈를 으스러뜨리는 건 물론이고, [아이템마저 가루로 으깨버린다](entry://general/item_crushing)!", + "book.spectrum.guidebook.suspicious_brew.page0.text": "흥미롭게도, 버섯과 물이 섞인 이 혼합물은 세상 온갖 꽃들의 향을 온전히 담아내는 완벽한 그릇 역할을 한다. 풍미를 한껏 끌어올리기도 하고, 때로는... 아주 기괴한 맛을 창조해 내기도 한다.\\\n\\\n마치 내가 그걸 [#](449900)갈색 무시룸[#]()에게 먹이는 것처럼, 꽃의 종류에 따라 완전히 다른 효과가 부여된다.", + "book.spectrum.guidebook.suspicious_brew.page1.text": "색깔 나무에서 이루어지는 발효 과정 덕분에, 이 음료는 평범한 [](item://minecraft:suspicious_stew) 따위와는 비교도 안 될 만큼 효과가 오래 지속된다.", + "book.spectrum.guidebook.swiftness.page0.text": "레벨이 오를수록 [#](449900)내 공격 속도를 한계 이상으로 끌어올린다[#]().", + "book.spectrum.guidebook.take_off_belt.page0.text": "산맥을 기어오르거나 끔찍하게 비틀린 동굴을 헤쳐 나가는 건 엄청난 시간 낭비다. 도무지 딛고 올라설 틈조차 보이지 않는 기괴한 절벽을 마주할 때면, 나는 항상 바위를 억지로 깎아내며 내 길을 스스로 개척해야만 했다. 이걸 만들기 전까지는 말이다!\\\n새로 만든 이 허리띠 하나면 그 까마득한 수직 절벽도 한 번의 도약으로 가뿐히 등반해버려, 내 소중한 시간을 아끼고 자연경관이 파괴되는 걸 막아줄 수 있다.", + "book.spectrum.guidebook.take_off_belt.page1.text": "웅크리고 있으면 엄청난 도약을 위한 힘이 압축되며, 오래 웅크릴수록 더 폭발적인 도약력을 얻는다.\\\n\\\n*도약하다 바지가 벗겨지는 일은 일어나지 않게 주의하자.*", + "book.spectrum.guidebook.take_off_belt.page2.text": "도약 높이를 더 높게 증폭시킨다.", + "book.spectrum.guidebook.take_off_belt.page3.text": "도약 후 짧은 시간 동안 느린 낙하 효과를 부여하여, 어디에 착지할지 계산할 수 있는 여유를 준다. 가벼운 착지 마법이 아주 높다면, 절벽에서 맨몸으로 뛰어내려 살아남는 것도 꽤 현실적인 귀환 방법이 될 것이다.", + "book.spectrum.guidebook.tarts.name": "타르트", + "book.spectrum.guidebook.tarts.page0.text": "내가 비록 주방의 마법사는 아닐지라도, 이 투박하고 거친 타르트마저 끝내주게 맛있다는 건 인정해야겠다!\\\n\\\n여기에 온갖 다양한 토핑을 얹어주면, 짧은 시간 동안 나를 철갑처럼 둘러싸줄 [#](449900)방어 능력[#]()까지 얻을 수 있다.", + "book.spectrum.guidebook.tarts.page3.text": "용암 속에서도 마치 맑은 물속에 들어온 것처럼 앞을 내다보고 자유롭게 헤엄칠 수 있게 해 준다.\\\n하지만 명심해라, 이게 나를 불의 고통에서 구원해 주지는 **않는다**.", + "book.spectrum.guidebook.tarts.page4.text": "물속에서 거의 빛의 속도로 헤엄칠 수 있게 해주며, 수중 채굴 속도를 상당히 강화시켜 준다.", + "book.spectrum.guidebook.tarts.page5.text": "푹 자고 일어난 개운한 아침처럼 내 정신을 맑게 씻어내어, 악몽 속에서 기어 나온 그 괴물들을 쫓아내 버린다.", + "book.spectrum.guidebook.tarts.page6.text": "날아오는 투사체들을 우습게 튕겨낼 수 있는 약간의 확률을 내 몸에 둘러준다.", + "book.spectrum.guidebook.the_art_of_brewing.drinking_age.button_text": "확인", + "book.spectrum.guidebook.the_art_of_brewing.drinking_age.button_text_confirmed": "확인됨 ✔", + "book.spectrum.guidebook.the_art_of_brewing.drinking_age.text": "[적정 통](entry://cuisine/titration_barrel)은 강력한 알코올을 빚어낼 수 있는 능력이 있습니다. 당신이 거주하는 국가의 합법적인 음주 연령에 도달했으며 알코올이 섞인 레시피를 보기를 원한다면, 아래 버튼을 눌러 이 레시피들을 잠금 해제하십시오.\\\n만약 그렇지 않다 해도 걱정할 필요는 없습니다. 이 레시피를 모른다고 해서 게임 진행에 치명적인 지장이 생기지는 않을 테니까요.", + "book.spectrum.guidebook.the_art_of_brewing.drinking_age.title": "안전 확인", + "book.spectrum.guidebook.the_art_of_brewing.name": "양조의 예술", + "book.spectrum.guidebook.the_art_of_brewing.page0.text": "발효는 대자연의 흐름 그 자체다. 긴 시간과 세심한 관리가 필요하다. 통제된 완벽한 환경이란 존재하지 않기에, 수많은 변수들이 영향을 준다.\\\n레시피를 맹신하며 정석대로 갈 수도 있고, 아니면 약간의 변주를 직접 더해볼 수도 있다. 그렇다, 발효는 예술이다!", + "book.spectrum.guidebook.the_art_of_brewing.page1.text": "- 시간: 통이 안의 내용물에 마법을 부리기 위해서는 꽤 인내심이 필요하다. 필요한 시간보다 조금 더 숙성되도록 방치해 두면, 대부분의 술은 훨씬 더 풍미가 깊어지고 심지어 여러 부가 효과까지 얻게 될 것이다.\n- 온도: 주변이 뜨겁게 달아오를수록, 소중한 술은 증발해 공기 중으로 날아가 버릴 것이다. 이렇게 잃은 술은 천사의 몫이라 부르며 애써 위안 삼는다.", + "book.spectrum.guidebook.the_art_of_brewing.page1.title": "외부 요인", + "book.spectrum.guidebook.the_art_of_brewing.page2.text": "- 습도: 주변 공기가 습할수록, 알코올보다 물이 더 많이 증발하여 더 독하게 만든다.\n- 수분 비율: 물보다 재료를 더 많이 넣는 건 아주 예민한 줄타기지만, 한 번쯤 도전해 볼 만한 가치가 있다. 혼합물이 걸쭉해질수록 발효 속도는 빨라지지만, 그 대가로 상태 효과의 지속 시간은 짧아질 것이다.", + "book.spectrum.guidebook.the_perfect_compound.description": "궁극의 걸작", + "book.spectrum.guidebook.the_perfect_compound.name": "궁극의 혼합물?", + "book.spectrum.guidebook.the_perfect_compound.page0.text": "[지난 실험](entry://general/failing)의 결과는 내 안에 더 큰 갈망의 불을 지폈다. 이 보석들을 모조리 쥐어짜면 과연 어디까지 닿을 수 있을까?\\\n분명 이게 끝이 아니다. 그리고 그 관문은 단연코 [네오리스](entry://general/neolith)가 열 것이다! 그토록 응집력 있는 물질이라면, 세상 모든 보석의 권능을 단 하나의 결정체로 구속할 수 있을 것이다. 이 유물이 빚어지는 순간, 내 모든 창조의 정점이자 나만의 현자의 돌로서 나를 살아 숨 쉬는 신으로 군림하게 하리라!", + "book.spectrum.guidebook.the_perfect_compound.page1.text": "햇빛이 쏟아지는 맑은 하늘 아래에서만 가능하다.\\\n\\\n이 거대한 마력들의 융합은 내 융합의 성소를 전례 없이 끔찍한 압박으로 짓누르며, 동시에 하늘이 찢어질 듯한 장관을 연출할 것이다. 성소와 그 주변 블록들을 이중 삼중으로 격리하고 요새화해 두는 것이 내 목숨에 좋을 것이다.", + "book.spectrum.guidebook.tight_grip.page0.text": "내가 생각하는 것보다 더 빨리 무기를 휘둘렀던 과거의 기억은 이제 열병 속의 환상처럼 아득하게만 느껴진다. 이젠 한 번 무기를 휘두를 때마다 너무 많은 에너지가 소모되어, 잠시 숨을 고르지 않으면 안 된다.\\\n*나도 이제 늙은 건가.*\\\n\\\n하지만 내 무기에 약간의 개조를 거치면, 이 지긋지긋한 휴식시간을 어느 정도 깎아낼 수 있다.", + "book.spectrum.guidebook.tight_grip.page1.text": "공격 대기 시간을 줄인다.\\\n\\\n최대 레벨: 2\\\n근접 무기에 적용 가능.", + "book.spectrum.guidebook.titration_barrel.le_fishe_au_chocolat.text": "*확실히 보통 물건은 아니다.*", + "book.spectrum.guidebook.titration_barrel.page0.text": "[음식](entry://cuisine/titration_barrel@kimchi)과 [음료](entry://cuisine/infused_beverages)를 [색깔 나무](entry://general/colored_trees@colored_wood)로 짠 통 안에서 발효시켜 보겠다는 이 발상은 그리 터무니없는 건 아니었다.\\\n시간이 지나며 나무가 품고 있던 마법이 서서히 내용물을 침식해 간다. 결과물이 기가 막히게 맛있는 경우도 있고, 차라리 안 먹는 게 나을 만큼 끔찍한 적도 있지만 (물론 후자는 내 처참한 요리 실력 탓일 수도 있다), 적어도 한결같이 지루하지 않고 흥미로웠다.\\\n\\\n이 통에는 한 세트의 아이템과 물 양동이 하나 분량의 액체가 들어간다.", + "book.spectrum.guidebook.titration_barrel.page1.text": "*가끔 눈을 깜빡일 때마다 세상이 사라진 것 같은 기분이 든다. 기분 탓일까? 신기하게도 그럴 때마다 통 안의 발효가 많이 진행되는 것 같다.*", + "book.spectrum.guidebook.titration_barrel.page2.text": "발효는 꼭 마실 것에만 쓸 수 있는 게 아니다! 서로 다른 채소 두 가지를 푹 삭혀 만든 김치는 그 자체로도 끝내주게 든든하며, 다른 요리에 곁들여 먹을 때 진가를 발휘한다.", + "book.spectrum.guidebook.titration_barrel.page3.text": "시간은 좀 걸리지만, 그냥 무식하게 재료들을 한데 뭉쳐 조합하는 것보다 훨씬 효율적이다.", + "book.spectrum.guidebook.titration_barrel.page4.text": "살짝 발효되어, 여전히 [우유](item://minecraft:milk_bucket)의 능력을 간직하고 있다. 이걸 삼키면 모든 효과가 씻겨나갈 것이다.", + "book.spectrum.guidebook.titration_barrel.page5.text": "기가 막힌 간식거리다. 먹는 속도도 아주 빠르고, 뱃속을 적당히 든든하게 채워주기까지 한다.\\\n기분 좋게 달콤하고 상큼한 과일 향이 입안을 감돈다.", + "book.spectrum.guidebook.titration_barrel.page6.text": "생각만 해도 입안에 침이 가득 고이게 만드는, 그야말로 풍미의 폭발적인 대향연이다.", + "book.spectrum.guidebook.titration_barrel.page7.text": "느긋한 휴식이나, 추운 겨울에 제격이다.", + "book.spectrum.guidebook.titration_recipe": "적정 레시피", + "book.spectrum.guidebook.totem_pendant.page0.text": "[#](bb00bb)불사의 토템[#]()은 확실히 압도적인 구원줄이지만, 내 목숨을 구하려면 항상 한 손에 그걸 꽉 쥐고 있어야만 한다는 치명적인 단점이 있다.\\\n\\\n[파란색 안료](entry://general/pigment@blue)가 지닌 강인한 보호의 기운을 집중시킨다면, 이 토템을 손에 쥐지 않고 그냥 목에 걸고만 있어도 그 목숨줄을 유지할 수 있다.", + "book.spectrum.guidebook.totem_pendant.page1.text": "단 한 번, 죽음의 문턱에서 나를 멱살 잡고 끌어 올려준다. 단 한 번의 기적이 발동하고 나면 허무하게 가루로 바스라진다.", + "book.spectrum.guidebook.toughness.page0.text": "나를 짓뭉개려는 [#](449900)강력한 공격의 위력을 크게 반감시켜 주었다[#]().\\\n내 목을 날려버릴 묵직한 한 방을 버텨내는 데는 탁월하지만, 자잘하게 갉아먹는 무수한 공격에는 취약하다.", + "book.spectrum.guidebook.treasure_hunter.page0.text": "얼마 전 내 꿈속에 불쑥 나타난, [#](bb00bb)영혼 모래[#]()와 [#](bb00bb)위더 스켈레톤의 해골[#]()이 기괴하게 뒤섞여 탄생한 악몽 같은 괴수를 그림으로 완성했다. 나는 네더 요새에서 그 악몽을 현실로 끄집어내 보겠답시고 수 시간 동안 기다리며, 목뼈가 헐렁해서 머리를 쉽게 떨굴 위더 스켈레톤만 미친 듯이 찾아 헤맸지만, 정작 내 목이 날아갈 뻔했다.", + "book.spectrum.guidebook.treasure_hunter.page1.text": "그러다 번쩍하고 크리퍼가 떠올랐다! 벼락을 맞고 과충전된 크리퍼는 폭발할 때 어찌나 무지막지한 힘을 뿜어내는지, 주변 적들의 머리를 깔끔하게 날려버린다. (최악의 경우엔 그게 내 머리지만)\\\n그 힘을 재현하기 위해, 나는 [폭풍석](entry://general/storm_stones)을 사용한 새로운 마법을 고안해 냈다.\\\n그렇게 탄생한 것이 바로 이 보물 사냥꾼 마법이며, 이제 나는 [온갖 짐승들의 머리](entry://creating_life/mob_heads)를 전리품으로 챙겨올 수 있게 되었다.", + "book.spectrum.guidebook.treasure_hunter.page1.title": "몬스터 머리 수집", + "book.spectrum.guidebook.treasure_hunter.page2.text": "적을 잡을 때 가끔씩 머리를 전리품으로 떨구게 만든다.\\\n\\\n최대 레벨: 3\\\n도끼와 근접 무기에 적용 가능.\\\n약탈과 동시에 부여할 수 없음.", + "book.spectrum.guidebook.trifles.name": "트라이플", + "book.spectrum.guidebook.trifles.page0.text": "위에 뭘 얹어 먹느냐에 따라 단순한 당 충전 그 이상을 보장하는, 끝내주게 달콤한 별미다.\\\n[자라멜](entry://general/jade_vines@jaramel), [#](449900)젤라틴[#](), [아마란스](entry://cuisine/amaranth)로 만들어진다.\\\n\\\n*토핑이 없어도 맛있다!*", + "book.spectrum.guidebook.trifles.page3.text": "무작위 효과를 준다. 인생은 어차피 도박 아닌가?", + "book.spectrum.guidebook.pastel_upgrades.name": "파스텔 노드 강화", + "book.spectrum.guidebook.pastel_upgrades.about.text": "오, 이 얼마나 비참하고 끔찍한 일인가, 내가 빚어낸 이 위대한 창조물이 *고작 이 정도 성능밖에 못 내다니!* 이렇게 결함투성이인 시스템은 내 천재성에 어울리지 않는다. 절대 용납할 수 없다.\\\n\\\n잠시 머리를 굴려보니, 해답은 너무나도 자명했다. 노드 주변을 맴도는 빛의 띠를 개조해 그 성능을 끌어올릴 수 있다. (물론 이것도 아무튼 내 치밀한 초기 설계의 일부였다) 알맞은 재료만 찾는다면...", + "book.spectrum.guidebook.pastel_upgrades.enhancing.text": "아이템을 밀어내거나 끌어올 수 있는 능력을 지닌 모든 노드는 강화 재료를 끼울 수 있는 두 개의 링 슬롯을 달고 있다. 그냥 들고 상호작용하면 장착되고, 웅크린 채로 상호작용하면 다시 뺄 수 있다. 똑같은 종류의 강화를 중복해서 박아넣으면 효과가 더 강해지지만, 항상 정직하게 선형으로 늘어나는 건 아니다.\\\n\\\n*강화는 노드 시작점의 것만 적용된다.*", + "book.spectrum.guidebook.pastel_upgrades.enhancing.title": "노드 강화", + "book.spectrum.guidebook.pastel_upgrades.transfer.name": "전송 강화", + "book.spectrum.guidebook.pastel_upgrades.transfer.raw_malachite.text": "아이템의 [#](449900)전송 대기 시간[#]()을 조금 줄여준다.\\\n\\\n*이 지연 시간은 때때로 사람을 미치게 만들 수 있다.*", + "book.spectrum.guidebook.pastel_upgrades.transfer.pure_malachite.text": "아이템의 [#](449900)전송 대기 시간[#]()을 상당히 줄여준다.\\\n\\\n*대기 시간이라고? 내 사전에 그런 단어는 없다.*", + "book.spectrum.guidebook.pastel_upgrades.transfer.raw_azurite.text": "[#](449900)필터 슬롯[#]() 1줄 추가.\\\n[수집 노드](entry://pastel_network/gather_node)에서는 슬롯이 두 배로 늘어난다.\\\n\\\n*필터라고? 난 그런 건방진 건 취급 안 한다!*", + "book.spectrum.guidebook.pastel_upgrades.transfer.pure_azurite.text": "[#](449900)필터 슬롯[#]() 2줄 추가.\\\n[수집 노드](entry://pastel_network/gather_node)에서는 슬롯이 두 배로 늘어난다.\\\n\\\n*...뭐 있으면 좋긴 하겠지만.*", + "book.spectrum.guidebook.pastel_upgrades.transfer.raw_bloodstone.text": "한 번에 전송하는 [#](449900)아이템 전송량[#]()을 조금 늘려준다.\\\n\\\n*용들도 짐을 이렇게 잔뜩 짊어지고 다녔을까?*", + "book.spectrum.guidebook.pastel_upgrades.transfer.pure_bloodstone.text": "한 번에 전송하는 [#](449900)아이템 전송량[#]()을 상당히 늘려준다.\\\n\\\n*이 세상 모든 걸 한꺼번에 쏴버려라!*", + "book.spectrum.guidebook.pastel_upgrades.transfer.resonance_shard.text": "[#](449900)전송 주기[#]()를 상당히 짧게 만든다.\\\n\\\n*안정성? 개나 줘. 느린 거? 그것도 개나 줘버려!*", + "book.spectrum.guidebook.pastel_upgrades.decorative.name": "장식용 강화", + "book.spectrum.guidebook.pastel_upgrades.decorative.page0.text": "효율이 인생의 전부는 아니다. 가끔은 내 창조물들이 그저 끝내주게 멋있어 보였으면 할 때도 있다. 장식용 강화는 실용성은 하나도 없지만 눈요기엔 최고다.", + "book.spectrum.guidebook.pastel_upgrades.decorative.shimmerstone_gem.text": "노드가 [#](449900)눈이 멀 듯 환하게 빛나게[#]() 만들어준다.", + "book.spectrum.guidebook.pastel_upgrades.redstone.name": "레드스톤 강화", + "book.spectrum.guidebook.pastel_upgrades.redstone.about.title": "레드스톤 통합 강화", + "book.spectrum.guidebook.pastel_upgrades.redstone.pure_redstone.text": "순수한 레드스톤은, 예상할 수 있듯이, 동력을 공급하는 데 아주 탁월한 물건이다. 이걸 노드에 끼워두면 강제로 항상 활성화된 상태를 유지하게 된다.\\\n\\\n*진사빛 환상*", + "book.spectrum.guidebook.pastel_upgrades.redstone.pure_coal.text": "어떨 때는 신호를 반전시켜야 하는데 그럴 공간조차 턱없이 부족할 때가 있다. 순수한 석탄은 공간 낭비나 지저분한 회로 없이 그걸 깔끔하게 해결해 준다.\\\n\\\n*이젠 블랙스톤이 레드스톤이다.*", + "book.spectrum.guidebook.pastel_upgrades.redstone.pure_echo.text": "메아리는 참으로 기괴한 물건이라, 나조차도 이걸 대체 어디다 써먹어야 할지 머리를 싸맸었다. 그런데 이것의 음파 탐지 능력은 노드를 통과해 지나가는 아이템들을 귀신같이 감지하여 레드스톤 펄스 신호를 보내는 데 탁월한 것 같다.\\\n\\\n*공명 폭포*", + "book.spectrum.guidebook.pastel_upgrades.redstone.pure_lapis.text": "가끔 노드 하나를 그냥 아예 꺼버리고 싶을 때가 있는데, 청금석이 바로 그 일을 깔끔하게 해낸다. 이건, 뭐랄까, 사실\\\n그러니까 이걸 왜 만들었냐면\\\n그러니까 이런 상황이 올 수도 있다는 거지\\\n\\\n*내가 도대체 이딴 걸 왜 만든 거지?*", + "book.spectrum.guidebook.pastel_upgrades.redstone.pure_quartz.text": "아이템 전송 흐름을 아주 깐깐하게 통제하는 건 나름의 쓸모가 있다. 순수한 석영을 박아 넣으면, 이 노드는 레드스톤 펄스 신호를 한 번 받을 때마다 딱 하나의 아이템 묶음만 내어주게 만들 수 있다.\\\n\\\n*한 번에 한 걸음씩*", + "book.spectrum.guidebook.pastel_upgrades.redstone.pure_glowstone.text": "이 장치들이 은은하게 빛나는 건 꽤나 낭만적이지만, 이걸 침대 머리맡 스탠드로 쓰려면 불을 끌 수 있는 스위치가 필요하다. 순수한 발광석이 그 역할을 해내어, 레드스톤 신호가 들어오면 전원을 아예 끊어버린다.\\\n\\\n*쓸데없이 비싼 스위치*", + "book.spectrum.guidebook.pastel_network_coloring.name": "네트워크 색칠하기", + "book.spectrum.guidebook.pastel_network_coloring.page0.text": "내 위대한 파스텔 네트워크에 점차 익숙해질수록, 그 한계점도 명확하게 보이기 시작했다. 특히 좁은 방에 노드들을 잔뜩 쓰고 싶을 때 말이다.\\\n\\\n어떤 노드든 설치하기만 하면 사방팔방으로 닥치는 대로 연결돼버리는 건, 내가 설계한... 가장 흥미로운 결함 중 하나였다.", + "book.spectrum.guidebook.pastel_network_coloring.page1.title": "그 해결책은?", + "book.spectrum.guidebook.pastel_network_coloring.page1.text": "**색깔!**\\\n\\\n내가 같은 색의 안료로 물들인 노드들끼리만 연결되도록 만들었다.\\\n이제 비좁은 공간에도 작은 네트워크들을 잔뜩 박을 수 있게 되었다.", + + "book.spectrum.guidebook.turn_back_to_polished": "화로에 구워내면 모든 블록을 다시 원래의 윤나는 상태로 되돌릴 수 있다.", + "book.spectrum.guidebook.two_upgrade_slots": "2개의 강화 슬롯", + "book.spectrum.guidebook.universe_spyhole.page0.text": "[광채의 엔더](entry://general/radiating_ender)가 허락하는 이 무한한 가능성은 나를 매번 경악하게 만든다.\\\n\\\n벽이나 바닥에 붙이기만 하면, 이 기이한 블록은 그 너머의 세상을 훤히 훔쳐볼 수 있게 해준다. 복잡하게 얽힌 동굴이나 숨겨진 요새를 단숨에 찾아낼 수 있고... 지하에서 뻥 뚫린 하늘을 올려다볼 수도 있다!", + "book.spectrum.guidebook.universe_spyhole.page1.text": "*네놈들이 저 너머에서 무슨 짓을 벌이는지 이젠 다 보인다*", + "book.spectrum.guidebook.upgrades.name": "구조물 강화", + "book.spectrum.guidebook.upgrades.page0.text": "안료 받침대와 융합의 성소는 이미 내 기대를 아득히 뛰어넘는 능력을 증명해 보였다. 하지만 내 사전에 안주란 없다. 그래서 이 강화 장치들을 빚어냈다. 각각의 강화기는 내 마법 구조물들의 성능을 저마다의 방식으로 향상시켜 준다.\\\n\\\n다만, 똑같은 강화기를 사용할 수록 그 효율은 점점 떨어질 것이다.", + "book.spectrum.guidebook.upgrades.page1.text": "최근 재료들이 더 복잡해지면서 조합에 걸리는 시간이 말도 안 되게 길어졌다. 이 장치가 그 대기 시간을 내 인내심이 버틸 수 있는 선으로 깎아줄 것이다.", + "book.spectrum.guidebook.upgrades.page2.text": "2단계 가속기는 이전 버전의 강화판이다. 내 조합 속도를 한층 더 가속시켜 준다.", + "book.spectrum.guidebook.upgrades.page3.text": "3단계는 조합 속도에서만큼 단연코 완벽 그 자체다.", + "book.spectrum.guidebook.upgrades.page4.text": "조합할 때 조금씩 떨어지는 경험치는 평소엔 코웃음 치고 무시할 수준이다. 하지만 이 집중기를 사용하면, 그 경험치를 상상을 초월할 만큼 늘릴 수 있다.", + "book.spectrum.guidebook.upgrades.page5.text": "이 진보된 지식 집중기는 조합 시 쏟아지는 경험치를 훨씬 더 많이 늘려준다.", + "book.spectrum.guidebook.upgrades.page6.text": "내 구조물들이 잔뜩 먹는 재료들의 소모량을 조금이나마 덜어준다.", + "book.spectrum.guidebook.upgrades.page7.text": "이 '강화기를 위한 강화기'는 재료 소모량을 한층 더 극적으로 깎아내 버린다.", + "book.spectrum.guidebook.upgrades.page8.text": "아무리 그 확률이 낮을지라도, 조합 결과물을 배로 늘릴 수 있다면 안 할 이유가 없지!\\\n*밑져야 본전 아니겠어!*", + "book.spectrum.guidebook.upgrades.page9.text": "이 진보된 물건은 이전보다 훨씬 더 강력하며, 조합 결과물을 두 배로 만들 확률을 상당히 끌어올려 준다.", + "book.spectrum.guidebook.upgrading.text": "레벨 I에서 II로 강화하는 건 처음엔 상당히 싸다.\\\n하지만 레벨이 한 단계씩 오를 때마다, 요구하는 [안료](entry://general/pigment)와 경험치의 양은 상당히 치솟을 것이다.", + "book.spectrum.guidebook.upgrading_enchanted_books.name": "마법이 부여된 책 강화", + "book.spectrum.guidebook.upgrading_enchanted_books.page0.text": "마법 부여와 색채 마법 사이에는 비슷한 구석이 많다. 그러니 내가 처음으로 [#](bb00bb)마법이 부여된 책[#]()과 [안료](entry://general/pigment)를 뒤섞어보려 했을 때, 그게 한번에 성공한 건 어찌 보면 당연한 결과였다.[#]()\\\n\\\n[#](bb00bb)마법이 부여된 책[#]()을 [마법 부여기](entry://enchanting/enchanter)에 얹어두고, 그에 걸맞은 색깔의 [안료](entry://general/pigment)로 둘러싼 다음 경험치를 쏟아부어 주면, 그 책의 마법 레벨을 한 단계 끌어올릴 수 있다.", + "book.spectrum.guidebook.upgrading_enchanted_books.page1.text": "이 과정이 중간에 방해받는다면, 모든 과정이 그 즉시 정지할 것이다.", + "book.spectrum.guidebook.use_in_potion_workshop_bottle_slot": "이것을 [물약 작업장](entry://brewing/potion_workshop)에서 [#](bb00bb)유리병[#]()이 들어갈 자리에 꽂아 넣으면 그 안에 물약의 기운을 불어넣을 수 있다.\\\n\\\n저장된 효과를 지우려면, 조합창에 올려두기만 하면 된다.\\\n이렇게 저장된 효과는 내 몸에 15초마다 한 번씩 강제로 주입될 것이다.", + "book.spectrum.guidebook.mundane_items.name": "평범한 아이템들", + "book.spectrum.guidebook.mundane_items.page0.text": "내 능력이 닿지 않거나 애초에 불가능에 가까워서 항상 내 속을 긁어놓던 아이템들이 몇 개 있었다. 하지만 새롭게 깨우친 이 마법들은 그 장벽을 *산산조각* 내주었다.", + "book.spectrum.guidebook.mundane_items.page4.text": "때리기만 해도 터진다.", + "book.spectrum.guidebook.mundane_items.page4.title": "불안정한 TNT", + "book.spectrum.guidebook.mundane_items.bundle.text": "이걸 꿰매는 데 이렇게 오랜 시간이 걸릴 줄은 몰랐다.", + "book.spectrum.guidebook.mundane_items.cobweb.text": "어떻게 이 실 덩어리는 거미줄 형태로 뭉쳐놨을 때만 들러붙는 거지?", + "book.spectrum.guidebook.mundane_items.writeable_book.text": "굳이 설명이 필요한가?", + "book.spectrum.guidebook.mundane_items.spectral_arrow.text": "한층 더 우아한 호박빛을 낸다.", + "book.spectrum.guidebook.mundane_items.bell.text": "여우를 유혹할 것 같군.", + "book.spectrum.guidebook.mundane_items.name_tag.text": "클로버가 왜 여기 들어가야 하는지는 나도 전혀 모르겠다.", + "book.spectrum.guidebook.mundane_items.early_elytra.text": "*인류가 알아낸 모든 항공 역학 법칙에 따르면, 이것은 분명히 날개다.*", + "book.spectrum.guidebook.mundane_items.elytra.text": "*인류가 알아낸 모든 항공 역학 법칙에 따르면, 이것은 분명히 날개가 아니다.*", + "book.spectrum.guidebook.mundane_items.trident.text": "이걸 얻으려면 기반암을 들어가야 한다는 소문을 들었는데, 벌레 떼한테 끔찍하게 뜯어 먹혔을 뿐이다.", + "book.spectrum.guidebook.mundane_items.heavy_core.text": "*날 부숴봐라*", + + "book.spectrum.guidebook.vanilla_enchantments.name": "바닐라 마법 부여", + "book.spectrum.guidebook.vanilla_enchantments.page0.text": "마법 부여기는 내가 이미 알고 있는 그 평범한 마법 부여들도 잘 만들어낸다.\\\n\\\n물론, 그것들을 만들 때 썼던 것과 똑같은 색깔의 [안료](entry://general/pigment)를 사용하면 그 마법들도 더 높은 레벨로 강화할 수 있다.", + "book.spectrum.guidebook.vegetal.page0.text": "식성은 지극히 유기적이었다! 확실히 씹어 넘기기 편하긴 하겠지. 이제 와서 돌이켜보면 너무나도 뻔한 해답이었지만...\\\n그 유기체들이 유기물을 소화하고 배설한 이 흥미로운 부산물을, 나는 **자연의 원초적인 에너지**를 상징한다는 의미에서 베지탈이라 부르기로 했다.\\\n\\\n이것이 앞으로의 여정에서 내 목숨을 몇 번이고 구해주거나, 혹은 날 새로운 위험으로 밀어 넣을 게 분명하다.", + "book.spectrum.guidebook.vulnerability.page0.text": "레벨이 오를수록 [#](449900)내가 맞을 때 들어오는 피해량이 증폭되었다[#]().", + "book.spectrum.guidebook.weather_detector.page0.text": "황수정은 뇌우가 몰아칠 때 방출되는 에너지에 매우 예민하게 반응한다.\\\n\\\n비나 뇌우에 노출시킨다면, 분노하듯 [#](449900)레드스톤 신호[#]()를 뱉어낸다.", + "book.spectrum.guidebook.weather_detector.page1.text": "비가 올 때는 강도 8의 신호를 뿜어내지만, 폭풍우가 몰아칠 때는 최대치인 15의 신호를 내뿜는다.", + "book.spectrum.guidebook.weather_manipulation.name": "날씨 조작", + "book.spectrum.guidebook.weather_manipulation.page0.text": "한 가지 관찰 결과를 기록하자면,\\\n주변 환경이 [융합의 성소](entry://general/fusion_shrine)에 지대한 영향을 끼친다는 사실뿐만 아니라, 역으로 [융합의 성소](entry://general/fusion_shrine) 역시 이 세상의 날씨에 영향을 끼칠 수 있다는 사실을 알아냈다!\\\n\\\n재료들을 올바르게 사용한다면, 하늘의 뜻마저 비틀어버릴 수 있다.", + "book.spectrum.guidebook.weather_manipulation.page1.text": "*새로운 아름다운 날이야\\\n태양은 반짝이고\\\n새들은 지저귀고\\\n넌 지옥에 갈 것이다*", + "book.spectrum.guidebook.weather_manipulation.page1.title": "화창한 날씨", + "book.spectrum.guidebook.weather_manipulation.page2.text": "*똑똑\\\n누구세요?\\\n기상\\\n일어나라고?\\\n기상청에 따르면 오늘 밤엔 비가 올 거래.*", + "book.spectrum.guidebook.weather_manipulation.page2.title": "비 오는 날씨", + "book.spectrum.guidebook.weather_manipulation.page3.text": "*천둥의 신이 좋아하는 술은?\\\n\\\n토르닉 워터.*", + "book.spectrum.guidebook.weather_manipulation.page3.title": "천둥번개 날씨", + "book.spectrum.guidebook.weeping_circlet.page0.text": "저 아래 적의로 가득 찬 해저 유적들은 문자 그대로 물속의 지옥이다. 하지만 우연히도, 나는 그곳에서 [#](bb00bb)바다의 심장[#]() 하나를 발견했다.\\\n이것으로 만든 서클릿은 나를 마치 물속에서 태어난 물고기처럼 자유롭게 만들어 주었다. 바위는 두부처럼 깨지고, 내 몸은 화살처럼 물을 가르며, 숨 막히는 고통도 없이 심해 끝까지 꿰뚫어 볼 수 있게 되었다.\\\n\\\n게다가 내 곁을 맴도는 작고 사랑스러운 아홀로틀 친구들의 상처까지 치유해 준다. ♥", + "book.spectrum.guidebook.weeping_circlet.page1.text": "*물속에 살고 싶었던 적이 단 한 번이라도 있었냐고?\\\n없어? 뭐 어때, 이제 할 수 있는데! 당장 해저 기지부터 건설해야겠다!*", + "book.spectrum.guidebook.weeping_gala.amphora.text": "보통 통의 두 배나 되는 물건을 저장한다.", + "book.spectrum.guidebook.weeping_gala.barrel.text": "소형 창고", + "book.spectrum.guidebook.weeping_gala.lamp.text": "레드스톤 신호를 받으면 빛을 낸다.", + "book.spectrum.guidebook.weeping_gala.lantern.text": "두 가지 형태를 고안했다. 웅크려서 설치하면 다른 형태로 설치할 수 있다.", + "book.spectrum.guidebook.weeping_gala.light.text": "눈이 멀어버릴 만큼 밝다.", + "book.spectrum.guidebook.weeping_gala.name": "낙유목", + "book.spectrum.guidebook.weeping_gala.page0.text": "창백하고 이파리들을 드리운 위압적인 버드나무다. 나뭇가지들은 [우유](item://minecraft:milk_bucket)를 대신할 수 있을 만큼 달콤하고 끈적이는 수지가 눈물처럼 흐른다. 나무결이 놀라울 정도로 조밀해서, 다른 장작들보다 불에 타는 속도가 훨씬 느리다.\\\n\\\n엽록소라곤 한 줌도 없어 보이는 저 잎사귀들로 어떻게 저토록 거대하게 자라날 수 있는 거지?", + "book.spectrum.guidebook.weeping_gala.page1.text": "*우유나무... 버드나무... 잠깐, 버터나무!*", + "book.spectrum.guidebook.weeping_gala.pillar.text": "*우아하다*", + "book.spectrum.guidebook.what_happened.name": "저 아래에선 대체 무슨 일이?", + "book.spectrum.guidebook.what_happened.page0.text": "*지저 너머의 역사를 추적하며*.\\\n\\\n의심의 여지가 없다. 칠흑 같은 어둠 속에서도, 이곳엔 과거 찬란하게 번성했던 고도의 문명이 존재했음이 틀림없다. 하지만 내 눈에 보이는 건 부서진 폐허들뿐이다.\\\n도대체 무슨 일이 벌어졌던 걸까? 분명 문명이 어디로 증발해 버렸는지 그 흔적을 파헤칠 단서가 어딘가에 있을 것이다. 멸망인가? 아니면 도주인가?", + "book.spectrum.guidebook.what_happened.page1.checklist.entry0": "내가 아직 가보지 않은 곳이 남아있나?", + "book.spectrum.guidebook.what_happened.page1.checklist.entry1": "기반암이 더 이상 밑바닥이 아니라면, *무엇이* 밑바닥이지?", + "book.spectrum.guidebook.what_happened.page1.checklist.entry2": "내가 오버월드에서 마주친 그 유적들은 어떻게 만들어진 걸까?", + "book.spectrum.guidebook.what_happened.page2.checklist.entry0": "저 칠흑의 장령은 어쩌다 생겨난 거지?", + "book.spectrum.guidebook.what_happened.page2.checklist.entry1": "용부액 늪에 있던 그 거대한 뼈들... 그것들을 부술 방법이 있을까?", + "book.spectrum.guidebook.what_happened.page2.checklist.entry2": "수정 정원에 있는 이상한 수정 덩어리들은 뭐지?", + "book.spectrum.guidebook.what_happened.page2.checklist.entry3": "여기에도 정동이 있을까?", + "book.spectrum.guidebook.what_happened.page3.text": "내가 혹시라도 놓친 구석이 있을까 봐 이 심연을 쥐 잡듯 돌아다녔다. 하지만 어딜 가든 간에 살아 숨 쉬는 지성체는 머리카락 한 올조차 찾아볼 수 없었다.", + "book.spectrum.guidebook.what_happened.page3.title": "단서: 생물군계", + "book.spectrum.guidebook.what_happened.page4.text": "이건 마치 바닥 밑에 또 다른 바닥이 끝없이 이어지는 꼴 아닌가? 불과 얼마 전까지만 해도 기반암이 절대 뚫리지 않는 세상의 끝이라 믿었는데, 결국 내가 이곳에 서 있지 않은가. 부서지지 않는다고? 그럴 수도 있다. 적어도 당분간은.", + "book.spectrum.guidebook.what_happened.page4.title": "단서: 차원의 밑바닥", + "book.spectrum.guidebook.what_happened.page5.text": "예전에 이 심연을 걷던 자들에겐 하층석조차도 파괴 불가능한 장벽은 아니었던 건가? 거대한 첨단 굴착 장비들을 대동하긴 했지만, 이 바윗덩어리들을 부수고 제련하여 내가 \"보존석\"이라 부르는 그 암석으로 재탄생시켰다.", + "book.spectrum.guidebook.what_happened.page5.title": "단서: 발굴 현장", + "book.spectrum.guidebook.what_happened.page6.text": "[칠흑의 장령](entry://dimension/black_langast)에서 흉측하게 돋아나 있던 잔해들은, 한때는 아름답던 공명 백합들이었다. 이곳에서 대체 무슨 일이 벌어졌던 거지? 설마 이 말은...", + "book.spectrum.guidebook.what_happened.page6.title": "단서: 칠흑의 장령", + "book.spectrum.guidebook.what_happened.page7.text": "탐험을 할 때마다 그 무식하게 거대한 뼈다귀들과 끝도 없이 마주친다. 그게 진짜 용이었는지는 아직 짐작조차 할 수 없지만, 그놈들이 어떤 괴수였든 간에 압도적인 존재였음은 분명하다. 그 괴수들이 이곳의 거주민들을 모조리 쓸어버린 뒤 자기들마저 멸종해 버린 걸까?", + "book.spectrum.guidebook.what_happened.page7.title": "단서: 용골", + "book.spectrum.guidebook.what_happened.page8.text": "문자 그대로 공명음을 내며 엄청난 에너지를 그득하게 머금고 있는 돌덩이들이다. 살짝만 건드려도 서로 미친 듯이 공명하며 떨리다가, 외부 충격이 더 없어도 자기들끼리 붕괴하며 산산조각 나버린다. 이걸 어떻게든 에너지원으로 쓸 수 있지 않을까?", + "book.spectrum.guidebook.what_happened.page8.title": "단서: 음명석", + "book.spectrum.guidebook.what_happened.page9.text": "이 밑바닥의 새하얗게 빛나는 정동들은 내가 지상에서 본 그 어떤 것과도 차원이 다르며, 무시무시한 마법적 에너지를 방출한다. 하지만 도대체 왜 이 심연에만 존재하는 걸까? 의문만 늘어난다...", + "book.spectrum.guidebook.what_happened.page9.title": "단서: 월장석", + "book.spectrum.guidebook.whispy_circlet.page0.text": "내 눈 밑에 짙게 깔린 다크 서클만이 내 끔찍한 수면 부족을 증명하는 유일한 증거는 아니다. 내가 잠을 자지 않고 버틸 때마다, 그렇게 넘겨진 악몽에서 나올 법한 괴물들이 쫓아 기어 나온다.\\\n\\\n그에 대한 내 완벽한 대항책으로 준비한 휴식의 형상화로, 잠이 필요하지 않게 된다.", + "book.spectrum.guidebook.whispy_circlet.page1.text": "이걸 머리에 쓰고 단 몇 분만 지나도 몸과 마음이 말끔하게 씻겨 내려가며, 내 몸을 갉아먹던 모든 부정적인 저주들에서 더 빨리 회복하는 게 느껴진다.\\\n\\\n*꿀잠의 상쾌함.*", + + "book.spectrum.guidebook.filtering.title": "필터링", + "book.spectrum.guidebook.filtering.filter_slot.text": "내 훌륭한 창조물 중 일부에 필터 기능을 달아주었다!\\\n\\\n이 필터 슬롯에 아이템을 올려두면, 닥치는 대로 모든 것을 다루는 대신 오직 그 아이템과 똑같은 것들만 골라서 처리할 것이다.", + "book.spectrum.guidebook.filtering.tag_filtering.title": "태그 필터링", + "book.spectrum.guidebook.filtering.tag_filtering.text": "이름표에 [#](449900)아이템 태그[#]()를 꼼꼼하게 적어 넣으면, 내 기계들이 오직 그 태그를 가진 것들만 선별적으로 다루도록 아주 정밀하게 통제할 수 있다! 태그 이름 앞에 '!'를 붙이면, 반대로 그 태그를 가지지 않은 아이템만 완벽하게 걸러낼 수도 있다.\\\n\\\n필터 조건은 왼쪽에서 오른쪽 순서로 적용된다.", + + + "commands.spectrum.primordial_fire.put_on.success": "%d개의 개체에 불을 붙였습니다", + "commands.spectrum.primordial_fire.put_out.success": "%d개의 개체의 불을 껐습니다", + "commands.spectrum.progression_sanity.success": "서버 콘솔에 무결성 검사 결과를 출력했습니다", + "commands.spectrum.spawn_shooting_star.success": "각 플레이어에게 %d개의 별똥별을 소환했습니다", + "commands.spectrum.list_item_tags.list": "%s(은)는 다음 아이템 태그에 포함되어 있습니다:", + + "container.spectrum.bedrock_anvil": "수리 & 개조", + "container.spectrum.bedrock_anvil.lore": "설명:", + "container.spectrum.bedrock_anvil.tooltip": "파괴 불가. 제한 없이 무료로 이름 변경이 가능하며", + "container.spectrum.bedrock_anvil.tooltip2": "수리 횟수 제한이 없고 아이템에 설명을 추가할 수 있습니다", + "container.spectrum.bedrock_anvil.tooltip3": "아이템에 안료를 더해 이름의 색상을 변경합니다", + "container.spectrum.modonomicon.crystallarieum.catalyst": "촉매:", + "container.spectrum.modonomicon.crystallarieum.speed": "속도:", + "container.spectrum.modonomicon.crystallarieum.ink_drain": "잉크 소모:", + "container.spectrum.modonomicon.crystallarieum.depletion": "고갈:", + + "container.spectrum.rei.anvil_crushing.high_force_required": "높은 충격력 필요", + "container.spectrum.rei.anvil_crushing.low_force_required": "낮은 충격력 필요", + "container.spectrum.rei.anvil_crushing.medium_force_required": "중간 충격력 필요", + "container.spectrum.rei.anvil_crushing.plus_xp": "+%f XP", + "container.spectrum.rei.anvil_crushing.title": "아이템 분쇄", + "container.spectrum.rei.chance": "확률: %.0f %%", + "container.spectrum.rei.cinderhearth_recipe": "잿불화로 레시피", + "container.spectrum.rei.crafting_time": "%f초", + "container.spectrum.rei.crafting_time_one_second": "%f초", + "container.spectrum.rei.crafting_time_and_xp": "%f초 – %f XP", + "container.spectrum.rei.crafting_time_one_second_and_xp": "%f초 – %f XP", + "container.spectrum.rei.crystallarieum.catalyst": "촉매:", + "container.spectrum.rei.crystallarieum.speed": "성장 속도:", + "container.spectrum.rei.crystallarieum.ink_drain": "잉크 소모:", + "container.spectrum.rei.crystallarieum.depletion": "고갈:", + "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds": "단계당 %f초", + "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_catalyst_optional": "%f초 – 촉매 선택", + "container.spectrum.rei.crystallarieum.requires_catalyst": "촉매 필요", + "container.spectrum.rei.dragonrot_converting.title": "용부액 담그기", + "container.spectrum.rei.enchanter_recipe": "마법 부여기 레시피", + "container.spectrum.rei.enchanting.title": "아이템 마법 부여", + "container.spectrum.rei.enchantment_upgrade.level": "LV%f⇒%f", + "container.spectrum.rei.enchantment_upgrade.required_item_count": "아이템 %f개", + "container.spectrum.rei.enchantment_upgrade.tooltip": "마법 과부여 지원", + "container.spectrum.rei.enchantment_upgrade.button": "레벨 순환", + "container.spectrum.rei.enchantment_upgrading.title": "마법 부여 강화", + "container.spectrum.rei.freezing.title": "얼리기", + "container.spectrum.rei.fusion_recipe": "융합 레시피", + "container.spectrum.rei.heating.title": "가열하기", + "container.spectrum.rei.ink_converting.amount": "수량: %d", + "container.spectrum.rei.ink_converting.color": "색상: %s", + "container.spectrum.rei.ink_converting.title": "잉크 변환", + "container.spectrum.rei.liquid_crystal_converting.title": "액체 수정 담그기", + "container.spectrum.rei.midnight_solution_converting.title": "자정의 용액 담그기", + "container.spectrum.rei.sludge_converting.title": "진흙탕 담그기", + "container.spectrum.rei.pedestal_crafting.recipe_not_unlocked_line_1": "아직 발견하지 못한", + "container.spectrum.rei.pedestal_crafting.recipe_not_unlocked_line_2": "레시피입니다", + "container.spectrum.rei.pedestal_crafting.secret_recipe": "비밀 레시피!", + "container.spectrum.rei.pedestal_crafting.secret_recipe.hint": "비밀 레시피! 힌트:", + "container.spectrum.rei.pedestal_crafting.title": "받침대 조합", + "container.spectrum.rei.pedestal_recipe": "받침대 레시피", + "container.spectrum.rei.pure_recipe": "순수한 레시피", + "container.spectrum.rei.potion_workshop_brewing.title": "물약 작업장 양조", + "container.spectrum.rei.potion_workshop_crafting.title": "물약 작업장 조합", + "container.spectrum.rei.potion_workshop_reacting.title": "물약 반응물", + "container.spectrum.rei.primordial_fire_burning.title": "태고의 불 연소", + "container.spectrum.rei.titration_barrel.at_least_time_day": "현실 시간으로 최소 1일", + "container.spectrum.rei.titration_barrel.at_least_time_days": "현실 시간으로 최소 %d일", + "container.spectrum.rei.titration_barrel.at_least_time_hour": "현실 시간으로 최소 1시간", + "container.spectrum.rei.titration_barrel.at_least_time_hours": "현실 시간으로 최소 %d시간", + "container.spectrum.rei.titration_barrel.time_day": "현실 시간 1일", + "container.spectrum.rei.titration_barrel.time_days": "현실 시간 %d일", + "container.spectrum.rei.titration_barrel.time_hour": "현실 시간 1시간", + "container.spectrum.rei.titration_barrel.time_hours": "현실 시간 %d시간", + + "death.attack.ripping": "%1$s(이)가 갈가리 찢어졌습니다!", + "death.attack.spectrum_bristle_sprouts": "%1$s(이)가 가시털에 찔려 죽었습니다", + "death.attack.spectrum_deadly_poison": "%1$s(이)가 맹독에 굴복했습니다", + "death.attack.spectrum_deadly_poison.item": "%1$s(이)가 %2$s의 %3$s에 의해 맹독에 중독되어 사망했습니다", + "death.attack.spectrum_deadly_poison.player": "%1$s(이)가 %2$s에 의해 맹독에 중독되어 사망했습니다", + "death.attack.spectrum_decay": "%1$s(이)가 산 채로 잡아먹혔습니다", + "death.attack.spectrum_dike_gate": "%1$s(은)는 초대받지 않았으나, 너무 늦게 그 사실을 깨달았습니다", + "death.attack.spectrum_dragonrot": "%1$s(이)가 흔적도 없이 사라졌습니다", + "death.attack.spectrum_dragonrot.item": "%2$s(이)가 %3$s(을)를 사용하여 %1$s(을)를 흔적도 없이 지워버렸습니다", + "death.attack.spectrum_dragonrot.player": "%2$s(이)가 %1$s(을)를 흔적도 없이 지워버렸습니다", + "death.attack.spectrum_evisceration": "%1$s(이)가 수천 번 베여 살가죽이 벗겨졌습니다", + "death.attack.spectrum_evisceration.item": "%2$s(이)가 %1$s(을)를 고기 다지는 기계(%3$s)에 던져 넣었습니다. 눈알만 빠져나왔네요 ;^;", + "death.attack.spectrum_evisceration.player": "%1$s(이)가 %2$s에 의해 고운 붉은 안개로 변했습니다.", + "death.attack.spectrum_floatblock": "%1$s(이)가 떠다니는 블록에 짓눌렸습니다", + "death.attack.spectrum_impaling": "%1$s(이)가 꿰뚫렸습니다!", + "death.attack.spectrum_impaling.item": "%2$s(이)가 %1$s(을)를 꿰뚫었습니다 – 아야!", + "death.attack.spectrum_impaling.player": "%1$s(이)가 %2$s에 의해 꼬치구이가 되었습니다", + "death.attack.spectrum_impaling.projectile": "%1$s(이)가 %2$s에 의해 꼬치구이가 되었습니다", + "death.attack.spectrum_incandescence": "%1$s(이)가 눈이 멀 듯한 백열로 타올랐습니다", + "death.attack.spectrum_incandescence.item": "%1$s(이)가 %3$s(을)를 사용하여 %2$s(을)를 눈부신 주홍빛 별로 만들었습니다 – 불꽃을 위한 훌륭한 장작이네요!", + "death.attack.spectrum_incandescence.player": "%2$s(이)가 %1$s(을)를 눈부신 주홍빛 별로 만들었습니다 – 불꽃을 위한 훌륭한 장작이네요!", + "death.attack.spectrum_ink_projectile": "%2$s(이)가 %1$s에게 그림 그리는 즐거움을 가르쳐 주었습니다", + "death.attack.spectrum_ink_projectile.item": "%2$s(이)가 %3$s(을)를 사용하여 %1$s에게 그림 그리는 즐거움을 가르쳐 주었습니다", + "death.attack.spectrum_ink_projectile.player": "%2$s(이)가 %1$s에게 그림 그리는 즐거움을 가르쳐 주었습니다", + "death.attack.spectrum_irradiance": "%1$s(이)가 단단한 빛에 꿰뚫렸습니다", + "death.attack.spectrum_irradiance.player": "%2$s(이)가 %1$s(을)를 반짝이는 바늘겨레로 만들었습니다", + "death.attack.spectrum_irradiance.projectile": "%2$s(이)가 %1$s(을)를 반짝이는 바늘겨레로 만들었습니다", + "death.attack.spectrum_kindling_cough": "%1$s(이)가 %2$s에게 노릇하게 구워졌습니다", + "death.attack.spectrum_midnight_solution": "%1$s(이)가 번환 과정에서 소실되었습니다", + "death.attack.spectrum_midnight_solution.player": "%1$s(이)가 %2$s에게 쫓기다 번환 과정에서 소실되었습니다", + "death.attack.spectrum_moonstone_blast": "%1$s(이)가 분해되었습니다", + "death.attack.spectrum_moonstone_blast.item": "%1$s(이)가 %2$s의 %3$s에 의해 분해되었습니다", + "death.attack.spectrum_moonstone_blast.player": "%1$s(이)가 %2$s에 의해 분해되었습니다", + "death.attack.spectrum_moonstone_strike": "%1$s(이)가 폭발적인 시간을 보냈습니다. 문자 그대로요.", + "death.attack.spectrum_moonstone_strike.item": "%2$s(이)가 %3$s(을)를 사용하여 %1$s에게 폭발적인 시간을 선사했습니다. 문자 그대로요.", + "death.attack.spectrum_moonstone_strike.player": "%2$s(이)가 %1$s에게 폭발적인 시간을 선사했습니다. 문자 그대로요.", + "death.attack.spectrum_primordial_fire": "%1$s의 영혼이 그을린 숯덩이로 타버렸습니다", + "death.attack.spectrum_primordial_fire.item": "%2$s(이)가 %3$s(을)를 사용하여 %1$s의 영혼을 재로 만들었습니다", + "death.attack.spectrum_primordial_fire.player": "%2$s(이)가 %1$s의 영혼을 재로 만들었습니다", + "death.attack.spectrum_ripping": "%1$s(은)는 게임을 하고 싶었습니다", + "death.attack.spectrum_set_health": "%1$s(이)가 어둠의 영역으로 추방되었습니다", + "death.attack.spectrum_set_health.item": "%1$s(이)가 %3$s(을)를 사용하여 %2$s(을)를 어둠의 영역으로 추방했습니다", + "death.attack.spectrum_set_health.player": "%1$s(이)가 %2$s에 의해 어둠의 영역으로 추방되었습니다", + "death.attack.spectrum_shooting_star": "%1$s(이)가 별똥별에 맞았습니다. 소원을 비세요!", + "death.attack.spectrum_sleep": "%1$s(이)가 끝없는 꿈속으로 사라졌습니다", + "death.attack.spectrum_sleep.item": "%2$s(이)가 %3$s(을)를 사용하여 %1$s(을)를 바닥 없는 바다로 보내, 존재하는 것과 존재할 수 있는 모든 것을 받아들이게 했습니다.", + "death.attack.spectrum_sleep.player": "%2$s(이)가 %1$s(을)를 바닥 없는 바다로 보내, 존재하는 것과 존재할 수 있는 모든 것을 받아들이게 했습니다.", + "death.attack.spectrum_snapping_ivy": "%1$s(이)가 조금 지체되었습니다", + "death.attack.spectrum_remembrance": "%1$s(은)는 영원히 기억될 것입니다", + "death.attack.spectrum_remembrance.player": "%1$s(은)는 %2$s에 의해 기억될 것입니다", + + "effect.spectrum.another_roll": "추가 기회", + "effect.spectrum.another_roll.desc": "행운, 약탈, 그리고 그 외 운에 기반한 마법 부여의 전리품에 영향을 미칩니다.", + "effect.spectrum.ascension": "승천", + "effect.spectrum.ascension.desc": "천국의 부름과 유사합니다. 신성 효과가 발동하기 전 힘을 한데 모으는 영광스러운 의식입니다.", + "effect.spectrum.calming": "진정", + "effect.spectrum.calming.desc": "적의 생성률과 공격성을 감소시킵니다.", + "effect.spectrum.deadly_poison": "맹독", + "effect.spectrum.deadly_poison.desc": "독과 같지만, 치명적입니다.", + "effect.spectrum.density": "밀도", + "effect.spectrum.density.desc": "몸을 무겁게 만들어 멀리 뛰는 것을 막고 낙하 피해를 증가시킵니다.", + "effect.spectrum.divinity": "신성", + "effect.spectrum.divinity.desc": "엄청난 버프를 부여하지만... 사망 시 막대한 대가를 치르게 됩니다.", + "effect.spectrum.effect_prolonging": "효과 연장", + "effect.spectrum.effect_prolonging.desc": "자신에게 부여된 다른 상태 효과들의 지속 시간을 증가시킵니다.", + "effect.spectrum.eternal_slumber": "영면", + "effect.spectrum.eternal_slumber.desc": "대상을 꿈조차 꾸지 않는 깊은 잠에 빠뜨립니다. 그 누구도 쉽게 벗어날 수 없습니다.", + "effect.spectrum.eternal_slumber.duration": "영원함 | %1$s", + "effect.spectrum.eternal_slumber.duration_inf": "영원함", + "effect.spectrum.fatal_slumber": "치명적 수면", + "effect.spectrum.fatal_slumber.desc": "지속 시간이 끝나면 즉사합니다.", + "effect.spectrum.frenzy": "광란", + "effect.spectrum.frenzy.desc": "적을 처치할 때마다 피해량, 공격 속도, 이동 속도, 밀침 저항이 증가합니다. 10초 내에 처치하지 못하면 오히려 디버프를 받습니다.", + "effect.spectrum.immunity": "면역", + "effect.spectrum.immunity.desc": "다른 모든 상태 효과를 제거하고, 새로운 효과가 부여되는 것을 막습니다.", + "effect.spectrum.lava_gliding": "용암 유영", + "effect.spectrum.lava_gliding.desc": "용암 속에서의 이동 속도와 시야를 증가시킵니다. 하지만 화염 저항을 제공하지는 않습니다.", + "effect.spectrum.life_drain": "생명력 흡수", + "effect.spectrum.life_drain.desc": "최대 체력을 감소시킵니다.", + "effect.spectrum.lightweight": "경량", + "effect.spectrum.lightweight.desc": "몸을 가볍게 만들어 점프 높이를 올리고 낙하 속도를 늦추며, 레벨이 높아지면 낙하 피해에 면역이 됩니다.", + "effect.spectrum.magic_annulation": "마법 무효화", + "effect.spectrum.magic_annulation.desc": "받는 마법 피해를 레벨당 1씩 감소시킵니다.", + "effect.spectrum.projectile_rebound": "투사체 반사", + "effect.spectrum.projectile_rebound.desc": "날아오는 투사체를 방어할 약간의 확률을 부여합니다.", + "effect.spectrum.scarred": "상처", + "effect.spectrum.scarred.desc": "자연적인 체력 재생을 막고 달릴 수 없게 만듭니다.", + "effect.spectrum.nourishing": "하급 포화", + "effect.spectrum.nourishing.desc": "천천히 식욕을 억제합니다.", + "effect.spectrum.somnolence": "졸음증", + "effect.spectrum.somnolence.desc": "극심한 피로를 유발하지만, 대낮에도 잠을 잘 수 있게 해 줍니다.", + "effect.spectrum.stiffness": "경직", + "effect.spectrum.stiffness.desc": "공격 속도를 감소시킵니다.", + "effect.spectrum.swiftness": "민첩", + "effect.spectrum.swiftness.desc": "공격 속도를 증가시킵니다.", + "effect.spectrum.toughness": "강인함", + "effect.spectrum.toughness.desc": "강력한 공격의 위력을 약화시킵니다.", + "effect.spectrum.vulnerability": "취약", + "effect.spectrum.vulnerability.desc": "받는 피해량이 증가합니다.", + + "enchantment.minecraft.feather_falling": "가벼운 착지", + "enchantment.minecraft.fortune": "행운", + "enchantment.minecraft.power": "힘", + "enchantment.minecraft.silk_touch": "섬세한 손길", + "enchantment.minecraft.unbreaking": "내구성", + "enchantment.spectrum.foundry": "용해", + "enchantment.spectrum.foundry.desc": "파괴한 블록을 자동으로 제련합니다", + "enchantment.spectrum.big_catch": "월척", + "enchantment.spectrum.big_catch.desc": "살아있는 생명체를 낚아 올릴 확률이 증가합니다", + "enchantment.spectrum.clovers_favor": "클로버의 호의", + "enchantment.spectrum.clovers_favor.desc": "희귀한 전리품을 얻을 확률이 증가합니다", + "enchantment.spectrum.disarming": "무장 해제", + "enchantment.spectrum.disarming.desc": "적들이 장비를 떨어뜨릴 확률을 부여합니다", + "enchantment.spectrum.exuberance": "풍요", + "enchantment.spectrum.exuberance.desc": "떨어지는 경험치 양을 증가시킵니다", + "enchantment.spectrum.first_strike": "선제공격", + "enchantment.spectrum.first_strike.desc": "적의 체력이 가득 차 있을 때 피해량이 증가합니다", + "enchantment.spectrum.improved_critical": "향상된 치명타", + "enchantment.spectrum.improved_critical.desc": "치명타를 입힐 때 추가 피해량이 증가합니다", + "enchantment.spectrum.indestructible": "파괴불가", + "enchantment.spectrum.indestructible.desc": "도구를 절대로 파괴되지 않게 만듭니다", + "enchantment.spectrum.inertia": "관성", + "enchantment.spectrum.inertia.desc": "기본 채굴 속도가 감소하지만, 동일한 종류의 블록을 캘 때마다 속도가 증가합니다", + "enchantment.spectrum.inexorable": "불굴", + "enchantment.spectrum.inexorable.desc": "도구 및 이동 속도 저하 효과를 방지합니다", + "enchantment.spectrum.inventory_insertion": "인벤토리 회수", + "enchantment.spectrum.inventory_insertion.desc": "파괴한 블록을 인벤토리로 직접 넣습니다", + "enchantment.spectrum.pest_control": "해충 방제", + "enchantment.spectrum.pest_control.desc": "벌레 먹은 블록을 파괴할 때 좀벌레를 제거합니다", + "enchantment.spectrum.razing": "돌파", + "enchantment.spectrum.razing.desc": "부수기 힘든 단단한 블록일수록 채굴 속도가 더 빠르게 증가합니다", + "enchantment.spectrum.resonance": "공명", + "enchantment.spectrum.resonance.desc": "부드러운 진동을 이용해 일부 블록을 세상에 놓여있던 모습 그대로 떨어뜨리거나 특별한 특성을 보존합니다", + "enchantment.spectrum.serendipity_reel": "행운의 릴", + "enchantment.spectrum.serendipity_reel.desc": "전리품을 두 배로 낚아 올릴 확률을 부여합니다", + "enchantment.spectrum.sniping": "저격", + "enchantment.spectrum.sniping.desc": "투사체의 속도를 증가시킵니다", + "enchantment.spectrum.steadfast": "철의 의지", + "enchantment.spectrum.steadfast.desc": "바닥에 떨어졌을 때, 도구가 대부분의 피해를 입지 않도록 보호하며 디스폰되거나 공허로 떨어지는 것을 막아줍니다", + "enchantment.spectrum.tight_grip": "기민한 손놀림", + "enchantment.spectrum.tight_grip.desc": "공격 대기 시간을 감소시킵니다", + "enchantment.spectrum.treasure_hunter": "보물 사냥꾼", + "enchantment.spectrum.treasure_hunter.desc": "가끔씩 몹을 죽일 때 머리를 떨어뜨리게 합니다", + "enchantment.spectrum.voiding": "공허 저주", + "enchantment.spectrum.voiding.desc": "파괴한 모든 블록의 전리품을 소멸시킵니다", + + "entity.spectrum.bedrock_fishing_bobber": "기반암 낚시 찌", + "entity.spectrum.draconic_twinsword": "용의 쌍날검", + "entity.spectrum.dragon_talon": "용의 발톱", + "entity.spectrum.bident": "쌍지창", + "entity.spectrum.bident_mirror_image": "쌍지창 환영", + "entity.spectrum.block_flooder_projectile": "블록 범람기", + "entity.spectrum.egg_laying_wooly_pig": "알 낳는 양털 돼지", + "entity.spectrum.eraser": "말소자", + "entity.spectrum.glow_phantom_frame": "발광 팬텀 액자", + "entity.spectrum.float_block": "부유 블록", + "entity.spectrum.ink_projectile": "잉크 발사체", + "entity.spectrum.kindling": "불망울", + "entity.spectrum.kindling_cough": "불망울 기침", + "entity.spectrum.lagoon_fishing_bobber": "석호 낚시 찌", + "entity.spectrum.light_shard": "빛의 조각", + "entity.spectrum.living_marker": "마커", + "entity.spectrum.lizard": "잠복 도마뱀", + "entity.spectrum.mining_projectile": "채굴 발사체", + "entity.spectrum.molten_fishing_bobber": "녹아내리는 낚시 찌", + "entity.spectrum.monstrosity": "§k괴이", + "entity.spectrum.phantom_frame": "팬텀 액자", + "entity.spectrum.preservation_turret": "보존 포탑", + "entity.spectrum.shooting_star": "별똥별", + "entity.spectrum.item_projectile": "아이템 발사체", + "entity.spectrum.fireproof_item": "아이템", + "entity.spectrum.glass_arrow": "유리 화살", + "entity.spectrum.light_mine": "빛의 지뢰", + "entity.spectrum.parametric_mining_device": "매개변수식 채굴 장치", + "entity.spectrum.light_spear": "빛의 창", + "entity.spectrum.seat": "Seat", + "entity.spectrum.marrow": "말로우", + "entity.spectrum.splinterspawn": "가시파편충", + + "gui.spectrum.button.back": "뒤로", + "gui.spectrum.button.collisions": "충돌", + "gui.spectrum.button.forward": "앞으로", + "gui.spectrum.button.glowing": "발광", + "gui.spectrum.button.particles": "입자", + "gui.spectrum.quick_navigation.controls1": "이동 키로 이동", + "gui.spectrum.quick_navigation.controls2": "버리기/인벤토리 키로 선택", + + "info.spectrum.tooltip.adulterated.info": "[당신에게만 보입니다]", + "info.spectrum.tooltip.adulterated.effect": "%s(으)로 오염됨", + + "item.minecraft.lingering_potion.effect.pigment_potion": "잔류형 §b안§d료 §e물§f약", + "item.minecraft.potion.effect.pigment_potion": "§b안§d료 §e물§f약", + "item.minecraft.splash_potion.effect.pigment_potion": "투척용 §b안§d료 §e물§f약", + "item.minecraft.tipped_arrow.effect.pigment_potion": "§b안§d료 §e묻§f은 화살", + "item.neepmeat.goggles.tooltip_with_ink": "§7%s§7 아이템을 사용해 더 너머를 봅니다.", + "item.spectrum.aloe_leaf": "알로에 잎", + "item.spectrum.amaranth_grains": "아마란스 곡물", + "item.spectrum.amethyst_cluster_banner_pattern": "현수막 무늬", + "item.spectrum.amethyst_cluster_banner_pattern.desc": "자수정 군집", + "item.spectrum.amethyst_glass_arrow": "자수정 유리 화살", + "item.spectrum.amethyst_glass_arrow.tooltip": "대상을 얼리고 동결 피해를 입힙니다", + "item.spectrum.amethyst_powder": "자수정 가루", + "item.spectrum.amethyst_shard_banner_pattern": "현수막 무늬", + "item.spectrum.amethyst_shard_banner_pattern.desc": "자수정 조각", + "item.spectrum.aqua_regia": "왕수", + "item.spectrum.aqua_regia.tooltip.preview": "구근과 꽃잎을 조합하여 양조합니다", + "item.spectrum.aqua_regia.tooltip.preview2": "꽃잎은 구근보다 발효가 느리지만, 부정적인 효과를 줄여줍니다", + "item.spectrum.tooltip.could_use_some_sweetener": "감미료가 필요할 수 있습니다", + "item.spectrum.artisans_atlas": "장인의 지도책", + "item.spectrum.artisans_atlas.empty": "구조물 안에서 웅크린 채로 사용하여 같은 종류의 다른 구조물을 찾습니다", + "item.spectrum.artisans_atlas.locates_structure": "감지 대상 구조물: ", + "item.spectrum.artisans_atlas.set_structure": "감지 대상 변경: ", + "item.spectrum.artisans_atlas.unlocatable": "이 구조물의 기운은 뭔가 특별한 것 같습니다", + "item.spectrum.artists_palette": "예술가의 팔레트", + "item.spectrum.artists_palette.tooltip": "§7원소 잉크를 총 %d§7까지 저장합니다", + "item.spectrum.artists_palette.tooltip.mix_on_demand": "§7필요에 따라 다른 종류의 잉크를 혼합합니다", + "item.spectrum.ash_flakes": "재 파편", + "item.spectrum.ashen_circlet": "잿빛의 서클릿", + "item.spectrum.ashen_circlet.tooltip": "§7화염 피해로부터 플레이어를 보호하고", + "item.spectrum.ashen_circlet.tooltip.cooldown_full": "§2엄청난 열을 흡수할 준비가 되었습니다", + "item.spectrum.ashen_circlet.tooltip.cooldown_seconds": "§7재충전까지 %d§7초", + "item.spectrum.ashen_circlet.tooltip2": "§7용암 속에서 더 나은 시야와 속도를 부여합니다", + "item.spectrum.ashen_tart": "잿빛의 타르트", + "item.spectrum.azalea_tea": "진달래 차", + "item.spectrum.azalea_tea.tooltip": "낮 동안 잠을 잘 수 있게 해줍니다", + "item.spectrum.azure_dike_belt": "담청 방벽 허리띠", + "item.spectrum.azure_dike_belt.tooltip": "§7피격 이후 §9담청 방벽§7의 회복력을 크게 증가시킵니다", + "item.spectrum.azure_dike_provider.tooltip": "§9담청 방벽§7 §a%d§7 단위를 부여합니다", + "item.spectrum.azure_dike_ring": "담청 방벽 반지", + "item.spectrum.azure_dike_ring.tooltip": "§9담청 방벽§7의 충전속도를 증가시킵니다", + "item.spectrum.azuresque_dike_core": "담청 방벽 코어", + "item.spectrum.azuresque_dike_core.tooltip": "§7다른 §9담청 방벽§7 원천들을 강화합니다", + "item.spectrum.azuresque_dike_core.tooltip2": "§9담청 방벽§7의 충전속도 및 회복력을 증가시킵니다", + "item.spectrum.azuresque_dike_core.tooltip3": "§7흡수할 수 없는 피해를 두 배로 받습니다", + "item.spectrum.azurite_glass_ampoule": "남동석 유리 앰플", + "item.spectrum.azurite_glass_ampoule.tooltip": "적을 추적하는 잉크 구체를 소환합니다", + "item.spectrum.bag_of_holding": "소유의 가방", + "item.spectrum.bagnun": "바그눈", + "item.spectrum.banyash": "바냐시", + "item.spectrum.bedrock_axe": "기반암 도끼", + "item.spectrum.bedrock_boots": "기반암 부츠", + "item.spectrum.bedrock_bow": "기반암 활", + "item.spectrum.bedrock_chestplate": "기반암 흉갑", + "item.spectrum.bedrock_crossbow": "기반암 쇠뇌", + "item.spectrum.bedrock_dust": "부서진 기반암", + "item.spectrum.bedrock_fishing_rod": "기반암 낚시대", + "item.spectrum.bedrock_fishing_rod.tooltip": "가장 위험한 액체에서도 낚시를 할 수 있습니다", + "item.spectrum.bedrock_helmet": "기반암 투구", + "item.spectrum.bedrock_hoe": "기반암 괭이", + "item.spectrum.bedrock_leggings": "기반암 레깅스", + "item.spectrum.bedrock_pickaxe": "기반암 곡괭이", + "item.spectrum.bedrock_shears": "기반암 가위", + "item.spectrum.bedrock_shovel": "기반암 삽", + "item.spectrum.bedrock_sword": "기반암 검", + "item.spectrum.berliner": "베를리너", + "item.spectrum.bident.postToolTip.ap": " %d%% 방어 관통", + "item.spectrum.bident.postToolTip.disable": "인벤토리에서 우클릭하여 능력을 켜거나 끕니다", + "item.spectrum.bident.postToolTip.pp": " %d%% 마법 부여 관통", + "item.spectrum.bident.tooltip.enabled": "투척 효과 활성화됨", + "item.spectrum.bident.tooltip.disabled": "투척 효과 비활성화됨", + "item.spectrum.bismuth_crystal": "비스무트 결정", + "item.spectrum.bismuth_flake": "비스무트 조각", + "item.spectrum.black_pigment": "검은색 안료", + "item.spectrum.blackest_lotus": "칠흑의 연꽃", + "item.spectrum.blackest_lotus.tooltip": "마법적인 기운이 당신마저 휩쓸리게 만듭니다", + "item.spectrum.block_flooder": "블록 범람기", + "item.spectrum.block_flooder.tooltip": "빈 공간을 채웁니다 (동굴, 협곡, 구덩이 등…)", + "item.spectrum.block_flooder.tooltip2": "던져서 사용하며, 반경은 10블록입니다", + "item.spectrum.block_flooder.tooltip3": "인벤토리에서 일치하는 블록을 바로 꺼내어 사용합니다", + "item.spectrum.block_flooder.tooltip4": "또는 조약돌을 사용합니다", + "item.spectrum.blood_orchid_petal": "혈난초 꽃잎", + "item.spectrum.bloodboil_syrup": "비혈 시럽", + "item.spectrum.bloodstone_glass_ampoule": "혈석 유리 앰플", + "item.spectrum.bloodstone_glass_ampoule.tooltip": "명중한 적을 관통하는 잉크 화살을 소환합니다", + "item.spectrum.blue_pigment": "파란색 안료", + "item.spectrum.bodacious_berry_bar": "환상적인 베리 바", + "item.spectrum.bone_ash": "골회", + "item.spectrum.bottle_of_decay_away": "부패 제거의 병", + "item.spectrum.bottle_of_decay_away.tooltip": "§2오염된 영역에 직접 바르십시오", + "item.spectrum.bottle_of_fading": "쇠퇴의 병", + "item.spectrum.bottle_of_fading.tooltip": "§2미끈거립니다", + "item.spectrum.bottle_of_failing": "결함의 병", + "item.spectrum.bottle_of_failing.tooltip": "§e⚠ 굶주림", + "item.spectrum.bottle_of_forfeiture": "상실의 병", + "item.spectrum.bottle_of_forfeiture.tooltip": "§4⚠ 내가 무슨 짓을 하는지 알고 있기를 바란다", + "item.spectrum.bottle_of_ruin": "파멸의 병", + "item.spectrum.bottle_of_ruin.tooltip": "§4⚠ 아마 후회하게 될 텐데, 그렇지?", + "item.spectrum.bottomless_bundle": "바닥없는 꾸러미", + "item.spectrum.bottomless_bundle.tooltip.count": "%d / %d (%s 세트)", + "item.spectrum.bottomless_bundle.tooltip.count_of": "%d / %d ", + "item.spectrum.bottomless_bundle.tooltip.empty": "비어있음", + "item.spectrum.bottomless_bundle.tooltip.enter_inventory": "획득한 %s(이)가 이곳에 보관됩니다", + "item.spectrum.bottomless_bundle.tooltip.locked_to_nothing": "고정됨 (웅크린 채로 사용하여 고정 해제)", + "item.spectrum.bottomless_bundle.tooltip.locked": "%s(으)로 고정됨 (웅크린 채로 사용하여 고정 해제)", + "item.spectrum.bottomless_bundle.tooltip.voiding": "§7들어간 아이템은 §c소멸합니다", + "item.spectrum.brewers_handbook": "양조가의 핸드북", + "item.spectrum.brewers_handbook.tooltip": "§6§o양조가의 핸드북, 확장판", + "item.spectrum.bristle_mead": "가시털 벌꿀술", + "item.spectrum.brown_pigment": "갈색 안료", + "item.spectrum.bucket_of_eraser": "말소자가 담긴 양동이", + "item.spectrum.celestial_pocketwatch": "천상의 회중시계", + "item.spectrum.celestial_pocketwatch.tooltip.use_blocked_fixed_time": "이 이상한 차원에서는 시계가 오작동하는 것 같습니다", + "item.spectrum.celestial_pocketwatch.tooltip.use_blocked_gamerule": "거대한 힘이 시계의 사용을 막고 있습니다", + "item.spectrum.celestial_pocketwatch.tooltip.working": "낮과 밤을 지배할 수 있게 해줍니다", + "item.spectrum.chauve_souris_au_vin": "쇼브 수리 오 뱅", + "item.spectrum.cheong": "청", + "item.spectrum.cheong.tooltip": "과일 기반의 감미료", + "item.spectrum.chrysocolla": "크리소콜라", + "item.spectrum.cinderhearth_structure_placer": "잿불화로 구조물 배치기", + "item.spectrum.circlet_of_arrogance": "오만의 서클릿", + "item.spectrum.circlet_of_arrogance.tooltip": "§7사망 시 큰 대가를 치르는 대신 엄청난 스탯 증가를 부여합니다", + "item.spectrum.citrine_glass_arrow": "황수정 유리 화살", + "item.spectrum.citrine_glass_arrow.tooltip": "대상을 멀리 밀쳐냅니다", + "item.spectrum.citrine_powder": "황수정 가루", + "item.spectrum.citrine_shard": "황수정 조각", + "item.spectrum.clotted_cream": "클로티드 크림", + "item.spectrum.clotted_cream.tooltip": "모든 효과를 제거합니다", + "item.spectrum.clotted_cream.tooltip2": "부드럽고 달콤합니다", + "item.spectrum.cooked_lizard_meat": "익힌 도마뱀 고기", + "item.spectrum.constructors_staff": "건축가의 지팡이", + "item.spectrum.constructors_staff.tooltip.crouch": "웅크린 상태에서는 일치하는 블록 대신 모든 블록을 기준으로 합니다", + "item.spectrum.constructors_staff.tooltip.missing_ink": "잉크 부족", + "item.spectrum.constructors_staff.tooltip.none_in_inventory": "인벤토리에 없음", + "item.spectrum.constructors_staff.tooltip.range": "블록 구조를 최대 %s 블록까지 연장합니다", + "item.spectrum.cotton_cloud_boots": "목화 구름 부츠", + "item.spectrum.cotton_cloud_boots.tooltip": "발밑에 푹신한 구름을 만들어내어", + "item.spectrum.cotton_cloud_boots.tooltip2": "달리는 동안 공중을 걸을 수 있게 해줍니다", + "item.spectrum.crafting_tablet": "제작 석판", + "item.spectrum.crafting_tablet.tooltip.crafting_recipe": "사용하여 조합합니다", + "item.spectrum.crafting_tablet.tooltip.no_recipe": "조합창에 아이템을 넣어 레시피를 저장합니다", + "item.spectrum.crafting_tablet.tooltip.pedestal_recipe": "자동 조합을 위해 제단에서 사용합니다", + "item.spectrum.crafting_tablet.tooltip.recipe": "%d %s", + "item.spectrum.crafting_tablet.tooltip.shift_to_view_gui": "웅크린 채로 사용하여 조합창을 엽니다", + "item.spectrum.crawfish": "가재", + "item.spectrum.crawfish_cocktail": "가재 칵테일", + "item.spectrum.cream_pastry": "크림 페이스트리", + "item.spectrum.creative_ink_assortment": "크리에이티브 잉크 모음집", + "item.spectrum.creative_ink_assortment.tooltip": "§7끝없는 잉크의 샘", + "item.spectrum.creative_only": "크리에이티브 전용", + "item.spectrum.crescent_clock": "초승달 시계", + "item.spectrum.crescent_clock.tooltip": "현재 달의 위상을 알려줍니다", + "item.spectrum.cyan_pigment": "청록색 안료", + "item.spectrum.demon_tea": "악마의 차", + "item.spectrum.demon_trifle": "악마의 트라이플", + "item.spectrum.divination_heart": "점복의 심장", + "item.spectrum.doombloom_seed": "파멸꽃 씨앗", + "item.spectrum.downstone_fragments": "하층석 파편", + "item.spectrum.knotted_sword": "얽혀진 검", + "item.spectrum.nectar_lance": "넥타르 창", + "item.spectrum.draconic_twinsword": "용의 쌍날검", + "item.spectrum.draconic_twinsword.tooltip": "투척 가능 – 공중에 뜬 대상에게 치명타를 입힙니다", + "item.spectrum.draconic_twinsword.tooltip2": "다른 손으로 바꿔 검을 쪼갭니다", + "item.spectrum.draconic_twinsword.tooltip3": "빗나갈 시: 네가 맞는다, 얼간아.", + "item.spectrum.dragon_talon": "용의 발톱", + "item.spectrum.dragon_talon.tooltip": "§f무적 시간을 무시§7합니다", + "item.spectrum.dragon_talon.tooltip2": "보조 손으로 던지고 회수합니다", + "item.spectrum.dragon_talon.tooltip3": "다른 손으로 바꿔 검을 합칩니다", + "item.spectrum.dragonbone_broth": "용골 육수", + "item.spectrum.dragonbone_chunk": "용골 덩어리", + "item.spectrum.dragonrending_pickaxe": "용을 가르는 곡괭이", + "item.spectrum.dragonrot_bucket": "용부액 양동이", + "item.spectrum.dreamflayer": "몽환참수검", + "item.spectrum.dreamflayer.tooltip": "적의 방어력이 높을수록", + "item.spectrum.dreamflayer.tooltip2": "사용자와 비교해 더 큰 피해를 줍니다", + "item.spectrum.dreamflayer.tooltip.activated": "과부하 상태입니다. 웅크린 채로 사용하여 종료합니다", + "item.spectrum.dreamflayer.tooltip.deactivated": "웅크린 채로 사용하여 과부하 시킵니다 (%s)", + "item.spectrum.resplendent_feather": "찬란한 깃털", + "item.spectrum.egg_laying_wooly_pig_spawn_egg": "알 낳는 양털 돼지 생성 알", + "item.spectrum.enchanted_golden_carrot": "마법이 부여된 황금 당근", + "item.spectrum.enchanter_structure_placer": "마법 부여기 구조물 배치기", + "item.spectrum.enchantment_canvas": "마법 부여 캔버스", + "item.spectrum.enchantment_canvas.tooltip.bound_to": "§7%s에 결속됨", + "item.spectrum.enchantment_canvas.tooltip.not_bound": "§7아이템에 우클릭하여 마법 부여를 교환합니다", + "item.spectrum.enchantment_canvas.tooltip.not_bound2": "§7캔버스가 해당 유형의 아이템에 결속됩니다", + "item.spectrum.ender_splice": "엔더 접합체", + "item.spectrum.ender_splice.tooltip.bound_player": "%s§7에게 결속됨. 사용하여 순간이동합니다", + "item.spectrum.ender_splice.tooltip.bound_pos": "$s§7의 %d %d %d§7에 결속됨. 사용하여 순간이동합니다", + "item.spectrum.ender_splice.tooltip.unbound": "§7사용하여 현재 위치에 결속합니다", + "item.spectrum.ender_splice.wrong_dimension": "이 엔더 접합체의 에너지는 다른 차원으로 순간이동시킬 만큼 강력하지 않습니다", + "item.spectrum.eraser_spawn_egg": "말소자 생성 알", + "item.spectrum.marrow_spawn_egg": "말로우 생성 알", + "item.spectrum.splinterspawn_spawn_egg": "가시파편충 생성 알", + "item.spectrum.evernectar": "영원의 넥타르", + "item.spectrum.evernectar.tooltip": "아마 마시지 않는 편이 좋을 겁니다", + "item.spectrum.everpromise_ribbon": "영원한 약속의 리본", + "item.spectrum.everpromise_ribbon.tooltip": "모루에서 이름을 짓고 조합을 통해 안료로 색을 입힌 뒤", + "item.spectrum.everpromise_ribbon.tooltip2": "동물에게 사용하여 끝없는 애정을 약속합니다", + "item.spectrum.exchanging_staff": "교환의 지팡이", + "item.spectrum.exchanging_staff.tooltip.range": "주변 최대 %s 블록까지 블록을 교환합니다", + "item.spectrum.exchanging_staff.tooltip.target": "대상: %s", + "item.spectrum.faded_koi": "쇠퇴의 잉어", + "item.spectrum.fanciful_belt": "화려한 허리띠", + "item.spectrum.fanciful_bismuth_ring": "화려한 비스무트 반지", + "item.spectrum.fanciful_circlet": "화려한 서클릿", + "item.spectrum.fanciful_gloves": "화려한 장갑", + "item.spectrum.fanciful_pendant": "화려한 펜던트", + "item.spectrum.fanciful_tuff_ring": "화려한 응회암 반지", + "item.spectrum.ferocious_chestplate": "퍼로셔스 흉갑", + "item.spectrum.ferocious_chestplate.tooltip": "피격 시 흡수와 저항을 부여합니다", + "item.spectrum.ferocious_glass_crest_bident": "퍼로셔스 유리 장식 쌍지창", + "item.spectrum.ferocious_glass_crest_bident.tooltip": "§f급류§r 사용 시 물이 필요하지 않습니다", + "item.spectrum.ferocious_glass_crest_bident.tooltip2": "§f급류§r 중일 때 다시 §f급류§r를 사용할 수 있습니다", + "item.spectrum.ferocious_glass_crest_bident.tooltip3": "비행 중 주변의 생명체에게 피해를 입힙니다", + "item.spectrum.fetchling_helmet": "페칠링 투구", + "item.spectrum.fetchling_helmet.tooltip": "공격자에게 나약함과 구속을 부여합니다", + "item.spectrum.fishcake": "어묵", + "item.spectrum.fissure_plum": "균열 자두", + "item.spectrum.fissure_plum.tooltip": "§o고소하고 향긋합니다", + "item.spectrum.fractal_glass_crest_bident": "프랙탈 유리 장식 쌍지창", + "item.spectrum.fractal_glass_crest_bident.tooltip": "던졌을 때 당신의 손을 떠나지 않습니다", + "item.spectrum.fractal_glass_crest_bident.tooltip2": "대신, 복제된 §f환영§r을 만들어 투적합니다", + "item.spectrum.fractal_glass_crest_bident.tooltip3": "충돌 시 산산조각 납니다", + "item.spectrum.freigeist": "프라이가이스트", + "item.spectrum.freigeist.tooltip": "§4♥§r 천사가 되고 싶나요? §4♡§r", + "item.spectrum.fresh_chocolate": "신선한 초콜릿", + "item.spectrum.frostbite_essence": "동상의 정수", + "item.spectrum.fusion_shrine_structure_placer": "융합 성소 구조물 배치기", + "item.spectrum.laurels_of_serenity": "평온의 월계관", + "item.spectrum.laurels_of_serenity.tooltip": "적의 공격성을 낮춥니다", + "item.spectrum.aether_graced_nectar_gloves": "에테르가 깃든 넥타르 장갑", + "item.spectrum.aether_graced_nectar_gloves.tooltip": "§9담청 방벽§7을 사용하여", + "item.spectrum.aether_graced_nectar_gloves.tooltip2": "§7해로운 효과로부터 착용자를 보호합니다", + "item.spectrum.germinated_jade_vine_bulb": "발아한 비취 덩굴 구근", + "item.spectrum.germinated_jade_vine_bulb.tooltip": "§7나무 울타리에 매달려 자랍니다", + "item.spectrum.germinated_jade_vine_bulb.tooltip2": "§f달빛§7에 노출될 때만 자랍니다", + "item.spectrum.germinated_jade_vine_bulb.tooltip3": "§e⚠ 햇빛을 받으면 죽습니다", + "item.spectrum.gilded_book": "도금된 책", + "item.spectrum.gilded_book.tooltip.copy_enchantments": "마법 부여기에서 사용하여 원하는 아이템의", + "item.spectrum.gilded_book.tooltip.copy_enchantments2": "마법 부여를 이 책으로 복사합니다", + "item.spectrum.gilded_book.tooltip.enchantability": "높은 마법 부여 가중치", + "item.spectrum.glass_arrow.tooltip": "매우 강력한 피해를 주며 수중에서도 쏠 수 있습니다", + "item.spectrum.glass_crest_crossbow": "유리 장식 쇠뇌", + "item.spectrum.glass_crest_crossbow.message.charge": "%d%% 과충전 활성화됨", + "item.spectrum.glass_crest_crossbow.tooltip.how_to_overcharge": "§7장전된 상태로 웅크린 채 사용하여 §f과충전§7합니다", + "item.spectrum.glass_crest_crossbow.tooltip.overcharged": "§7과충전: %d§7%%", + "item.spectrum.glass_crest_ultra_greatsword": "유리 장식 특대검", + "item.spectrum.glass_crest_ultra_greatsword.tooltip": "§7공격력의 §f%d%%§7를 마법 피해로 입힙니다", + "item.spectrum.glass_crest_ultra_greatsword.tooltip2": "§7충전하여 지면을 강타합니다", + "item.spectrum.glass_crest_workstaff": "유리 장식 작업 지팡이", + "item.spectrum.glass_peach": "유리 복숭아", + "item.spectrum.glass_peach.tooltip": "§o§7아삭아삭!", + "item.spectrum.gleaming_pin": "미광의 핀", + "item.spectrum.gleaming_pin.tooltip": "§7피격 시 주변 몹을 드러냅니다", + "item.spectrum.glistering_jelly_tea": "반짝이는 젤리 차", + "item.spectrum.glistering_jelly_tea.tooltip": "일시적으로 체력을 증가시킵니다", + "item.spectrum.glistering_melon_seeds": "반짝이는 수박 씨앗", + "item.spectrum.gloves_of_dawns_grasp": "여명의 손아귀 장갑", + "item.spectrum.gloves_of_dawns_grasp.tooltip": "공격 및 상호작용 사거리를 증가시킵니다", + "item.spectrum.glow_phantom_frame": "발광 팬텀 액자", + "item.spectrum.glow_vision_goggles": "발광 시야 고글", + "item.spectrum.glow_vision_goggles.tooltip": "§b발광 먹물 주머니§7로 작동합니다", + "item.spectrum.glow_vision_goggles.tooltip_with_ink": "§7%s 또는 §b발광 먹물 주머니§7로 작동합니다§r", + "item.spectrum.golden_bristle_tea": "황금 가시털 차", + "item.spectrum.gray_pigment": "회색 안료", + "item.spectrum.greater_potion_pendant": "상급 물약 펜던트", + "item.spectrum.green_pigment": "초록색 안료", + "item.spectrum.guidebook": "다채로운 세계", + "item.spectrum.hare_roast": "토끼 통구이", + "item.spectrum.heartsingers_reward": "심장노래꾼의 보상", + "item.spectrum.heartsingers_reward.tooltip": "추가 생명력을 부여합니다", + "item.spectrum.hibernating_jade_vine_bulb": "동면 중인 비취 덩굴 구근", + "item.spectrum.hibernating_jade_vine_bulb.tooltip": "조금... 죽은 듯한 느낌?", + "item.spectrum.honey_pastry": "꿀 페이스트리", + "item.spectrum.hot_chocolate": "핫초코", + "item.spectrum.imbrifer_cookbook": "임브리퍼 요리책", + "item.spectrum.imbrifer_cookbook.tooltip": "§9§o임브리퍼의 요리책 – 파란색 유리와 왕수", + "item.spectrum.imperial_cookbook": "제국 요리책", + "item.spectrum.imperial_cookbook.tooltip": "§c§o황제 대접하기 – 제국 레시피 제3판", + "item.spectrum.incandescent_essence": "백열의 정수", + "item.spectrum.infused_beverage": "침출된 음료", + "item.spectrum.infused_beverage.tooltip.age": "%d일 숙성됨 – %d %% 알코올", + "item.spectrum.infused_beverage.tooltip.age_composite": "%d년 %d일 숙성됨 – %d %% 알코올", + "item.spectrum.infused_beverage.tooltip.age_years": "%d년 숙성됨 – %d %% 알코올", + "item.spectrum.infused_beverage.tooltip.variant.camomillesque": "카모마일에스크", + "item.spectrum.infused_beverage.tooltip.variant.verdigris_wine": "녹청 와인", + "item.spectrum.infused_beverage.tooltip.variant.night_cream": "크렘 드 라 모르", + "item.spectrum.infused_beverage.tooltip.variant.velvet_brandy": "벨벳 브랜디", + "item.spectrum.infused_beverage.tooltip.variant.gatorwine": "게이터와인", + "item.spectrum.infused_beverage.tooltip.variant.plum_cider": "자두 사이다", + "item.spectrum.infused_beverage.tooltip.variant.plum_liquor": "자두 리큐어", + "item.spectrum.infused_beverage.tooltip.variant.advocaat": "아드보카트", + "item.spectrum.infused_beverage.tooltip.variant.ale": "페일 에일", + "item.spectrum.infused_beverage.tooltip.variant.apple_cider": "사과 사이다", + "item.spectrum.infused_beverage.tooltip.variant.apple_liquor": "사과 리큐어", + "item.spectrum.infused_beverage.tooltip.variant.artemisa": "아르테미사", + "item.spectrum.infused_beverage.tooltip.variant.beer": "맥주", + "item.spectrum.infused_beverage.tooltip.variant.berry_cider": "베리 사이다", + "item.spectrum.infused_beverage.tooltip.variant.berry_liquor": "베리 리큐어", + "item.spectrum.infused_beverage.tooltip.variant.bloodlust_brew": "피의 갈망 양조주", + "item.spectrum.infused_beverage.tooltip.variant.damassine": "다마신", + "item.spectrum.infused_beverage.tooltip.variant.enchanted_apple_cider": "마법이 부여된 사과 사이다", + "item.spectrum.infused_beverage.tooltip.variant.fruit_shnaps": "과일 슈냅스", + "item.spectrum.infused_beverage.tooltip.variant.gilded_bloom_liquor": "금박 꽃 리큐어", + "item.spectrum.infused_beverage.tooltip.variant.gin": "진", + "item.spectrum.infused_beverage.tooltip.variant.glass_peach_cider": "유리 복숭아 사이다", + "item.spectrum.infused_beverage.tooltip.variant.glass_peach_liquor": "유리 복숭아 리큐어", + "item.spectrum.infused_beverage.tooltip.variant.glow_berry_cider": "발광 열매 사이다", + "item.spectrum.infused_beverage.tooltip.variant.glow_berry_liquor": "발광 열매 리큐어", + "item.spectrum.infused_beverage.tooltip.variant.golden_apple_cider": "황금 사과 사이다", + "item.spectrum.infused_beverage.tooltip.variant.greener_grasses": "그리너 그래스", + "item.spectrum.infused_beverage.tooltip.variant.hare_bane_creme": "토끼 맹독 크림", + "item.spectrum.infused_beverage.tooltip.variant.lager": "라거", + "item.spectrum.infused_beverage.tooltip.variant.malt_beer": "몰트 비어", + "item.spectrum.infused_beverage.tooltip.variant.mead": "벌꿀술", + "item.spectrum.infused_beverage.tooltip.variant.mint_cream": "크렘 드 망트", + "item.spectrum.infused_beverage.tooltip.variant.mint_schnapps": "민트 슈냅스", + "item.spectrum.infused_beverage.tooltip.variant.moonshine": "문샤인", + "item.spectrum.infused_beverage.tooltip.variant.myceylon_apple_juice": "균사피 사과 주스", + "item.spectrum.infused_beverage.tooltip.variant.myceylon_liquor": "균사피 리큐어", + "item.spectrum.infused_beverage.tooltip.variant.poisonous_vodka": "보드카", + "item.spectrum.infused_beverage.tooltip.variant.porter": "포터", + "item.spectrum.infused_beverage.tooltip.variant.rabbit_poison": "토끼 독", + "item.spectrum.infused_beverage.tooltip.variant.rum": "럼", + "item.spectrum.infused_beverage.tooltip.variant.sake": "사케", + "item.spectrum.infused_beverage.tooltip.variant.sarsaparilla": "사르사파릴라", + "item.spectrum.infused_beverage.tooltip.variant.sawblade_holly_cider": "톱날 호랑가시나무 사이다", + "item.spectrum.infused_beverage.tooltip.variant.sawblade_holly_liquor": "톱날 호랑가시나무 리큐어", + "item.spectrum.infused_beverage.tooltip.variant.spiked_mullet_wine": "숭어 스파이크 와인", + "item.spectrum.infused_beverage.tooltip.variant.tequila": "데킬라", + "item.spectrum.infused_beverage.tooltip.variant.unknown": "정의할 수 없는 맛", + "item.spectrum.infused_beverage.tooltip.variant.vodka": "보드카", + "item.spectrum.infused_beverage.tooltip.variant.crown_jewel": "크라운 쥬얼", + "item.spectrum.ink_assortment": "잉크 모음집", + "item.spectrum.ink_flask": "잉크 플라스크", + "item.spectrum.ink_storage.stores_ink_per_type": "§7종류별로 잉크를 최대 %d§7까지 저장합니다", + "item.spectrum.ink_storage.stores_up_to_ink_per_type": "§7한 종류의 잉크를 최대 %d§7까지 저장합니다", + "item.spectrum.jade_jelly": "비취 젤리", + "item.spectrum.jade_jelly.tooltip": "맛있을 뿐만 아니라 영양가도 높습니다", + "item.spectrum.jade_vine_petals": "비취 꽃잎", + "item.spectrum.jade_wine": "비취 와인", + "item.spectrum.jade_wine.tooltip.bloominess": "%d %% 꽃내음", + "item.spectrum.jade_wine.tooltip.bloominess_sweetened": "%d %% 꽃내음 – 달콤함", + "item.spectrum.jade_wine.tooltip.preview": "구근과 꽃잎을 조합하여 양조합니다", + "item.spectrum.jade_wine.tooltip.preview2": "꽃잎은 구근보다 발효가 느리지만 해로운 효과를 줄여줍니다", + "item.spectrum.jadeite_petals": "경옥 꽃잎", + "item.spectrum.jaramel": "자라멜", + "item.spectrum.jaramel_tart": "자라멜 타르트", + "item.spectrum.jaramel_trifle": "자라멜 트라이플", + "item.spectrum.jeopardant": "재앙걸이", + "item.spectrum.jeopardant.tooltip.damage": "§7HP가 낮을 때 피해량이 증가합니다 (현재 §a+%d%%§7)", + "item.spectrum.jeopardant.tooltip.damage_zero": "§7HP가 낮을 때 피해량이 증가합니다 (현재 §80%%§7)", + "item.spectrum.junket": "정킷", + "item.spectrum.karak_chai": "카락 차이", + "item.spectrum.kimchi": "김치", + "item.spectrum.kindling_spawn_egg": "불망울 생성 알", + "item.spectrum.knowledge_gem": "지식의 보석", + "item.spectrum.knowledge_gem.tooltip.stored_experience": "/ %d 경험치 저장됨", + "item.spectrum.knowledge_gem.tooltip.use": "사용하여 경험치를 빼내거나, 웅크린 채 사용하여 경험치를 저장합니다(%d/틱)", + "item.spectrum.koi": "비단잉어", + "item.spectrum.lagoon_rod": "석호 낚시대", + "item.spectrum.lagoon_rod.tooltip": "찌가 개방된 물 판정을 알려줍니다", + "item.spectrum.le_fishe_au_chocolat": "르 피쉬 오 쇼콜라", + "item.spectrum.least_black_lotus": "가장 덜 검은 연꽃", + "item.spectrum.least_black_lotus.tooltip": "너무 많이 씻어내지 않았나?", + "item.spectrum.lesser_potion_pendant": "하급 물약 펜던트", + "item.spectrum.light_blue_pigment": "하늘색 안료", + "item.spectrum.light_gray_pigment": "회백색 안료", + "item.spectrum.lime_pigment": "연두색 안료", + "item.spectrum.liquid_crystal_bucket": "액체 수정 양동이", + "item.spectrum.lizard_meat": "도마뱀 고기", + "item.spectrum.lizard_spawn_egg": "잠복 도마뱀 생성 알", + "item.spectrum.logo_banner_pattern": "현수막 무늬", + "item.spectrum.logo_banner_pattern.desc": "색채 이론", + "item.spectrum.astrologer_banner_pattern": "현수막 무늬", + "item.spectrum.astrologer_banner_pattern.desc": "점성술사", + "item.spectrum.velvet_astrologer_banner_pattern": "현수막 무늬", + "item.spectrum.velvet_astrologer_banner_pattern.desc": "벨벳 점성술사", + "item.spectrum.poisonbloom_banner_pattern": "현수막 무늬", + "item.spectrum.poisonbloom_banner_pattern.desc": "맹독꽃", + "item.spectrum.deep_light_banner_pattern": "현수막 무늬", + "item.spectrum.deep_light_banner_pattern.desc": "깊은 빛", + "item.spectrum.lucky_pickaxe": "행운의 곡괭이", + "item.spectrum.lucky_roll": "행운의 롤", + "item.spectrum.magenta_pigment": "자홍색 안료", + "item.spectrum.malachite_bident": "공작석 쌍지창", + "item.spectrum.malachite_crossbow": "공작석 쇠뇌", + "item.spectrum.malachite_glass_ampoule": "공작석 유리 앰플", + "item.spectrum.malachite_glass_ampoule.tooltip": "너무 가까이 접근한 모든 것을 공격하는 잉크 지뢰를 소환합니다", + "item.spectrum.malachite_glass_ampoule.tooltip.when_hit": "명중 시:", + "item.spectrum.malachite_glass_arrow": "유리 화살", + "item.spectrum.malachite_ultra_greatsword": "공작석 특대검", + "item.spectrum.malachite_workstaff": "공작석 작업 지팡이", + "item.spectrum.meatloaf": "미트로프", + "item.spectrum.meatloaf_sandwich": "미트로프 샌드위치", + "item.spectrum.mellow_shallot_soup": "달콤한 샬롯 수프", + "item.spectrum.melochites_cookbook_vol_1": "멜로카이트의 요리책 1권", + "item.spectrum.melochites_cookbook_vol_1.tooltip": "§3§o멜로카이트 레시피 총서 – 제1권", + "item.spectrum.melochites_cookbook_vol_2": "멜로카이트의 요리책 2권", + "item.spectrum.melochites_cookbook_vol_2.tooltip": "§3§o멜로카이트 레시피 총서 – 제2권", + "item.spectrum.memory.tooltip.does_not_manifest": "당신의 평생 동안에는 형체화되지 않을 것입니다", + "item.spectrum.memory.tooltip.entity_type": "§f%s§7의 기억", + "item.spectrum.memory.tooltip.entity_type_broken_promise": "§f%s§7의 부서진 약속", + "item.spectrum.memory.tooltip.extra_long_time_to_manifest": "형체화되려면 몇 주는 걸릴 것입니다", + "item.spectrum.memory.tooltip.long_time_to_manifest": "형체화되려면 꽤 긴 시간이 걸릴 것입니다", + "item.spectrum.memory.tooltip.medium_time_to_manifest": "며칠 내로 형체화될 것 같습니다", + "item.spectrum.memory.tooltip.named": "§7기억: ", + "item.spectrum.memory.tooltip.named_broken_promise": "§7부서진 약속: ", + "item.spectrum.memory.tooltip.short_time_to_manifest": "곧 형체화될 것 같습니다!", + "item.spectrum.memory.tooltip.unrecognizable_entity_type": "기억이 흐릿합니다", + "item.spectrum.memory.tooltip.unset_entity_type": "잊혀짐", + "item.spectrum.memory.you_were_remembered_by_a_memory": "당신은 기억에 의해 기억되었습니다", + "item.spectrum.mermaids_gem": "인어의 보석", + "item.spectrum.mermaids_jam": "인어의 잼", + "item.spectrum.mermaids_popcorn": "인어의 팝콘", + "item.spectrum.mermaids_popcorn.tooltip": "단짠단짠", + "item.spectrum.midnight_aberration": "자정의 기형물", + "item.spectrum.midnight_aberration.cloaked": "완벽한 화합물", + "item.spectrum.midnight_aberration.tooltip.stable": "§o신비한 힘에 의해 결합되어 있습니다", + "item.spectrum.midnight_chip": "자정의 조각", + "item.spectrum.midnight_solution_bucket": "자정의 용액 양동이", + "item.spectrum.milky_resin": "우윳빛 수지", + "item.spectrum.mob_head.tooltip.designer": "§7머리 디자인: %s", + "item.spectrum.molten_rod": "녹아내리는 낚시대", + "item.spectrum.molten_rod.tooltip": "찌가 용암을 견딜 수 있을 만큼 뜨겁습니다", + "item.spectrum.molten_rod.tooltip2": "낚은 물고기나 다른 무언가에 불을 붙입니다", + "item.spectrum.monster_trifle": "몬스터 트라이플", + "item.spectrum.moonstone_core": "월장석 코어", + "item.spectrum.moonstone_glass_arrow": "월장석 유리 화살", + "item.spectrum.moonstone_glass_arrow.tooltip": "에너지 폭발을 일으켜 광역 피해를 입힙니다", + "item.spectrum.moonstone_powder": "월장석 가루", + "item.spectrum.moonstone_shard": "월장석 조각", + "item.spectrum.moonstruck_nectar": "달빛에 취한 넥타르", + "item.spectrum.moonstruck_nectar.tooltip": "손상된 모든 도구를 수리합니다", + "item.spectrum.moonstruck_nectar.tooltip2": "마셔서 순간적인 재생 효과를 얻을 수 있습니다", + "item.spectrum.morchella": "모르첼라", + "item.spectrum.sludge_bucket": "진흙탕 양동이", + "item.spectrum.multitool": "멀티툴", + "item.spectrum.music_disc_credits": "음반", + "item.spectrum.music_disc_credits.desc": "Radiarc – Irrelevance Fading", + "item.spectrum.music_disc_divinity": "음반", + "item.spectrum.music_disc_divinity.desc": "Proper Motions – Everreflective", + "item.spectrum.music_disc_discovery": "음반", + "item.spectrum.music_disc_discovery.desc": "DaveJF – The Mist", + "item.spectrum.myceylon": "균사피", + "item.spectrum.myceylon_apple_pie": "균사피 사과파이", + "item.spectrum.myceylon_cookie": "균사피 쿠키", + "item.spectrum.myceylon_pumpkin_pie": "균사피 호박파이", + "item.spectrum.mysterious_compass": "신비한 나침반", + "item.spectrum.mysterious_locket": "신비한 로켓", + "item.spectrum.mysterious_locket.tooltip": "창백한 하얀색으로 부드럽게 빛납니다", + "item.spectrum.mysterious_locket.tooltip_empty": "작고 빈 홈이 있습니다", + "item.spectrum.mysterious_locket.tooltip_socketed": "§f월장석 코어§7가 박혀 있습니다", + "item.spectrum.natures_staff": "자연의 지팡이", + "item.spectrum.natures_staff.tooltip": "§a베지탈§7을 사용하여 다양한 식물을 자라게 합니다", + "item.spectrum.natures_staff.tooltip_lure": "§7근처의 동물들도 유인합니다", + "item.spectrum.natures_staff.tooltip_with_chance": "§a베지탈§7을 사용하여 다양한 식물을 자라게 합니다 (%d%%§7)", + "item.spectrum.natures_staff.tooltip_with_ink": "§7%s 또는 §a베지탈§7을 사용하여 다양한 식물을 자라게 합니다", + "item.spectrum.natures_staff.tooltip_with_ink_and_chance": "§7%s 또는 §a베지탈§7을 사용하여 다양한 식물을 자라게 합니다 (%d%%§7)", + "item.spectrum.neat_ring": "깔끔한 반지", + "item.spectrum.neat_ring.tooltip": "§7§o깔끔하구만", + "item.spectrum.nectardew_burgeon": "넥타르이슬 봉오리", + "item.spectrum.nectardew_burgeon.tooltip": "§o극도로 희귀합니다", + "item.spectrum.nectered_viognier": "넥타르드 비오니에", + "item.spectrum.nectered_viognier.tooltip.preview": "구근과 복숭아를 조합하여 양조해 만듭니다", + "item.spectrum.nectered_viognier.tooltip.preview2": "복숭아는 구근보다 발효가 느리지만 해로운 효과를 줄여줍니다", + "item.spectrum.neolith": "네오리스", + "item.spectrum.night_salts": "밤의 소금", + "item.spectrum.night_salts.tooltip": "부수어서 잠에 듭니다", + "item.spectrum.soothing_bouquet": "진정의 꽃다발", + "item.spectrum.soothing_bouquet.tooltip": "향기를 맡아 잠에 듭니다", + "item.spectrum.concealing_oils": "은닉의 기름", + "item.spectrum.concealing_oils.tooltip": "음식에 대고 우클릭하여 기름을 바릅니다", + "item.spectrum.concealing_oils.when_poisoned": "중독 시:", + "item.spectrum.bitter_oils": "비터 오일", + "item.spectrum.nightdew_sprout": "밤이슬 새싹", + "item.spectrum.nightdew_sprout.tooltip": "§o찻잎처럼 향긋합니다", + "item.spectrum.nightfalls_blade": "해질녘의 검", + "item.spectrum.nightfalls_blade.when_struck": "타격 시:", + "item.spectrum.oblivion_pickaxe": "망각의 곡괭이", + "item.spectrum.omni_accelerator": "만물-가속기", + "item.spectrum.onyx_glass_arrow": "오닉스 유리 화살", + "item.spectrum.onyx_glass_arrow.tooltip": "마법 피해를 입히고 무적 시간을 무시하며, 방패에 추가 피해를 줍니다", + "item.spectrum.onyx_powder": "오닉스 가루", + "item.spectrum.onyx_shard": "오닉스 조각", + "item.spectrum.orange_pigment": "주황색 안료", + "item.spectrum.oread_boots": "오리아드 부츠", + "item.spectrum.oread_boots.tooltip": "피격 시 신속과 투명을 부여합니다", + "item.spectrum.paintbrush": "붓", + "item.spectrum.paintbrush.ability.block_coloring": "- 블록 채색", + "item.spectrum.paintbrush.ability.header": "능력:", + "item.spectrum.paintbrush.ability.ink_slinging": "- 잉크 발사", + "item.spectrum.paintbrush.ability.pedestal_triggering": "- 제단 작동", + "item.spectrum.paintbrush.tooltip.select_color": "웅크린 채 사용하여 색상을 선택합니다", + "item.spectrum.paltaeria_fragments": "팔타에리아 파편", + "item.spectrum.paltaeria_gem": "팔타에리아 결정", + "item.spectrum.pastiche": "파스티슈", + "item.spectrum.peach_cream": "복숭아 크림", + "item.spectrum.peach_jam": "복숭아 잼", + "item.spectrum.peaches_flambe": "복숭아 플람베", + "item.spectrum.pedestal.tooltip.all_basic": "§bC§dM§eY§7 형태", + "item.spectrum.pedestal.tooltip.basic_amethyst": "§d자수정§7 형태", + "item.spectrum.pedestal.tooltip.basic_citrine": "§e황수정§7 형태", + "item.spectrum.pedestal.tooltip.basic_topaz": "§b토파즈§7 형태", + "item.spectrum.pedestal.tooltip.moonstone": "§f월장석§7 형태", + "item.spectrum.pedestal.tooltip.onyx": "§8오닉스§7 형태", + "item.spectrum.pedestal_tier_1_structure_placer": "스펙트럼 중점 구조물 배치기", + "item.spectrum.pedestal_tier_2_structure_placer": "스펙트럼 사원 구조물 배치기", + "item.spectrum.pedestal_tier_3_structure_placer": "스펙트럼 성전 구조물 배치기", + "item.spectrum.perturbed_eye": "동요의 눈", + "item.spectrum.perturbed_eye.tooltip": "엔드 차원문 틀에 끼울 수 있습니다", + "item.spectrum.phantom_frame": "팬텀 액자", + "item.spectrum.pigment_palette": "안료 팔레트", + "item.spectrum.pigment_palette.tooltip.target": "도구와 장신구에 잉크를 공급합니다", + "item.spectrum.pink_pigment": "분홍색 안료", + "item.spectrum.pipe_bomb": "파이프 폭탄", + "item.spectrum.pipe_bomb.tooltip": "생명체에게 매우 치명적입니다 – 블록에는 피해를 주지 않습니다", + "item.spectrum.pipe_bomb.tooltip2": "주변에 불을 붙입니다", + "item.spectrum.pipe_bomb.tooltip3": "사용하여 점화합니다. 몇 초 뒤 폭발합니다!", + "item.spectrum.poisoners_handbook": "독살자의 핸드북", + "item.spectrum.poisoners_handbook.tooltip": "신성모독자의 일지", + "item.spectrum.potion.faster_to_drink": "빠르게 마심", + "item.spectrum.potion.slower_to_drink": "느리게 마심", + "item.spectrum.potion.tooltip.unidentifiable": "§0알아볼 수 없을 정도로 새까맣습니다", + "item.spectrum.potion_pendant.tooltip_max_level": "§7다음 레벨까지의 효과를 지원합니다: ", + "item.spectrum.potion_pendant.tooltip_not_full_count": "§f물약 작업장§7에서 최대 f%d§7개의 효과를 채울 수 있습니다", + "item.spectrum.potion_pendant.tooltip_not_full_one": "§f물약 작업장§7에서 효과를 채울 수 있습니다", + "item.spectrum.potion_pendant.when_worn": "착용 시:", + "item.spectrum.preservation_turret_spawn_egg": "보호 포탑 생성 알", + "item.spectrum.prickly_bayleaf": "가시 돋친 월계수 잎", + "item.spectrum.primordial_lighter": "태고의 라이터", + "item.spectrum.primordial_lighter.tooltip": "세상에 불을 지핍니다", + "item.spectrum.puff_circlet": "바람의 서클릿", + "item.spectrum.puff_circlet.tooltip": "§9담청 방벽§7을 사용하여", + "item.spectrum.puff_circlet.tooltip2": "§7투사체와 낙하 피해로부터 플레이어를 보호합니다", + "item.spectrum.puff_tart": "바람의 타르트", + "item.spectrum.pure_alcohol": "순수한 알코올", + "item.spectrum.pure_certus_quartz": "순수한 서투스 석영", + "item.spectrum.pure_coal": "순수한 석탄", + "item.spectrum.pure_copper": "순수한 구리", + "item.spectrum.pure_diamond": "순수한 다이아몬드", + "item.spectrum.pure_echo": "순수한 메아리", + "item.spectrum.pure_emerald": "순수한 에메랄드", + "item.spectrum.pure_fluix": "순수한 액정 수정", + "item.spectrum.pure_globette": "순수한 고버 글로벳", + "item.spectrum.pure_globette_end": "순수한 엔드 고버 글로벳", + "item.spectrum.pure_globette_nether": "순수한 네더 고버 글로벳", + "item.spectrum.pure_glowstone": "순수한 발광석", + "item.spectrum.pure_gold": "순수한 금", + "item.spectrum.pure_iron": "순수한 철", + "item.spectrum.pure_lapis": "순수한 청금석", + "item.spectrum.pure_netherite_scrap": "순수한 네더라이트 파편", + "item.spectrum.pure_prismarine": "순수한 프리즈머린", + "item.spectrum.pure_quartz": "순수한 석영", + "item.spectrum.pure_redstone": "순수한 레드스톤", + "item.spectrum.pure_zinc": "순수한 아연", + "item.spectrum.purple_pigment": "보라색 안료", + "item.spectrum.pyrite_chunk": "황철석 덩어리", + "item.spectrum.quitoxic_powder": "맹독 가루", + "item.spectrum.rabbit_cream_pie": "토끼 크림 파이", + "item.spectrum.rabbit_cream_pie.tooltip": "§o나눠 먹기 좋습니다", + "item.spectrum.radiance_pin": "광채의 핀", + "item.spectrum.radiance_pin.tooltip": "§7어두운 곳에서 임시 조명을 설치합니다", + "item.spectrum.radiance_staff": "광채의 지팡이", + "item.spectrum.radiance_staff.tooltip": "§e미광석§7을 사용하여 조명을 설치합니다", + "item.spectrum.radiance_staff.tooltip.ink": "§7%s 또는 §e미광석§7을 사용하여 조명을 설치합니다", + "item.spectrum.radiance_staff.tooltip2": "§7조명에 대고 사용하여 빛의 밝기를 조절하세요", + "item.spectrum.radiance_staff.tooltip3": "§7어둠을 향해 조준하고 사용하고 있으면 §e투광등§7을 켭니다", + "item.spectrum.raw_azurite": "남동석 원석", + "item.spectrum.raw_bloodstone": "혈석 원석", + "item.spectrum.raw_malachite": "공작석 원석", + "item.spectrum.razor_falchion": "면도날 펄션", + "item.spectrum.red_pigment": "빨간색 안료", + "item.spectrum.pure_azurite": "순수한 남동석", + "item.spectrum.pure_bloodstone": "순수한 혈석", + "item.spectrum.pure_malachite": "순수한 공작석", + "item.spectrum.reprise": "여운", + "item.spectrum.reprise.tooltip.teleport": "무작위 방향으로 최대 %d 블록 순간이동합니다", + "item.spectrum.resonance_shard": "공명 조각", + "item.spectrum.aether_vestiges": "에테르의 잔재", + "item.spectrum.aether_vestiges.tooltip": " ???", + "item.spectrum.resonant_pickaxe": "공명의 곡괭이", + "item.spectrum.restoration_tea": "회복의 차", + "item.spectrum.restoration_tea.tooltip": "모든 해로운 효과를 치료하고", + "item.spectrum.restoration_tea.tooltip2": "짧은 시간 동안 모든 효과에 면역이 됩니다", + "item.spectrum.restoration_tea.tooltip_milk": "우유 첨가", + "item.spectrum.ring_of_aerial_grace": "고공 은총의 반지", + "item.spectrum.ring_of_aerial_grace.tooltip": "중력이 낮아지지만 넉백을 더 많이 받습니다", + "item.spectrum.ring_of_aerial_grace.tooltip2": "물 위를 걸을 수 있게 해줍니다", + "item.spectrum.ring_of_denser_steps": "조밀 보폭의 반지", + "item.spectrum.ring_of_denser_steps.tooltip": "넉백 저항을 부여하지만 중력이 증가합니다", + "item.spectrum.ring_of_denser_steps.tooltip2": "수중에서 달릴 수 있게 해줍니다", + "item.spectrum.ring_of_pursuit": "추격의 반지", + "item.spectrum.ring_of_pursuit.tooltip": "채굴 속도를 증가시킵니다", + "item.spectrum.salted_jaramel_tart": "솔티드 자라멜 타르트", + "item.spectrum.salted_jaramel_trifle": "솔티드 자라멜 트라이플", + "item.spectrum.sawblade_holly_berry": "톱날 호랑가시나무 열매", + "item.spectrum.scone": "스콘", + "item.spectrum.sedatives": "진정제", + "item.spectrum.sedatives.tooltip": "지친 마음을 위한 약", + "item.spectrum.seven_league_boots": "축지법의 장화", + "item.spectrum.shieldgrasp_amulet": "방패잡이 부적", + "item.spectrum.shimmerstone_gem": "미광석", + "item.spectrum.shooting_star.tooltip.hardened": "단단함 – 부서지지 않습니다", + "item.spectrum.slushslide": "슬러시슬라이드", + "item.spectrum.slushslide.tooltip": "나눠 먹기 좋습니다!", + "item.spectrum.spawner.tooltip.max_nearby_entities": "최대 주변 개체 수: %d", + "item.spectrum.spawner.tooltip.max_spawn_delay": "최대 생성 지연: %d", + "item.spectrum.spawner.tooltip.min_spawn_delay": "최소 생성 지연: %d", + "item.spectrum.spawner.tooltip.required_player_range": "요구 플레이어 거리: %d", + "item.spectrum.spawner.tooltip.spawn_count": "생성 수: %d", + "item.spectrum.spawner.tooltip.spawn_range": "생성 범위: %d", + "item.spectrum.spawner.tooltip.unknown_mob": "알 수 없는 몹", + "item.spectrum.spectral_shard": "분광 파편", + "item.spectrum.spectrum_fishing_rods.tooltip": "가끔 살아있는 동물을 낚아 올립니다", + "item.spectrum.spirit_instiller_structure_placer": "영혼 주입기 구조물 배치기", + "item.spectrum.staff_of_remembrance": "추억의 지팡이", + "item.spectrum.staff_of_remembrance.tooltip": "생명체에 사용하여 §f기억§r으로 되부릅니다", + "item.spectrum.star_fragment": "별의 파편", + "item.spectrum.stardust": "별가루", + "item.spectrum.storm_stone": "폭풍석", + "item.spectrum.stratine_fragments": "스트라틴 파편", + "item.spectrum.stratine_gem": "스트라틴 결정", + "item.spectrum.stuffed_petals": "속을 채운 꽃잎", + "item.spectrum.surstromming": "수르스트뢰밍", + "item.spectrum.suspicious_brew": "수상한 양조주", + "item.spectrum.suspicious_brew.tooltip": "대체 무엇이 섞였지?", + "item.spectrum.suspicious_brew.tooltip.preview": "알코올 도수가 높을수록 지속 시간이 기하급수적으로 깁니다", + "item.spectrum.suspicious_brew.tooltip.preview2": "사용된 꽃에 따라 효과가 달라집니다", + "item.spectrum.sylph_leggings": "실프 레깅스", + "item.spectrum.sylph_leggings.tooltip": "피격 시 재생을 부여합니다", + "item.spectrum.take_off_belt": "이륙의 허리띠", + "item.spectrum.take_off_belt.tooltip": "웅크려서 고공 점프를 충전합니다", + "item.spectrum.tender_pickaxe": "연약의 곡괭이", + "item.spectrum.tooltip.loom_pattern_available": "✿ 현수막 무늬로 사용 가능", + "item.spectrum.topaz_glass_arrow": "토파즈 유리 화살", + "item.spectrum.topaz_glass_arrow.tooltip": "대상을 당신의 방향으로 끌어당깁니다", + "item.spectrum.topaz_powder": "토파즈 가루", + "item.spectrum.topaz_shard": "토파즈 조각", + "item.spectrum.total_capped_simple_pigment_energy_storage.tooltip": "§7잉크를 최대 %d§7까지 저장합니다", + "item.spectrum.totem_pendant": "불사의 펜던트", + "item.spectrum.totem_pendant.tooltip": "§7일회성 죽음 방지 보호", + "item.spectrum.triple_meat_pot_pie": "삼종 고기 팟 파이", + "item.spectrum.triple_meat_pot_stew": "삼종 고기 팟 스튜", + "item.spectrum.upgrade_efficiency.tooltip": "낮은 확률로 재료가 소모되지 않습니다", + "item.spectrum.upgrade_efficiency2.tooltip": "적당한 확률로 재료가 소모되지 않습니다", + "item.spectrum.upgrade_experience.tooltip": "경험치 획득을 약간 늘리고 소모를 줄입니다", + "item.spectrum.upgrade_experience2.tooltip": "경험치 획득을 크게 늘리고 소모를 줄입니다", + "item.spectrum.upgrade_speed.tooltip": "조합 속도를 약간 증가시킵니다", + "item.spectrum.upgrade_speed2.tooltip": "조합 속도를 적당히 증가시킵니다", + "item.spectrum.upgrade_speed3.tooltip": "조합 속도를 크게 증가시킵니다", + "item.spectrum.upgrade_yield.tooltip": "낮은 확률로 결과물이 증가합니다", + "item.spectrum.upgrade_yield2.tooltip": "적당한 확률로 결과물이 증가합니다", + "item.spectrum.vegetal": "베지탈", + "item.spectrum.vittorias_roast": "비토리아의 통구이", + "item.spectrum.weeping_circlet": "비탄의 서클릿", + "item.spectrum.weeping_circlet.tooltip": "§7물에서 산소를 걸러내고", + "item.spectrum.weeping_circlet.tooltip2": "§7수중 기동성을 크게 증가시킵니다", + "item.spectrum.weeping_circlet.tooltip3": "§7근처의 §f아홀로틀§7을 치료합니다", + "item.spectrum.weeping_tart": "비탄의 타르트", + "item.spectrum.wet_lava_sponge.tooltip": "§e⚠ 주의: 표면이 뜨거움 ⚠", + "item.spectrum.whispy_circlet": "속삭임의 서클릿", + "item.spectrum.whispy_circlet.tooltip": "§7팬텀의 생성을 방지합니다", + "item.spectrum.whispy_circlet.tooltip2": "§7해로운 효과의 지속 시간을 줄입니다", + "item.spectrum.whispy_circlet.tooltip3": "§7잠을 자면 체력을 완전히 회복합니다", + "item.spectrum.whispy_tart": "속삭임의 타르트", + "item.spectrum.white_pigment": "하얀색 안료", + "item.spectrum.workstaff": "작업 지팡이", + "item.spectrum.workstaff.gui.1x1": "1x1 채굴 모드 선택", + "item.spectrum.workstaff.gui.3x3": "3x3 채굴 모드 선택", + "item.spectrum.workstaff.gui.5x5": "5x5 채굴 모드 선택", + "item.spectrum.workstaff.gui.disable_projectiles": "원거리 채굴 비활성화", + "item.spectrum.workstaff.gui.disable_right_click_actions": "우클릭 동작 비활성화", + "item.spectrum.workstaff.gui.enable_projectiles": "원거리 채굴 활성화", + "item.spectrum.workstaff.gui.enable_right_click_actions": "우클릭 동작 활성화", + "item.spectrum.workstaff.gui.enchantment_group": "마법 부여 선택", + "item.spectrum.workstaff.gui.fortune": "행운으로 전환", + "item.spectrum.workstaff.gui.range_group": "범위 선택", + "item.spectrum.workstaff.gui.resonance": "공명으로 전환", + "item.spectrum.workstaff.gui.silk_touch": "섬세한 손길로 전환", + "item.spectrum.workstaff.message.1x1": "1x1 채굴 모드 선택됨", + "item.spectrum.workstaff.message.3x3": "3x3 채굴 모드 선택됨", + "item.spectrum.workstaff.message.5x5": "5x5 채굴 모드 선택됨", + "item.spectrum.workstaff.message.disabled_projectiles": "투사체 비활성화됨", + "item.spectrum.workstaff.message.disabled_right_click_actions": "경작, 껍질 벗기기, 평탄화 비활성화됨", + "item.spectrum.workstaff.message.enabled_projectiles": "투사체 활성화됨", + "item.spectrum.workstaff.message.enabled_right_click_actions": "경작, 껍질 벗기기, 평탄화 활성화됨", + "item.spectrum.workstaff.message.fortune": "마법 부여를 행운으로 전환함", + "item.spectrum.workstaff.message.resonance": "마법 부여를 공명으로 전환함", + "item.spectrum.workstaff.message.silk_touch": "마법 부여를 섬세한 손길로 전환함", + "item.spectrum.workstaff.message.would_result_in_conflicting_enchantments": "마법 부여를 전환하면 충돌이 발생할 수 있습니다", + "item.spectrum.workstaff.message.already_has_the_enchantment": "마법 부여가 이미 적용되어 있습니다", + "item.spectrum.workstaff.tooltip.mining_range": "%dx%d 영역 채굴 활성화 (§f하얀색 잉크§r)", + "item.spectrum.workstaff.tooltip.projectile": "원거리 채굴 활성화 (§f하얀색 잉크§r)", + "item.spectrum.workstaff.tooltip.projectiles_disabled": "원거리 채굴 비활성화됨", + "item.spectrum.workstaff.tooltip.right_click_actions": "경작, 껍질 벗기기, 평탄화 가능", + "item.spectrum.workstaff.tooltip.right_click_actions_disabled": "경작, 껍질 벗기기, 평탄화 비활성화됨", + "item.spectrum.yellow_pigment": "노란색 안료", + + "item.spectrum.sugar_stick": "막대 설탕", + "item.spectrum.topaz_sugar_stick": "토파즈 막대 설탕", + "item.spectrum.amethyst_sugar_stick": "자수정 막대 설탕", + "item.spectrum.citrine_sugar_stick": "황수정 막대 설탕", + "item.spectrum.onyx_sugar_stick": "오닉스 막대 설탕", + "item.spectrum.moonstone_sugar_stick": "월장석 막대 설탕", + "item.spectrum.rock_candy": "락캔디", + "item.spectrum.topaz_rock_candy": "토파즈 락캔디", + "item.spectrum.amethyst_rock_candy": "자수정 락캔디", + "item.spectrum.citrine_rock_candy": "황수정 락캔디", + "item.spectrum.onyx_rock_candy": "오닉스 락캔디", + "item.spectrum.moonstone_rock_candy": "월장석 락캔디", + + "item.spectrum.sugary_star_candy": "설탕 별사탕", + "item.spectrum.mellow_star_candy": "달콤한 별사탕", + "item.spectrum.gleaming_star_candy": "반짝이는 별사탕", + "item.spectrum.enchanted_star_candy": "마법이 부여된 별사탕", + "item.spectrum.magnificent_star_candy": "눈부신 별사탕", + + "item.spectrum.star_candy.tooltip.sugary": "이건 그냥 별 모양 설탕이잖아...", + "item.spectrum.star_candy.tooltip.cure_single_effect": "해고운 효과 하나를 치료합니다", + "item.spectrum.star_candy.tooltip.cure_all_effects": "모든 해로운 효과를 치료합니다", + "item.spectrum.star_candy.tooltip.fully_heal_and_hunger": "체력과 배고픔을 완전히 채워줍니다", + + "itemGroup.spectrum": "스펙트럼", + "itemGroup.spectrum.blocks": "블록", + "itemGroup.spectrum.colored_wood": "색깔 나무", + "itemGroup.spectrum.creative": "크리에이티브", + "itemGroup.spectrum.creatures": "생물", + "itemGroup.spectrum.cuisine": "먹거리", + "itemGroup.spectrum.decoration": "장식", + "itemGroup.spectrum.energy": "에너지", + "itemGroup.spectrum.equipment": "장비", + "itemGroup.spectrum.functional": "기능", + "itemGroup.spectrum.mob_heads": "몬스터 머리", + "itemGroup.spectrum.pure_resources": "순수한 자원", + "itemGroup.spectrum.resources": "자원", + + "jukebox_song.spectrum.credits": "Radiarc – Irrelevance Fading", + "jukebox_song.spectrum.divinity": "Proper Motions – Everreflective", + "jukebox_song.spectrum.discovery": "DaveJF – The Mist", + "jukebox_song.spectrum.le_fishe_au_chocolat": "A Culinary Identity Crisis", + + "message.spectrum.needs_item_to_harvest": "수확에는 다음 도구가 필요합니다: ", + + "multiblock.spectrum.abyssal_vines": "심연의 덩굴", + "multiblock.spectrum.cinderhearth": "잿불화로", + "multiblock.spectrum.enchanter": "마법 부여기", + "multiblock.spectrum.fusion_shrine": "융합의 성소", + "multiblock.spectrum.pedestal.upgrade_available": "구조물 강화 가능!", + "multiblock.spectrum.pedestal_advanced": "스펙트럼 사원", + "multiblock.spectrum.pedestal_complex": "스펙트럼 성전", + "multiblock.spectrum.pedestal_simple": "스펙트럼 중점", + "multiblock.spectrum.spirit_instiller": "영혼 주입기", + "multiblock.spectrum.amethyst_geode": "보석 광석이 있는 정동", + "multiblock.spectrum.perturbed_eye_portal": "재구성한 차원문", + "multiblock.spectrum.alloy_forgery.basalt_alloy_forge": "현무암 합금 용광로", + "multiblock.spectrum.alloy_forgery.blackslag_alloy_forge": "흑작암 합금 용광로", + "multiblock.spectrum.alloy_forgery.bone_ash_alloy_forge": "골회 합금 용광로", + "multiblock.spectrum.alloy_forgery.calcite_alloy_forge": "방해석 합금 용광로", + "multiblock.spectrum.alloy_forgery.pyrite_alloy_forge": "황철석 합금 용광로", + "multiblock.spectrum.alloy_forgery.shale_clay_alloy_forge": "셰일 점토 합금 용광로", + + "recipe.spectrum.fusion_shrine.no_rgb.hint": "CMYK 방식에서 벗어나세요", + "recipe.spectrum.liquid_crystal.liquid_crystal_converting.hint": "", + "recipe.spectrum.pedestal.tier1.food.salted_jaramel_tart.hint": "아주 짠 타르트", + "recipe.spectrum.pedestal.tier1.food.salted_jaramel_trifle.hint": "아주 짠 트라이플", + "recipe.spectrum.potion_workshop_crafting.azalea_tea_milk.hint": "차의 문외한이 되어보세요", + "recipe.spectrum.potion_workshop_crafting.demon_tea_milk.hint": "차의 문외한이 되어보세요", + "recipe.spectrum.potion_workshop_crafting.glistering_jelly_tea_milk.hint": "차의 문외한이 되어보세요", + "recipe.spectrum.potion_workshop_crafting.golden_bristle_tea_milk.hint": "차의 문외한이 되어보세요", + "recipe.spectrum.potion_workshop_crafting.restoration_tea_milk.hint": "차의 문외한이 되어보세요", + "recipe.spectrum.spawner.lore.changed_creature": "생성되는 생명체를 해당 머리의 생명체로 바꿉니다", + "recipe.spectrum.spawner.lore.decreased_spawn_delay": "생성 대기 시간 감소", + "recipe.spectrum.spawner.lore.increased_max_nearby_entities": "주변의 생명체에 덜 민감해집니다", + "recipe.spectrum.spawner.lore.increased_required_player_range": "플레이어가 더 멀리 떨어져 있어도 활성화됩니다", + "recipe.spectrum.spawner.lore.increased_spawn_count": "생성되는 생명체의 수 증가", + "recipe.spectrum.spirit_instiller.secret.germinated_jade_vine_crossbreeding.hint": "두 식물의 이종 교배", + "recipe.spectrum.spirit_instiller.secret.chorus_flower.hint": "메아리와 공명", + + "recipeGroup.spectrum.amethyst_lights": "자수정 광원", + "recipeGroup.spectrum.gemstone_chiseled_blocks": "조각된 보석 블록", + "recipeGroup.spectrum.pylons": "보석 수정탑", + "recipeGroup.spectrum.azalea_tea": "진달래 차", + "recipeGroup.spectrum.bedrock_armor": "기반암 갑옷", + "recipeGroup.spectrum.bedrock_tools": "기반암 도구", + "recipeGroup.spectrum.bismuth_crushing": "비스무트", + "recipeGroup.spectrum.block_cracking": "블록 금 내기", + "recipeGroup.spectrum.bone_ash_blocks": "용골 블록", + "recipeGroup.spectrum.boss_memories": "보스의 기억", + "recipeGroup.spectrum.botania_glimmering_flowers": "빛나는 꽃", + "recipeGroup.spectrum.botania_mushrooms": "색깔 버섯", + "recipeGroup.spectrum.chalk_chalk": "파괴 불가 분필", + "recipeGroup.spectrum.chalk_glow_chalk": "파괴 불가 발광 분필", + "recipeGroup.spectrum.citrine_lights": "황수정 광원", + "recipeGroup.spectrum.cobbled_blackslag": "흑작암 조약돌", + "recipeGroup.spectrum.colored_lamps": "색깔 조명", + "recipeGroup.spectrum.colored_saplings": "색깔 묘목", + "recipeGroup.spectrum.colored_spore_blossoms": "색깔 포자 꽃", + "recipeGroup.spectrum.compacting": "압축", + "recipeGroup.spectrum.crafting_tablet": "제작 석판", + "recipeGroup.spectrum.crystallarieum_growable_crushing": "결정생성기 봉오리", + "recipeGroup.spectrum.demon_tea": "악마의 차", + "recipeGroup.spectrum.deserts": "마법의 디저트", + "recipeGroup.spectrum.resplendent_decorations": "찬란한 장식", + "recipeGroup.spectrum.enchanter_exchanging_staff": "교환의 지팡이", + "recipeGroup.spectrum.extraalchemy_potions": "추가 연금술 물약", + "recipeGroup.spectrum.fusion_shrines": "융합의 성소", + "recipeGroup.spectrum.gemstone_chimes": "보석 차임", + "recipeGroup.spectrum.gemstone_crushing": "보석 조각 & 봉오리", + "recipeGroup.spectrum.gemstone_glass": "보석 유리", + "recipeGroup.spectrum.glass_ampoules": "유리 앰풀", + "recipeGroup.spectrum.glass_arrows": "유리 화살", + "recipeGroup.spectrum.glass_crest_equipment": "유리 장식 장비", + "recipeGroup.spectrum.glistering_jelly_tea": "반짝이는 젤리 차", + "recipeGroup.spectrum.glowblocks": "발광 블록", + "recipeGroup.spectrum.hare_roasts": "토끼 통구이", + "recipeGroup.spectrum.head_fusion": "생명체 조작", + "recipeGroup.spectrum.horse_armor": "말 갑옷", + "recipeGroup.spectrum.idols": "우상", + "recipeGroup.spectrum.infused_beverages": "침출된 음료", + "recipeGroup.spectrum.item_bowls": "아이템 그릇", + "recipeGroup.spectrum.jade_decorations": "비취 장식", + "recipeGroup.spectrum.jadeite_decorations": "경옥 장식", + "recipeGroup.spectrum.malachite_equipment": "공작석 장비", + "recipeGroup.spectrum.memories": "기억", + "recipeGroup.spectrum.moonstone_lights": "월장석 광원", + "recipeGroup.spectrum.noxwood_amphoras": "어스름나무 암포라", + "recipeGroup.spectrum.noxwood_decorations": "어스름나무 장식", + "recipeGroup.spectrum.noxwood_lamps": "어스름나무 조명", + "recipeGroup.spectrum.noxwood_lanterns": "어스름나무 랜턴", + "recipeGroup.spectrum.noxwood_lights": "어스름나무 광원", + "recipeGroup.spectrum.noxwood_planks": "어스름나무 판자", + "recipeGroup.spectrum.onyx_lights": "오닉스 광원", + "recipeGroup.spectrum.pastel_network": "파스텔 네트워크", + "recipeGroup.spectrum.pure_pastel_network": "순수한 파스텔 네트워크", + "recipeGroup.spectrum.pigment_compacting": "안료 압축", + "recipeGroup.spectrum.phantom_frames": "팬텀 액자", + "recipeGroup.spectrum.semi_permeable_glass": "반투과성 유리", + "recipeGroup.spectrum.pure_to_vanilla_resources": "순수한 자원 제련", + "recipeGroup.spectrum.radiant_glass": "빛나는 유리", + "recipeGroup.spectrum.resistance_potions": "저항 물약", + "recipeGroup.spectrum.restoration_tea": "회복의 차", + "recipeGroup.spectrum.shimmerstone_lights": "미광석 광원", + "recipeGroup.spectrum.sleep_potions": "수면의 물약", + "recipeGroup.spectrum.spawner_manipulation": "생성기 조작", + "recipeGroup.spectrum.topaz_lights": "토파즈 광원", + "recipeGroup.spectrum.vanilla": "바닐라 마법 부여", + "recipeGroup.spectrum.vanilla_potions": "바닐라 물약", + "recipeGroup.spectrum.weeping_gala_deco": "낙유목 장식", + "recipeGroup.spectrum.vanilla_enchantment_upgrades": "바닐라 마법 부여 강화", + "recipeGroup.spectrum.sharestones": "공유석", + "recipeGroup.spectrum.colorful_azaleas_ink": "다채로운 진달래 잉크", + "recipeGroup.spectrum.gemstone_bricks": "보석 벽돌", + + "spectrum.gui.guidebook.reveal_hint_button.text": "통찰력 밝히기 ", + "spectrum.gui.guidebook.reveal_hint_button.tooltip.lacking_resource": "인벤토리에 이 아이템이 없습니다", + "spectrum.gui.guidebook.reveal_hint_button.tooltip.pay": "약간의 대가를 지불하고 아이디어 밝히기", + + "ink.suffix": "%s 잉크", + "ink.group.spectrum.blacks": "검은색", + "ink.group.spectrum.cyans": "청록색", + "ink.group.spectrum.magentas": "자홍색", + "ink.group.spectrum.yellows": "노란색", + "ink.spectrum.black.name": "검은색", + "ink.spectrum.blue.name": "파란색", + "ink.spectrum.brown.name": "갈색", + "ink.spectrum.cyan.name": "청록색", + "ink.spectrum.gray.name": "회색", + "ink.spectrum.green.name": "초록색", + "ink.spectrum.light_blue.name": "하늘색", + "ink.spectrum.light_gray.name": "회백색", + "ink.spectrum.lime.name": "연두색", + "ink.spectrum.magenta.name": "자홀색", + "ink.spectrum.orange.name": "주황색", + "ink.spectrum.pink.name": "분홍색", + "ink.spectrum.purple.name": "보라색", + "ink.spectrum.red.name": "빨간색", + "ink.spectrum.white.name": "하얀색", + "ink.spectrum.yellow.name": "노란색", + + "spectrum.recipe.fusion_shrine.explanation.decay_away": "맑은 하늘 필요", + "spectrum.recipe.fusion_shrine.explanation.draconic_twinsword": "취급 주의", + "spectrum.recipe.fusion_shrine.explanation.draconic_twinsword_reclaim": "하나를 잃어버렸을 경우를 위해", + "spectrum.recipe.fusion_shrine.explanation.dreamflayer": "보름달이 뜬 밤", + "spectrum.recipe.fusion_shrine.explanation.egg_laying_wooly_pig_head": "다목적 올라운더", + "spectrum.recipe.fusion_shrine.explanation.midnight_aberration": "맑은 날씨의 낮", + "spectrum.recipe.fusion_shrine.explanation.netherite_ingot": "위험하지만, 보상은 확실한...", + "spectrum.recipe.fusion_shrine.explanation.no_rgb": "훔쳐보는 거 다 봤습니다", + "spectrum.recipe.fusion_shrine.explanation.ominous_sapling": "낮 시간 필요", + "spectrum.recipe.fusion_shrine.explanation.onyx_shard": "신월 자정에만", + "spectrum.recipe.fusion_shrine.explanation.soothing_bouquet": "가장 어두운 시간에 의식 수행", + "spectrum.recipe.fusion_shrine.explanation.paltaeria_gem": "뇌우 필요", + "spectrum.recipe.fusion_shrine.explanation.shooting_star_hardening": "별이 부서지지 않게 보호", + "spectrum.recipe.fusion_shrine.explanation.spectral_shard": "궁극의 혼합물", + "spectrum.recipe.fusion_shrine.explanation.stratine_gem": "뇌우 필요", + "spectrum.recipe.fusion_shrine.explanation.weather_clear": "맑은 날씨 소환", + "spectrum.recipe.fusion_shrine.explanation.weather_rain": "비 소환", + "spectrum.recipe.fusion_shrine.explanation.weather_thunder": "뇌우 소환", + + "spectrum.rei.potion_workshop_reacting.botania.black_lotus": "• +1 긍정적 효과\n• 50%% 확률로 부정적 효과 부여\n• 물약을 식별 불가능하게 만듦.\n\n도박 한 번 해볼까?", + "spectrum.rei.potion_workshop_reacting.botania.blacker_lotus": "• +2 긍정적 효과\n• +1 부정적 효과\n• 물약을 식별 불가능하게 만듦.\n\n도박 한 번 해볼까?", + "spectrum.rei.potion_workshop_reacting.botania.life_essence": "• +2.5 효력\n• -3 생산량\n\n생산량을 늘려줄 다른 반응물이 필요하다. 그렇지 않으면 아무것도 얻지 못한다...", + "spectrum.rei.potion_workshop_reacting.botania.mana_powder": "• +25%% 지속 시간\n• 15%% 확률로 마지막 효과 추가", + "spectrum.rei.potion_workshop_reacting.botania.pixie_dust": "• 잔류형 물약 및 물약이 묻은 화살 생성\n• -25%% 효력", + "spectrum.rei.potion_workshop_reacting.hexcasting.charged_amethyst": "\n• +15~120초 지속 시간. 때로는 더 길게, 때로는 더 짧게", + "spectrum.rei.potion_workshop_reacting.malum.void_salts": "• +200%% 지속 시간\n• -2 생산량", + "spectrum.rei.potion_workshop_reacting.minecraft.dragon_breath": "• 잔류형 물약을 생성하며 화약도 반응물로 함께 넣어야 함\n• 유리병 대신 화살을 공급하면 물약이 묻은 화살을 만들어냄", + "spectrum.rei.potion_workshop_reacting.minecraft.glowstone_dust": "• +1 효력", + "spectrum.rei.potion_workshop_reacting.minecraft.gunpowder": "• 투척용 물약 생성", + "spectrum.rei.potion_workshop_reacting.minecraft.redstone": "• +100%% 지속 시간", + "spectrum.rei.potion_workshop_reacting.minecraft.echo_shard": "• 50%% 확률로 직전에 양조했던 물약의 주 효과를 추가함", + "spectrum.rei.potion_workshop_reacting.minecraft.lapis_lazuli": "• 50%% 확률로 +1 생산량", + "spectrum.rei.potion_workshop_reacting.spectrum.aether_vestiges": "• 초기 효력을 극적으로 끌어올리지만, 시간이 지남에 따라 효력이 빠르게 약해지며, 즉발성 효과에는 작동하지 않음\n• 잔류형 물약을 생성", + "spectrum.rei.potion_workshop_reacting.spectrum.amethyst_powder": "• +60초 지속 시간", + "spectrum.rei.potion_workshop_reacting.spectrum.bedrock_dust": "• +50%% 효력\n• -75%% 지속 시간\n• -1 생산량", + "spectrum.rei.potion_workshop_reacting.spectrum.bismuth_flake": "• 긍정적 효과의 효력 +1\n• 물약을 무작위 색상으로 물들임", + "spectrum.rei.potion_workshop_reacting.spectrum.bone_ash": "• 이전 물약에서 상속받은 주 효과의 효력 및 지속 시간 +100%%", + "spectrum.rei.potion_workshop_reacting.spectrum.ash_flakes": "• 부정적 효과의 지속 시간 -120초", + "spectrum.rei.potion_workshop_reacting.spectrum.pure_lapis": "• +1 생산량", + "spectrum.rei.potion_workshop_reacting.spectrum.pure_redstone": "• +200%% 지속 시간\n• -50%% 효력\n• -1 생산량", + "spectrum.rei.potion_workshop_reacting.spectrum.pure_glowstone": "• +2 효력 \n• -50%% 지속 시간\n• -1 생산량", + "spectrum.rei.potion_workshop_reacting.spectrum.pure_echo": "• 직전에 양조했던 물약의 주 효과를 항상 추가함", + "spectrum.rei.potion_workshop_reacting.spectrum.citrine_powder": "• +25%% 효력", + "spectrum.rei.potion_workshop_reacting.spectrum.four_leaf_clover": "• 무작위 능력치 대폭 증가", + "spectrum.rei.potion_workshop_reacting.minecraft.fermented_spider_eye": "• 긍정적 효과를 부정적 효과로 뒤집음\n• -25%% 지속 시간", + "spectrum.rei.potion_workshop_reacting.spectrum.jadeite_petals": "• 긍정적 효과의 지속 시간 +120초", + "spectrum.rei.potion_workshop_reacting.spectrum.fissure_plum": "• +30초 지속 시간\n• 50%% 확률로 +1 효력\n• 50%% 확률로 +1 생산량\n • 부정적 효과의 경우 능력 변경치가 반전됨", + "spectrum.rei.potion_workshop_reacting.spectrum.midnight_chip": "• +1 효력\n• +30초 지속 시간\n• -2 생산량", + "spectrum.rei.potion_workshop_reacting.spectrum.moonstone_powder": "• 부정적 효과를 긍정적 효과로 뒤집음\n• -25%% 효력", + "spectrum.rei.potion_workshop_reacting.spectrum.moonstruck_nectar": "• 물약을 훨씬 부드럽게 만들어, 더 빨리 마실 수 있게 해줌", + "spectrum.rei.potion_workshop_reacting.spectrum.nectardew_burgeon": "• +100%% 효력\n• +100%% 지속 시간\n• -3 생산량\n• 결과물에 수면성 특성을 불어넣을 수도 있음", + "spectrum.rei.potion_workshop_reacting.spectrum.onyx_powder": "• +2 생산량", + "spectrum.rei.potion_workshop_reacting.spectrum.nightdew_sprout": "• +1 효력\n• +50%% 지속 시간\n• -1 생산량", + "spectrum.rei.potion_workshop_reacting.spectrum.neolith": "• 물약에 아주 기괴한 맛과 냄새를 더해 정체불명으로 만들어버리며, 색깔 또한 완전히 새카맣게 물들임", + "spectrum.rei.potion_workshop_reacting.spectrum.paltaeria_fragments": "• +1 무작위 긍정적 효과", + "spectrum.rei.potion_workshop_reacting.spectrum.prickly_bayleaf": "• 부정적 효과의 효력 -2", + "spectrum.rei.potion_workshop_reacting.spectrum.quitoxic_powder": "• 부정적 효과의 효력 +1", + "spectrum.rei.potion_workshop_reacting.spectrum.raw_azurite": "• 잔류형 물약과 물약이 묻은 화살의 지속 시간 페널티를 무효화", + "spectrum.rei.potion_workshop_reacting.spectrum.raw_bloodstone": "• +100%% 효력\n• -2 생산량\n• 물약을 마시는 속도를 훨씬 느리게 만듦", + "spectrum.rei.potion_workshop_reacting.spectrum.raw_malachite": "• +100%% 지속 시간\n• -1 생산량\n• 물약을 마시는 속도를 훨씬 느리게 만듦", + "spectrum.rei.potion_workshop_reacting.spectrum.shimmerstone_gem": "• +20%% 효력\n• +20%% 지속 시간", + "spectrum.rei.potion_workshop_reacting.spectrum.star_fragment": "• 50%% 확률로 직전에 양조했던 물약의 주 효과를 추가함\n• 이전 물약에서 상속받은 주 효과의 효력 +100%% 및 지속 시간 -33%%", + "spectrum.rei.potion_workshop_reacting.spectrum.stardust": "• 이전 물약에서 상속받은 주 효과의 효력 +50%% 및 지속 시간 +50%%", + "spectrum.rei.potion_workshop_reacting.spectrum.storm_stone": "• 초기 효력을 극적으로 끌어올리지만, 시간이 지남에 따라 효력이 빠르게 약해지며, 즉발성 효과에는 작동하지 않음", + "spectrum.rei.potion_workshop_reacting.spectrum.stratine_fragments": "• +1 효력\n• +1 부정적 효과\n• -1 생산량", + "spectrum.rei.potion_workshop_reacting.spectrum.topaz_powder": "• 효과의 입자가 보이지 않게 만듦", + "spectrum.rei.potion_workshop_reacting.spectrum.vegetal": "• +200%% 지속 시간\n• -25%% 효력", + "spectrum.rei.potion_workshop_reacting.spectrum.bitter_oils": "• -4 생산량\n• 효과를 치유하기 어렵게 만듦", + "spectrum.rei.potion_workshop_reacting.spectrum.blackest_lotus": "• +3 긍정적 효과\n• +1 부정적 효과\n• 물약을 식별 불가능하게 만듦.\n\n도박 한 번 해볼까?", + "spectrum.rei.potion_workshop_reacting.spectrum.least_black_lotus": "• +1 긍정적 효과\n• +3 부정적 효과\n• 물약을 식별 불가능하게 만듦.\n\n도박 한 번 해볼까?", + + "spectrum.subtitles.air_launch_belt_charging": "이륙의 허리띠 충전됨", + "spectrum.subtitles.bident_hit_ground": "쌍지창이 진동함", + "spectrum.subtitles.bident_mirror_image_thrown": "쌍지창이 챙그랑거림", + "spectrum.subtitles.block.black_hole_chest.close": "블랙홀 상자가 닫힘", + "spectrum.subtitles.block.black_hole_chest.open": "블랙홀 상자가 열림", + "spectrum.subtitles.block.citrine_block.chime": "황수정이 차임 소리를 냄", + "spectrum.subtitles.block.compacting_chest.close": "압축 상자가 닫힘", + "spectrum.subtitles.block.compacting_chest.open": "압축 상자가 열림", + "spectrum.subtitles.block.dragonrot.ambient": "용부액이 으르렁거림", + "spectrum.subtitles.block.fading.place": "희미해짐 설치됨", + "spectrum.subtitles.block.failing.place": "결함 설치됨", + "spectrum.subtitles.block.forfeiture.place": "상실 설치됨", + "spectrum.subtitles.block.liquid_crystal.ambient": "액체 수정이 차임 소리를 냄", + "spectrum.subtitles.block.memory.advance": "기억이 뚜렷해짐", + "spectrum.subtitles.block.midnight_solution.ambient": "자정의 용액이 쉬익거림", + "spectrum.subtitles.block.arcane_charge.explode": "마법 폭약이 폭발함", + "spectrum.subtitles.block.moonstone_block.chime": "월장석이 차임 소리를 냄", + "spectrum.subtitles.block.sludge.ambient": "진흙탕이 톡톡거림", + "spectrum.subtitles.block.onyx_block.chime": "오닉스가 차임 소리를 냄", + "spectrum.subtitles.block.parametric_mining_device.throw": "채굴 장치가 날아감", + "spectrum.subtitles.block.ruin.place": "파멸 설치됨", + "spectrum.subtitles.block.threat_conflux.arm": "위협 경합체가 장전됨", + "spectrum.subtitles.block.threat_conflux.disarm": "위협 경합체가 해체됨", + "spectrum.subtitles.block.threat_conflux.prime": "위협 경합체가 활성화됨", + "spectrum.subtitles.block.topaz_block.chime": "토파즈가 차임 소리를 냄", + "spectrum.subtitles.block.spectral_block.chime": "스펙트럼 블록이 차임 소리를 냄", + "spectrum.subtitles.blocks.pedestal.crafting_finished": "받침대가 땡그랑거림", + "spectrum.subtitles.celestial_pocket_watch_ticking": "회중시계가 째깍거림", + "spectrum.subtitles.critical_crunch": "치명타!", + "spectrum.subtitles.crystal_strike": "광채 마법이 내리꽂힘", + "spectrum.subtitles.azure": "담청 기운이 공명함", + "spectrum.subtitles.deep_crystal_ring": "광채가 깊게 공명함", + "spectrum.subtitles.deeper_down_portal_open": "차원문이 열림", + "spectrum.subtitles.deeper_down_theme_plays": "지저 너머 테마 재생됨", + "spectrum.subtitles.dimension.ambient": "동굴이 울부짖음", + "spectrum.subtitles.discharge": "전기가 방전됨", + "spectrum.subtitles.perfect_parry": "검이 완벽하게 쳐냄", + "spectrum.subtitles.sword_block": "검이 방어함", + "spectrum.subtitles.lunge": "돌진", + "spectrum.subtitles.lunge_crit": "돌진이 적중함", + "spectrum.subtitles.dreamflayer_activates": "몽환참수검이 활성화됨", + "spectrum.subtitles.dreamflayer_deactivates": "몽환참수검이 비활성화됨", + "spectrum.subtitles.enchanter_working": "마법 부여기가 땡그랑거림", + "spectrum.subtitles.enchanter_finish": "마법 부여기가 작업을 마침", + "spectrum.subtitles.ender_splice_binds": "엔더 접합체가 귀속됨", + "spectrum.subtitles.ender_splice_charges": "엔더 접합체가 충전됨", + "spectrum.subtitles.entity.block_flooder.throw": "블록 범람기가 날아감", + "spectrum.subtitles.entity.egg_laying_wooly_pig.ambient": "알 낳는 양털 돼지가 꿀꿀거림", + "spectrum.subtitles.entity.egg_laying_wooly_pig.death": "알 낳는 양털 돼지가 죽음", + "spectrum.subtitles.entity.egg_laying_wooly_pig.hurt": "알 낳는 양털 돼지가 다침", + "spectrum.subtitles.entity.egg_laying_wooly_pig.step": "알 낳는 양털 돼지가 걸음", + "spectrum.subtitles.entity.eraser.ambient": "말소자가 쉭쉭거림", + "spectrum.subtitles.entity.eraser.death": "말소자가 죽음", + "spectrum.subtitles.entity.eraser.hurt": "말소자가 다침", + "spectrum.subtitles.entity.eraser.step": "말소자가 걸음", + "spectrum.subtitles.entity.kindling.ambient": "불망울이 울부짖음", + "spectrum.subtitles.entity.kindling.angry": "불망울이 토라짐", + "spectrum.subtitles.entity.kindling.death": "불망울이 죽음", + "spectrum.subtitles.entity.kindling.hurt": "불망울이 다침", + "spectrum.subtitles.entity.kindling.jump": "불망울이 뜀", + "spectrum.subtitles.entity.kindling.love": "불망울이 냐아~거림", + "spectrum.subtitles.entity.kindling.shoot": "불망울이 쏨", + "spectrum.subtitles.entity.lizard.ambient": "잠복 도마뱀이 끙끙거림", + "spectrum.subtitles.entity.lizard.death": "잠복 도마뱀이 죽음", + "spectrum.subtitles.entity.lizard.hurt": "잠복 도마뱀이 다침", + "spectrum.subtitles.entity.monstrosity.ambient": "§k살아있는 악몽§r이 울부짖음", + "spectrum.subtitles.entity.monstrosity.growl": "§k살아있는 악몽§r이 으르렁거림", + "spectrum.subtitles.entity.monstrosity.hurt": "§k살아있는 악몽§r이 다침", + "spectrum.subtitles.entity.monstrosity.shoot": "§k살아있는 악몽§r이 쏨", + "spectrum.subtitles.entity.monstrosity.swoop": "§k살아있는 악몽§r이 급강하함", + "spectrum.subtitles.entity.preservation_turret.ambient": "보존 포탑이 잠복함", + "spectrum.subtitles.entity.preservation_turret.close": "보존 포탑이 닫힘", + "spectrum.subtitles.entity.preservation_turret.death": "보존 포탑이 부서짐", + "spectrum.subtitles.entity.preservation_turret.hurt": "보존 포탑이 손상됨", + "spectrum.subtitles.entity.preservation_turret.open": "보존 포탑이 열림", + "spectrum.subtitles.entity.preservation_turret.shoot": "보존 포탑이 쏨", + "spectrum.subtitles.entity.marrow.ambient": "말로우가 달그락거림", + "spectrum.subtitles.entity.marrow.death": "말로우가 죽음", + "spectrum.subtitles.entity.marrow.hurt": "말로우가 다침", + "spectrum.subtitles.entity.splinterspawn.ambient": "가시파편충이 쉭쉭거림", + "spectrum.subtitles.entity.splinterspawn.death": "가시파편충이 죽음", + "spectrum.subtitles.entity.splinterspawn.hurt": "가시파편충이 다침", + + "spectrum.subtitles.exchanging_staff.select": "교환의 지팡이가 땡그랑거림", + "spectrum.subtitles.fusion_shrine_ambient": "융합의 성소가 윙윙거림", + "spectrum.subtitles.fusion_shrine_crafting_aborted": "아이템이 떨어짐", + "spectrum.subtitles.fusion_shrine_crafting_finished": "요동치며, 낮게 조율된 폭발음", + "spectrum.subtitles.glass_shimmer": "마법이 일렁임", + "spectrum.subtitles.howling_wind_high": "바람이 울부짖음", + "spectrum.subtitles.howling_wind_low": "바람이 으르렁거림", + "spectrum.subtitles.laments": "대지가 눈물 흘림", + "spectrum.subtitles.rain_shower": "비가 부슬부슬 내림", + "spectrum.subtitles.ground_slam": "검이 지면을 강타함", + "spectrum.subtitles.ground_slam_charge": "지면 강타 충전됨", + "spectrum.subtitles.heavy_crystal_ring": "광채가 크게 공명함", + "spectrum.subtitles.hummingstone_hum": "음명석이 윙윙거림", + "spectrum.subtitles.impact_base": "강렬한 충격", + "spectrum.subtitles.impaling_hit": "무언가가 꿰뚫림", + "spectrum.subtitles.incandescent_arm": "장치가 장전됨", + "spectrum.subtitles.incandescent_charge": "장치가 충전됨", + "spectrum.subtitles.ink_projectile_hit": "잉크가 블록에 맞음", + "spectrum.subtitles.item.omni_accelerator.shoot": "전방위-가속기가 쏨", + "spectrum.subtitles.item.guidebook.pages": "페이지가 넘어감", + "spectrum.subtitles.legendary_weapon_craft": "전설적인 무기가 벼려짐", + "spectrum.subtitles.light_crystal_ring": "광채가 조용히 공명함", + "spectrum.subtitles.metal_hit": "금속이 챙그랑거림", + "spectrum.subtitles.metal_tap": "금속이 울림", + "spectrum.subtitles.metallic_unsheathe": "무기를 뽑아 듦", + "spectrum.subtitles.mid_crystal_ring": "광채가 공명함", + "spectrum.subtitles.midnight_aberration_crumbling": "자정의 기형물이 부서짐", + "spectrum.subtitles.moonstone_strike": "마법이 파열됨", + "spectrum.subtitles.natures_staff_use": "자연의 지팡이가 울림", + "spectrum.subtitles.night_salts.use": "강하게 숨을 들이마심", + "spectrum.subtitles.overcharging": "과충전됨", + "spectrum.subtitles.paintbrush_paint": "붓이 칠해짐", + "spectrum.subtitles.paintbrush_trigger": "붓이 활성화됨", + "spectrum.subtitles.player_teleports": "플레이어가 순간이동함", + "spectrum.subtitles.primordial_fire_crackle": "태고의 불이 으르렁거림", + "spectrum.subtitles.primordial_fire_dot": "태고의 불이 영혼을 그을림", + "spectrum.subtitles.primordial_lighter.use": "태고의 라이터가 찰칵거림", + "spectrum.subtitles.puff_circlet": "바람의 서클릿이 부풀어오름", + "spectrum.subtitles.radiance_pin_trigger": "광채의 핀이 촉발됨", + "spectrum.subtitles.radiance_staff_break": "빛이 흩어짐", + "spectrum.subtitles.radiance_staff_charging": "광채의 지팡이가 충전됨", + "spectrum.subtitles.radiance_staff_place": "빛이 설치됨", + "spectrum.subtitles.shatter_heavy": "수정이 거칠게 부서짐", + "spectrum.subtitles.shatter_light": "수정이 부드럽게 부서짐", + "spectrum.subtitles.shooting_star_cracker": "별똥별이 탁탁거림", + "spectrum.subtitles.soft_hum": "마법이 부드럽게 윙윙거림", + "spectrum.subtitles.spectrum_theme_plays": "스펙트럼 테마 재생됨", + "spectrum.subtitles.squeaker": "삑삑거리는 방귀 소리", + "spectrum.subtitles.structure_success": "차임벨 곡조", + "spectrum.subtitles.text_revealed": "다채로운 세계 가이드북이 차임 소리를 냄", + "spectrum.subtitles.unlock": "무언가가 잠금 해제됨", + "spectrum.subtitles.use_fail": "사용 실패함", + "spectrum.subtitles.block.redstone_mechanism.trigger": "장치가 촉발됨", + "spectrum.subtitles.block.redstone_mechanism.break_block": "블록이 부서짐", + "spectrum.subtitles.block.vine.infuse": "덩굴이 주입됨", + "spectrum.subtitles.block.vine.shear": "덩굴이 잘림", + + "spectrum.toast.anvil_crushing_recipe_unlocked.title": "새 분쇄 레시피:", + "spectrum.toast.anvil_crushing_recipes_unlocked.title": "새 분쇄 레시피들:", + "spectrum.toast.cinderhearth_recipe_unlocked.title": "새 잿불화로 레시피:", + "spectrum.toast.cinderhearth_recipes_unlocked.title": "새 잿불화로 레시피들:", + "spectrum.toast.crystallarieum_growing_recipe_unlocked.title": "새 결정생성기 레시피:", + "spectrum.toast.crystallarieum_growing_recipes_unlocked.title": "새 결정생성기 레시피들:", + "spectrum.toast.enchanter_recipe_unlocked.title": "새 마법 부여기 레시피:", + "spectrum.toast.enchanter_recipes_unlocked.title": "새 마법 부여기 레시피들:", + "spectrum.toast.enchantment_upgrade_recipe_unlocked.title": "새 마법 부여 업그레이드:", + "spectrum.toast.enchantment_upgrade_recipes_unlocked.title": "새 마법 부여 업그레이드들:", + "spectrum.toast.fusion_shrine_recipe_unlocked.title": "새 융합 레시피:", + "spectrum.toast.fusion_shrine_recipes_unlocked.title": "새 융합 레시피들:", + "spectrum.toast.ink_converting_recipe_unlocked.title": "새 잉크 변환 레시피:", + "spectrum.toast.ink_converting_recipes_unlocked.title": "새 잉크 변환 레시피들:", + "spectrum.toast.lots_of_recipes_unlocked.description": "%d개의 새로운 레시피", + "spectrum.toast.lots_of_recipes_unlocked.title": "많은 레시피가 잠금 해제됨:", + "spectrum.toast.message.block_coloring_unlocked.text": "블록 색칠하기", + "spectrum.toast.message.block_coloring_unlocked.title": "새로운 붓 능력:", + "spectrum.toast.message.enchant_conflicting_enchantments_unlocked.text": "충돌에 상관없이 아이템 마법 부여 가능", + "spectrum.toast.message.enchant_conflicting_enchantments_unlocked.title": "마법 부여 숙달", + "spectrum.toast.message.complex_reagents_unlocked.title": "고등 연금술", + "spectrum.toast.message.complex_reagents_unlocked.text": "복합 반응물을 사용하여 물약을 커스터마이징하세요", + "spectrum.toast.message.fourth_potion_reagent_unlocked.text": "물약 작업장 반응물 슬롯 +1", + "spectrum.toast.message.fourth_potion_reagent_unlocked.title": "양조 숙달", + "spectrum.toast.message.overchanting_unlocked.text": "마법 부여를 한층 더 강화합니다", + "spectrum.toast.message.overchanting_unlocked.title": "연구된 마법 부여기", + "spectrum.toast.message.ink_slinging_unlocked.text": "물감 던지기", + "spectrum.toast.message.ink_slinging_unlocked.title": "새로운 붓 능력:", + "spectrum.toast.message.second_advancement_tree_unlocked.text": "새로운 발전 과제 트리를 잠금 해제했습니다", + "spectrum.toast.message.second_advancement_tree_unlocked.title": "챕터 2: 은총으로부터의 추락", + "spectrum.toast.message.shooting_stars_unlocked.text": "밤하늘의 은총을 받았습니다", + "spectrum.toast.message.shooting_stars_unlocked.title": "별들의 축복", + "spectrum.toast.message.pastel_node_coloring.title": "연결을 만들었습니다", + "spectrum.toast.message.pastel_node_coloring.text": "이제 파스텔 노드를 색칠할 수 있습니다", + "spectrum.toast.message.ascend_kindling.text": "§l로리안은 그것을 기억할 것입니다.", + "spectrum.toast.message.ascend_kindling.title": "오 이런!", + "spectrum.toast.message.vivisect_kindling.text": "도대체 당신한테 무슨 문제가 있는 겁니까?", + "spectrum.toast.message.vivisect_kindling.title": "§l이 괴물...", + "spectrum.toast.message.third_advancement_tree_unlocked.text": "새로운 발전 과제 트리를 잠금 해제했습니다", + "spectrum.toast.message.third_advancement_tree_unlocked.title": "챕터 3: 순수로의 전환", + "spectrum.toast.midnight_solution_converting_recipe_unlocked.title": "새 자정 용액 레시피:", + "spectrum.toast.midnight_solution_converting_recipes_unlocked.title": "새 자정 용액 레시피들:", + "spectrum.toast.pedestal_recipe_unlocked.title": "새 받침대 레시피:", + "spectrum.toast.pedestal_recipes_unlocked.title": "새 받침대 레시피들:", + "spectrum.toast.potion_workshop_brewing_recipe_unlocked.title": "새 물약 양조법:", + "spectrum.toast.potion_workshop_brewing_recipes_unlocked.title": "새 물약 양조법들:", + "spectrum.toast.potion_workshop_crafting_recipe_unlocked.title": "새 물약 작업장 레시피:", + "spectrum.toast.potion_workshop_crafting_recipes_unlocked.title": "새 물약 작업장 레시피들:", + "spectrum.toast.potion_workshop_reacting_recipe_unlocked.title": "새 물약 반응물:", + "spectrum.toast.potion_workshop_reacting_recipes_unlocked.title": "새 물약 반응물들:", + "spectrum.toast.revelation.text": "새로운 것들이 당신 앞에 모습을 드러냅니다", + "spectrum.toast.revelation.title": "이 세상에 대한 지식을 얻었습니다", + "spectrum.toast.spirit_instiller_recipe_unlocked.title": "새 영혼 주입기 레시피:", + "spectrum.toast.spirit_instiller_recipes_unlocked.title": "새 영혼 주입기 레시피들:", + "spectrum.toast.titration_barrel_recipe_unlocked.title": "새 적정통 레시피:", + "spectrum.toast.titration_barrel_recipes_unlocked.title": "새 적정통 레시피들:", + "spectrum.toast.primordial_fire_burning_recipe_unlocked.title": "새 태고의 불 연소 레시피:", + "spectrum.toast.primordial_fire_burning_recipes_unlocked.title": "새 태고의 불 연소 레시피들:", + + "spectrum.tooltip.able_to_summon_warden": "워든을 부릅니다", + "spectrum.tooltip.biomemakeover_cursed": "사악한 제단에 의해 저주받았습니다", + "spectrum.tooltip.coming_soon": "아직 서바이벌 모드에서 얻을 수 없습니다", + "spectrum.tooltip.dragon_and_wither_immune": "§7엔더 드래곤 및 위더에게 파괴되지 않음", + "spectrum.tooltip.ink_cost": "§7 [%s %s]", + "spectrum.tooltip.ink_drain.tooltip.ink_for_next_step": "%d %s – 다음 단계까지 %d", + "spectrum.tooltip.ink_drain.tooltip.maxed_out": "§f⭐§r 최대 강화됨 §f⭐§r", + "spectrum.tooltip.ink_powered.bullet_amount": "◆ %d %s", + "spectrum.tooltip.ink_powered.consume": "%s 소비", + "spectrum.tooltip.ink_powered.empty": "비어있음", + "spectrum.tooltip.ink_powered.percent_filled": "%d 잉크 (%d %%)", + "spectrum.tooltip.ink_powered.prefix": "다음 잉크를 소비합니다:", + "spectrum.tooltip.ink_powered.stored": "저장됨:", + "spectrum.tooltip.ink_powered.unselect_color": "색상 선택 해제", + "spectrum.tooltip.press_shift_for_controls": "조작법을 보려면 Shift", + "spectrum.tooltip.press_shift_for_more": "추가 능력치를 보려면 Shift", + + "tag.c.amethyst": "자수정", + "tag.c.amethyst_blocks": "자수정 블록", + "tag.c.amethyst_ores": "자수정 광석", + "tag.c.amethysts": "자수정", + "tag.c.ancient_debris": "고대 잔해", + "tag.c.books": "책", + "tag.c.candles": "초", + "tag.c.caramel": "카라멜", + "tag.c.carpets": "양탄자", + "tag.c.charcoal": "목탄", + "tag.c.chocolates": "초콜릿", + "tag.c.citrine": "황수정", + "tag.c.citrine_blocks": "황수정 블록", + "tag.c.citrine_ores": "황수정 광석", + "tag.c.coal_ores": "석탄 광석", + "tag.c.concrete": "콘크리트", + "tag.c.concrete_powder": "콘크리트 가루", + "tag.c.cooked_fish": "익힌 물고기", + "tag.c.cooked_meat": "익힌 고기", + "tag.c.copper_ores": "구리 광석", + "tag.c.diamond_ores": "다이아몬드 광석", + "tag.c.dirt": "흙", + "tag.c.dusts.ashes": "재", + "tag.c.dye": "염료", + "tag.c.emerald_ores": "에메랄드 광석", + "tag.c.fishing_rods": "낚시대", + "tag.c.fruit": "과일", + "tag.c.fruit_small": "작은 과일", + "tag.c.fruits": "과일들", + "tag.c.glazed_terracotta": "유광 테라코타", + "tag.c.glowstone_blocks": "발광석 블록", + "tag.c.glowstone_dusts": "발광석 가루", + "tag.c.gold_ores": "금 광석", + "tag.c.grain": "곡물", + "tag.c.grains": "곡물들", + "tag.c.herbs": "허브", + "tag.c.ice": "얼음", + "tag.c.iron_ores": "철 광석", + "tag.c.jellies": "젤리", + "tag.c.lapis_lazulis": "청금석", + "tag.c.lapis_ores": "청금석 광석", + "tag.c.milk": "우유", + "tag.c.milks": "우유들", + "tag.c.mineral_stone": "광물 돌", + "tag.c.mud": "진흙", + "tag.c.mushrooms_nether": "네더 버섯", + "tag.c.mushroooms": "버섯", + "tag.c.peaches": "복숭아", + "tag.c.plums": "자두", + "tag.c.raw_fish": "날 물고기", + "tag.c.raw_meat": "날고기", + "tag.c.starch": "전분", + "tag.c.stripped_logs": "껍질 벗긴 원목", + "tag.c.stripped_wood": "껍질 벗긴 나무", + "tag.c.sugar_crops": "설탕 작물", + "tag.c.sweeteners": "감미료", + "tag.c.tea_leaves": "찻잎", + "tag.c.terracotta": "테라코타", + "tag.c.topaz": "토파즈", + "tag.c.topaz_blocks": "토파즈 블록", + "tag.c.topaz_ores": "토파즈 광석", + "tag.c.trifles": "트라이플", + "tag.c.tropical_fish": "열대어", + "tag.c.vegetables": "채소", + "tag.c.vegetables_small": "작은 채소", + "tag.c.volcanic_stone": "화산암", + + "tag.spectrum.activates_weeping_circlet": "흐느끼는 서클릿 활성화", + "tag.spectrum.alcohols": "주류", + "tag.spectrum.amethyst_crystals": "자수정 결정", + "tag.spectrum.amethyst_ores": "자수정 광석", + "tag.spectrum.axes": "스펙트럼 도끼", + "tag.spectrum.azurite_ores": "남동석 광석", + "tag.spectrum.basal_marbles": "기저 대리석", + "tag.spectrum.basalts": "현무암", + "tag.spectrum.bedrock_armor": "기반암 갑옷", + "tag.spectrum.bedrock_equipment": "기반암 장비", + "tag.spectrum.bedrock_rod_fishable_in": "기반암 낚시대로 낚을 수 있음", + "tag.spectrum.bidents": "쌍지창", + "tag.spectrum.black_logs": "검은색 원목", + "tag.spectrum.blackslags": "흑작암", + "tag.spectrum.blue_logs": "파란색 원목", + "tag.spectrum.brown_logs": "갈색 원목", + "tag.spectrum.calcites": "방해석", + "tag.spectrum.chestnut_noxcap_stems": "밤색 어스름버섯 줄기", + "tag.spectrum.citrine_crystals": "황수정 결정", + "tag.spectrum.citrine_ores": "황수정 광석", + "tag.spectrum.clovers": "클로버", + "tag.spectrum.colored_buttons": "색깔 버튼", + "tag.spectrum.colored_fence_gates": "색깔 울타리 문", + "tag.spectrum.colored_fences": "색깔 울타리", + "tag.spectrum.colored_leaves": "색깔 잎", + "tag.spectrum.colored_logs": "색깔 원목", + "tag.spectrum.colored_planks": "색깔 판자", + "tag.spectrum.colored_pressure_plates": "색깔 압력판", + "tag.spectrum.colored_saplings": "색깔 묘목", + "tag.spectrum.colored_slabs": "색깔 반 블록", + "tag.spectrum.colored_stairs": "색깔 계단", + "tag.spectrum.colored_wood": "색깔 나무", + "tag.spectrum.common_meats": "일반 고기", + "tag.spectrum.cookbooks": "요리책", + "tag.spectrum.cyan_logs": "청록색 원목", + "tag.spectrum.dragonbone_blocks": "용골 블록", + "tag.spectrum.dragonjags": "용린초", + "tag.spectrum.dragonrot": "용부액", + "tag.spectrum.drinkable_spirits": "음용 가능한 증류주", + "tag.spectrum.dyes": "염료", + "tag.spectrum.ebony_noxcap_stems": "흑단색 어스름버섯 줄기", + "tag.spectrum.resplendent_feathers": "찬란한 깃털", + "tag.spectrum.emissive": "발광 아이템", + "tag.spectrum.enchantable_books": "마법 부여 가능한 책", + "tag.spectrum.fishing_rods": "스펙트럼 낚시대", + "tag.spectrum.gemstone_armor": "보석 갑옷", + "tag.spectrum.gemstone_buds": "보석 봉오리", + "tag.spectrum.gemstone_clusters": "보석 군집", + "tag.spectrum.gemstone_glass": "보석 유리", + "tag.spectrum.gemstone_glass_panes": "보석 유리판", + "tag.spectrum.gemstone_ores": "보석 광석", + "tag.spectrum.gemstone_powders": "보석 가루", + "tag.spectrum.gemstone_shards": "보석 조각", + "tag.spectrum.polished_gemstone_blocks": "윤나는 보석 블록", + "tag.spectrum.glass_arrows": "유리 화살", + "tag.spectrum.glass_crest_equipment": "유리 장식 장비", + "tag.spectrum.gray_logs": "회색 원목", + "tag.spectrum.greatswords": "특대검", + "tag.spectrum.light_greatswords": "경량 특대검", + "tag.spectrum.green_logs": "초록색 원목", + "tag.spectrum.hoes": "스펙트럼 괭이", + "tag.spectrum.hummingstones": "음명석", + "tag.spectrum.idols": "우상", + "tag.spectrum.ink_containers": "잉크 용기", + "tag.spectrum.ivory_noxcap_stems": "상아색 어스름버섯 줄기", + "tag.spectrum.kindling_food": "불망울 먹이", + "tag.spectrum.lagoon_rod_fishable_in": "석호 낚시대로 낚을 수 있음", + "tag.spectrum.lean_meats": "저지방 고기", + "tag.spectrum.light_blue_logs": "하늘색 원목", + "tag.spectrum.light_gray_logs": "회백색 원목", + "tag.spectrum.lime_logs": "연두색 원목", + "tag.spectrum.liquid_crystal": "액체 수정", + "tag.spectrum.magenta_logs": "자홍색 원목", + "tag.spectrum.malachite_equipment": "공작석 장비", + "tag.spectrum.malachite_ores": "공작석 광석", + "tag.spectrum.memory_bonding_agents": "기억 결합제", + "tag.spectrum.memory_bonding_agents_concealable": "숨길 수 있는 기억 결합제", + "tag.spectrum.midnight_solution": "자정의 용액", + "tag.spectrum.midnight_solution_converted": "자정의 용액으로 변환됨", + "tag.spectrum.mob_heads": "몬스터 머리", + "tag.spectrum.mob_heads.axolotl_heads": "아홀로틀 머리", + "tag.spectrum.mob_heads.bovine_heads": "소 머리", + "tag.spectrum.mob_heads.equidae_heads": "말 머리", + "tag.spectrum.mob_heads.fish_heads": "물고기 머리", + "tag.spectrum.mob_heads.fox_heads": "여우 머리", + "tag.spectrum.mob_heads.frog_heads": "개구리 머리", + "tag.spectrum.mob_heads.guardian_heads": "가디언 머리", + "tag.spectrum.mob_heads.hoglin_heads": "호글린 머리", + "tag.spectrum.mob_heads.lizard_heads": "잠복 도마뱀 머리", + "tag.spectrum.mob_heads.llama_heads": "라마 머리", + "tag.spectrum.mob_heads.mooshroom_heads": "무시룸 머리", + "tag.spectrum.mob_heads.parrot_heads": "앵무새 머리", + "tag.spectrum.mob_heads.shulker_heads": "셜커 머리", + "tag.spectrum.mob_heads.slime_heads": "슬라임 머리", + "tag.spectrum.mob_heads.spider_heads": "거미 머리", + "tag.spectrum.mob_heads.zombie_heads": "좀비 머리", + "tag.spectrum.molten_rod_fishable_in": "녹아내린 낚시대로 낚을 수 있음", + "tag.spectrum.moonstone_crystals": "월장석 결정", + "tag.spectrum.moonstone_ores": "월장석 광석", + "tag.spectrum.sludge": "진흙탕", + "tag.spectrum.nightdew_herbs": "밤이슬 허브", + "tag.spectrum.noxcap_stems": "어스름버섯 줄기", + "tag.spectrum.noxshrooms": "어스름버섯", + "tag.spectrum.noxwood": "어스름나무", + "tag.spectrum.noxwood_amphoras": "어스름나무 암포라", + "tag.spectrum.noxwood_buttons": "어스름나무 버튼", + "tag.spectrum.noxwood_doors": "어스름나무 문", + "tag.spectrum.noxwood_fence_gates": "어스름나무 울타리 문", + "tag.spectrum.noxwood_fences": "어스름나무 울타리", + "tag.spectrum.noxwood_lanterns": "어스름나무 조명", + "tag.spectrum.noxwood_planks": "어스름나무 판자", + "tag.spectrum.noxwood_pressure_plates": "어스름나무 압력판", + "tag.spectrum.noxwood_slabs": "어스름나무 반 블록", + "tag.spectrum.noxwood_stairs": "어스름나무 계단", + "tag.spectrum.noxwood_trapdoors": "어스름나무 다락문", + "tag.spectrum.onyx_crystals": "오닉스 결정", + "tag.spectrum.onyx_ores": "오닉스 광석", + "tag.spectrum.orange_logs": "주황색 원목", + "tag.spectrum.ores": "광석", + "tag.spectrum.pastel_node_upgrades": "파스텔 노드 강화", + "tag.spectrum.pedestals": "받침대", + "tag.spectrum.pickaxes": "곡괭이", + "tag.spectrum.pigment_blocks": "안료 블록", + "tag.spectrum.pigments": "안료", + "tag.spectrum.pink_logs": "분홍색 원목", + "tag.spectrum.semi_permeable_glass": "플레이어 전용 유리", + "tag.spectrum.potion_pendants": "물약 펜던트", + "tag.spectrum.pure_resource_blocks": "순수한 자원 블록", + "tag.spectrum.pure_resources": "순수한 자원", + "tag.spectrum.purple_logs": "보라색 원목", + "tag.spectrum.pyrite": "황철석", + "tag.spectrum.raw_common_meats": "날 일반 고기", + "tag.spectrum.raw_lean_meats": "날 저지방 고기", + "tag.spectrum.raw_water_meats": "날 수산물 고기", + "tag.spectrum.red_logs": "빨간색 원목", + "tag.spectrum.requires_omni_accelerator_pvp_enabled": "만물-가속기 PvP 활성화 필요", + "tag.spectrum.rock_candy": "락캔디", + "tag.spectrum.shale_clays": "셰일 점토", + "tag.spectrum.shimmerstone_lights": "미광석 광원", + "tag.spectrum.shimmerstone_ores": "미광석 광석", + "tag.spectrum.shooting_stars": "별똥별", + "tag.spectrum.shovels": "스펙트럼 삽", + "tag.spectrum.slate_noxcap_stems": "점판암색 어스름버섯 줄기", + "tag.spectrum.smelts_to_bone_ash": "골회로 제련됨", + "tag.spectrum.spawn_eggs": "스폰 알", + "tag.spectrum.stripped_colored_logs": "껍질 벗긴 색깔 원목", + "tag.spectrum.stripped_colored_wood": "껍질 벗긴 색깔 나무", + "tag.spectrum.stripped_noxcap_hyphae": "껍질 벗긴 어스름나무 균사", + "tag.spectrum.stripped_noxcap_stems": "껍질 벗긴 어스름나무 중기", + "tag.spectrum.swimmable_fluid": "추가적으로 수영 가능한 액체", + "tag.spectrum.swords": "스펙트럼 검", + "tag.spectrum.tag_filtering_items": "태그 필터링 아이템", + "tag.spectrum.topaz_crystals": "토파즈 결정", + "tag.spectrum.topaz_ores": "토파즈 광석", + "tag.spectrum.unlocks_bag_of_holding": "보관의 가방 잠금 해제", + "tag.spectrum.water_meats": "수산물 고기", + "tag.spectrum.weeping_gala_logs": "낙유목 원목", + "tag.spectrum.white_logs": "하얀색 원목", + "tag.spectrum.workstaffs": "작업 지팡이", + "tag.spectrum.yellow_logs": "노란색 원목", + "tag.spectrum.gemstone_pillars": "보석 기둥", + "tag.spectrum.reagent.complex": "복합 반응물", + "tag.spectrum.reagent.reagents": "반응물", + "tag.spectrum.reagent.simple": "단순 반응물", + + "curios.identifier.face": "얼굴", + "curios.identifier.feet": "발", + "curios.identifier.palette": "팔레트", + "curios.identifier.pin": "핀", + "curios.modifiers.face": "얼굴에 있을 때:", + "curios.modifiers.feet": "발에 있을 때:", + "curios.modifiers.palette": "팔레트에 있을 때:", + "curios.modifiers.pin": "핀에 있을 때:", + + "config.spectrum.add_item_tooltips": "스포너, 표지판, 스컬크 비명체 등 여러 아이템에 대한 고급 툴팁 추가", + "config.spectrum.bedrock_anvil_can_exceed_max_vanilla_enchantment_level": "기반암 모루가 바닐라 최대 마법 부여 레벨을 초과할 수 있음", + "config.spectrum.bedrock_armor_boots_protection": "기반암 부츠 방어력", + "config.spectrum.bedrock_armor_chestplate_protection": "기반암 흉갑 방어력", + "config.spectrum.bedrock_armor_helmet_protection": "기반암 투구 방어력", + "config.spectrum.bedrock_armor_knockback_resistance": "기반암 갑옷 밀침 저항", + "config.spectrum.bedrock_armor_leggings_protection": "기반암 레깅스 방어력", + "config.spectrum.bedrock_armor_toughness": "기반암 갑옷 방어 강도", + "config.spectrum.block_sound_volume": "멀티블록 구조물의 소리 크기", + "config.spectrum.ore_aura_sound_volume": "특정 광석에 접근했을 때 재생되는 기운 소리 크기", + "config.spectrum.can_bottle_up_fading": "유리병으로 쇠퇴를 담을 수 있는지 여부", + "config.spectrum.can_bottle_up_failing": "유리병으로 결함을 담을 수 있는지 여부", + "config.spectrum.can_bottle_up_ruin": "유리병으로 파멸을 담을 수 있는지 여부", + "config.spectrum.can_bottle_up_forfeiture": "유리병으로 상실을 담을 수 있는지 여부", + "config.spectrum.decay_is_stopped_by_supported_claim_mods": "호환되는 영토 보호 모드의 영토 내에서는 부패가 퍼지지 않게 함", + "config.spectrum.dimension_reverb_decay_time": "차원 잔향 감쇠 시간", + "config.spectrum.dimension_reverb_density": "차원 잔향 감쇠 밀도", + "config.spectrum.disarming_chance_per_level_mobs": "레벨당 무장 해제 마법이 부여된 무기로 타격 시 몹을 무장 해제시킬 확률", + "config.spectrum.disarming_chance_per_level_players": "레벨당 무장 해제 마법이 부여된 무기로 타격 시 플레이어를 무장 해제시킬 확률", + "config.spectrum.pest_control_experience_multiplier": "해충 방제로 벌레 먹은 블록을 채굴했을 때 떨어지는 경험치 배수", + "config.spectrum.enderman_holding_treasure_chance": "엔더맨이 특수 블록을 들고 있을 확률", + "config.spectrum.enderman_holding_treasure_chance_in_end": "엔드 차원의 엔더맨이 특수 블록을 들고 있을 확률", + "config.spectrum.fading_can_destroy_block_entities": "쇠퇴가 블록 엔티티를 잠식할 수 있는지 여부", + "config.spectrum.fading_spread_chance_on_random_tick": "쇠퇴의 전파 속도", + "config.spectrum.failing_can_destroy_block_entities": "결함이 블록 엔티티를 잠식할 수 있는지 여부", + "config.spectrum.failing_spread_chance_on_random_tick": "결함의 전파 속도", + "config.spectrum.first_strike_damage_per_level": "선제공격 마법 부여의 레벨당 추가 피해량", + "config.spectrum.forfeiture_can_destroy_block_entities": "상실이 블록 엔티티를 잠식할 수 있는지 여부", + "config.spectrum.forfeiture_spread_chance_on_random_tick": "상실의 전파 속도", + "config.spectrum.gemstone_armor_absorption_amplifier": "보석 갑옷 흡수 증폭", + "config.spectrum.gemstone_armor_boots_protection": "보석 부츠 방어력", + "config.spectrum.gemstone_armor_chestplate_protection": "보석 흉갑 방어력", + "config.spectrum.gemstone_armor_helmet_protection": "보석 투구 방어력", + "config.spectrum.gemstone_armor_knockback_resistance": "보석 갑옷 밀침 저항", + "config.spectrum.gemstone_armor_leggings_protection": "보석 레깅스 방어력", + "config.spectrum.gemstone_armor_regeneration_amplifier": "보석 갑옷 재생 증폭", + "config.spectrum.gemstone_armor_resistance_amplifier": "보석 갑옷 저항 증폭", + "config.spectrum.gemstone_armor_slowness_amplifier": "보석 갑옷 구속 증폭", + "config.spectrum.gemstone_armor_speed_amplifier": "보석 갑옷 신속 증폭", + "config.spectrum.gemstone_armor_toughness": "보석 갑옷 방어 강도", + "config.spectrum.gemstone_armor_weakness_amplifier": "보석 갑옷 나약함 증폭", + "config.spectrum.glow_vision_goggles_duration": "발광 먹물 주머니 1개당 발광 투시 고글의 지속 시간(초)", + "config.spectrum.improved_critical_extra_damage_multiplier_per_level": "향상된 치명타 마법 부여의 레벨당 추가 피해량 배수", + "config.spectrum.integration_packs_to_skip_loading": "로딩을 건너뛸 통합 팩", + "config.spectrum.log_placing_of_decay": "부패 설치 기록 남기기", + "config.spectrum.allow_dynamic_end_portal_shape": "엔드 차원문이 3x3뿐만 아니라 어떤 형태로든 배열될 수 있도록 허용", + "config.spectrum.max_level_for_effects_in_greater_potion_pendant": "상급 물약 펜던트의 상태 효과 최대 레벨", + "config.spectrum.max_level_for_effects_in_lesser_potion_pendant": "하급 물약 펜던트의 상태 효과 최대 레벨", + "config.spectrum.name_for_unrevealed_enchantments": "밝혀지지 않은 마법 부여의 이름 (비워두면 난독화되어 표시됨)", + "config.spectrum.omni_accelerator_pvp": "만물-가속기 PvP 허용", + "config.spectrum.rei_lists_unrevealed_recipes_as_not_unlocked": "아직 잠금 해제되지 않은 레시피는 REI 화면에 '레시피가 아직 잠금 해제되지 않음'으로 표시", + "config.spectrum.reduced_wind_particles": "환경 입자 감소", + "config.spectrum.ruin_can_destroy_block_entities": "파멸이 블록 엔티티를 잠식할 수 있는지 여부", + "config.spectrum.ruin_spread_chance_on_random_tick": "파멸의 전파 속도", + "config.spectrum.shooting_star_spawn_chance": "100틱마다 별똥별이 떨어질 확률", + "config.spectrum.shooting_star_dimensions": "별똥별이 떨어지는 차원", + "config.spectrum.storm_stone_spawn_chance": "번개가 칠 때 폭풍석이 생성될 확률", + "config.spectrum.storm_stone_dimensions": "폭풍석이 생성되는 세계", + "config.spectrum.toast_milliseconds": "잠금 해제 메시지 지속 시간", + "config.spectrum.vanilla_recipe_crafting_time_ticks": "받침대가 바닐라 레시피를 조합하는 데 걸리는 틱", + "config.spectrum.wind_sim": "특정 입자에 대한 바람 시뮬레이션 활성화", + "config.spectrum.wind_sim_interval": "바람 시뮬레이션 업데이트 주기", + "config.spectrum.always_spawn_light_block_particles": "광채의 지팡이를 들고 있지 않아도 빛 블록이 입자를 방출함", + "config.spectrum.post_process_shaders": "후처리 셰이더 활성화", + "config.spectrum.dimension_brightness_mod": "차원 밝기", + "config.spectrum.pastel_network_particles": "파스텔 네트워크 전송 시 입자 생성", + "config.spectrum.repair_anything_recipe_repair_percentage": "달빛에 취한 넥타르와 함께 조합할 때 아이템이 수리되는 비율", + "config.spectrum.charged_creepers_drop_spectrum_mob_heads": "충전된 크리퍼가 생물을 처치할 때 스펙트럼 전용 몬스터 머리를 떨어뜨리는 여부", + + "config.spectrum.gemstone_durability": "보석 도구의 내구도", + "config.spectrum.gemstone_mining_speed": "보석 도구의 채굴 속도", + "config.spectrum.gemstone_attack_damage": "보석 도구의 공격 피해량", + "config.spectrum.gemstone_enchantability": "보석 도구의 마법 부여 가능성", + "config.spectrum.voiding_durability": "공허 도구의 내구도", + "config.spectrum.voiding_mining_speed": "공허 도구의 채굴 속도", + "config.spectrum.voiding_attack_damage": "공허 도구의 공격 피해량", + "config.spectrum.voiding_enchantability": "공허 도구의 마법 부여 가능성", + "config.spectrum.bedrock_mining_speed": "기반암 도구의 채굴 속도", + "config.spectrum.bedrock_attack_damage": "기반암 도구의 공격 피해량", + "config.spectrum.bedrock_enchantability": "기반암 도구의 마법 부여 가능성", + "config.spectrum.draconic_durability": "용 도구의 내구도", + "config.spectrum.draconic_mining_speed": "용 도구의 채굴 속도", + "config.spectrum.draconic_attack_damage": "용 도구의 공격 피해량", + "config.spectrum.draconic_enchantability": "용 도구의 마법 부여 가능성", + "config.spectrum.malachite_durability": "공작석 도구의 내구도", + "config.spectrum.malachite_mining_speed": "공작석 도구의 채굴 속도", + "config.spectrum.malachite_attack_damage": "공작석 도구의 공격 피해량", + "config.spectrum.malachite_enchantability": "공작석 도구의 마법 부여 가능성", + "config.spectrum.glass_crest_durability": "유리 장식 도구의 내구도", + "config.spectrum.glass_crest_mining_speed": "유리 장식 도구의 채굴 속도", + "config.spectrum.glass_crest_attack_damage": "유리 장식 도구의 공격 피해량", + "config.spectrum.glass_crest_enchantability": "유리 장식 도구의 마법 부여 가능성", + "config.spectrum.verdigris_durability": "얽혀진 도구의 내구도", + "config.spectrum.verdigris_mining_speed": "얽혀진 도구의 채굴 속도", + "config.spectrum.verdigris_attack_damage": "얽혀진 도구의 공격 피해량", + "config.spectrum.verdigris_enchantability": "얽혀진 도구의 마법 부여 가능성", + "config.spectrum.nectar_durability": "넥타르 창의 내구도", + "config.spectrum.nectar_mining_speed": "넥타르 창의 채굴 속도", + "config.spectrum.nectar_attack_damage": "넥타르 창의 공격 피해량", + "config.spectrum.nectar_enchantability": "넥타르 창의 마법 부여 가능성", + "config.spectrum.dreamflayer_durability": "몽환참수검 도구의 내구도", + "config.spectrum.dreamflayer_mining_speed": "몽환참수검 도구의 채굴 속도", + "config.spectrum.dreamflayer_attack_damage": "몽환참수검 도구의 공격 피해량", + "config.spectrum.dreamflayer_enchantability": "몽환참수검 도구의 마법 부여 가능성", + "config.spectrum.nightfall_durability": "해질녘의 검의 내구도", + "config.spectrum.nightfall_mining_speed": "해질녘의 검의 채굴 속도", + "config.spectrum.nightfall_attack_damage": "해질녘의 검의 공격 피해량", + "config.spectrum.nightfall_enchantability": "해질녘의 검의 마법 부여 가능성", + "config.spectrum.dragonrot_dripstone_drip_chance": "용부액 점적석 채워짐 확률", + "config.spectrum.liquid_crystal_dripstone_drip_chance": "액체 수정 점적석 채워짐 확률", + "config.spectrum.midnight_solution_dripstone_drip_chance": "자정의 용액 점적석 채워짐 확률", + "config.spectrum.sludge_dripstone_drip_chance": "진흙탕 점적석 채워짐 확률", + + "trinkets.slot.chest.pin": "핀", + "trinkets.slot.head.crown": "왕관", + "trinkets.slot.legs.pigment_palette": "안료 팔레트", + + "______special_named_items_and_lore": "Special Item Names:", + "named_item.spectrum.dirt_of_shame": "수치의 흙", + "lore.spectrum.probably_sugar": "설탕... 아마도?", + "lore.spectrum.time_travel_tap": "시간 여행자의 자격", + "lore.spectrum.evernectar": "...영원의 넥타르?", + + "lore.spectrum.remembrance_memory.line_1": "2002 - 2025", + "lore.spectrum.remembrance_memory.line_2": "영원히 기억될 것입니다", + + "lore.spectrum.heartbound_staff.name": "서바이벌 모드에서는 이 아이템을 볼 수 없어야 합니다", + "lore.spectrum.heartbound_staff.lore_1": "지금 크리에이티브 모드가 아니라면", + "lore.spectrum.heartbound_staff.lore_2": "이건 버그로, 이 아이템을 얻을 수 없어야 합니다", + "lore.spectrum.heartbound_staff.lore_3": "제보해 주세요!", + + "spectrum.filled_map.undergrowth_manor_surveillance": "감시 지도", + + "______food_tooltips": "Food Tooltips:", + "spectrum.food.withChance": "%s [%d%%]", + "spectrum.food.whenEaten": "먹었을 때:", + "spectrum.food.whenDrunk": "마셨을 때:", + + "______structure_translations": "Structure Translations:", + "structure.spectrum.city_below": "지하 도시", + "structure.spectrum.excavation_site": "발굴 현장", + "structure.spectrum.undergrowth_manor": "덤불 속 저택", + "structure.spectrum.forsaken_cathedral": "버려진 성소", + "structure.spectrum.lizard_den": "도마뱀 굴", + "structure.spectrum.pedestal_ruins_deepslate": "심층암 받침대 유적", + "structure.spectrum.pedestal_ruins_stone": "받침대 유적", + "structure.spectrum.preservation_ruins": "보존 유적", + + "structure.minecraft.ancient_city": "고대 도시", + "structure.minecraft.bastion_remnant": "보루 잔해", + "structure.minecraft.buried_treasure": "땅에 묻힌 보물", + "structure.minecraft.end_city": "엔드 도시", + "structure.minecraft.fortress": "네더 요새", + "structure.minecraft.mansion": "삼림 대저택", + "structure.minecraft.mineshaft": "폐광", + "structure.minecraft.mineshaft_mesa": "폐광", + "structure.minecraft.monument": "해저 유적", + "structure.minecraft.nether_fossil": "네더 화석", + "structure.minecraft.ocean_ruin_cold": "해저 폐허", + "structure.minecraft.ocean_ruin_warm": "해저 폐허", + "structure.minecraft.pillager_outpost": "약탈자 전초기지", + "structure.minecraft.ruined_portal": "무너진 차원문", + "structure.minecraft.ruined_portal_desert": "무너진 차원문", + "structure.minecraft.ruined_portal_jungle": "무너진 차원문", + "structure.minecraft.ruined_portal_mountain": "무너진 차원문", + "structure.minecraft.ruined_portal_nether": "무너진 차원문", + "structure.minecraft.ruined_portal_ocean": "무너진 차원문", + "structure.minecraft.ruined_portal_swamp": "무너진 차원문", + "structure.minecraft.shipwreck": "난파선", + "structure.minecraft.shipwreck_beached": "난파선", + "structure.minecraft.stronghold": "요새", + "structure.minecraft.desert_pyramid": "사막 피라미드", + "structure.minecraft.igloo": "이글루", + "structure.minecraft.jungle_pyramid": "정글 피라미드", + "structure.minecraft.swamp_hut": "마녀의 오두막", + "structure.minecraft.trail_ruins": "추적 폐허", + "structure.minecraft.village_desert": "마을", + "structure.minecraft.village_plains": "마을", + "structure.minecraft.village_savanna": "마을", + "structure.minecraft.village_snowy": "마을", + "structure.minecraft.village_taiga": "마을", + + "fluid_type.spectrum.liquid_crystal": "액체 수정", + "fluid_type.spectrum.sludge": "진흙탕", + "fluid_type.spectrum.midnight_solution": "자정의 용액", + "fluid_type.spectrum.dragonrot": "용부액", + + "______changes_for_vanilla": "Changes:", + "block.minecraft.polished_basalt": "현무암 기둥", + "subtitles.block.amethyst_block.chime": "보석 차임", + + "______vanilla_additions": "Additions:", + "potion.potency.6": "VI", + "potion.potency.7": "VII", + "potion.potency.8": "VIII", + "potion.potency.9": "IX", + "potion.potency.10": "X", + "potion.potency.11": "XI", + "potion.potency.12": "XII", + "potion.potency.13": "XIII", + "potion.potency.14": "XIV", + "potion.potency.15": "XV", + "potion.potency.16": "XVI", + "potion.potency.17": "XVII", + "potion.potency.18": "XVIII", + "potion.potency.19": "XIX", + "potion.potency.20": "XX", + "potion.potency.21": "XXI", + "potion.potency.22": "XXII", + "potion.potency.23": "XXIII", + "potion.potency.24": "XXIV", + "potion.potency.25": "XXV", + "potion.potency.26": "XXVI", + "potion.potency.27": "XXVII", + "potion.potency.28": "XXVIII", + "potion.potency.29": "XXIX", + "potion.potency.30": "XXX", + + "______sign_text_used_in_structures": "", + "signtext.spectrum.stall_to_let.1": "점포 임대", + "signtext.spectrum.stall_to_let.2": "", + "signtext.spectrum.stall_to_let.3": "하루 당 가격", + "signtext.spectrum.stall_to_let.4": "말소자 허물 3개", + + "signtext.spectrum.stall_to_let2.1": "점포 임대", + "signtext.spectrum.stall_to_let2.2": "", + "signtext.spectrum.stall_to_let2.3": "하루 당 가격", + "signtext.spectrum.stall_to_let2.4": "다이아몬드 5개", + + "signtext.spectrum.seed_vault_danger.1": "국유 재산", + "signtext.spectrum.seed_vault_danger.2": "", + "signtext.spectrum.seed_vault_danger.3": "위험", + "signtext.spectrum.seed_vault_danger.4": "접근 금지", + + "signtext.spectrum.biohazard_ruin.1": "☣", + "signtext.spectrum.biohazard_ruin.2": "생물재해", + "signtext.spectrum.biohazard_ruin.3": "파멸", + "signtext.spectrum.biohazard_ruin.4": "8 블록", + + "entity.spectrum.monstrosity.text0": "다쳐", + "entity.spectrum.monstrosity.text1": "복종해", + "entity.spectrum.monstrosity.text2": "저리 가", + "entity.spectrum.monstrosity.text3": "후퇴", + "entity.spectrum.monstrosity.text4": "뒤로 가", + "entity.spectrum.monstrosity.text5": "떠나", + "entity.spectrum.monstrosity.text6": "돌아가", + "entity.spectrum.monstrosity.text7": "물러서", + "entity.spectrum.monstrosity.text8": "앞은 위험해", + "entity.spectrum.monstrosity.text9": "미안해", + "entity.spectrum.monstrosity.text10": "꺼내 줘", + "entity.spectrum.monstrosity.text11": "중단해", + "entity.spectrum.monstrosity.text12": "도와줘", + "entity.spectrum.monstrosity.text13": "제발", + "entity.spectrum.monstrosity.text14": "안전하지 않아", + "entity.spectrum.monstrosity.text15": "자연의 수호", + "entity.spectrum.monstrosity.text16": "여기서 멈춰", + "entity.spectrum.monstrosity.text17": "나의 집", + "entity.spectrum.monstrosity.text18": "밀지 마", + + "______done_until_here": "TODO:", + "advancements.spectrum.craft_energy_collector.title": "수신 양호", + "advancements.spectrum.craft_energy_collector.description": "정동에서 에너지를 수확할 수 있을 만큼 강력한 수집기를 만드세요", + "advancements.spectrum.place_energy_collector.title": "새로운 형태의 에너지", + "advancements.spectrum.place_energy_collector.description": "정동의 한가운데에 수집기를 설치하고 작동하는 것을 지켜보세요", + "advancements.spectrum.unused2.title": "끝내주는 시간", + "advancements.spectrum.meet_paintlich.title": "시간이 새겨지다", + "advancements.spectrum.meet_paintlich.description": "어떤 누군가를 만나세요", + "advancements.spectrum.defeat_paintlich.title": "교차된 붓", + "advancements.spectrum.defeat_paintlich.description": "나이 든 유명 인사와의 가벼운 토론에서 승리하세요", + + "book.spectrum.guidebook.mysterious_locket.page4.title": "로켓의 내용물", + "book.spectrum.guidebook.mysterious_locket.page4.text": "안에는 작은 쪽지도 들어있었다... 도대체 누구의 것이었을까?", + "book.spectrum.guidebook.mysterious_locket.page5.text": "이제 드레이톤의 언어를 이해하게 되었으니, 뒷면에 새겨진 문구를 해독하는 건 식은 죽 먹기다:\\\n\\\n*바보같이 굴지 마, 아스테라스. 달은 스스로 빛날 수 없어. 그저 태양빛을 반사할 뿐이지.*", + "book.spectrum.guidebook.mysterious_locket.page5.title": "신원 미상의 쪽지" +} From aae3c4ecc3d201fc4fa3628fa56fee5077f8b349 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 6 Jul 2026 21:17:07 +0200 Subject: [PATCH 065/477] riding through semi permeable glass (Saphire) --- ...a => SemiPermeableGemstoneGlassBlock.java} | 18 ++++++----------- ...lock.java => SemiPermeableGlassBlock.java} | 20 +++++++++---------- .../spectrum/registries/SpectrumBlocks.java | 16 +++++++-------- 3 files changed, 23 insertions(+), 31 deletions(-) rename src/main/java/de/dafuqs/spectrum/blocks/decoration/{GemstonePlayerOnlyGlassBlock.java => SemiPermeableGemstoneGlassBlock.java} (63%) rename src/main/java/de/dafuqs/spectrum/blocks/decoration/{AlternatePlayerOnlyGlassBlock.java => SemiPermeableGlassBlock.java} (76%) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/GemstonePlayerOnlyGlassBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/SemiPermeableGemstoneGlassBlock.java similarity index 63% rename from src/main/java/de/dafuqs/spectrum/blocks/decoration/GemstonePlayerOnlyGlassBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/decoration/SemiPermeableGemstoneGlassBlock.java index e926c7602b..400409f55e 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/GemstonePlayerOnlyGlassBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/SemiPermeableGemstoneGlassBlock.java @@ -12,20 +12,20 @@ import net.minecraft.world.level.pathfinder.*; import net.minecraft.world.phys.shapes.*; -public class GemstonePlayerOnlyGlassBlock extends GemstoneGlassBlock { +public class SemiPermeableGemstoneGlassBlock extends GemstoneGlassBlock { - public final MapCodec codec; + public final MapCodec codec; - public GemstonePlayerOnlyGlassBlock(Properties settings, GemstoneColor gemstoneColor) { + public SemiPermeableGemstoneGlassBlock(Properties settings, GemstoneColor gemstoneColor) { super(settings, gemstoneColor); this.codec = RecordCodecBuilder.mapCodec(i -> i.group( propertiesCodec(), SpectrumRegistries.GEMSTONE_COLOR.byNameCodec().fieldOf("color").forGetter(b -> b.gemstoneColor) - ).apply(i, GemstonePlayerOnlyGlassBlock::new)); + ).apply(i, SemiPermeableGemstoneGlassBlock::new)); } @Override - public MapCodec codec() { + public MapCodec codec() { return codec; } @@ -37,13 +37,7 @@ public boolean isPathfindable(BlockState state, PathComputationType type) { @Override @Deprecated public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { - if (context instanceof EntityCollisionContext entityShapeContext) { - Entity entity = entityShapeContext.getEntity(); - if (entity instanceof Player) { - return Shapes.empty(); - } - } - return state.getShape(world, pos); + return SemiPermeableGlassBlock.isPlayerOrPlayerRiderCollision(context) ? Shapes.empty() : state.getShape(world, pos); } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/AlternatePlayerOnlyGlassBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/SemiPermeableGlassBlock.java similarity index 76% rename from src/main/java/de/dafuqs/spectrum/blocks/decoration/AlternatePlayerOnlyGlassBlock.java rename to src/main/java/de/dafuqs/spectrum/blocks/decoration/SemiPermeableGlassBlock.java index d12513ad2e..a58c032cd3 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/AlternatePlayerOnlyGlassBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/SemiPermeableGlassBlock.java @@ -11,21 +11,21 @@ import net.minecraft.world.phys.shapes.*; import org.jspecify.annotations.Nullable; -public class AlternatePlayerOnlyGlassBlock extends TransparentBlock { +public class SemiPermeableGlassBlock extends TransparentBlock { private final Block alternateBlock; // used for tinted glass to make light not shine through private final boolean tinted; - public AlternatePlayerOnlyGlassBlock(BlockBehaviour.Properties settings, Block block, boolean tinted) { + public SemiPermeableGlassBlock(BlockBehaviour.Properties settings, Block block, boolean tinted) { super(settings); this.alternateBlock = block; this.tinted = tinted; } @Override - public @Nullable MapCodec codec() { + public @Nullable MapCodec codec() { //TODO: Make the codec return null; } @@ -38,13 +38,15 @@ public boolean isPathfindable(BlockState state, PathComputationType type) { @Override @Deprecated public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { + return isPlayerOrPlayerRiderCollision(context) ? Shapes.empty() : state.getShape(world, pos); + } + + public static boolean isPlayerOrPlayerRiderCollision(CollisionContext context) { if (context instanceof EntityCollisionContext entityShapeContext) { Entity entity = entityShapeContext.getEntity(); - if (entity instanceof Player) { - return Shapes.empty(); - } + return entity != null && (entity instanceof Player || entity.getFirstPassenger() instanceof Player); } - return state.getShape(world, pos); + return false; } @Override @@ -70,8 +72,4 @@ public boolean skipRendering(BlockState state, BlockState stateFrom, Direction d return super.skipRendering(state, stateFrom, direction); } - public Block getAlternateBlock() { - return this.alternateBlock; - } - } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index 3b36ae4a21..b9bb394111 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -513,14 +513,14 @@ private static BlockBehaviour.Properties pylon(BlockBehaviour block) { public static final DeferredBlock ONYX_PYLON = register(pylon(blockWithItem("onyx_pylon", () -> new PylonBlock(pylon(ONYX_BLOCK.get())), InkColors.BLACK))); public static final DeferredBlock MOONSTONE_PYLON = register(pylon(blockWithItem("moonstone_pylon", () -> new PylonBlock(pylon(MOONSTONE_BLOCK.get())), InkColors.WHITE))); - public static final DeferredBlock SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("semi_permeable_glass", () -> new AlternatePlayerOnlyGlassBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLASS), Blocks.GLASS, false), InkColors.WHITE), b -> Blocks.GLASS)); - public static final DeferredBlock TINTED_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("tinted_semi_permeable_glass", () -> new AlternatePlayerOnlyGlassBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TINTED_GLASS), Blocks.TINTED_GLASS, true), InkColors.BLACK), b -> Blocks.TINTED_GLASS)); - public static final DeferredBlock RADIANT_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("radiant_semi_permeable_glass", () -> new AlternatePlayerOnlyGlassBlock(BlockBehaviour.Properties.ofFullCopy(RADIANT_GLASS.get()), RADIANT_GLASS.get(), false), InkColors.YELLOW), b -> RADIANT_GLASS.get())); - public static final DeferredBlock TOPAZ_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("topaz_semi_permeable_glass", () -> new GemstonePlayerOnlyGlassBlock(BlockBehaviour.Properties.ofFullCopy(TOPAZ_GLASS.get()), BuiltinGemstoneColor.CYAN), InkColors.CYAN), b -> TOPAZ_GLASS.get())); - public static final DeferredBlock AMETHYST_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("amethyst_semi_permeable_glass", () -> new GemstonePlayerOnlyGlassBlock(BlockBehaviour.Properties.ofFullCopy(AMETHYST_GLASS.get()), BuiltinGemstoneColor.MAGENTA), InkColors.MAGENTA), b -> AMETHYST_GLASS.get())); - public static final DeferredBlock CITRINE_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("citrine_semi_permeable_glass", () -> new GemstonePlayerOnlyGlassBlock(BlockBehaviour.Properties.ofFullCopy(CITRINE_GLASS.get()), BuiltinGemstoneColor.YELLOW), InkColors.YELLOW), b -> CITRINE_GLASS.get())); - public static final DeferredBlock ONYX_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("onyx_semi_permeable_glass", () -> new GemstonePlayerOnlyGlassBlock(BlockBehaviour.Properties.ofFullCopy(ONYX_GLASS.get()), BuiltinGemstoneColor.BLACK), InkColors.BLACK), b -> ONYX_GLASS.get())); - public static final DeferredBlock MOONSTONE_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("moonstone_semi_permeable_glass", () -> new GemstonePlayerOnlyGlassBlock(BlockBehaviour.Properties.ofFullCopy(MOONSTONE_GLASS.get()), BuiltinGemstoneColor.WHITE), InkColors.WHITE), b -> MOONSTONE_GLASS.get())); + public static final DeferredBlock SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("semi_permeable_glass", () -> new SemiPermeableGlassBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLASS), Blocks.GLASS, false), InkColors.WHITE), b -> Blocks.GLASS)); + public static final DeferredBlock TINTED_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("tinted_semi_permeable_glass", () -> new SemiPermeableGlassBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TINTED_GLASS), Blocks.TINTED_GLASS, true), InkColors.BLACK), b -> Blocks.TINTED_GLASS)); + public static final DeferredBlock RADIANT_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("radiant_semi_permeable_glass", () -> new SemiPermeableGlassBlock(BlockBehaviour.Properties.ofFullCopy(RADIANT_GLASS.get()), RADIANT_GLASS.get(), false), InkColors.YELLOW), b -> RADIANT_GLASS.get())); + public static final DeferredBlock TOPAZ_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("topaz_semi_permeable_glass", () -> new SemiPermeableGemstoneGlassBlock(BlockBehaviour.Properties.ofFullCopy(TOPAZ_GLASS.get()), BuiltinGemstoneColor.CYAN), InkColors.CYAN), b -> TOPAZ_GLASS.get())); + public static final DeferredBlock AMETHYST_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("amethyst_semi_permeable_glass", () -> new SemiPermeableGemstoneGlassBlock(BlockBehaviour.Properties.ofFullCopy(AMETHYST_GLASS.get()), BuiltinGemstoneColor.MAGENTA), InkColors.MAGENTA), b -> AMETHYST_GLASS.get())); + public static final DeferredBlock CITRINE_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("citrine_semi_permeable_glass", () -> new SemiPermeableGemstoneGlassBlock(BlockBehaviour.Properties.ofFullCopy(CITRINE_GLASS.get()), BuiltinGemstoneColor.YELLOW), InkColors.YELLOW), b -> CITRINE_GLASS.get())); + public static final DeferredBlock ONYX_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("onyx_semi_permeable_glass", () -> new SemiPermeableGemstoneGlassBlock(BlockBehaviour.Properties.ofFullCopy(ONYX_GLASS.get()), BuiltinGemstoneColor.BLACK), InkColors.BLACK), b -> ONYX_GLASS.get())); + public static final DeferredBlock MOONSTONE_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("moonstone_semi_permeable_glass", () -> new SemiPermeableGemstoneGlassBlock(BlockBehaviour.Properties.ofFullCopy(MOONSTONE_GLASS.get()), BuiltinGemstoneColor.WHITE), InkColors.WHITE), b -> MOONSTONE_GLASS.get())); public static final DeferredBlock GLISTERING_MELON = register(singleton(new BlockRegistrar<>("glistering_melon").withBlock(() -> new Block(BlockBehaviour.Properties.ofFullCopy(MELON))).withItem(block -> new BlockItem(block, IS.of())), TexturedModel.COLUMN)); public static final DeferredBlock ATTACHED_GLISTERING_MELON_STEM = register(new BlockRegistrar<>("attached_glistering_melon_stem").withBlock(() -> new AttachedStemBlock(ResourceKey.create(Registries.BLOCK, SpectrumCommon.locate("glistering_melon_stem")), GLISTERING_MELON.getKey(), SpectrumItems.GLISTERING_MELON_SEEDS.getKey(), BlockBehaviour.Properties.ofFullCopy(Blocks.ATTACHED_MELON_STEM)))); From 2dff8457b0c22529af4f203024e178b420996f9e Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 6 Jul 2026 22:08:21 +0200 Subject: [PATCH 066/477] added one of the weirder workarounds in the codebase --- .../spectrum/blocks/redstone/EnderGlassBlock.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/redstone/EnderGlassBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/redstone/EnderGlassBlock.java index 3f2d809f3b..0208cef179 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/redstone/EnderGlassBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/redstone/EnderGlassBlock.java @@ -96,24 +96,26 @@ public BlockState getStateForPlacement(BlockPlaceContext ctx) { } @Override - public void neighborChanged(BlockState state, Level world, BlockPos pos, Block block, BlockPos fromPos, boolean notify) { + public void neighborChanged(BlockState state, Level world, BlockPos pos, Block block, BlockPos fromPos, boolean movedByPiston) { if (!world.isClientSide()) { - BlockState fromPosBlockState = world.getBlockState(fromPos); - if (fromPosBlockState.getBlock() instanceof EnderGlassBlock) { - TransparencyState neighborState = fromPosBlockState.getValue(TRANSPARENCY_STATE); + BlockState fromPosState = world.getBlockState(fromPos); + if (fromPosState.getBlock() instanceof EnderGlassBlock) { + TransparencyState neighborState = fromPosState.getValue(TRANSPARENCY_STATE); TransparencyState currentState = state.getValue(TRANSPARENCY_STATE); if (neighborState != currentState) { world.setBlockAndUpdate(pos, world.getBlockState(pos).setValue(TRANSPARENCY_STATE, neighborState)); } - } else if (fromPosBlockState.isSignalSource() || block.defaultBlockState().isSignalSource()) { + } else if(block == Blocks.REDSTONE_WIRE && fromPosState.isAir()) { + // funky redstone mechanics + } else if (fromPosState.isSignalSource() || block.defaultBlockState().isSignalSource()) { TransparencyState targetState = getTransparencyStateForRedstonePower(world.getBestNeighborSignal(pos)); if (getTransparencyState(state) != targetState) { world.setBlockAndUpdate(pos, state.setValue(TRANSPARENCY_STATE, targetState)); } } } - super.neighborChanged(state, world, pos, block, fromPos, notify); + super.neighborChanged(state, world, pos, block, fromPos, movedByPiston); } public static TransparencyState getTransparencyState(BlockState state) { From 68fef0cfd43e0858ecf5e4df9b8265a048b942d6 Mon Sep 17 00:00:00 2001 From: 2hh8899 <2hh8899@naver.com> Date: Tue, 7 Jul 2026 14:01:32 +0900 Subject: [PATCH 067/477] Update ko_kr.json --- .../resources/assets/spectrum/lang/ko_kr.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/resources/assets/spectrum/lang/ko_kr.json b/src/main/resources/assets/spectrum/lang/ko_kr.json index 1454914151..e2e12a5949 100644 --- a/src/main/resources/assets/spectrum/lang/ko_kr.json +++ b/src/main/resources/assets/spectrum/lang/ko_kr.json @@ -5321,27 +5321,27 @@ "spectrum.subtitles.bident_mirror_image_thrown": "쌍지창이 챙그랑거림", "spectrum.subtitles.block.black_hole_chest.close": "블랙홀 상자가 닫힘", "spectrum.subtitles.block.black_hole_chest.open": "블랙홀 상자가 열림", - "spectrum.subtitles.block.citrine_block.chime": "황수정이 차임 소리를 냄", + "spectrum.subtitles.block.citrine_block.chime": "황수정이 울림", "spectrum.subtitles.block.compacting_chest.close": "압축 상자가 닫힘", "spectrum.subtitles.block.compacting_chest.open": "압축 상자가 열림", "spectrum.subtitles.block.dragonrot.ambient": "용부액이 으르렁거림", "spectrum.subtitles.block.fading.place": "희미해짐 설치됨", "spectrum.subtitles.block.failing.place": "결함 설치됨", "spectrum.subtitles.block.forfeiture.place": "상실 설치됨", - "spectrum.subtitles.block.liquid_crystal.ambient": "액체 수정이 차임 소리를 냄", + "spectrum.subtitles.block.liquid_crystal.ambient": "액체 수정이 울림", "spectrum.subtitles.block.memory.advance": "기억이 뚜렷해짐", "spectrum.subtitles.block.midnight_solution.ambient": "자정의 용액이 쉬익거림", "spectrum.subtitles.block.arcane_charge.explode": "마법 폭약이 폭발함", - "spectrum.subtitles.block.moonstone_block.chime": "월장석이 차임 소리를 냄", + "spectrum.subtitles.block.moonstone_block.chime": "월장석이 울림", "spectrum.subtitles.block.sludge.ambient": "진흙탕이 톡톡거림", - "spectrum.subtitles.block.onyx_block.chime": "오닉스가 차임 소리를 냄", + "spectrum.subtitles.block.onyx_block.chime": "오닉스가 울림", "spectrum.subtitles.block.parametric_mining_device.throw": "채굴 장치가 날아감", "spectrum.subtitles.block.ruin.place": "파멸 설치됨", "spectrum.subtitles.block.threat_conflux.arm": "위협 경합체가 장전됨", "spectrum.subtitles.block.threat_conflux.disarm": "위협 경합체가 해체됨", "spectrum.subtitles.block.threat_conflux.prime": "위협 경합체가 활성화됨", - "spectrum.subtitles.block.topaz_block.chime": "토파즈가 차임 소리를 냄", - "spectrum.subtitles.block.spectral_block.chime": "스펙트럼 블록이 차임 소리를 냄", + "spectrum.subtitles.block.topaz_block.chime": "토파즈가 울림", + "spectrum.subtitles.block.spectral_block.chime": "스펙트럼 블록이 울림", "spectrum.subtitles.blocks.pedestal.crafting_finished": "받침대가 땡그랑거림", "spectrum.subtitles.celestial_pocket_watch_ticking": "회중시계가 째깍거림", "spectrum.subtitles.critical_crunch": "치명타!", @@ -5447,8 +5447,8 @@ "spectrum.subtitles.soft_hum": "마법이 부드럽게 윙윙거림", "spectrum.subtitles.spectrum_theme_plays": "스펙트럼 테마 재생됨", "spectrum.subtitles.squeaker": "삑삑거리는 방귀 소리", - "spectrum.subtitles.structure_success": "차임벨 곡조", - "spectrum.subtitles.text_revealed": "다채로운 세계 가이드북이 차임 소리를 냄", + "spectrum.subtitles.structure_success": "조율음이 울림", + "spectrum.subtitles.text_revealed": "다채로운 세계 가이드북이 울림", "spectrum.subtitles.unlock": "무언가가 잠금 해제됨", "spectrum.subtitles.use_fail": "사용 실패함", "spectrum.subtitles.block.redstone_mechanism.trigger": "장치가 촉발됨", From 43162bbb6126a89d1418853453cbcac1bd99dbfa Mon Sep 17 00:00:00 2001 From: 2hh8899 <2hh8899@naver.com> Date: Thu, 9 Jul 2026 01:03:27 +0900 Subject: [PATCH 068/477] Update ko_kr.json --- .../resources/assets/spectrum/lang/ko_kr.json | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main/resources/assets/spectrum/lang/ko_kr.json b/src/main/resources/assets/spectrum/lang/ko_kr.json index e2e12a5949..33c52b356b 100644 --- a/src/main/resources/assets/spectrum/lang/ko_kr.json +++ b/src/main/resources/assets/spectrum/lang/ko_kr.json @@ -397,7 +397,7 @@ "advancements.spectrum.revive_black_sludge_plant.title": "지저 너머의 드루이드", "advancements.spectrum.revive_dead_bush.description": "마른 덤불에 자연의 지팡이와 베지탈을 사용하여 다시 살아 숨 쉬게 만드세요", "advancements.spectrum.revive_dead_bush.title": "부활", - "advancements.spectrum.shoot_fully_overcharged_crossbow.description": "끝까지 과충전된 유리 장식 쇠뇌를 발사하세요", + "advancements.spectrum.shoot_fully_overcharged_crossbow.description": "끝까지 과충전된 유리 문장 쇠뇌를 발사하세요", "advancements.spectrum.shoot_fully_overcharged_crossbow.title": "슈퍼차지", "advancements.spectrum.smelt_in_cinderhearth_with_yield_upgrades.description": "잿불화로에 생산성 쇄도기와 하늘색 잉크를 들이부어 제련 결과물을 복제할 확률을 얻어내세요", "advancements.spectrum.smelt_in_cinderhearth_with_yield_upgrades.title": "잉크에서 물질로", @@ -2745,7 +2745,7 @@ "book.spectrum.guidebook.glass_arrows.page3.text": "가공할 만한 충격으로 적을 들이받아, 저 멀리 까마득하게 날려버린다.", "book.spectrum.guidebook.glass_arrows.page4.text": "대상의 무적 시간을 깔끔하게 무시하고 피해를 욱여넣으며, 무적 시간을 초기화시켜버린다. 방패에는 추가 피해를 안겨준다.", "book.spectrum.guidebook.glass_arrows.page5.text": "순수한 에너지의 구체로 폭발하여, 주변에 있는 모든 생명체들을 한꺼번에 날려버린다.", - "book.spectrum.guidebook.glass_crest_tools.name": "유리 장식 도구", + "book.spectrum.guidebook.glass_crest_tools.name": "유리 문장 도구", "book.spectrum.guidebook.glass_crest_tools.page0.text": "[공작석 도구](entry://dimension/malachite_tools)에 [월장석 코어](entry://dimension/moonstone_cores)를 박아 넣으면, 도구에 강력하고도 새로운 능력이 깃들게 된다.", "book.spectrum.guidebook.glass_crest_tools.page1.text": "충돌 시 블록을 파괴해 버리는 [#](b9bebe)하얀색 잉크[#]()를 발사한다. 마법 부여를 전환할 때 [공명](entry://enchanting/enchantments/resonance)을 선택할 수도 있다.", "book.spectrum.guidebook.glass_crest_tools.page2.text": "입히는 피해의 일부를 단단한 장갑도 종잇장처럼 뚫어버리는 [#](449900)마법[#]() 피해로 변환하여 꽂아 넣는다. 또한 내 주변의 모든 것을 날려버리는 [#](449900)지면 강타[#]()를 시전할 수도 있다. 이 능력은 [#](449900)휩쓸기[#]() 레벨에 비례하여 강해진다.", @@ -4575,7 +4575,7 @@ "item.spectrum.fanciful_tuff_ring": "화려한 응회암 반지", "item.spectrum.ferocious_chestplate": "퍼로셔스 흉갑", "item.spectrum.ferocious_chestplate.tooltip": "피격 시 흡수와 저항을 부여합니다", - "item.spectrum.ferocious_glass_crest_bident": "퍼로셔스 유리 장식 쌍지창", + "item.spectrum.ferocious_glass_crest_bident": "퍼로셔스 유리 문장 쌍지창", "item.spectrum.ferocious_glass_crest_bident.tooltip": "§f급류§r 사용 시 물이 필요하지 않습니다", "item.spectrum.ferocious_glass_crest_bident.tooltip2": "§f급류§r 중일 때 다시 §f급류§r를 사용할 수 있습니다", "item.spectrum.ferocious_glass_crest_bident.tooltip3": "비행 중 주변의 생명체에게 피해를 입힙니다", @@ -4584,7 +4584,7 @@ "item.spectrum.fishcake": "어묵", "item.spectrum.fissure_plum": "균열 자두", "item.spectrum.fissure_plum.tooltip": "§o고소하고 향긋합니다", - "item.spectrum.fractal_glass_crest_bident": "프랙탈 유리 장식 쌍지창", + "item.spectrum.fractal_glass_crest_bident": "프랙탈 유리 문장 쌍지창", "item.spectrum.fractal_glass_crest_bident.tooltip": "던졌을 때 당신의 손을 떠나지 않습니다", "item.spectrum.fractal_glass_crest_bident.tooltip2": "대신, 복제된 §f환영§r을 만들어 투적합니다", "item.spectrum.fractal_glass_crest_bident.tooltip3": "충돌 시 산산조각 납니다", @@ -4607,14 +4607,14 @@ "item.spectrum.gilded_book.tooltip.copy_enchantments2": "마법 부여를 이 책으로 복사합니다", "item.spectrum.gilded_book.tooltip.enchantability": "높은 마법 부여 가중치", "item.spectrum.glass_arrow.tooltip": "매우 강력한 피해를 주며 수중에서도 쏠 수 있습니다", - "item.spectrum.glass_crest_crossbow": "유리 장식 쇠뇌", + "item.spectrum.glass_crest_crossbow": "유리 문장 쇠뇌", "item.spectrum.glass_crest_crossbow.message.charge": "%d%% 과충전 활성화됨", "item.spectrum.glass_crest_crossbow.tooltip.how_to_overcharge": "§7장전된 상태로 웅크린 채 사용하여 §f과충전§7합니다", "item.spectrum.glass_crest_crossbow.tooltip.overcharged": "§7과충전: %d§7%%", - "item.spectrum.glass_crest_ultra_greatsword": "유리 장식 특대검", + "item.spectrum.glass_crest_ultra_greatsword": "유리 문장 특대검", "item.spectrum.glass_crest_ultra_greatsword.tooltip": "§7공격력의 §f%d%%§7를 마법 피해로 입힙니다", "item.spectrum.glass_crest_ultra_greatsword.tooltip2": "§7충전하여 지면을 강타합니다", - "item.spectrum.glass_crest_workstaff": "유리 장식 작업 지팡이", + "item.spectrum.glass_crest_workstaff": "유리 문장 작업 지팡이", "item.spectrum.glass_peach": "유리 복숭아", "item.spectrum.glass_peach.tooltip": "§o§7아삭아삭!", "item.spectrum.gleaming_pin": "미광의 핀", @@ -5177,7 +5177,7 @@ "recipeGroup.spectrum.gemstone_glass": "보석 유리", "recipeGroup.spectrum.glass_ampoules": "유리 앰풀", "recipeGroup.spectrum.glass_arrows": "유리 화살", - "recipeGroup.spectrum.glass_crest_equipment": "유리 장식 장비", + "recipeGroup.spectrum.glass_crest_equipment": "유리 문장 장비", "recipeGroup.spectrum.glistering_jelly_tea": "반짝이는 젤리 차", "recipeGroup.spectrum.glowblocks": "발광 블록", "recipeGroup.spectrum.hare_roasts": "토끼 통구이", @@ -5654,7 +5654,7 @@ "tag.spectrum.gemstone_shards": "보석 조각", "tag.spectrum.polished_gemstone_blocks": "윤나는 보석 블록", "tag.spectrum.glass_arrows": "유리 화살", - "tag.spectrum.glass_crest_equipment": "유리 장식 장비", + "tag.spectrum.glass_crest_equipment": "유리 문장 장비", "tag.spectrum.gray_logs": "회색 원목", "tag.spectrum.greatswords": "특대검", "tag.spectrum.light_greatswords": "경량 특대검", @@ -5861,10 +5861,10 @@ "config.spectrum.malachite_mining_speed": "공작석 도구의 채굴 속도", "config.spectrum.malachite_attack_damage": "공작석 도구의 공격 피해량", "config.spectrum.malachite_enchantability": "공작석 도구의 마법 부여 가능성", - "config.spectrum.glass_crest_durability": "유리 장식 도구의 내구도", - "config.spectrum.glass_crest_mining_speed": "유리 장식 도구의 채굴 속도", - "config.spectrum.glass_crest_attack_damage": "유리 장식 도구의 공격 피해량", - "config.spectrum.glass_crest_enchantability": "유리 장식 도구의 마법 부여 가능성", + "config.spectrum.glass_crest_durability": "유리 문장 도구의 내구도", + "config.spectrum.glass_crest_mining_speed": "유리 문장 도구의 채굴 속도", + "config.spectrum.glass_crest_attack_damage": "유리 문장 도구의 공격 피해량", + "config.spectrum.glass_crest_enchantability": "유리 문장 도구의 마법 부여 가능성", "config.spectrum.verdigris_durability": "얽혀진 도구의 내구도", "config.spectrum.verdigris_mining_speed": "얽혀진 도구의 채굴 속도", "config.spectrum.verdigris_attack_damage": "얽혀진 도구의 공격 피해량", From 603a1eb04f47e54fed5c1bf49d3122efa1aea536 Mon Sep 17 00:00:00 2001 From: 2hh8899 <2hh8899@naver.com> Date: Fri, 10 Jul 2026 14:47:13 +0900 Subject: [PATCH 069/477] Update ko_kr.json (fix ender splice tooltip's placeholder order) --- src/main/resources/assets/spectrum/lang/ko_kr.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/spectrum/lang/ko_kr.json b/src/main/resources/assets/spectrum/lang/ko_kr.json index 33c52b356b..b370d99178 100644 --- a/src/main/resources/assets/spectrum/lang/ko_kr.json +++ b/src/main/resources/assets/spectrum/lang/ko_kr.json @@ -4552,7 +4552,7 @@ "item.spectrum.enchantment_canvas.tooltip.not_bound2": "§7캔버스가 해당 유형의 아이템에 결속됩니다", "item.spectrum.ender_splice": "엔더 접합체", "item.spectrum.ender_splice.tooltip.bound_player": "%s§7에게 결속됨. 사용하여 순간이동합니다", - "item.spectrum.ender_splice.tooltip.bound_pos": "$s§7의 %d %d %d§7에 결속됨. 사용하여 순간이동합니다", + "item.spectrum.ender_splice.tooltip.bound_pos": "%4$s§7의 %1$d %2$d %3$d§7에 결속됨. 사용하여 순간이동합니다", "item.spectrum.ender_splice.tooltip.unbound": "§7사용하여 현재 위치에 결속합니다", "item.spectrum.ender_splice.wrong_dimension": "이 엔더 접합체의 에너지는 다른 차원으로 순간이동시킬 만큼 강력하지 않습니다", "item.spectrum.eraser_spawn_egg": "말소자 생성 알", @@ -5219,7 +5219,7 @@ "recipeGroup.spectrum.colorful_azaleas_ink": "다채로운 진달래 잉크", "recipeGroup.spectrum.gemstone_bricks": "보석 벽돌", - "spectrum.gui.guidebook.reveal_hint_button.text": "통찰력 밝히기 ", + "spectrum.gui.guidebook.reveal_hint_button.text": "통찰 개방 ", "spectrum.gui.guidebook.reveal_hint_button.tooltip.lacking_resource": "인벤토리에 이 아이템이 없습니다", "spectrum.gui.guidebook.reveal_hint_button.tooltip.pay": "약간의 대가를 지불하고 아이디어 밝히기", From 7f4199f16a30803135c28414171b36e84d49ac9c Mon Sep 17 00:00:00 2001 From: 2hh8899 <2hh8899@naver.com> Date: Sat, 11 Jul 2026 23:35:34 +0900 Subject: [PATCH 070/477] Update ko_kr.json (fix draconic twinsword's guidebook page) --- src/main/resources/assets/spectrum/lang/ko_kr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/spectrum/lang/ko_kr.json b/src/main/resources/assets/spectrum/lang/ko_kr.json index b370d99178..b5bee3f833 100644 --- a/src/main/resources/assets/spectrum/lang/ko_kr.json +++ b/src/main/resources/assets/spectrum/lang/ko_kr.json @@ -2548,7 +2548,7 @@ "book.spectrum.guidebook.draconic_twinsword.page1.text": "검 속에 흐르는 [#](f0af15)노란색 잉크[#]() 덕분에 검을 위로 던진 뒤 때리는 방식으로 엄청난 속도로 투척할 수 있다. 우클릭으로 검을 회수할 수 있지만, 튕겨 나오는 반동에는 주의해야 한다.\\\n\\\n*내 무기에 내가 맞아 죽는 꼴은 피해야겠지.*", "book.spectrum.guidebook.draconic_twinsword.page2.text": "이 무기의 역동성은 여기서 끝이 아니다. 한 손을 비운 채로 검을 든 손을 바꾸면, 검이 두 개로 갈라지며 한 쌍의 쌍둥이 단검으로 변모한다. 날렵하고 치명적인 이 단검들 역시 투척할 수 있지만, 작동 방식은 조금 다르다. 흩날리는 민들레의 영혼이 깃들어 있어, 사악할 정도의 기동성을 자랑한다.", "book.spectrum.guidebook.draconic_twinsword.page3.text": "단검을 던진 후 언제든 나의 의지로 다시 불러들일 수 있다. 단검이 나를 앞으로 튕겨내거나, 아니면 단검에 맞은 몬스터를 내 쪽으로 끌어당기는 식이다. 단검이 어떻게 움직이고 누구를 이동시킬지를 결정하는 변수가 많으니, 손에 익을 때까지 충분히 연습해 봐야겠다.", - "book.spectrum.guidebook.draconic_twinsword.page4.text": "참고로 이 무기에는 아주 독특한 마법 부여 상호작용들이 존재한다.\n- [관성](entry://enchanting/enchantments/inertia) 마법 부여는 검이 튕겨 나올 때마다 쌍둥이 검의 위력을 증폭시키며, 개체들을 끌어당기는 발톱의 힘도 더 강해진다.\n- [향상된 치명타](entry://enchanting/enchantments/improved_critical)는 공중에 뜬 대상을 타격할 때의 위력을 증가시킨다.\n- 찌르기는 휩쓸기 공격을 강화하고 단일 대상 원거리 피해를 광역 피해로 변환해 준다.\n- 관통은 말 그대로 기대한 역할을 정확히 수행한다.", + "book.spectrum.guidebook.draconic_twinsword.page4.text": "참고로 이 무기에는 아주 독특한 마법 부여 상호작용들이 존재한다.\n- [관성](entry://enchanting/enchantments/inertia) 마법 부여는 검이 튕겨 나올 때마다 쌍둥이 검의 위력을 증폭시키며, 개체들을 끌어당기는 발톱의 힘도 더 강해진다.\n- [향상된 치명타](entry://enchanting/enchantments/improved_critical)는 공중에 뜬 대상을 타격할 때의 위력을 증가시킨다.\n- 집전은 휩쓸기 공격을 강화하고 단일 대상 원거리 피해를 광역 피해로 변환해 준다.\n- 관통은 말 그대로 기대한 역할을 정확히 수행한다.", "book.spectrum.guidebook.nectar_gloves.page0.text": "기이한 곳에서 발견한 기이한 물건이다. 이 가지색 장갑은 최고급 가죽으로 제작되었으며 독특한 하얀색 수정이 장식되어 있다.\\\n\\\n이걸 착용하니 왠지 방벽이 나를 보호해 주는 듯한 기분이 들고, 더 나아가 내 몸의 해로운 효과마저 정화해 주는 것 같다.", "book.spectrum.guidebook.nectar_gloves.page1.text": "*이 장갑은 내 머릿속에 수많은 의문을 남긴다.\\\n[#](2432ff)남동석[#]()의 기운을 띠지 않고도 방벽을 품고 있다니... 도대체 어떻게?*", "book.spectrum.guidebook.azuresque_dike_core.page0.text": "[#](2c2e8e)담청 방벽[#]()에 관한 내 필생의 역작이다! 보존 구조물들의 작동 원리는 오랜 시간 동안 나를 혼란스럽게 했지만, 마침내 그 구조물들을 복제해 내는 과정에서 엄청난 진전을 이루었다!\\\n\\\n 그... 물건...의 힘을 빌려, 나는 방벽의 힘을 극대화하고, 회복 속도를 올리며, 모든 방벽의 원천을 두 배로 증폭시키는 회로를 만들어 냈다.\\\n하지만 이 코어 자체만으로는 방어막을 생성할 수는 없다.", From 20ce16d596c0936cb27f6964cdc43c73f06d0472 Mon Sep 17 00:00:00 2001 From: 2hh8899 <2hh8899@naver.com> Date: Sun, 12 Jul 2026 07:43:17 +0900 Subject: [PATCH 071/477] Update ko_kr.json (fix magenta color's typo) --- src/main/resources/assets/spectrum/lang/ko_kr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/spectrum/lang/ko_kr.json b/src/main/resources/assets/spectrum/lang/ko_kr.json index b5bee3f833..b9e55d65a4 100644 --- a/src/main/resources/assets/spectrum/lang/ko_kr.json +++ b/src/main/resources/assets/spectrum/lang/ko_kr.json @@ -5237,7 +5237,7 @@ "ink.spectrum.light_blue.name": "하늘색", "ink.spectrum.light_gray.name": "회백색", "ink.spectrum.lime.name": "연두색", - "ink.spectrum.magenta.name": "자홀색", + "ink.spectrum.magenta.name": "자홍색", "ink.spectrum.orange.name": "주황색", "ink.spectrum.pink.name": "분홍색", "ink.spectrum.purple.name": "보라색", From fa6b88450a7f4fff5374f1b1cf4daa3480149d0e Mon Sep 17 00:00:00 2001 From: SmallYii <112681916+SmallYii@users.noreply.github.com> Date: Sun, 12 Jul 2026 13:13:55 +0800 Subject: [PATCH 072/477] Update zh_cn.json --- .../resources/assets/spectrum/lang/zh_cn.json | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main/resources/assets/spectrum/lang/zh_cn.json b/src/main/resources/assets/spectrum/lang/zh_cn.json index 1c96da83b3..07e290b573 100644 --- a/src/main/resources/assets/spectrum/lang/zh_cn.json +++ b/src/main/resources/assets/spectrum/lang/zh_cn.json @@ -3232,6 +3232,10 @@ "config.spectrum.nightfalls_blade_mining_speed": "夜幕之刃挖掘速度", "config.spectrum.nightfalls_blade_attack_damage": "夜幕之刃攻击伤害", "config.spectrum.nightfalls_blade_enchantability": "夜幕之刃附魔能力", + "config.spectrum.dragonrot_dripstone_drip_chance": "龙腐脓浆钟乳石滴落概率", + "config.spectrum.liquid_crystal_dripstone_drip_chance": "液体水晶钟乳石滴落概率", + "config.spectrum.midnight_solution_dripstone_drip_chance": "午夜溶液钟乳石滴落概率", + "config.spectrum.sludge_dripstone_drip_chance": "泥浆钟乳石滴落概率", "item.spectrum.least_black_lotus": "淡黑莲花", "item.spectrum.least_black_lotus.tooltip": "是不是洗掉色了?", @@ -3926,7 +3930,7 @@ "book.spectrum.guidebook.pastel_upgrades.enhancing.text": "所有能提供物品的节点都有两个升级环槽。右键可安装升级,潜行右键可取下。同类升级可以叠加,但通常不是线性叠加。\\\n\\\n升级效果永远作用于**源节点**。", "book.spectrum.guidebook.pastel_upgrades.transfer.name": "传输升级", "book.spectrum.guidebook.pastel_upgrades.transfer.raw_malachite.text": "略微缩短[#](449900)传输时间[#]()。\\\n\\\n*延迟有时会成为一个问题。*", - "book.spectrum.guidebook.pastel_upgrades.transfer.pure_malachite.text": "大幅缩短[#](449900)传输时间[#]()。\\\n\\\n*传输时间?听都没听过。*", + "book.spectrum.guidebook.pastel_upgrades.transfer.pure_malachite.text": "大幅缩短[#](449900)传输时间[#]()。\\\n\\\n*传输时间?听都没听过。*", "book.spectrum.guidebook.pastel_upgrades.transfer.raw_azurite.text": "+1行[#](449900)过滤槽位[#]()。\\\n[收集节点](entry://pastel_network/gather_node)获得双倍槽位。\\\n\\\n*过滤?真不熟*", "book.spectrum.guidebook.pastel_upgrades.transfer.pure_azurite.text": "+2行[#](449900)过滤槽位[#]()。\\\n[收集节点](entry://pastel_network/gather_node)获得双倍槽位。\\\n\\\n*...多点也没什么不好。*", "book.spectrum.guidebook.pastel_upgrades.transfer.raw_bloodstone.text": "增加每批传输的[#](449900)物品数量[#]()。\\\n\\\n*囤囤鼠都没我囤的多吧?*", @@ -3977,7 +3981,7 @@ "book.spectrum.guidebook.creature_manipulation.axolotls.text": "适用于所有颜色的美西螈。", "book.spectrum.guidebook.creature_manipulation.parrots.text": "适用于所有颜色的鹦鹉。", "book.spectrum.guidebook.creature_manipulation.shulkers.text": "适用于所有颜色的潜影贝。", - "book.spectrum.guidebook.creature_manipulation.page0.text": "我这套\"创造生命\"的理论至今成果好坏参半。但我渐渐有了信心,相信自己一定能*做成点什么*。\\\n\\\n凭空创造生命固然艰难,但是结合现有的知识呢?\\\n\\\n弗兰肯斯坦当初也是这种感觉吗? *这符不符合伦理?我不确定,但我非常愿意尝试。*", + "book.spectrum.guidebook.creature_manipulation.page0.text": "我这套\"创造生命\"的理论至今成果好坏参半。但我渐渐有了信心,相信自己一定能*做成点什么*。\\\n\\\n凭空创造生命固然艰难,但是结合现有的知识呢?\\\n\\\n弗兰肯斯坦当初也是这种感觉吗? *这符不符合伦理?我不确定,但我非常愿意尝试。*", "book.spectrum.guidebook.crescent_clock.page0.text": "这座由时光见证者铸就的时钟,将指引我穿梭于无尽的开端与终末之间——月相更迭。\\\n\\\n\\\n\\\n*倘若我们这些暗影曾有所冒犯,只需知晓这一点,一切便都能得到宽恕。*", "book.spectrum.guidebook.crescent_clock.page1.text": "*当这些幻象浮现之时,你不过是在此处沉睡。\\\n而这脆弱虚无的故事,也不过是一场幻梦罢了。*", @@ -4033,7 +4037,7 @@ "book.spectrum.guidebook.deep_dripstone_caves.page1.text": "从钟乳石的规模来看,这些洞穴想必创世之初便已经存在了。\\\n我很好奇这里的巨型钟乳石究竟能长到多大。我已经见过绵延数百格的了。\\\n地面上满是[#](bb00bb)水坑[#]()。", "book.spectrum.guidebook.delving_deeper_down.name": "深入探究", - "book.spectrum.guidebook.delving_deeper_down.page0.text": "我从未想过这是可能的。当我一路向下,穿透基岩深处时,一扇漆黑的传送门缓缓向我展开。它会通往何方?唯有亲自前行,才能知晓答案。\\\n\\\n*只是每当我向下望去,心头总会涌起一阵莫名的沉重...*", + "book.spectrum.guidebook.delving_deeper_down.page0.text": "我从未想过这是可能的。当我一路向下,穿透基岩深处时,一扇漆黑的传送门缓缓向我展开。它会通往何方?唯有亲自前行,才能知晓答案。\\\n\\\n*只是每当我向下望去,心头总会涌起一阵莫名的沉重...*", "book.spectrum.guidebook.delving_deeper_down.page1.title": "深域", "book.spectrum.guidebook.delving_deeper_down.page1.text": "一个万古以来从未见过一丝阳光的地方。一个永无白昼、被永恒黑暗笼罩的领域。\\\n\\\n在那深渊之下,究竟有什么在等着我去发现?", @@ -4201,6 +4205,8 @@ "book.spectrum.guidebook.foundry.page0.text": "我还记得刚来到这个世界时,我费力地从石头里敲出煤炭来熔炼矿石。但那些日子已经成为过去了——看看现在,未来如期而至啦,老滑头。\\\n\\\n当然,这是有代价的: 这种方式烧炼的矿石是没有经验的。", "book.spectrum.guidebook.foundry.page1.text": "自动熔炼挖掉的方块。用在[#](bb00bb)钓鱼竿[#]()上时,会点燃鱼钩。\\\n\\\n最大等级: 1\\\n适用于采掘工具和[#](bb00bb)光谱世界的钓鱼竿[#]()。\\\n与精准采集互斥。", + "book.spectrum.guidebook.undergrowth_manor.pyrite_projector.text": "虽说我几乎完美复刻出了这种装置,至少外观看不出差别,但我完全搞不懂该怎么启动它们。这些东西到底有什么用途...?", + "book.spectrum.guidebook.freigeist.page0.text": "当第一滴液体触碰到我的嘴唇时,它就已经让我的身体充满了无穷的力量。光是回忆起来,就让我的手再次因紧绷而*颤抖*。这感觉可不好。\\\n但在那一刻,这样强大又充满活力的力量可是我此前未曾拥有的。\\\n\\\n真的值得把这瓶东西用光吗?所谓福祸相依,如果我一旦出现意外,那么死亡的代价肯定是非常大的。", "book.spectrum.guidebook.freigeist.page1.text": "*抚慰他吧,\\\n 你那从未停滞的心雨,\\\n是雪白色悲哀的眼泪。\\\n 抚慰他吧,\\\n 那隐藏的不朽之花,\\\n在那片黎明的土地。*", @@ -4350,7 +4356,7 @@ "book.spectrum.guidebook.ideas.a_new_ore": "关于一种新矿物", "book.spectrum.guidebook.ideas.a_new_resource": "关于一种新资源", "book.spectrum.guidebook.ideas.amethyst.page0.text": "紫水晶晶洞通常能在地下找到", - "book.spectrum.guidebook.ideas.azurite.page0.text": "在基岩上方的区域里,我注意到了一束束醒目的蓝色光线。不知道是什么东西造成的。", + "book.spectrum.guidebook.ideas.azurite.page0.text": "在熔岩层周围的一些地方,我注意到了一束束醒目的蓝色光线。不知道是什么东西造成的。", "book.spectrum.guidebook.ideas.azurite.page1.text": "这些光环还伴随着轻微的嗡嗡声,似乎是由富含蓝色矿石的巨大矿床造成的! 它被埋藏在岩石中,数量稀少,但规模巨大。", "book.spectrum.guidebook.ideas.citrine.page0.text": "我在环游世界的时候,见过一些晶洞就贴在地表附近——大多数是在海岸或峡谷附近。", "book.spectrum.guidebook.ideas.clover.page0.text": "我曾经在平原看到过一些常见的植物!以前运气一直不怎么样,不知道现在会不会不一样?", @@ -5238,7 +5244,7 @@ "book.spectrum.guidebook.ring_of_pursuit.page0.text": "挖矿就是我的本命。\\\n直到现在我才想到,不仅要升级我的工具,还要升级整体挖矿效率。这枚戒指甚至会随着我的能力而一起成长,简直是个奇迹。", "book.spectrum.guidebook.ring_of_pursuit.page1.text": "可以在[拾色器](entry://ink/color_picker)中注入[品红色墨水](entry://ink/ink)提升挖掘速度。", - "book.spectrum.guidebook.rock_candy.about.text": "把[糖](item://minecraft:sugar)(正好要4份)放进[液态水晶](entry://general/liquid_crystal)里化开,再插一根[木棍](item://minecraft:stick),过一会儿木棍就会裹上香甜酥脆的**冰糖**!\\\n\\\n说不定还能加点别的材料?毕竟这可是液态*水晶*,应该能玩出更多花样...", + "book.spectrum.guidebook.rock_candy.about.text": "把[糖](item://minecraft:sugar)(正好要4份)放进[液态水晶](entry://general/liquid_crystal)里化开,再插一根[木棍](item://minecraft:stick),过一会儿木棍就会裹上香甜酥脆的**冰糖**!\\\n\\\n说不定还能加点别的材料?毕竟这可是液态*水晶*,应该能玩出更多花样...", "book.spectrum.guidebook.rock_candy.growing.text": "小提示:只吃脆脆的糖衣就行,千万*别*啃木棍!信我,我试过,巨难吃。", "book.spectrum.guidebook.rock_candy.growing.title": "冰糖结晶", "book.spectrum.guidebook.gemstone_rock_candy.name": "宝石晶糖", @@ -5358,7 +5364,7 @@ "book.spectrum.guidebook.star_candy.recipe.text": "我在想,能不能烤出效果更强、样子更炫的星糖呢。", "book.spectrum.guidebook.star_candy_variants.variants.text": "今天才发现,合着天上还藏着个糖果厂啊,愣是没人告诉我。\\\n为什么宇宙突然跟我玩稀有度这套?太不讲理了。\\\n\\\n...不过话说回来,开出好东西的时候,是真的爽。", "book.spectrum.guidebook.star_candy_variants.magnificent.text": "这就是那种超稀有的款。那种\"我去这玩意儿居然真的存在\"的款。那种\"不知道该吃还是该供起来\"的款。 伪装成零食的奇迹。\\\n\\\n*我可以吃了它*。\\\n*我也可以把它供着*。", - "book.spectrum.guidebook.star_candy_variants.sugary.text": "今天属实是手黑了,对吧?就跟抽奖直接抽到保底一样。\\\n一颗平平无奇的小星星,吃着就跟普通白糖一个味,营养价值也基本为零。\\\n\\\n*这世界里有糖尿病这说法不?帮朋友问问*", + "book.spectrum.guidebook.star_candy_variants.sugary.text": "今天属实是手黑了,对吧?就跟抽奖直接抽到保底一样。\\\n一颗平平无奇的小星星,吃着就跟普通白糖一个味,营养价值也基本为零。\\\n\\\n*这世界里有糖尿病这说法不?帮朋友问问*", "book.spectrum.guidebook.star_candy_variants.name": "稀有款", "book.spectrum.guidebook.stargazing.name": "凝望星空", @@ -5789,7 +5795,7 @@ "book.spectrum.guidebook.mod_integration.spelunkery.name": "Spelunkery", "book.spectrum.guidebook.mod_integration.spelunkery.page0.text": "我这双探洞老眼,好像看到什么在那里闪闪发光?\\\n\\\n是个没见过的新鲜玩意儿!\\\n\\\n我太爱宝贝了!", "book.spectrum.guidebook.mod_integration.spelunkery.black_materia_sluice.title": "洗去你的失误", - "book.spectrum.guidebook.mod_integration.spelunkery.black_materia_sluice.text": "失败的实验搞出了这么个... *怪东西*。闻着就不对劲,透着一股邪气,但...说不定能从里面筛出点啥?\\\n\\\n蜘蛛。全是蜘蛛,蜘蛛,还是蜘蛛,我恨死它们了,我恨!我恨!我恨...\\\n肯定还有别的办法。或许我可以用它来*过滤*别的东西?某种和它性质相近的东西...", + "book.spectrum.guidebook.mod_integration.spelunkery.black_materia_sluice.text": "失败的实验搞出了这么个... *怪东西*。闻着就不对劲,透着一股邪气,但...说不定能从里面筛出点啥?\\\n\\\n蜘蛛。全是蜘蛛,蜘蛛,还是蜘蛛,我恨死它们了,我恨!我恨!我恨...\\\n肯定还有别的办法。或许我可以用它来*过滤*别的东西?某种和它性质相近的东西...", "book.spectrum.guidebook.mod_integration.supplementaries.name": "锦致装饰", "book.spectrum.guidebook.mod_integration.supplementaries.page0.text": "锦致装饰与七彩世界的交织", "book.spectrum.guidebook.mod_integration.supplementaries.page1.text": "*至少比等待商人好多了*", @@ -6076,7 +6082,7 @@ "advancements.spectrum.build_spirit_instiller_structure.description": "建造灵魂灌注台", "advancements.spectrum.manifest_memory.title": "再度归来", "advancements.spectrum.manifest_memory.description": "创造并显现一个记忆", - "advancements.spectrum.craft_blacklisted_memory_fail.title": "再一次?", + "advancements.spectrum.craft_blacklisted_memory_fail.title": "再一次?", "advancements.spectrum.craft_blacklisted_memory_fail.description": "尝试唤醒过于强大、无法复活的生物记忆...并成功失败", "advancements.spectrum.craft_blacklisted_memory_success.title": "再一次!", "advancements.spectrum.craft_blacklisted_memory_success.description": "成功唤醒强大生物的记忆。你越来越熟练了,不是吗?", @@ -6286,7 +6292,7 @@ "advancements.spectrum.use_decay_away_on_sculk.title": "深暗净化", "advancements.spectrum.use_decay_away_on_sculk.description": "看起来幽匿方块也完全符合自我复制生物的定义", "advancements.spectrum.collect_one_cookbook.title": "他人的怀旧", - "advancements.spectrum.collect_one_cookbook.description": "这些东西得有多古老?作者肯定早已不在人世了", + "advancements.spectrum.collect_one_cookbook.description": "这些东西得有多古老?作者肯定早已不在人世了", "advancements.spectrum.collect_all_cookbooks.title": "又一曲安魂挽歌", "advancements.spectrum.collect_all_cookbooks.description": "凝视这小小的收藏,便是凝视逝去文明的鲜活过往。提醒着你,他们曾真实存在", "advancements.spectrum.eat_each_cookbook_heavy_meal.title": "深域美食家", @@ -6451,7 +6457,7 @@ "advancements.spectrum.defeat_paintlich.description": "与一位年长的名人进行一场轻松的辩论并取胜", "book.spectrum.guidebook.mysterious_locket.page4.title": "挂坠中的秘密", - "book.spectrum.guidebook.mysterious_locket.page4.text": "里面还夹着一张小纸条……它会是谁留下的呢?", + "book.spectrum.guidebook.mysterious_locket.page4.text": "里面还夹着一张小纸条……它会是谁留下的呢?", "book.spectrum.guidebook.mysterious_locket.page5.title": "无名字条", "book.spectrum.guidebook.mysterious_locket.page5.text": "现在我已经通晓德雷顿语,背面的铭文很容易就能解读:\n\n“别傻了,阿斯忒拉斯——月亮不会发光,它只是反射太阳的光芒。”" From a6fc0fbb2c6d0cee5b14f92c83a8868ff80835b5 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 12 Jul 2026 15:20:51 +0200 Subject: [PATCH 073/477] rewrite razing so it stacks with Efficiency, now takes effect at hardness >6,>4,>3 (razing 1-3); resolves #921 --- .../spectrum/registries/SpectrumEventListeners.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index bc4d66bd17..80f9378083 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -37,6 +37,7 @@ import net.minecraft.sounds.*; import net.minecraft.stats.*; import net.minecraft.tags.*; +import net.minecraft.util.*; import net.minecraft.world.*; import net.minecraft.world.damagesource.*; import net.minecraft.world.effect.*; @@ -961,7 +962,7 @@ private static void modifyBreakSpeed(PlayerEvent.BreakSpeed event) { // INEXORABLE GAMING int inexorableLevel = SpectrumEnchantmentHelper.getLevel(drm, SpectrumEnchantmentKeys.INEXORABLE, handStack); if (inexorableLevel > 0) { - float original = player.getInventory().getDestroySpeed(state); + float original = handStack.getDestroySpeed(state); event.setNewSpeed(Math.max(original, event.getNewSpeed())); return; } @@ -970,9 +971,10 @@ private static void modifyBreakSpeed(PlayerEvent.BreakSpeed event) { int razingLevel = SpectrumEnchantmentHelper.getLevel(drm, SpectrumEnchantmentKeys.RAZING, handStack); if (razingLevel > 0) { Tool tool = handStack.get(DataComponents.TOOL); - if(tool != null && tool.getMiningSpeed(state) > tool.defaultMiningSpeed()) { - float hardness = state.getBlock().defaultDestroyTime(); - event.setNewSpeed((float) Math.max(1 + hardness, Math.pow(2, 1 + razingLevel / 8F))); + if(tool != null && tool.isCorrectForDrops(state)) { + double razingMultiplier = (razingLevel + 1) * state.getBlock().defaultDestroyTime() / 16F; + razingMultiplier = Math.max(1, razingMultiplier); + event.setNewSpeed((float) (event.getOriginalSpeed() * razingMultiplier)); } } From a0f2afea9583af02deb6cc86102fe1dd0a1da963 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 12 Jul 2026 15:29:21 +0200 Subject: [PATCH 074/477] razing tweak --- .../dafuqs/spectrum/registries/SpectrumEventListeners.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index 80f9378083..0dab5bdc53 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -968,11 +968,12 @@ private static void modifyBreakSpeed(PlayerEvent.BreakSpeed event) { } // RAZING GAMING + float defaultDestroyTime = state.getBlock().defaultDestroyTime(); int razingLevel = SpectrumEnchantmentHelper.getLevel(drm, SpectrumEnchantmentKeys.RAZING, handStack); - if (razingLevel > 0) { + if (defaultDestroyTime > 0 && razingLevel > 0) { Tool tool = handStack.get(DataComponents.TOOL); if(tool != null && tool.isCorrectForDrops(state)) { - double razingMultiplier = (razingLevel + 1) * state.getBlock().defaultDestroyTime() / 16F; + double razingMultiplier = (razingLevel + 1) * defaultDestroyTime / 16F; razingMultiplier = Math.max(1, razingMultiplier); event.setNewSpeed((float) (event.getOriginalSpeed() * razingMultiplier)); } From 2023e28474e9a2942656aaf8413050d1c60db84f Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 13 Jul 2026 17:31:27 +0200 Subject: [PATCH 075/477] pastel network cleanup. Removing networks now drops active transmitted resources --- .../PastelUpgradeSignature.java | 20 +-- .../api/pastel_network/PastelUpgradeable.java | 6 - .../pastel_network/network/PastelNetwork.java | 6 - .../network/PastelTransmissionLogic.java | 8 +- .../network/ServerPastelNetwork.java | 71 ++-------- .../network/ServerPastelNetworkManager.java | 1 + .../nodes/PastelNodeBlockEntity.java | 128 ++++++++++-------- .../payloads/FluidPastelPayloadType.java | 5 +- .../payloads/InkPastelPayloadType.java | 9 +- .../payloads/ItemPastelPayload.java | 4 +- .../payloads/ItemPastelPayloadType.java | 70 ++++------ .../payloads/PastelPayloadType.java | 4 +- .../SpectrumPastelUpgradeSignatures.java | 2 +- 13 files changed, 135 insertions(+), 199 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java b/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java index e26a0a755d..2ce53f3fd5 100644 --- a/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java +++ b/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java @@ -16,13 +16,13 @@ public final class PastelUpgradeSignature { public final String name; public final ResourceLocation outerRing, innerRing; public final int stack, speed, slotRows; - public final float stackMult, speedMult; - public final boolean light, priority, triggerTransfer, lamp, sensor; + public final float stackMult, speedMult, transferRateMult; + public final boolean light, triggerTransfer, lamp, sensor; public final Category category; public final RedstoneStateModifier preProcessor; public final RedstoneStateModifier postProcessor; - private PastelUpgradeSignature(Item upgradeItem, String name, ResourceLocation outerRing, ResourceLocation innerRing, int stack, int speed, int slotRows, float stackMult, float speedMult, boolean light, boolean priority, boolean triggerTransfer, boolean lamp, boolean sensor, Category category, RedstoneStateModifier preProcessor, RedstoneStateModifier postProcessor) { + private PastelUpgradeSignature(Item upgradeItem, String name, ResourceLocation outerRing, ResourceLocation innerRing, int stack, int speed, int slotRows, float stackMult, float speedMult, float transferRateMult, boolean light, boolean triggerTransfer, boolean lamp, boolean sensor, Category category, RedstoneStateModifier preProcessor, RedstoneStateModifier postProcessor) { this.upgradeItem = upgradeItem; this.name = name; this.outerRing = outerRing; @@ -32,8 +32,8 @@ private PastelUpgradeSignature(Item upgradeItem, String name, ResourceLocation o this.slotRows = slotRows; this.stackMult = stackMult; this.speedMult = speedMult; + this.transferRateMult = transferRateMult; this.light = light; - this.priority = priority; this.triggerTransfer = triggerTransfer; this.lamp = lamp; this.category = category; @@ -60,8 +60,8 @@ public static final class Builder { private final String namespace; private String name, outerRing, innerRing; private int stackMod, speedMod, slotRowMod; - private float stackMult = 1, speedMult = 1; - private boolean light, priority, triggerTransfer, lamp, sensor; + private float stackMult = 1, speedMult = 1, transferRateMult = 1; + private boolean light, triggerTransfer, lamp, sensor; private RedstoneStateModifier preProcessor = RedstoneStateModifier.PASS; private RedstoneStateModifier postProcessor = RedstoneStateModifier.PASS; @@ -129,8 +129,8 @@ public Builder light(boolean light) { return this; } - public Builder priority(boolean priority) { - this.priority = priority; + public Builder transferRateMultiplier(float transferRateMultiplier) { + this.transferRateMult = transferRateMultiplier; return this; } @@ -172,8 +172,8 @@ public PastelUpgradeSignature build() { slotRowMod, stackMult, speedMult, + transferRateMult, light, - priority, triggerTransfer, lamp, sensor, @@ -196,7 +196,7 @@ public PastelUpgradeSignature buildRedstone() { 0, 0, 0, - false, + 1, false, triggerTransfer, lamp, diff --git a/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeable.java b/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeable.java index 240c366c11..3cc074411b 100644 --- a/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeable.java +++ b/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeable.java @@ -28,10 +28,6 @@ default void apply(PastelUpgradeSignature upgrade, List } applySlotUpgrade(upgrade); - - if (upgrade.priority) { - upgradePriority(); - } } void applyCompounding(PastelUpgradeSignature upgrade); @@ -40,8 +36,6 @@ default void apply(PastelUpgradeSignature upgrade, List void applySlotUpgrade(PastelUpgradeSignature upgrade); - void upgradePriority(); - void markLit(); void markLamp(); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelNetwork.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelNetwork.java index c2a03d20fc..9ca2785b37 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelNetwork.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelNetwork.java @@ -17,12 +17,6 @@ public class PastelNetwork { protected final UUID uuid; protected final int color; - public enum NodePriority { - GENERIC, - MODERATE, - HIGH - } - public PastelNetwork(W level, UUID uuid, int color) { this.level = level; this.uuid = uuid; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index aaef0422eb..a906e7036d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -27,6 +27,8 @@ public enum TransferMode { public static final int DEFAULT_MAX_TRANSFER_AMOUNT = 1; public static final int DEFAULT_TRANSFER_TICKS_PER_NODE = 30; + public static final int DEFAULT_TRANSFER_RATE = 20; + private final ServerPastelNetwork network; private DijkstraShortestPath dijkstra; @@ -73,14 +75,14 @@ public void invalidateCache() { return path; } - public void tick(PastelNetwork.NodePriority priority) { + public void tick() { for(Map.Entry, PastelPayloadType> payloadType : SpectrumRegistries.PASTEL_PAYLOAD_TYPE.entrySet()) { - payloadType.getValue().tick(this, priority); + payloadType.getValue().tick(this); } } public Set getLoadedNodes(PastelNodeType type) { - return this.network.getLoadedNodes(type, PastelNetwork.NodePriority.GENERIC); + return this.network.getLoadedNodes(type); } public Set getLoadedNodes(DeferredHolder payloadType) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java index 94800d8167..26daa4ea80 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java @@ -19,7 +19,6 @@ import java.util.*; import java.util.concurrent.*; -import java.util.stream.*; public class ServerPastelNetwork extends PastelNetwork { @@ -31,8 +30,6 @@ public class ServerPastelNetwork extends PastelNetwork { ).apply(i, ServerPastelNetwork::new)); protected final Map> loadedNodes = new ConcurrentHashMap<>(); - protected final Set priorityNodes = new HashSet<>(); - protected final Set highPriorityNodes = new HashSet<>(); // new transfers are checked for every 10 ticks private final TickLooper transferLooper; @@ -70,22 +67,9 @@ public void initializeNode(PastelNodeBlockEntity node) { var type = this.loadedNodes.get(node.getNodeType()); if (!type.contains(node)) { type.add(node); - addPriorityNode(node); } } - private void addPriorityNode(PastelNodeBlockEntity node) { - switch (node.getPriority()) { - case MODERATE -> priorityNodes.add(node); - case HIGH -> highPriorityNodes.add(node); - } - } - - public void updateNodePriority(PastelNodeBlockEntity node, NodePriority oldPriority) { - removePriorityNode(node, oldPriority); - addPriorityNode(node); - } - @Override public String getNodeDebugText() { return super.getNodeDebugText() + @@ -102,6 +86,8 @@ public String toString() { for (PastelNodeType type : PastelNodeType.values()) { builder.append("-").append(getLoadedNodes(type).size()); } + builder.append(": ").append(transmissions.size()).append(" active transmission(s)"); + return builder.toString(); } @@ -120,29 +106,8 @@ public String toString() { return null; } - private void removePriorityNode(PastelNodeBlockEntity node, NodePriority priority) { - switch (priority) { - case MODERATE -> priorityNodes.remove(node); - case HIGH -> highPriorityNodes.remove(node); - } - } - public Set getLoadedNodes(PastelNodeType type) { - return getLoadedNodes(type, NodePriority.GENERIC); - } - - public Set getLoadedNodes(PastelNodeType type, NodePriority priority) { - var nodeType = this.loadedNodes.get(type); - - if (priority == NodePriority.MODERATE) { - return nodeType.stream().filter(priorityNodes::contains).collect(Collectors.toSet()); - } - - if (priority == NodePriority.HIGH) { - return nodeType.stream().filter(highPriorityNodes::contains).collect(Collectors.toSet()); - } - - return nodeType; + return this.loadedNodes.get(type); } protected void addNode(PastelNodeBlockEntity node) { @@ -151,12 +116,11 @@ protected void addNode(PastelNodeBlockEntity node) { loadedNodes.get(node.getNodeType()).add(node); } else { - if (addLoadedNode(node)) + if (addLoadedNode(node)) { return; - + } this.graph.addVertex(node.getBlockPos()); } - addPriorityNode(node); node.setNetworkUUID(this.getUUID()); } @@ -303,7 +267,6 @@ protected void removeNode(PastelNodeBlockEntity node, NodeRemovalReason reason) graph.removeVertex(node.getBlockPos()); this.loadedNodes.get(node.getNodeType()).remove(node); - removePriorityNode(node, node.getPriority()); if (reason.checksForNetworkSplit) { checkForNetworkSplit(node.getBlockPos()); @@ -348,22 +311,13 @@ public void markDirty(BlockPos syncPos) { protected void tick() { this.transmissions.tick(); - var priority = NodePriority.GENERIC; - - if (transferLooper.getTick() % 5 == 0) { - priority = NodePriority.MODERATE; - } else if (transferLooper.getTick() % 2 == 0) { - priority = NodePriority.HIGH; - } - + this.transferLooper.tick(); var cap = transferLooper.reachedCap(); - if (cap || priority != NodePriority.GENERIC) { - if (cap) { - this.transferLooper.reset(); - } + if (cap) { + this.transferLooper.reset(); try { - this.transmissionLogic.tick(priority); + this.transmissionLogic.tick(); } catch (Exception e) { // hmmmmmm. Block getting unloaded / new one placed while logic is running? } @@ -378,7 +332,6 @@ public Map getTransmissions() { private void tickNodeEffects() { List nodeSync = new ArrayList<>(); - for (Map.Entry transPair : transmissions) { PastelTransmission transmission = transPair.getKey(); int remainingTravelTime = transPair.getValue(); @@ -412,4 +365,10 @@ public void addTransmission(PastelTransmission transmission, int travelTime) { this.transmissions.put(transmission, travelTime); } + public void abortAllTransmissions() { + this.transmissions.map().keySet() + .forEach(pastelTransmission -> pastelTransmission.getPayload() + .arriveAtDestination(level, pastelTransmission.getStartPos(), null)); + } + } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java index 2988199a62..1416938b14 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java @@ -144,6 +144,7 @@ public void removeNetwork(UUID uuid) { } } if (foundNetwork != null) { + foundNetwork.abortAllTransmissions(); this.networks.remove(foundNetwork); PastelNetworkRemovedPayload.send(foundNetwork); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java index a87138c1e2..300ca75879 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java @@ -17,6 +17,7 @@ import net.minecraft.nbt.*; import net.minecraft.network.*; import net.minecraft.network.chat.*; +import net.minecraft.network.chat.contents.*; import net.minecraft.network.protocol.*; import net.minecraft.network.protocol.game.*; import net.minecraft.resources.*; @@ -53,17 +54,16 @@ public class PastelNodeBlockEntity extends BlockEntity implements FilterConfigur protected Optional outerRing, innerRing, redstoneRing; protected Optional color = Optional.empty(); - // TODO: move these to ServerPastelNetwork? protected long lastTransferTick = 0; protected final long cachedRedstonePowerTick = 0; protected boolean cachedUnpowered = true; - protected PastelNetwork.NodePriority priority = PastelNetwork.NodePriority.GENERIC; - protected long itemCountUnderway = 0; + protected Map, Long> activeTransfers = new Object2LongArrayMap<>(); // upgrade impl stuff protected boolean lit, triggerTransfer, triggered, waiting, lamp, sensor, updated; protected int transferCount = PastelTransmissionLogic.DEFAULT_MAX_TRANSFER_AMOUNT; protected int transferTime = PastelTransmissionLogic.DEFAULT_TRANSFER_TICKS_PER_NODE; + protected int transferRate = PastelTransmissionLogic.DEFAULT_TRANSFER_RATE; protected int filterSlotRows = DEFAULT_FILTER_SLOT_ROWS; protected boolean isInitialized = false; @@ -91,7 +91,7 @@ public static void tick(@NotNull Level world, BlockPos pos, BlockState state, Pa node.isInitialized = true; } - if (node.lamp && state.getValue(BlockStateProperties.LIT) != node.canTransfer()) { + if (node.lamp && state.getValue(BlockStateProperties.LIT) != node.isEnabled()) { world.setBlockAndUpdate(pos, state.setValue(BlockStateProperties.LIT, node.cachedUnpowered)); } @@ -112,7 +112,7 @@ public static void tick(@NotNull Level world, BlockPos pos, BlockState state, Pa if (node.networkUUID.isEmpty()) { node.changeConnectionState(ConnectionState.DISCONNECTED); node.interpLength = 17; - } else if (!node.canTransfer()) { + } else if (!node.isEnabled()) { node.changeConnectionState(ConnectionState.INACTIVE); node.interpLength = 21; } else if (node.spinTicks > 0) { @@ -156,10 +156,6 @@ public Optional getRedstoneRing() { return redstoneRing; } - public PastelNetwork.NodePriority getPriority() { - return priority; - } - // outer goes first, then inner, then redstone public boolean tryInteractRings(ItemStack item, PastelNodeType type) { var upgrade = SpectrumPastelUpgradeSignatures.of(item); @@ -215,8 +211,6 @@ public void updateUpgrades() { lit = false; lamp = false; sensor = false; - var oldPriority = priority; - priority = PastelNetwork.NodePriority.GENERIC; //First one processed can't compound because it has nothing to compound on outerRing.ifPresent(r -> apply(r, Collections.emptyList())); @@ -232,10 +226,8 @@ public void updateUpgrades() { lit = false; } - if (level != null) { - networkUUID.ifPresent(uuid -> ServerPastelNetworkManager.get((ServerLevel) level).getNetwork(uuid).ifPresent(n -> n.updateNodePriority(this, oldPriority))); - if (getBlockState().getValue(BlockStateProperties.LIT) != lit) - level.setBlockAndUpdate(worldPosition, getBlockState().setValue(BlockStateProperties.LIT, lit)); + if (level != null && getBlockState().getValue(BlockStateProperties.LIT) != lit) { + level.setBlockAndUpdate(worldPosition, getBlockState().setValue(BlockStateProperties.LIT, lit)); } if (filterSlotRows < oldFilterSlotCount) { @@ -265,13 +257,18 @@ public int getTransferTime() { return transferTime; } + public int getTransferRate() { + return transferRate; + } + public float getRedstoneAlphaMult() { return redstoneRing.isPresent() ? 0.5F : 0.25F; } - public boolean canTransfer() { - var result = redstoneRing.map(r -> r.preProcessor - .apply(new PastelUpgradeSignature.RedstoneContext(this, level, worldPosition, cachedUnpowered))).orElse(InteractionResult.PASS); + public boolean isEnabled() { + InteractionResult result = redstoneRing.map(r -> r.preProcessor + .apply(new PastelUpgradeSignature.RedstoneContext(this, level, worldPosition, cachedUnpowered))) + .orElse(InteractionResult.PASS); if (result == InteractionResult.SUCCESS) return true; @@ -285,7 +282,7 @@ public boolean canTransfer() { } boolean notPowered = redstoneRing.map(r -> { - var post = r.postProcessor.apply(new PastelUpgradeSignature.RedstoneContext(this, level, worldPosition, cachedUnpowered)); + InteractionResult post = r.postProcessor.apply(new PastelUpgradeSignature.RedstoneContext(this, level, worldPosition, cachedUnpowered)); if (post == InteractionResult.SUCCESS) return true; @@ -296,12 +293,18 @@ public boolean canTransfer() { return cachedUnpowered; }).orElse(cachedUnpowered); - var canTransfer = this.getLevel().getGameTime() > lastTransferTick; if (triggerTransfer) { - return triggered && canTransfer; + return triggered; } + return notPowered; + } + + public boolean cooldownExceededTo(PastelNodeBlockEntity otherNode) { + long thisNextTransferTime = this.lastTransferTick + this.getTransferRate(); + long otherNextTransferTime = otherNode.lastTransferTick + otherNode.getTransferRate(); + long time = this.getLevel().getGameTime(); - return canTransfer && notPowered; + return time >= thisNextTransferTime && time >= otherNextTransferTime; } public void markTransferred(boolean setTransferCooldown) { @@ -320,17 +323,29 @@ public void markTransferred(boolean setTransferCooldown) { protected void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { super.loadAdditional(nbt, registryLookup); - this.nodeId = nbt.contains("NodeID") ? nbt.getUUID("NodeID") : UUID.randomUUID(); - this.networkUUID = nbt.contains("NetworkUUID") ? Optional.of(nbt.getUUID("NetworkUUID")) : Optional.empty(); - this.triggered = nbt.contains("Triggered") && nbt.getBoolean("Triggered"); - this.waiting = nbt.contains("Waiting") && nbt.getBoolean("Waiting"); - this.creationStamp = nbt.contains("creationStamp") ? nbt.getLong("creationStamp") : 0; - this.lastTransferTick = nbt.contains("LastTransferTick", Tag.TAG_LONG) ? nbt.getLong("LastTransferTick") : 0; - this.itemCountUnderway = nbt.contains("ItemCountUnderway", Tag.TAG_LONG) ? nbt.getLong("ItemCountUnderway") : 0; - this.color = nbt.contains("ColorId", Tag.TAG_INT) ? Optional.of(DyeColor.byId(nbt.getInt("ColorId"))) : Optional.empty(); - this.outerRing = nbt.contains("OuterRing") ? Optional.ofNullable(SpectrumRegistries.PASTEL_UPGRADE.get(ResourceLocation.tryParse(nbt.getString("OuterRing")))) : Optional.empty(); - this.innerRing = nbt.contains("InnerRing") ? Optional.ofNullable(SpectrumRegistries.PASTEL_UPGRADE.get(ResourceLocation.tryParse(nbt.getString("InnerRing")))) : Optional.empty(); - this.redstoneRing = nbt.contains("RedstoneRing") ? Optional.ofNullable(SpectrumRegistries.PASTEL_UPGRADE.get(ResourceLocation.tryParse(nbt.getString("RedstoneRing")))) : Optional.empty(); + this.nodeId = nbt.contains("node_id") ? nbt.getUUID("node_id") : UUID.randomUUID(); + this.networkUUID = nbt.contains("network_uuid") ? Optional.of(nbt.getUUID("network_uuid")) : Optional.empty(); + this.triggered = nbt.contains("triggered") && nbt.getBoolean("triggered"); + this.waiting = nbt.contains("waiting") && nbt.getBoolean("waiting"); + this.creationStamp = nbt.contains("creation_timestamp") ? nbt.getLong("creation_timestamp") : 0; + this.lastTransferTick = nbt.contains("last_transfer_tick", Tag.TAG_LONG) ? nbt.getLong("last_transfer_tick") : 0; + this.activeTransfers = new Object2LongArrayMap<>(); + if(nbt.contains("active_transfers", Tag.TAG_COMPOUND)) { + HolderGetter reg = registryLookup.asGetterLookup().lookupOrThrow(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE); + CompoundTag activeTransfersTag = nbt.getCompound("active_transfers"); + for(String key : activeTransfersTag.getAllKeys()) { + ResourceKey resourceKey = ResourceKey.create(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, ResourceLocation.parse(key)); + Optional> type = reg.get(resourceKey); + if(type.isPresent()) { + Long value = activeTransfersTag.getLong(key); + activeTransfers.put(type.get().key(), value); + } + } + } + this.color = nbt.contains("color_id", Tag.TAG_INT) ? Optional.of(DyeColor.byId(nbt.getInt("color_id"))) : Optional.empty(); + this.outerRing = nbt.contains("outer_ring") ? Optional.ofNullable(SpectrumRegistries.PASTEL_UPGRADE.get(ResourceLocation.tryParse(nbt.getString("outer_ring")))) : Optional.empty(); + this.innerRing = nbt.contains("inner_ring") ? Optional.ofNullable(SpectrumRegistries.PASTEL_UPGRADE.get(ResourceLocation.tryParse(nbt.getString("inner_ring")))) : Optional.empty(); + this.redstoneRing = nbt.contains("redstone_ring") ? Optional.ofNullable(SpectrumRegistries.PASTEL_UPGRADE.get(ResourceLocation.tryParse(nbt.getString("redstone_ring")))) : Optional.empty(); if (this.getNodeType().usesFilters()) { FilterConfigurable.readFilterNbt(nbt, this.filterItems); @@ -342,25 +357,30 @@ protected void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLoo protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { super.saveAdditional(nbt, registryLookup); if (creationStamp != -1) { - nbt.putLong("creationStamp", creationStamp); + nbt.putLong("creation_timestamp", creationStamp); } if (this.networkUUID.isPresent()) { - nbt.putUUID("NetworkUUID", this.networkUUID.get()); + nbt.putUUID("network_uuid", this.networkUUID.get()); } if (this.color.isPresent()) { - nbt.putInt("ColorId", this.color.get().getId()); + nbt.putInt("color_id", this.color.get().getId()); } - nbt.putUUID("NodeID", this.nodeId); - nbt.putBoolean("Triggered", this.triggered); - nbt.putBoolean("Waiting", this.waiting); - nbt.putLong("LastTransferTick", this.lastTransferTick); - nbt.putLong("ItemCountUnderway", this.itemCountUnderway); + nbt.putUUID("node_id", this.nodeId); + nbt.putBoolean("triggered", this.triggered); + nbt.putBoolean("waiting", this.waiting); + nbt.putLong("last_transfer_tick", this.lastTransferTick); + + CompoundTag transferTag = new CompoundTag(); + for(Map.Entry, Long> transfer : this.activeTransfers.entrySet()) { + transferTag.putLong(registryLookup.asGetterLookup().lookupOrThrow(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE).get(transfer.getKey()).get().key().location().toString(), transfer.getValue()); + } + nbt.put("active_transfers", transferTag); if (this.getNodeType().usesFilters()) { FilterConfigurable.writeFilterNbt(nbt, this.filterItems); } - outerRing.ifPresent(r -> nbt.putString("OuterRing", SpectrumPastelUpgradeSignatures.toString(r))); - innerRing.ifPresent(r -> nbt.putString("InnerRing", SpectrumPastelUpgradeSignatures.toString(r))); - redstoneRing.ifPresent(r -> nbt.putString("RedstoneRing", SpectrumPastelUpgradeSignatures.toString(r))); + outerRing.ifPresent(r -> nbt.putString("outer_ring", SpectrumPastelUpgradeSignatures.toString(r))); + innerRing.ifPresent(r -> nbt.putString("inner_ring", SpectrumPastelUpgradeSignatures.toString(r))); + redstoneRing.ifPresent(r -> nbt.putString("redstone_ring", SpectrumPastelUpgradeSignatures.toString(r))); } @Nullable @@ -420,13 +440,12 @@ public void setNetworkUUID(@Nullable UUID uuid) { } } - public long getItemCountUnderway() { - return this.itemCountUnderway; + public long getActiveTransfers(ResourceKey payloadType) { + return this.activeTransfers.getOrDefault(payloadType, 0L); } - public void addItemCountUnderway(long count) { - this.itemCountUnderway += count; - this.itemCountUnderway = Math.max(0, this.itemCountUnderway); + public void addTransfer(ResourceKey payloadType, long amount) { + this.activeTransfers.put(payloadType, Math.max(0, this.activeTransfers.getOrDefault(payloadType, 0L) + amount)); this.setChanged(); } @@ -705,21 +724,14 @@ public void applySlotUpgrade(PastelUpgradeSignature upgrade) { public void applySimple(PastelUpgradeSignature upgrade) { transferCount += upgrade.stack; transferTime += upgrade.speed; + transferRate *= upgrade.transferRateMult; } @Override public void applyCompounding(PastelUpgradeSignature upgrade) { transferCount = Math.round(transferCount * upgrade.stackMult); transferTime = Math.round(transferTime * upgrade.speedMult); - } - - @Override - public void upgradePriority() { - if (priority == PastelNetwork.NodePriority.GENERIC) { - priority = PastelNetwork.NodePriority.MODERATE; - } else { - priority = PastelNetwork.NodePriority.HIGH; - } + transferRate = Math.round(transferRate * upgrade.transferRateMult); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java index cf27b3e5df..3ed697256c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java @@ -3,7 +3,6 @@ import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; -import de.dafuqs.spectrum.networking.s2c_payloads.*; import net.minecraft.core.*; import net.minecraft.world.level.block.state.*; import net.neoforged.neoforge.capabilities.*; @@ -13,8 +12,6 @@ import org.jgrapht.*; import org.jgrapht.graph.*; -import java.util.*; - public class FluidPastelPayloadType extends PastelPayloadType { public FluidPastelPayloadType() { @@ -39,7 +36,7 @@ public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEnti } for (PastelNodeBlockEntity destinationNode : logic.getLoadedNodes(type)) { - if (!destinationNode.canTransfer()) { + if (!destinationNode.isEnabled() || !sourceNode.cooldownExceededTo(destinationNode)) { continue; } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java index 2a9f2bbc72..5cf1df297a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java @@ -3,12 +3,9 @@ import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.ink.*; import de.dafuqs.spectrum.api.ink.capability.*; -import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; -import de.dafuqs.spectrum.networking.s2c_payloads.*; import net.minecraft.core.*; -import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import org.jetbrains.annotations.*; @@ -30,12 +27,16 @@ public InkPastelPayloadType() { } @Override - public void tick(PastelTransmissionLogic logic, PastelNetwork.NodePriority priority) { + public void tick(PastelTransmissionLogic logic) { Set nodes = logic.getLoadedNodes(SpectrumPastelPayloadTypes.INK); if (nodes.size() < 2) return; List targets = new ArrayList<>(nodes.size()); for (PastelNodeBlockEntity node : nodes) { + if (!node.isEnabled()) { + continue; + } + InkCapability inkCapability = getConnectedInkStorage(node); if (inkCapability != null) { targets.add(inkCapability); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java index d2cf4f6c42..bc3565a138 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java @@ -50,7 +50,7 @@ public void arriveAtDestination(Level level, BlockPos destination, @Nullable Pas if (destinationStorage != null) { inserted = count; inserted -= ItemHandlerHelper.insertItemStacked(destinationStorage, itemStack.copyWithCount(count), false).getCount(); - destinationNode.addItemCountUnderway(-count); + destinationNode.addTransfer(SpectrumPastelPayloadTypes.ITEM.getKey(), -count); } } @@ -59,7 +59,7 @@ public void arriveAtDestination(Level level, BlockPos destination, @Nullable Pas long diff = amount - inserted; InWorldInteractionHelper.scatter(level, destination.getX() + 0.5, destination.getY() + 0.5, destination.getZ() + 0.5, itemStack, diff); if (destinationNode != null) { - destinationNode.addItemCountUnderway(-diff); + destinationNode.addTransfer(SpectrumPastelPayloadTypes.ITEM.getKey(), -diff); } } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java index 5418bc8693..79e7149382 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java @@ -4,10 +4,7 @@ import de.dafuqs.spectrum.blocks.pastel_network.network.PastelTransmission; import de.dafuqs.spectrum.blocks.pastel_network.network.PastelTransmissionLogic; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; -import de.dafuqs.spectrum.helpers.InventoryHelper; -import de.dafuqs.spectrum.networking.s2c_payloads.PastelNodeStatusUpdatePayload; import net.minecraft.core.*; -import net.minecraft.util.Tuple; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.*; import net.neoforged.neoforge.capabilities.*; @@ -17,9 +14,6 @@ import org.jgrapht.GraphPath; import org.jgrapht.graph.DefaultEdge; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import java.util.function.Predicate; public class ItemPastelPayloadType extends PastelPayloadType { @@ -45,7 +39,7 @@ public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEnti } for (PastelNodeBlockEntity destinationNode : logic.getLoadedNodes(type)) { - if (!destinationNode.canTransfer()) { + if (!destinationNode.isEnabled() || !sourceNode.cooldownExceededTo(destinationNode)) { continue; } @@ -60,66 +54,48 @@ public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEnti } private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, IItemHandler sourceStorage, PastelNodeBlockEntity destinationNode, IItemHandler destinationStorage, PastelTransmissionLogic.TransferMode transferMode) { - // check how much room is in the target inventory - long totalAvailableStorage = -destinationNode.getItemCountUnderway(); - for (int d = 0; d < destinationStorage.getSlots(); d++) { - ItemStack stack = destinationStorage.getStackInSlot(d); - - if (stack.isEmpty()) { - totalAvailableStorage += destinationStorage.getSlotLimit(d); - } else { - totalAvailableStorage += Math.min(destinationStorage.getSlotLimit(d), stack.getMaxStackSize()) - stack.getCount(); - } - } - - if (totalAvailableStorage <= 0) - return false; - + long underwayCount = destinationNode.getActiveTransfers(SpectrumPastelPayloadTypes.ITEM.getKey()); Predicate filter = sourceNode.getTransferFilterTo(destinationNode); - Map proposals = new HashMap<>(); - for (int s = 0; s < sourceStorage.getSlots(); s++) { - ItemStack stack = sourceStorage.extractItem(s, PastelTransmissionLogic.DEFAULT_MAX_TRANSFER_AMOUNT, true); + int transferLimit = Math.max(sourceNode.getMaxTransferredAmount(), destinationNode.getMaxTransferredAmount()); + for (int slotId = 0; slotId < sourceStorage.getSlots(); slotId++) { + ItemStack stack = sourceStorage.extractItem(slotId, transferLimit, true); + // is the stack valid? if (stack.isEmpty()) continue; if (!filter.test(stack)) continue; - proposals.put(stack, proposals.getOrDefault(stack, 0L) + stack.getCount()); - } - - for (ItemStack stack : proposals.keySet()) { - long proposedAmount = Math.min(Math.min(proposals.get(stack), sourceNode.getMaxTransferredAmount()), totalAvailableStorage); - if (proposedAmount == 0) - continue; - - ItemStack proposedStack = stack.copyWithCount((int) proposedAmount); - int simulatedAmount = (int) (proposedAmount - ItemHandlerHelper.insertItemStacked(destinationStorage, proposedStack, true).getCount()); - if(simulatedAmount == 0) { + // how many items can be transferred from source to destination? + long proposedAmount = stack.getCount(); + ItemStack proposedStack = stack.copyWithCount((int) (proposedAmount + underwayCount)); + int unableToInsertAmount = ItemHandlerHelper.insertItemStacked(destinationStorage, proposedStack, true).getCount(); + int amountToSend = stack.getCount() - unableToInsertAmount; + if(amountToSend < 1) { continue; } - Tuple> matchingStacks = InventoryHelper.getStackCountInInventory(proposedStack, sourceStorage, simulatedAmount); - - if (matchingStacks.getA() == 0) - continue; + // Find a valid path from source to target + // there always should be one - but better safe than sorry GraphPath graphPath = logic.getPath(sourceNode, destinationNode); if (graphPath == null) { return false; } - PastelPayload payload = new ItemPastelPayload(proposedStack.copyWithCount(simulatedAmount)); - PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), payload, sourceNode.getTransferTime()); + // Remove from source inventory int extracted = 0; - for (int i = 0; i < sourceStorage.getSlots(); i++) { - if (ItemStack.isSameItemSameComponents(proposedStack, sourceStorage.getStackInSlot(i))) - extracted += sourceStorage.extractItem(i, simulatedAmount - extracted, false).getCount(); - if (extracted == simulatedAmount) + for (int sourceSlot = 0; sourceSlot < sourceStorage.getSlots(); sourceSlot++) { + if (ItemStack.isSameItemSameComponents(stack, sourceStorage.getStackInSlot(sourceSlot))) + extracted += sourceStorage.extractItem(sourceSlot, amountToSend - extracted, false).getCount(); + if (extracted == amountToSend) break; } + // Send the items + PastelPayload payload = new ItemPastelPayload(stack.copyWithCount(extracted)); + PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), payload, sourceNode.getTransferTime()); logic.addTransmission(sourceNode, destinationNode, transferMode, transmission); - destinationNode.addItemCountUnderway(simulatedAmount); + destinationNode.addTransfer(SpectrumPastelPayloadTypes.ITEM.getKey(), extracted); return true; } return false; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java index 914b6ffa56..6312d2c744 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java @@ -17,7 +17,7 @@ public PastelPayloadType(ResourceLocation id, MapCodec this.codec = codec; } - public void tick(PastelTransmissionLogic logic, PastelNetwork.NodePriority priority) { + public void tick(PastelTransmissionLogic logic) { transferBetween(logic, PastelNodeType.SENDER, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PUSH_PULL); transferBetween(logic, PastelNodeType.PROVIDER, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PULL); transferBetween(logic, PastelNodeType.STORAGE, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PULL); @@ -26,7 +26,7 @@ public void tick(PastelTransmissionLogic logic, PastelNetwork.NodePriority prior protected void transferBetween(PastelTransmissionLogic logic, PastelNodeType sourceType, PastelNodeType destinationType, PastelTransmissionLogic.TransferMode transferMode) { for (PastelNodeBlockEntity sourceNode : logic.getLoadedNodes(sourceType)) { - if (!sourceNode.canTransfer()) { + if (!sourceNode.isEnabled()) { continue; } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java index fe796333bd..54b816c6b3 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java @@ -46,7 +46,7 @@ public static void register(IEventBus eventBus) { ); DeferredHolder RATE = register( "rate", () -> PastelUpgradeSignature.builder(SpectrumItems.RESONANCE_SHARD.get(), NON_COMPOUNDING, SpectrumCommon.MOD_ID) - .named("rate").priority(true).build() + .named("rate").transferRateMultiplier(0.5F).build() ); DeferredHolder LIGHT = register( "light", () -> PastelUpgradeSignature.builder(SpectrumItems.SHIMMERSTONE_GEM.get(), NON_COMPOUNDING, SpectrumCommon.MOD_ID) From 1c820d918c067f95acde302eac83e0e142695924 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 13 Jul 2026 18:03:31 +0200 Subject: [PATCH 076/477] fluid transfer fin~ --- .../network/PastelTransmissionLogic.java | 26 ++++++---- .../nodes/PastelNodeBlockEntity.java | 5 +- .../payloads/FluidPastelPayload.java | 1 + .../payloads/FluidPastelPayloadType.java | 52 ++++++++++--------- .../payloads/InkPastelPayloadType.java | 8 ++- .../payloads/ItemPastelPayload.java | 4 +- .../payloads/ItemPastelPayloadType.java | 12 +++-- .../payloads/PastelPayloadType.java | 5 +- .../resources/assets/spectrum/lang/en_us.json | 8 +-- 9 files changed, 73 insertions(+), 48 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index a906e7036d..e0d1f4e6be 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -4,6 +4,7 @@ import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.registries.*; +import it.unimi.dsi.fastutil.objects.*; import net.minecraft.core.*; import net.minecraft.resources.*; import net.neoforged.neoforge.registries.*; @@ -81,20 +82,25 @@ public void tick() { } } - public Set getLoadedNodes(PastelNodeType type) { + private Set getLoadedNodes(@Nullable PastelNodeType type) { + if(type == null) { + Set set = new ObjectArraySet<>(); + for(Set e : this.network.loadedNodes.values()) { + set.addAll(e); + } + return set; + } return this.network.getLoadedNodes(type); } - public Set getLoadedNodes(DeferredHolder payloadType) { + public Set getLoadedNodes(@NotNull DeferredHolder payloadType, @Nullable PastelNodeType nodeType) { Set nodes = new HashSet<>(); - for(PastelNodeType type : PastelNodeType.values()) { - var loaded = this.getLoadedNodes(type); - for(PastelNodeBlockEntity entity : loaded) { - for(Supplier typeSupplier : entity.getSupportedPayloads()) { - if(typeSupplier.get().equals(payloadType.get())) { - nodes.add(entity); - break; - } + var loaded = this.getLoadedNodes(nodeType); + for(PastelNodeBlockEntity entity : loaded) { + for(Supplier typeSupplier : entity.getSupportedPayloads()) { + if(typeSupplier.get().equals(payloadType.get())) { + nodes.add(entity); + break; } } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java index 300ca75879..5b0ba4169a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java @@ -17,7 +17,6 @@ import net.minecraft.nbt.*; import net.minecraft.network.*; import net.minecraft.network.chat.*; -import net.minecraft.network.chat.contents.*; import net.minecraft.network.protocol.*; import net.minecraft.network.protocol.game.*; import net.minecraft.resources.*; @@ -440,11 +439,11 @@ public void setNetworkUUID(@Nullable UUID uuid) { } } - public long getActiveTransfers(ResourceKey payloadType) { + public long getUnderway(ResourceKey payloadType) { return this.activeTransfers.getOrDefault(payloadType, 0L); } - public void addTransfer(ResourceKey payloadType, long amount) { + public void addUnderway(ResourceKey payloadType, long amount) { this.activeTransfers.put(payloadType, Math.max(0, this.activeTransfers.getOrDefault(payloadType, 0L) + amount)); this.setChanged(); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java index 5fb7ffb96f..1b7599ea02 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java @@ -48,6 +48,7 @@ public void arriveAtDestination(Level level, BlockPos destination, @Nullable Pas @Nullable IFluidHandler destinationHandler = FluidPastelPayloadType.getConnectedFluidStorage(destinationNode); if (destinationHandler != null) { destinationHandler.fill(fluidStack, IFluidHandler.FluidAction.EXECUTE); + destinationNode.addUnderway(SpectrumPastelPayloadTypes.FLUID.getKey(), -fluidStack.getAmount()); } } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java index 3ed697256c..fea2693787 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java @@ -8,6 +8,7 @@ import net.neoforged.neoforge.capabilities.*; import net.neoforged.neoforge.fluids.*; import net.neoforged.neoforge.fluids.capability.*; +import net.neoforged.neoforge.registries.*; import org.jetbrains.annotations.*; import org.jgrapht.*; import org.jgrapht.graph.*; @@ -27,6 +28,10 @@ public FluidPastelPayloadType() { return pastelNodeBlockEntity.getLevel().getCapability(Capabilities.FluidHandler.BLOCK, pastelNodeBlockEntity.getBlockPos().relative(direction.getOpposite()), direction); } + @Override + public DeferredHolder getPayloadType() { + return SpectrumPastelPayloadTypes.FLUID; + } @Override public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode) { @@ -35,7 +40,7 @@ public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEnti return; } - for (PastelNodeBlockEntity destinationNode : logic.getLoadedNodes(type)) { + for (PastelNodeBlockEntity destinationNode : logic.getLoadedNodes(getPayloadType(), type)) { if (!destinationNode.isEnabled() || !sourceNode.cooldownExceededTo(destinationNode)) { continue; } @@ -51,36 +56,35 @@ public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEnti } private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, IFluidHandler sourceHandler, PastelNodeBlockEntity destinationNode, IFluidHandler destinationHandler, PastelTransmissionLogic.TransferMode transferMode) { + long underwayCount = destinationNode.getUnderway(getPayloadType().getKey()); for(int sourceTankId = 0; sourceTankId < sourceHandler.getTanks(); sourceTankId++) { FluidStack sourceFluid = sourceHandler.getFluidInTank(sourceTankId); if (sourceFluid.isEmpty()) { continue; } - for(int destinationTankId = 0; destinationTankId < destinationHandler.getTanks(); destinationTankId++) { - FluidStack destinationFluid = destinationHandler.getFluidInTank(destinationTankId); - if (!destinationFluid.isEmpty() && !destinationFluid.is(sourceFluid.getFluid())) { - continue; - } - - GraphPath graphPath = logic.getPath(sourceNode, destinationNode); - if (graphPath == null) { - continue; - } - - int roomAtDestination = destinationHandler.getTankCapacity(destinationTankId) - destinationFluid.getAmount(); - int transmittedAmount = Math.min(Math.min(sourceFluid.getAmount(), roomAtDestination), sourceNode.getMaxTransferredAmount() * 20); - FluidStack drainedStack = sourceHandler.drain(sourceFluid.copyWithAmount(transmittedAmount), IFluidHandler.FluidAction.EXECUTE); - if(drainedStack.isEmpty()) { - continue; - } - - PastelPayload payload = new FluidPastelPayload(drainedStack); - PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), payload, sourceNode.getTransferTime()); - logic.addTransmission(sourceNode, destinationNode, transferMode, transmission); - - return true; + int transferLimit = Math.max(sourceNode.getMaxTransferredAmount(), destinationNode.getMaxTransferredAmount()) * 50; + FluidStack proposedStack = new FluidStack(sourceFluid.getFluid(), transferLimit + (int) underwayCount); + int fluidSpace = destinationHandler.fill(proposedStack, IFluidHandler.FluidAction.SIMULATE); + int amountToSend = Math.min(transferLimit, fluidSpace); + if(amountToSend < 1) { + continue; + } + + // Find a valid path from source to target + // there always should be one - but better safe than sorry + GraphPath graphPath = logic.getPath(sourceNode, destinationNode); + if (graphPath == null) { + return false; } + + FluidStack drainedAmount = sourceHandler.drain(sourceFluid.copyWithAmount(amountToSend), IFluidHandler.FluidAction.EXECUTE); + PastelPayload payload = new FluidPastelPayload(drainedAmount); + PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), payload, sourceNode.getTransferTime()); + logic.addTransmission(sourceNode, destinationNode, transferMode, transmission); + destinationNode.addUnderway(getPayloadType().getKey(), drainedAmount.getAmount()); + + return true; } return false; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java index 5cf1df297a..cbab1dec7b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java @@ -7,6 +7,7 @@ import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import net.minecraft.core.*; import net.minecraft.world.level.block.state.*; +import net.neoforged.neoforge.registries.*; import org.jetbrains.annotations.*; import java.util.*; @@ -17,6 +18,11 @@ public InkPastelPayloadType() { super(SpectrumCommon.locate("ink"), SpectrumPastelPayloads.INK.get()); } + @Override + public DeferredHolder getPayloadType() { + return SpectrumPastelPayloadTypes.INK; + } + public static @Nullable InkCapability getConnectedInkStorage(PastelNodeBlockEntity pastelNodeBlockEntity) { BlockState state = pastelNodeBlockEntity.getBlockState(); if (!(state.getBlock() instanceof PastelNodeBlock)) { @@ -28,7 +34,7 @@ public InkPastelPayloadType() { @Override public void tick(PastelTransmissionLogic logic) { - Set nodes = logic.getLoadedNodes(SpectrumPastelPayloadTypes.INK); + Set nodes = logic.getLoadedNodes(getPayloadType(), null); if (nodes.size() < 2) return; List targets = new ArrayList<>(nodes.size()); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java index bc3565a138..93500193bb 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java @@ -50,7 +50,7 @@ public void arriveAtDestination(Level level, BlockPos destination, @Nullable Pas if (destinationStorage != null) { inserted = count; inserted -= ItemHandlerHelper.insertItemStacked(destinationStorage, itemStack.copyWithCount(count), false).getCount(); - destinationNode.addTransfer(SpectrumPastelPayloadTypes.ITEM.getKey(), -count); + destinationNode.addUnderway(SpectrumPastelPayloadTypes.ITEM.getKey(), -count); } } @@ -59,7 +59,7 @@ public void arriveAtDestination(Level level, BlockPos destination, @Nullable Pas long diff = amount - inserted; InWorldInteractionHelper.scatter(level, destination.getX() + 0.5, destination.getY() + 0.5, destination.getZ() + 0.5, itemStack, diff); if (destinationNode != null) { - destinationNode.addTransfer(SpectrumPastelPayloadTypes.ITEM.getKey(), -diff); + destinationNode.addUnderway(SpectrumPastelPayloadTypes.ITEM.getKey(), -diff); } } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java index 79e7149382..c26cc3b547 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java @@ -10,6 +10,7 @@ import net.neoforged.neoforge.capabilities.*; import net.neoforged.neoforge.items.IItemHandler; import net.neoforged.neoforge.items.ItemHandlerHelper; +import net.neoforged.neoforge.registries.*; import org.jetbrains.annotations.*; import org.jgrapht.GraphPath; import org.jgrapht.graph.DefaultEdge; @@ -22,6 +23,11 @@ public ItemPastelPayloadType() { super(SpectrumCommon.locate("item"), SpectrumPastelPayloads.ITEM.get()); } + @Override + public DeferredHolder getPayloadType() { + return SpectrumPastelPayloadTypes.ITEM; + } + public static @Nullable IItemHandler getConnectedItemStorage(PastelNodeBlockEntity pastelNodeBlockEntity) { BlockState state = pastelNodeBlockEntity.getBlockState(); if (!(state.getBlock() instanceof PastelNodeBlock)) { @@ -38,7 +44,7 @@ public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEnti return; } - for (PastelNodeBlockEntity destinationNode : logic.getLoadedNodes(type)) { + for (PastelNodeBlockEntity destinationNode : logic.getLoadedNodes(getPayloadType(), type)) { if (!destinationNode.isEnabled() || !sourceNode.cooldownExceededTo(destinationNode)) { continue; } @@ -54,7 +60,7 @@ public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEnti } private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, IItemHandler sourceStorage, PastelNodeBlockEntity destinationNode, IItemHandler destinationStorage, PastelTransmissionLogic.TransferMode transferMode) { - long underwayCount = destinationNode.getActiveTransfers(SpectrumPastelPayloadTypes.ITEM.getKey()); + long underwayCount = destinationNode.getUnderway(getPayloadType().getKey()); Predicate filter = sourceNode.getTransferFilterTo(destinationNode); int transferLimit = Math.max(sourceNode.getMaxTransferredAmount(), destinationNode.getMaxTransferredAmount()); for (int slotId = 0; slotId < sourceStorage.getSlots(); slotId++) { @@ -95,7 +101,7 @@ private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEn PastelPayload payload = new ItemPastelPayload(stack.copyWithCount(extracted)); PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), payload, sourceNode.getTransferTime()); logic.addTransmission(sourceNode, destinationNode, transferMode, transmission); - destinationNode.addTransfer(SpectrumPastelPayloadTypes.ITEM.getKey(), extracted); + destinationNode.addUnderway(getPayloadType().getKey(), extracted); return true; } return false; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java index 6312d2c744..c81e959ca0 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java @@ -4,6 +4,7 @@ import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import net.minecraft.resources.*; +import net.neoforged.neoforge.registries.*; import java.util.function.*; @@ -17,6 +18,8 @@ public PastelPayloadType(ResourceLocation id, MapCodec this.codec = codec; } + public abstract DeferredHolder getPayloadType(); + public void tick(PastelTransmissionLogic logic) { transferBetween(logic, PastelNodeType.SENDER, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PUSH_PULL); transferBetween(logic, PastelNodeType.PROVIDER, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PULL); @@ -25,7 +28,7 @@ public void tick(PastelTransmissionLogic logic) { } protected void transferBetween(PastelTransmissionLogic logic, PastelNodeType sourceType, PastelNodeType destinationType, PastelTransmissionLogic.TransferMode transferMode) { - for (PastelNodeBlockEntity sourceNode : logic.getLoadedNodes(sourceType)) { + for (PastelNodeBlockEntity sourceNode : logic.getLoadedNodes(getPayloadType(), sourceType)) { if (!sourceNode.isEnabled()) { continue; } diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 08efcce524..819d214590 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -1269,7 +1269,7 @@ "block.spectrum.fusion_shrine": "Fusion Shrine", "block.spectrum.fusion_shrine_basalt": "Fusion Shrine", "block.spectrum.fusion_shrine_calcite": "Fusion Shrine", - "block.spectrum.gather_node": "§8Pastel Gather Node", + "block.spectrum.gather_node": "§8Pastel Item Gather Node", "block.spectrum.gather_node.tooltip": "Gathers items from Sender, Provider and Storage Nodes", "block.spectrum.gemstone_shooting_star": "Gemstone Shooting Star", "block.spectrum.ghast_head": "Ghast Head", @@ -1732,7 +1732,7 @@ "block.spectrum.prismarine_cluster": "Prismarine Cluster", "block.spectrum.pristine_shooting_star": "Pristine Shooting Star", "block.spectrum.projectile_idol.tooltip": "§7Shoots a %s", - "block.spectrum.provider_node": "§dPastel Provider Node", + "block.spectrum.provider_node": "§dPastel Item Provider Node", "block.spectrum.provider_node.tooltip": "Supplies Gather Nodes with items", "block.spectrum.pufferfish_head": "Pufferfish Head", "block.spectrum.pufferfish_idol": "Inconspicuous Idol", @@ -1847,7 +1847,7 @@ "block.spectrum.sawblade_grass": "Sawblade Grass", "block.spectrum.sawblade_holly_bush": "Sawblade Holly Bush", "block.spectrum.semi_permeable_glass": "Semi-Permeable Glass", - "block.spectrum.sender_node": "§ePastel Sender Node", + "block.spectrum.sender_node": "§ePastel Item Sender Node", "block.spectrum.sender_node.tooltip": "Sends items to Gather and Storage Nodes", "block.spectrum.shale_clay": "Shale Clay", "block.spectrum.shale_clay_brick_slab": "Shale Clay Brick Slab", @@ -1962,7 +1962,7 @@ "block.spectrum.squid_idol": "Clumsy Idol", "block.spectrum.stardust_block": "Block of Stardust", "block.spectrum.stone_shimmerstone_light": "Stone Shimmerstone Light", - "block.spectrum.storage_node": "§bPastel Storage Node", + "block.spectrum.storage_node": "§bPastel Item Storage Node", "block.spectrum.storage_node.tooltip": "Serves as storage for Sender and Gather Nodes", "block.spectrum.stratine_floatblock": "Stratine Floatblock", "block.spectrum.stratine_ore": "Stratine Ore", From b48bed76c842a1601df0d9b834b837b03a94a957 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 13 Jul 2026 20:30:27 +0200 Subject: [PATCH 077/477] ink transfer #2 --- .../spectrum/api/ink/InkTransferHelper.java | 120 ++++++++++-------- .../network/PastelTransmissionLogic.java | 6 +- .../network/ServerPastelNetwork.java | 10 +- .../payloads/InkPastelPayloadType.java | 5 + .../payloads/PastelPayloadType.java | 4 + 5 files changed, 86 insertions(+), 59 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java b/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java index ea89fed25f..d755bfecab 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java @@ -51,71 +51,87 @@ public static void equalizeInk(List targets) { } private static void equalizeInk(List targets, InkColor color) { - long total = 0; + final double PRESSURE_FACTOR = 0.02; - // collect targets that accept this color - List accepting = new ArrayList<>(targets.size()); - for (InkCapability s : targets) { - InkStorage storage = s.getStorage(); + List storages = new ArrayList<>(); + for (InkCapability cap : targets) { + InkStorage storage = cap.getStorage(); if (storage.accepts(color)) { - accepting.add(storage); - total += storage.getEnergy(color); + storages.add(storage); } } - if (accepting.isEmpty() || total == 0) return; - - long idealTarget = total / accepting.size(); - - // drain targets above target value - long pooled = 0; - for (InkStorage s : accepting) { - long current = s.getEnergy(color); - long delta = idealTarget - current; - long step = delta / 32; - if (step == 0 && delta != 0) { - step = delta > 0 ? 1 : -1; - } - - long smoothedTarget = current + step; - - if (current > smoothedTarget) { - long excess = current - smoothedTarget; - pooled += s.drainEnergy(color, excess); - } + if (storages.isEmpty()) { + return; } - if (pooled <= 0) return; + // Compute average + long total = 0; + for (InkStorage s : storages) { + total += s.getEnergy(color); + } + double avg = (double) total / storages.size(); - // refill targets below target - for (InkStorage s : accepting) { + for (InkStorage s : storages) { long current = s.getEnergy(color); - long delta = idealTarget - current; - long step = delta / 32; - if (step == 0 && delta != 0) { - step = delta > 0 ? 1 : -1; - } - long smoothedTarget = current + step; + double diff = avg - current; - if (current < smoothedTarget && pooled > 0) { - long needed = smoothedTarget - current; - long added = needed - s.addEnergy(color, needed); - pooled -= added; + if (diff > 0) { // Needs ink + long remainingNeed = (long) Math.ceil(diff * PRESSURE_FACTOR); + + for (InkStorage other : storages) { + if (other == s) continue; + + long available = other.getEnergy(color); + if (available <= 0) continue; + + long room = s.getRoom(color); + if (room <= 0) break; + + long toTransfer = Math.min(Math.min(available, remainingNeed), room); + + if (toTransfer > 0) { + long drained = other.drainEnergy(color, toTransfer); + long leftover = s.addEnergy(color, drained); + + if (leftover != 0) { + other.addEnergy(color, leftover); + } + + remainingNeed -= drained; + if (remainingNeed <= 0) break; + } + } + + } else if (diff < 0) { // Has excess + long remainingExcess = (long) Math.ceil(-diff * PRESSURE_FACTOR); + + for (InkStorage other : storages) { + if (other == s) continue; + + long room = other.getRoom(color); + if (room <= 0) continue; + + long toTransfer = Math.min(room, remainingExcess); + + if (toTransfer > 0) { + long drained = s.drainEnergy(color, toTransfer); + long leftover = other.addEnergy(color, drained); + + if (leftover != 0) { + s.addEnergy(color, leftover); + } + + remainingExcess -= drained; + if (remainingExcess <= 0) break; + } + } } } - // If leftover pooled energy exists (due to capacity limits), - // redistribute with pressure flow - if (pooled > 0) { - for (InkStorage s : accepting) { - long room = s.getRoom(color); - if (room > 0) { - long toAdd = Math.min(pooled, room); - long added = -s.addEnergy(color, toAdd); - pooled -= added; - } - if (pooled <= 0) break; - } + for (InkCapability cap : targets) { + cap.markDirty(); } } + } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index e0d1f4e6be..8f828d21a5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -76,9 +76,11 @@ public void invalidateCache() { return path; } - public void tick() { + public void tick(boolean longTick) { for(Map.Entry, PastelPayloadType> payloadType : SpectrumRegistries.PASTEL_PAYLOAD_TYPE.entrySet()) { - payloadType.getValue().tick(this); + if(longTick || payloadType.getValue().runsEveryTick()) { + payloadType.getValue().tick(this); + } } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java index 26daa4ea80..d1fe158451 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java @@ -316,11 +316,11 @@ protected void tick() { var cap = transferLooper.reachedCap(); if (cap) { this.transferLooper.reset(); - try { - this.transmissionLogic.tick(); - } catch (Exception e) { - // hmmmmmm. Block getting unloaded / new one placed while logic is running? - } + } + try { + this.transmissionLogic.tick(cap); + } catch (Exception e) { + // hmmmmmm. Block getting unloaded / new one placed while logic is running? } tickNodeEffects(); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java index cbab1dec7b..e719e5a8b1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java @@ -23,6 +23,11 @@ public InkPastelPayloadType() { return SpectrumPastelPayloadTypes.INK; } + @Override + public boolean runsEveryTick() { + return true; + } + public static @Nullable InkCapability getConnectedInkStorage(PastelNodeBlockEntity pastelNodeBlockEntity) { BlockState state = pastelNodeBlockEntity.getBlockState(); if (!(state.getBlock() instanceof PastelNodeBlock)) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java index c81e959ca0..2fed28e4ed 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java @@ -20,6 +20,10 @@ public PastelPayloadType(ResourceLocation id, MapCodec public abstract DeferredHolder getPayloadType(); + public boolean runsEveryTick() { + return false; + } + public void tick(PastelTransmissionLogic logic) { transferBetween(logic, PastelNodeType.SENDER, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PUSH_PULL); transferBetween(logic, PastelNodeType.PROVIDER, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PULL); From 0c79c2039b88cbac00edfe370a991f8524fa6653 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 17 Jul 2026 15:39:36 +0200 Subject: [PATCH 078/477] fix kimchi recipe description in guidebook --- src/main/resources/assets/spectrum/lang/en_us.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 356baea4bc..80edd133c7 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -3968,7 +3968,7 @@ "book.spectrum.guidebook.titration_barrel.le_fishe_au_chocolat.text": "*It's certainly something.*", "book.spectrum.guidebook.titration_barrel.page0.text": "The idea of fermenting [food](entry://cuisine/titration_barrel@kimchi) and [drinks](entry://cuisine/infused_beverages) in [Colored Wood](entry://general/colored_trees@colored_wood) was not far to seek.\\\nOver time, the properties of the wood affect the contents. The results are sometimes more delicious, sometimes less delicious (though the latter could be due to my cooking skills), but always interesting.\\\n\\\nThe barrel holds up to a stack of items and one bucket of liquid.", "book.spectrum.guidebook.titration_barrel.page1.text": "*Sometimes it feels like that when I blink the world has ceased to exist? Each time the barrel fermentation process seems to have progressed.*", - "book.spectrum.guidebook.titration_barrel.page2.text": "Fermentation is not just for drinks! Made from 2 different vegetables, Kimchi is a hearty dish, best served as a side.", + "book.spectrum.guidebook.titration_barrel.page2.text": "Fermentation is not just for drinks! Made from three different vegetables, Kimchi is a hearty dish, best served as a side.", "book.spectrum.guidebook.titration_barrel.page3.text": "Takes a little time, but more efficient than just throwing the ingredients together.", "book.spectrum.guidebook.titration_barrel.page4.text": "Slightly fermented, it still retains the properties of [Milk](item://minecraft:milk_bucket). Eating it will remove any status effects currently active.", "book.spectrum.guidebook.titration_barrel.page5.text": "A great snack. Biting off a piece is quick and even makes me feel reasonably full.\\\nPleasantly sweet and fruity.", From 5e4d181bd102bd4ea9c6f474595376433ec759f0 Mon Sep 17 00:00:00 2001 From: Vihri Date: Sat, 18 Jul 2026 19:51:45 +0200 Subject: [PATCH 079/477] Adds noxcap stripping. --- .../cutting/chestnut_noxcap_stem.json | 37 +++++++++++++++++++ .../cutting/ebony_noxcap_stem.json | 37 +++++++++++++++++++ .../cutting/ivory_noxcap_stem.json | 37 +++++++++++++++++++ .../cutting/slate_noxcap_stem.json | 37 +++++++++++++++++++ 4 files changed, 148 insertions(+) create mode 100644 src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/chestnut_noxcap_stem.json create mode 100644 src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/ebony_noxcap_stem.json create mode 100644 src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/ivory_noxcap_stem.json create mode 100644 src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/slate_noxcap_stem.json diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/chestnut_noxcap_stem.json b/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/chestnut_noxcap_stem.json new file mode 100644 index 0000000000..9a9c8c7f59 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/chestnut_noxcap_stem.json @@ -0,0 +1,37 @@ +{ + "type": "farmersdelight:cutting", + "ingredients": [ + { + "item": "spectrum:chestnut_noxcap_stem" + } + ], + "result": [ + { + "item": { + "count": 1, + "id": "spectrum:stripped_chestnut_noxcap_stem" + } + }, + { + "item": { + "count": 1, + "id": "spectrum:myceylon" + } + } + ], + "tool": [ + { + "type": "farmersdelight:item_ability", + "action": "axe_strip" + }, + { + "tag": "minecraft:axes" + } + ], + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "farmersdelight" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/ebony_noxcap_stem.json b/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/ebony_noxcap_stem.json new file mode 100644 index 0000000000..a78d05308d --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/ebony_noxcap_stem.json @@ -0,0 +1,37 @@ +{ + "type": "farmersdelight:cutting", + "ingredients": [ + { + "item": "spectrum:ebony_noxcap_stem" + } + ], + "result": [ + { + "item": { + "count": 1, + "id": "spectrum:stripped_ebony_noxcap_stem" + } + }, + { + "item": { + "count": 1, + "id": "spectrum:myceylon" + } + } + ], + "tool": [ + { + "type": "farmersdelight:item_ability", + "action": "axe_strip" + }, + { + "tag": "minecraft:axes" + } + ], + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "farmersdelight" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/ivory_noxcap_stem.json b/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/ivory_noxcap_stem.json new file mode 100644 index 0000000000..b66b270c5a --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/ivory_noxcap_stem.json @@ -0,0 +1,37 @@ +{ + "type": "farmersdelight:cutting", + "ingredients": [ + { + "item": "spectrum:ivory_noxcap_stem" + } + ], + "result": [ + { + "item": { + "count": 1, + "id": "spectrum:stripped_ivory_noxcap_stem" + } + }, + { + "item": { + "count": 1, + "id": "spectrum:myceylon" + } + } + ], + "tool": [ + { + "type": "farmersdelight:item_ability", + "action": "axe_strip" + }, + { + "tag": "minecraft:axes" + } + ], + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "farmersdelight" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/slate_noxcap_stem.json b/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/slate_noxcap_stem.json new file mode 100644 index 0000000000..26443e4044 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/slate_noxcap_stem.json @@ -0,0 +1,37 @@ +{ + "type": "farmersdelight:cutting", + "ingredients": [ + { + "item": "spectrum:slate_noxcap_stem" + } + ], + "result": [ + { + "item": { + "count": 1, + "id": "spectrum:stripped_slate_noxcap_stem" + } + }, + { + "item": { + "count": 1, + "id": "spectrum:myceylon" + } + } + ], + "tool": [ + { + "type": "farmersdelight:item_ability", + "action": "axe_strip" + }, + { + "tag": "minecraft:axes" + } + ], + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "farmersdelight" + } + ] +} \ No newline at end of file From 5b2be667045e204fdc864f0195e6929a34841897 Mon Sep 17 00:00:00 2001 From: Vihri Date: Sat, 18 Jul 2026 19:52:00 +0200 Subject: [PATCH 080/477] Fixes gemstone cutting not accepting multitools --- .../farmersdelight/cutting/citrine_block.json | 13 +++++++++---- .../farmersdelight/cutting/moonstone_block.json | 13 +++++++++---- .../farmersdelight/cutting/onyx_block.json | 13 +++++++++---- .../farmersdelight/cutting/topaz_block.json | 13 +++++++++---- 4 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/citrine_block.json b/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/citrine_block.json index 2cd231cc04..f26c9a094d 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/citrine_block.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/citrine_block.json @@ -13,10 +13,15 @@ } } ], - "tool": { - "type": "farmersdelight:item_ability", - "action": "pickaxe_dig" - }, + "tool": [ + { + "type": "farmersdelight:item_ability", + "action": "pickaxe:dig" + }, + { + "tag": "minecraft:pickaxes" + } + ], "neoforge:conditions": [ { "type": "neoforge:mod_loaded", diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/moonstone_block.json b/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/moonstone_block.json index 069382e147..22ee8b1055 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/moonstone_block.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/moonstone_block.json @@ -13,10 +13,15 @@ } } ], - "tool": { - "type": "farmersdelight:item_ability", - "action": "pickaxe_dig" - }, + "tool": [ + { + "type": "farmersdelight:item_ability", + "action": "pickaxe:dig" + }, + { + "tag": "minecraft:pickaxes" + } + ], "neoforge:conditions": [ { "type": "neoforge:mod_loaded", diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/onyx_block.json b/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/onyx_block.json index aeca4ab025..c34fad5a3a 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/onyx_block.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/onyx_block.json @@ -13,10 +13,15 @@ } } ], - "tool": { - "type": "farmersdelight:item_ability", - "action": "pickaxe_dig" - }, + "tool": [ + { + "type": "farmersdelight:item_ability", + "action": "pickaxe:dig" + }, + { + "tag": "minecraft:pickaxes" + } + ], "neoforge:conditions": [ { "type": "neoforge:mod_loaded", diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/topaz_block.json b/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/topaz_block.json index 81ac43a1bb..75e0f786aa 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/topaz_block.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/cutting/topaz_block.json @@ -13,10 +13,15 @@ } } ], - "tool": { - "type": "farmersdelight:item_ability", - "action": "pickaxe_dig" - }, + "tool": [ + { + "type": "farmersdelight:item_ability", + "action": "pickaxe:dig" + }, + { + "tag": "minecraft:pickaxes" + } + ], "neoforge:conditions": [ { "type": "neoforge:mod_loaded", From 44fe3ceae1644ed067a74a31f5682fce06fffcf5 Mon Sep 17 00:00:00 2001 From: SmallYii <112681916+SmallYii@users.noreply.github.com> Date: Sun, 19 Jul 2026 11:25:51 +0800 Subject: [PATCH 081/477] Update zh_cn.json --- src/main/resources/assets/spectrum/lang/zh_cn.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/spectrum/lang/zh_cn.json b/src/main/resources/assets/spectrum/lang/zh_cn.json index 07e290b573..f6e95dcca0 100644 --- a/src/main/resources/assets/spectrum/lang/zh_cn.json +++ b/src/main/resources/assets/spectrum/lang/zh_cn.json @@ -5414,7 +5414,7 @@ "book.spectrum.guidebook.titration_barrel.page0.text": "用[彩色木材](entry://general/colored_trees@colored_wood)来发酵[食物](entry://cuisine/titration_barrel@kimchi)和[饮品](entry://cuisine/infused_beverages),这个想法并不难想到。\\\n随着时间的推移,木材的特性会渗入其中。结果就是有时更美味,有时像黑暗料理(虽然也可能是我厨艺问题),但结果总是很有趣。\\\n\\\n桶内最多可容纳一组物品和一桶液体。", "book.spectrum.guidebook.titration_barrel.page1.text": "*有时候我眨个眼,世界都像静止了一样? 每次眨眼,木桶的发酵进度好像都在推进。*", - "book.spectrum.guidebook.titration_barrel.page2.text": "发酵可不只是用来做饮品! 泡菜由两种不同的蔬菜制成,是一道丰盛的配菜。", + "book.spectrum.guidebook.titration_barrel.page2.text": "发酵可不只是用来做饮品! 泡菜由三种不同的蔬菜制成,是一道丰盛的配菜。", "book.spectrum.guidebook.titration_barrel.page3.text": "需要一点时间,但比直接把原料丢在一起更高效。", "book.spectrum.guidebook.titration_barrel.page4.text": "经过轻微发酵,仍然保留[牛奶](item://minecraft:milk_bucket)的特性。食用后会祛除当前所有状态效果。", "book.spectrum.guidebook.titration_barrel.page5.text": "很棒的零食。咬下一小块很快就吃完了,甚至饱腹感很强。\\\n香甜可口,果香浓郁。", From 45f372cf41f74b159b9295b097a9cf3095fb6d69 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 27 Jul 2026 19:40:58 +0200 Subject: [PATCH 082/477] fix #930: Potion amplifier tooltip roman numerals are off by 1 --- .../resources/assets/spectrum/lang/en_us.json | 49 +++++++++---------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 80edd133c7..241fcb1e71 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -5965,31 +5965,30 @@ "subtitles.block.amethyst_block.chime": "Gemstone chimes", "______vanilla_additions": "Additions:", - "potion.potency.6": "VI", - "potion.potency.7": "VII", - "potion.potency.8": "VIII", - "potion.potency.9": "IX", - "potion.potency.10": "X", - "potion.potency.11": "XI", - "potion.potency.12": "XII", - "potion.potency.13": "XIII", - "potion.potency.14": "XIV", - "potion.potency.15": "XV", - "potion.potency.16": "XVI", - "potion.potency.17": "XVII", - "potion.potency.18": "XVIII", - "potion.potency.19": "XIX", - "potion.potency.20": "XX", - "potion.potency.21": "XXI", - "potion.potency.22": "XXII", - "potion.potency.23": "XXIII", - "potion.potency.24": "XXIV", - "potion.potency.25": "XXV", - "potion.potency.26": "XXVI", - "potion.potency.27": "XXVII", - "potion.potency.28": "XXVIII", - "potion.potency.29": "XXIX", - "potion.potency.30": "XXX", + "potion.potency.6": "VII", + "potion.potency.7": "VIII", + "potion.potency.8": "IX", + "potion.potency.9": "X", + "potion.potency.10": "XI", + "potion.potency.11": "XII", + "potion.potency.12": "XIII", + "potion.potency.13": "XIV", + "potion.potency.14": "XV", + "potion.potency.15": "XVI", + "potion.potency.16": "XVII", + "potion.potency.17": "XVIII", + "potion.potency.18": "XIX", + "potion.potency.19": "XX", + "potion.potency.20": "XXI", + "potion.potency.21": "XXII", + "potion.potency.22": "XXIII", + "potion.potency.23": "XXIV", + "potion.potency.24": "XXV", + "potion.potency.25": "XXVI", + "potion.potency.26": "XXVII", + "potion.potency.27": "XXVIII", + "potion.potency.28": "XXIX", + "potion.potency.29": "XXX", "______sign_text_used_in_structures": "", "signtext.spectrum.stall_to_let.1": "STALL TO LET", From 4704b337dc8f7cbb370550c5701a160f1ae692a9 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Thu, 30 Jul 2026 18:48:37 +0200 Subject: [PATCH 083/477] rework enchantment upgrade recipe internals --- .../de/dafuqs/spectrum/SpectrumCommon.java | 1 - .../spectrum/api/recipe/IngredientStack.java | 8 ++ .../plugins/EnchantmentUpgradeCategory.java | 32 ++--- .../plugins/EnchantmentUpgradeDisplay.java | 51 +++---- .../REI/widgets/IndexedEntryWidget.java | 10 -- .../compat/REI/widgets/OffsetEntryWidget.java | 43 ++++++ .../EnchantmentUpgradeEmiRecipeGated.java | 98 +++++-------- .../BookEnchanterUpgradingPageRenderer.java | 33 ++--- .../helpers/SpectrumEnchantmentHelper.java | 8 ++ .../dafuqs/spectrum/recipe/RecipeScaling.java | 102 -------------- .../enchanter/EnchantmentUpgradeRecipe.java | 131 +++++++++--------- .../registries/SpectrumRegistries.java | 2 - .../registries/SpectrumRegistryKeys.java | 1 - .../minecraft/bane_of_arthropods.json | 32 ++++- 14 files changed, 232 insertions(+), 320 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/compat/REI/widgets/OffsetEntryWidget.java delete mode 100644 src/main/java/de/dafuqs/spectrum/recipe/RecipeScaling.java diff --git a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java index 20dc5447b8..1b0fe517f5 100644 --- a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java +++ b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java @@ -140,7 +140,6 @@ public SpectrumCommon(ModContainer container, IEventBus modBus) { // Recipes logInfo("Registering Recipe Types..."); - SpectrumRecipeScalings.init(); SpectrumFusionShrineWorldEffects.register(modBus); SpectrumRecipeTypes.register(modBus); SpectrumRecipeSerializers.register(modBus); diff --git a/src/main/java/de/dafuqs/spectrum/api/recipe/IngredientStack.java b/src/main/java/de/dafuqs/spectrum/api/recipe/IngredientStack.java index 38ca3a1ade..0f6e7ca717 100644 --- a/src/main/java/de/dafuqs/spectrum/api/recipe/IngredientStack.java +++ b/src/main/java/de/dafuqs/spectrum/api/recipe/IngredientStack.java @@ -76,6 +76,14 @@ public static IngredientStack of(Ingredient ingredient) { return new IngredientStack(ingredient); } + public static IngredientStack of(ItemStack stack) { + return new IngredientStack(Ingredient.of(stack)); + } + + public static IngredientStack of(Ingredient ingredient, int count) { + return new IngredientStack(ingredient, DataComponentPredicate.EMPTY, DataComponentPatch.EMPTY, count); + } + public static IngredientStack ofItems(Item item) { return new IngredientStack(Ingredient.of(item)); } diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchantmentUpgradeCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchantmentUpgradeCategory.java index 52bd4db3da..468012da69 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchantmentUpgradeCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchantmentUpgradeCategory.java @@ -43,42 +43,40 @@ public Component getDescriptionText(EnchantmentUpgradeDisplay display) { @Override public void setupWidgets(Point startPoint, Rectangle bounds, List widgets, EnchantmentUpgradeDisplay display) { - boolean overUnlocked = AdvancementHelper.hasAdvancement(Minecraft.getInstance().player, SpectrumAdvancements.OVERENCHANTING); + boolean overchantingUnlocked = AdvancementHelper.hasAdvancement(Minecraft.getInstance().player, SpectrumAdvancements.OVERENCHANTING); List inputs = display.getInputEntries(); // enchanter structure background destinationX destinationY sourceX, sourceY, width, height widgets.add(Widgets.createTexturedWidget(BACKGROUND_TEXTURE, startPoint.x - 8 + 12, startPoint.y - 7 + 21, 0, 0, 54, 54)); // Overchanting Star - if (overUnlocked && display.recipeMaxLevel > display.enchantMaxLevel) + if (overchantingUnlocked && display.recipeMaxLevel > display.enchantMaxLevel) widgets.add(Widgets.withTooltip( Widgets.withBounds(Widgets.createTexturedWidget(BACKGROUND_TEXTURE, startPoint.x - 10, startPoint.y + 2, 64, 0, 16, 16), new Rectangle(startPoint.x - 10, startPoint.y + 2, 16, 16)), Component.translatable(EnchanterBlockEntity.OVERCHANTING_TOOLTIP).withStyle(s -> s.withColor(OVERCHANT_COLOR)))); - var maxIndex = (overUnlocked ? display.recipeMaxLevel : display.enchantMaxLevel) - 1; + int maxIndex = (overchantingUnlocked ? display.recipeMaxLevel : display.enchantMaxLevel) - 1; widgets.add(Widgets.createButton(new Rectangle(startPoint.x - 8 + 84, startPoint.y + 20, 8, 8), Component.literal("-")) .onClick(b -> display.index = Math.clamp(display.index - 1, 0, maxIndex))); // decrement widgets.add(Widgets.createButton(new Rectangle(startPoint.x - 8 + 94, startPoint.y + 20, 8, 8), Component.literal("+")) .onClick(b -> display.index = Math.clamp(display.index + 1, 0, maxIndex))); // increment // surrounding input slots - widgets.add(Widgets.createSlot(new Point(startPoint.x - 8 + 18, startPoint.y - 7 + 9)).markInput().entries(inputs.get(0))); - widgets.add(Widgets.createSlot(new Point(startPoint.x - 8 + 44, startPoint.y - 7 + 9)).markInput().entries(inputs.get(1))); - widgets.add(Widgets.createSlot(new Point(startPoint.x - 8 + 62, startPoint.y - 7 + 27)).markInput().entries(inputs.get(2))); - widgets.add(Widgets.createSlot(new Point(startPoint.x - 8 + 62, startPoint.y - 7 + 53)).markInput().entries(inputs.get(3))); - widgets.add(Widgets.createSlot(new Point(startPoint.x - 8 + 44, startPoint.y - 7 + 71)).markInput().entries(inputs.get(4))); - widgets.add(Widgets.createSlot(new Point(startPoint.x - 8 + 18, startPoint.y - 7 + 71)).markInput().entries(inputs.get(5))); - widgets.add(Widgets.createSlot(new Point(startPoint.x - 8, startPoint.y - 7 + 53)).markInput().entries(inputs.get(6))); - widgets.add(Widgets.createSlot(new Point(startPoint.x - 8, startPoint.y - 7 + 27)).markInput().entries(inputs.get(7))); + widgets.add(new OffsetEntryWidget(new Point(startPoint.x - 8 + 18, startPoint.y - 7 + 9), inputs, () -> display.index + 3).markInput()); + widgets.add(new OffsetEntryWidget(new Point(startPoint.x - 8 + 44, startPoint.y - 7 + 9), inputs, () -> display.index + 3).markInput()); + widgets.add(new OffsetEntryWidget(new Point(startPoint.x - 8 + 62, startPoint.y - 7 + 27), inputs, () -> display.index + 3).markInput()); + widgets.add(new OffsetEntryWidget(new Point(startPoint.x - 8 + 62, startPoint.y - 7 + 53), inputs, () -> display.index + 3).markInput()); + widgets.add(new OffsetEntryWidget(new Point(startPoint.x - 8 + 44, startPoint.y - 7 + 71), inputs, () -> display.index + 3).markInput()); + widgets.add(new OffsetEntryWidget(new Point(startPoint.x - 8 + 18, startPoint.y - 7 + 71), inputs, () -> display.index + 3).markInput()); + widgets.add(new OffsetEntryWidget(new Point(startPoint.x - 8, startPoint.y - 7 + 53), inputs, () -> display.index + 3).markInput()); + widgets.add(new OffsetEntryWidget(new Point(startPoint.x - 8, startPoint.y - 7 + 27), inputs, () -> display.index + 3).markInput()); // Knowledge Gem and Enchanter - widgets.add(new IndexedEntryWidget(new Point(startPoint.x - 8 + 111, startPoint.y - 7 + 14), () -> display.index).markInput() - .entries(inputs.get(8))); + widgets.add(new IndexedEntryWidget(new Point(startPoint.x - 8 + 111, startPoint.y - 7 + 14), () -> display.index).markInput().entries(inputs.get(0))); widgets.add(Widgets.createSlot(new Point(startPoint.x - 8 + 111, startPoint.y - 7 + 60)).entries(ENCHANTER).disableBackground()); // center input slot - widgets.add(new IndexedEntryWidget(new Point(startPoint.x - 8 + 31, startPoint.y - 7 + 40), () -> display.index).markInput() - .entries(inputs.get(9))); + widgets.add(new IndexedEntryWidget(new Point(startPoint.x - 8 + 31, startPoint.y - 7 + 40), () -> display.index).markInput().entries(inputs.get(1))); // output arrow widgets.add(Widgets.createArrow(new Point(startPoint.x - 8 + 80, startPoint.y - 7 + 40)).animationDurationTicks(getCraftingTime(display))); @@ -103,9 +101,7 @@ public void setupWidgets(Point startPoint, Rectangle bounds, List widget var costLabel = Widgets.createLabel(new Point(startPoint.x - 11 + 70, startPoint.y - 11 + 85), getDescriptionText(display)).leftAligned().color(NORMAL_COLOR).noShadow(); costLabel.setOnRender((drawContext, label) -> { - var level = display.index + 1; - - label.setMessage(Component.translatable(EnchanterBlockEntity.ITEM_TRANS, display.itemScaling.apply(level))); + label.setMessage(Component.translatable(EnchanterBlockEntity.ITEM_TRANS, display.levelData.get(display.index).countPerBowl() * 8)); }); widgets.add(levelLabel); diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchantmentUpgradeDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchantmentUpgradeDisplay.java index d1d80878d6..94e93e28dc 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchantmentUpgradeDisplay.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchantmentUpgradeDisplay.java @@ -1,10 +1,14 @@ package de.dafuqs.spectrum.compat.REI.plugins; +import com.google.common.collect.*; import de.dafuqs.revelationary.api.advancements.*; +import de.dafuqs.spectrum.api.recipe.*; import de.dafuqs.spectrum.compat.REI.*; +import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.items.magic_items.*; import de.dafuqs.spectrum.recipe.*; import de.dafuqs.spectrum.recipe.enchanter.*; +import dev.emi.emi.api.stack.*; import me.shedaniel.rei.api.common.category.*; import me.shedaniel.rei.api.common.entry.*; import me.shedaniel.rei.api.common.util.*; @@ -18,17 +22,16 @@ import javax.annotation.*; import java.util.*; +import java.util.function.*; +import java.util.stream.*; public class EnchantmentUpgradeDisplay extends EnchanterDisplay { protected final Holder enchantment; - - final int enchantMaxLevel; - final int recipeMaxLevel; - - final Component transKey; - final RecipeScaling.ScalingData itemScaling; - final RecipeScaling.ScalingData xpScaling; + protected final int enchantMaxLevel; + protected final int recipeMaxLevel; + protected final Component transKey; + protected final List levelData; int index = 0; @@ -40,9 +43,7 @@ public EnchantmentUpgradeDisplay(RecipeHolder recipeEn enchantMaxLevel = enchantment.value().getMaxLevel(); recipeMaxLevel = recipe.getLevelCap(); - - itemScaling = recipe.getItemScaling(); - xpScaling = recipe.getXPScaling(); + levelData = recipe.getLevelData(); transKey = enchantment.value().description().copy().withStyle(s -> { s.withItalic(true); s.withColor(EnchantmentUpgradeCategory.NORMAL_COLOR); @@ -51,25 +52,23 @@ public EnchantmentUpgradeDisplay(RecipeHolder recipeEn } private static List buildIngredients(EnchantmentUpgradeRecipe recipe) { - List inputs = new ArrayList<>(); + Holder enchant = recipe.getEnchantment(); + int levelCap = recipe.getLevelCap(); - var enchant = recipe.getEnchantment(); - var levelCap = recipe.getLevelCap(); + List inputs = new ArrayList<>(); var knowledgeGem = new ArrayList(); var enchantedBooks = new ArrayList(); - - for (int i = 0; i < 8; i++) { - inputs.add(EntryIngredients.of(recipe.getBulkItem(), 1)); - } - + var bowlIngredients = new ArrayList(); for (int level = 1; level < levelCap; level++) { - knowledgeGem.add(KnowledgeGemItem.getKnowledgeDropStackWithXP(recipe.getXPScaling().apply(level), true)); - enchantedBooks.add(getEnchantedBookStackWith(enchant, level)); + knowledgeGem.add(KnowledgeGemItem.getKnowledgeDropStackWithXP(recipe.getRequiredXPForSourceLevel(level), true)); + enchantedBooks.add(SpectrumEnchantmentHelper.getEnchantedBookStackWith(enchant, level)); + bowlIngredients.add(recipe.getLevelData().get(level-1).ingredient()); } - inputs.add(EntryIngredients.ofItemStacks(knowledgeGem)); inputs.add(EntryIngredients.ofItemStacks(enchantedBooks)); + inputs.addAll(EntryIngredients.ofIngredients(bowlIngredients)); + return inputs; } @@ -78,20 +77,12 @@ private static List buildOutputs(EnchantmentUpgradeRecipe recip var levelCap = recipe.getLevelCap(); for (int level = 1; level < levelCap; level++) { - stacks.add(getEnchantedBookStackWith(recipe.getEnchantment(), level + 1)); + stacks.add(SpectrumEnchantmentHelper.getEnchantedBookStackWith(recipe.getEnchantment(), level + 1)); } return Collections.singletonList(EntryIngredients.ofItemStacks(stacks)); } - private static ItemStack getEnchantedBookStackWith(Holder enchant, int level) { - var enchStack = new ItemStack(Items.ENCHANTED_BOOK); - var builder = new ItemEnchantments.Mutable(ItemEnchantments.EMPTY); - builder.set(enchant, level); - enchStack.set(DataComponents.STORED_ENCHANTMENTS, builder.toImmutable()); - return enchStack; - } - @Override public CategoryIdentifier getCategoryIdentifier() { return SpectrumPlugins.ENCHANTMENT_UPGRADE; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/IndexedEntryWidget.java b/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/IndexedEntryWidget.java index 1605c41f67..d7a6b2be4b 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/IndexedEntryWidget.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/IndexedEntryWidget.java @@ -18,16 +18,6 @@ public IndexedEntryWidget(Point point, Supplier indexer) { this.indexer = indexer; } - @Override - public EntryWidget entries(Collection> stacks) { - return super.entries(stacks); - } - - @Override - public Slot entries(CyclingList> stacks) { - return super.entries(stacks); - } - @Override public Slot clearEntries() { return this; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/OffsetEntryWidget.java b/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/OffsetEntryWidget.java new file mode 100644 index 0000000000..b6054e91d8 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/OffsetEntryWidget.java @@ -0,0 +1,43 @@ +package de.dafuqs.spectrum.compat.REI.widgets; + +import me.shedaniel.math.*; +import me.shedaniel.rei.api.client.gui.widgets.*; +import me.shedaniel.rei.api.common.entry.*; +import me.shedaniel.rei.impl.client.gui.widget.*; +import me.shedaniel.rei.impl.client.util.*; + +import java.util.*; +import java.util.function.*; + +public class OffsetEntryWidget extends EntryWidget { + + List inputs; + private final Supplier indexer; + int prevIndex = -1; + + public OffsetEntryWidget(Point point, List inputs, Supplier indexer) { + super(point); + this.inputs = inputs; + this.indexer = indexer; + entries(inputs.getFirst()); + } + + @Override + public Slot clearEntries() { + return this; + } + + @Override + public EntryWidget entry(EntryStack stack) { + return this; + } + + @Override + public EntryStack getCurrentEntry() { + int i = indexer.get(); + if(i != prevIndex) { + entries(inputs.get(i)); + } + return getCyclingEntries().get().get(i); + } +} diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/EnchantmentUpgradeEmiRecipeGated.java b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/EnchantmentUpgradeEmiRecipeGated.java index 5220f7706a..f87d3267fe 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/EnchantmentUpgradeEmiRecipeGated.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/EnchantmentUpgradeEmiRecipeGated.java @@ -1,13 +1,12 @@ package de.dafuqs.spectrum.compat.emi.recipes; -import com.google.common.collect.*; import de.dafuqs.revelationary.api.advancements.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.blocks.enchanter.*; import de.dafuqs.spectrum.compat.emi.*; import de.dafuqs.spectrum.compat.emi.widgets.*; +import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.items.magic_items.*; -import de.dafuqs.spectrum.recipe.*; import de.dafuqs.spectrum.recipe.enchanter.*; import de.dafuqs.spectrum.registries.*; import dev.emi.emi.api.recipe.*; @@ -15,6 +14,7 @@ import dev.emi.emi.api.stack.*; import dev.emi.emi.api.widget.*; import net.minecraft.client.*; +import net.minecraft.core.*; import net.minecraft.core.component.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; @@ -24,6 +24,7 @@ import net.minecraft.world.item.enchantment.*; import java.util.*; +import java.util.stream.*; public class EnchantmentUpgradeEmiRecipeGated extends GatedSpectrumEmiRecipe { @@ -31,51 +32,35 @@ public class EnchantmentUpgradeEmiRecipeGated extends GatedSpectrumEmiRecipe levelData; + private int selectedSourceLevel = 1; public EnchantmentUpgradeEmiRecipeGated(EmiRecipeCategory category, RecipeHolder entry) { super(category, entry, 132, 90); - this.itemScaling = recipe.getItemScaling(); - this.xpScaling = recipe.getXPScaling(); - - inputs = Lists.newArrayList(); + this.levelData = recipe.getLevelData(); - var enchant = recipe.getEnchantment(); + Holder enchant = recipe.getEnchantment(); levelCap = recipe.getLevelCap(); maxNormal = enchant.value().getMaxLevel(); transKey = enchant.value().description().copy().withStyle(s -> s.withItalic(true)); - for (int i = 0; i < 8; i++) { - inputs.add(EmiStack.of(recipe.getBulkItem(), 1)); - } + this.inputs = recipe.getIngredientStacks().stream() + .map(s -> EmiIngredient.of(s.getItems().map(EmiStack::of).toList())) + .collect(Collectors.toList()); // Then the xp - inputs.add(EmiStack.of(KnowledgeGemItem.getKnowledgeDropStackWithXP(recipe.getBaseXPCost(), true))); + inputs.add(EmiStack.of(KnowledgeGemItem.getKnowledgeDropStackWithXP(recipe.getLevelData().getFirst().experience(), true))); this.outputs = new ArrayList<>(); // Last the book - for (int i = 1; i <= levelCap; i++) { - var enchStack = new ItemStack(Items.ENCHANTED_BOOK); - var builder = new ItemEnchantments.Mutable(ItemEnchantments.EMPTY); - - builder.set(enchant, i); - enchStack.set(DataComponents.STORED_ENCHANTMENTS, builder.toImmutable()); - inputs.add(EmiStack.of(enchStack.copy())); - - if (i > 1) { - enchStack.set(DataComponents.STORED_ENCHANTMENTS, builder.toImmutable()); - outputs.add(EmiStack.of(enchStack)); - } + for (int i = 1; i < levelCap; i++) { + inputs.add(EmiStack.of(SpectrumEnchantmentHelper.getEnchantedBookStackWith(enchant, i))); + outputs.add(EmiStack.of(SpectrumEnchantmentHelper.getEnchantedBookStackWith(enchant, i+1))); } - } @Override @@ -83,7 +68,7 @@ public void addUnlockedWidgets(WidgetHolder widgets) { var overEnchant = AdvancementHelper.hasAdvancement(Minecraft.getInstance().player, SpectrumAdvancements.OVERENCHANTING); // Reset the indexer - indexer = 1; + selectedSourceLevel = 1; widgets.addTexture(BACKGROUND_TEXTURE, 13, 13, 54, 54, 0, 0); if (overEnchant && levelCap > maxNormal) @@ -91,7 +76,7 @@ public void addUnlockedWidgets(WidgetHolder widgets) { // Knowledge Gem and Enchanter final var gem = new DynamicStackWidget(c -> { - var xp = xpScaling.apply(indexer); + int xp = levelData.get(selectedSourceLevel - 1).experience(); return EmiStack.of(KnowledgeGemItem.getKnowledgeDropStackWithXP(xp, false)); }, 0, 111, 5); widgets.add(gem); @@ -100,60 +85,45 @@ public void addUnlockedWidgets(WidgetHolder widgets) { var cap = overEnchant ? levelCap : maxNormal; // Indexing buttons var minus = new SaneButtonWidget(84, 18, 8, 8, 64, 16, BACKGROUND_TEXTURE, () -> false, (mX, mY, b) -> { - indexer = Math.clamp(indexer - 1, 1, cap - 1); + selectedSourceLevel = Math.clamp(selectedSourceLevel - 1, 1, cap - 1); }).tooltipText(List.of(Component.translatable(EnchanterBlockEntity.CYCLING))); var plus = new SaneButtonWidget(94, 18, 8, 8, 72, 16, BACKGROUND_TEXTURE, () -> false, (mX, mY, b) -> { - indexer = Math.clamp(indexer + 1, 1, cap - 1); + selectedSourceLevel = Math.clamp(selectedSourceLevel + 1, 1, cap - 1); }).tooltipText(List.of(Component.translatable(EnchanterBlockEntity.CYCLING))); widgets.add(minus); widgets.add(plus); // surrounding input slots - widgets.addSlot(inputs.get(0), 18, 0); - widgets.addSlot(inputs.get(1), 44, 0); - widgets.addSlot(inputs.get(2), 62, 18); - widgets.addSlot(inputs.get(3), 62, 44); - widgets.addSlot(inputs.get(4), 44, 62); - widgets.addSlot(inputs.get(5), 18, 62); - widgets.addSlot(inputs.get(6), 0, 44); - widgets.addSlot(inputs.get(7), 0, 18); + widgets.add(new DynamicStackWidget(c -> inputs.get(selectedSourceLevel), 0, 18, 0)); + widgets.add(new DynamicStackWidget(c -> inputs.get(selectedSourceLevel), 0, 44, 0)); + widgets.add(new DynamicStackWidget(c -> inputs.get(selectedSourceLevel), 0, 62, 18)); + widgets.add(new DynamicStackWidget(c -> inputs.get(selectedSourceLevel), 0, 62, 44)); + widgets.add(new DynamicStackWidget(c -> inputs.get(selectedSourceLevel), 0, 44, 62)); + widgets.add(new DynamicStackWidget(c -> inputs.get(selectedSourceLevel), 0, 18, 62)); + widgets.add(new DynamicStackWidget(c -> inputs.get(selectedSourceLevel), 0, 0, 44)); + widgets.add(new DynamicStackWidget(c -> inputs.get(selectedSourceLevel), 0, 0, 18)); // Center Slot - final var in = new DynamicStackWidget(c -> inputs.get(BOOK_INDEXES_START + indexer - 1), 0, 31, 31); - widgets.add(in); + widgets.add(new DynamicStackWidget(c -> inputs.get(cap + selectedSourceLevel), 0, 31, 31)); // Output - final var out = new DynamicStackWidget(c -> inputs.get(BOOK_INDEXES_START + indexer), 0, 106, 26); - out.large(true).recipeContext(this); - widgets.add(out); + widgets.add(new DynamicStackWidget(c -> outputs.get(selectedSourceLevel - 1), 0, 106, 26).large(true).recipeContext(this)); widgets.addTexture(EmiTexture.EMPTY_ARROW, 80, 31); // Info - final var lv = new DynamicTextWidget(c -> { + widgets.add(new DynamicTextWidget(c -> { var color = NORMAL_COLOR; - if (indexer + 1 > maxNormal) + if (selectedSourceLevel + 1 > maxNormal) color = OVERCHANT_COLOR; - - return new Tuple<>(Component.translatable(EnchanterBlockEntity.LEVEL_TRANS, indexer, indexer + 1).getVisualOrderText(), color); - }, 67, 2, false); - widgets.add(lv); + return new Tuple<>(Component.translatable(EnchanterBlockEntity.LEVEL_TRANS, selectedSourceLevel, selectedSourceLevel + 1).getVisualOrderText(), color); + }, 67, 2, false)); - - final var itemUse = new DynamicTextWidget(c -> new Tuple<>(Component.translatable(EnchanterBlockEntity.ITEM_TRANS, itemScaling.apply(indexer)).getVisualOrderText(), NORMAL_COLOR), 67, 70, false); - widgets.add(itemUse); + // Item Use Text + widgets.add(new DynamicTextWidget(c -> new Tuple<>(Component.translatable(EnchanterBlockEntity.ITEM_TRANS, levelData.get(selectedSourceLevel-1).countPerBowl()*8).getVisualOrderText(), NORMAL_COLOR), 67, 70, false)); widgets.addText(transKey, 3, 82, NORMAL_COLOR, false); } - @Override - public List getOutputs() { - return super.getOutputs(); - } - - @Override - public List getInputs() { - return super.getInputs(); - } } diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookEnchanterUpgradingPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookEnchanterUpgradingPageRenderer.java index a891aef4ce..dce7540c45 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookEnchanterUpgradingPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookEnchanterUpgradingPageRenderer.java @@ -2,6 +2,8 @@ import com.mojang.blaze3d.systems.*; import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.recipe.*; +import de.dafuqs.spectrum.compat.modonomicon.*; import de.dafuqs.spectrum.compat.modonomicon.pages.*; import de.dafuqs.spectrum.items.magic_items.*; import de.dafuqs.spectrum.recipe.enchanter.*; @@ -43,31 +45,22 @@ protected void drawRecipe(GuiGraphics drawContext, RecipeHolder ingredients = recipe.getIngredients(); - int ingredientX = recipeX - 3; - // surrounding input slots - List inputStacks = new ArrayList<>(); - int requiredItemCountSplit = recipe.getBaseItemCost() / 8; - int requiredItemCountModulo = recipe.getBaseItemCost() % 8; - for (int i = 0; i < 8; i++) { - int addAmount = i < requiredItemCountModulo ? 1 : 0; - inputStacks.add(new ItemStack(recipe.getBulkItem(), requiredItemCountSplit + addAmount)); - } - - parentScreen.renderItemStack(drawContext, ingredientX + 16, recipeY, mouseX, mouseY, inputStacks.get(0)); - parentScreen.renderItemStack(drawContext, ingredientX + 40, recipeY, mouseX, mouseY, inputStacks.get(1)); - parentScreen.renderItemStack(drawContext, ingredientX + 56, recipeY + 16, mouseX, mouseY, inputStacks.get(2)); - parentScreen.renderItemStack(drawContext, ingredientX + 56, recipeY + 40, mouseX, mouseY, inputStacks.get(3)); - parentScreen.renderItemStack(drawContext, ingredientX + 40, recipeY + 56, mouseX, mouseY, inputStacks.get(4)); - parentScreen.renderItemStack(drawContext, ingredientX + 16, recipeY + 56, mouseX, mouseY, inputStacks.get(5)); - parentScreen.renderItemStack(drawContext, ingredientX, recipeY + 40, mouseX, mouseY, inputStacks.get(6)); - parentScreen.renderItemStack(drawContext, ingredientX, recipeY + 16, mouseX, mouseY, inputStacks.get(7)); + IngredientStack bowlStack = IngredientStack.of(recipe.getForSourceLevel(0).ingredient(), recipe.getForSourceLevel(0).countPerBowl()); + ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX - 13, recipeY, mouseX, mouseY, bowlStack); + ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX - 37, recipeY, mouseX, mouseY, bowlStack); + ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX - 53, recipeY + 16, mouseX, mouseY, bowlStack); + ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX - 53, recipeY + 40, mouseX, mouseY, bowlStack); + ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX - 37, recipeY + 56, mouseX, mouseY, bowlStack); + ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX - 13, recipeY + 56, mouseX, mouseY, bowlStack); + ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX - 3, recipeY + 40, mouseX, mouseY, bowlStack); + ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX - 3, recipeY + 16, mouseX, mouseY, bowlStack); // center input slot - parentScreen.renderIngredient(drawContext, ingredientX + 28, recipeY + 28, mouseX, mouseY, ingredients.getFirst()); + parentScreen.renderIngredient(drawContext, recipeX - 25, recipeY + 28, mouseX, mouseY, ingredients.getFirst()); // Knowledge Gem and Enchanter - ItemStack knowledgeDropStackWithXP = KnowledgeGemItem.getKnowledgeDropStackWithXP(recipe.getBaseXPCost(), true); + ItemStack knowledgeDropStackWithXP = KnowledgeGemItem.getKnowledgeDropStackWithXP(recipe.getForSourceLevel(0).experience(), true); parentScreen.renderItemStack(drawContext, recipeX + 81, recipeY + 9, mouseX, mouseY, knowledgeDropStackWithXP); parentScreen.renderItemStack(drawContext, recipeX + 81, recipeY + 46, mouseX, mouseY, SpectrumBlocks.ENCHANTER.asItem().getDefaultInstance()); diff --git a/src/main/java/de/dafuqs/spectrum/helpers/SpectrumEnchantmentHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/SpectrumEnchantmentHelper.java index 088bff06eb..bd93b23d4c 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/SpectrumEnchantmentHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/SpectrumEnchantmentHelper.java @@ -214,4 +214,12 @@ public static boolean canEntityUse(@Nullable Entity entity, String idAsString) { } } + public static ItemStack getEnchantedBookStackWith(Holder enchant, int level) { + var enchStack = new ItemStack(Items.ENCHANTED_BOOK); + var builder = new ItemEnchantments.Mutable(ItemEnchantments.EMPTY); + builder.set(enchant, level); + enchStack.set(DataComponents.STORED_ENCHANTMENTS, builder.toImmutable()); + return enchStack; + } + } diff --git a/src/main/java/de/dafuqs/spectrum/recipe/RecipeScaling.java b/src/main/java/de/dafuqs/spectrum/recipe/RecipeScaling.java deleted file mode 100644 index 4594c908d4..0000000000 --- a/src/main/java/de/dafuqs/spectrum/recipe/RecipeScaling.java +++ /dev/null @@ -1,102 +0,0 @@ -package de.dafuqs.spectrum.recipe; - -import com.mojang.serialization.*; -import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.network.*; -import net.minecraft.network.codec.*; -import net.minecraft.resources.*; - -import java.util.*; - -public abstract class RecipeScaling { - - public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group( - SpectrumRegistries.RECIPE_SCALING.byNameCodec().fieldOf("type").forGetter(d -> d.type), - Codec.INT.optionalFieldOf("start", 0).forGetter(d -> d.start), - Codec.intRange(0, Integer.MAX_VALUE).optionalFieldOf("scaling_value", 0).forGetter(d -> d.scalingValue), - Codec.doubleRange(0.0, Double.MAX_VALUE).optionalFieldOf("scaling_factor", 1.0).forGetter(d -> d.scalingFactor), - Codec.INT.listOf(0, 255).optionalFieldOf("indexes", Collections.emptyList()).forGetter(d -> d.indexes) - ).apply(i, ScalingData::new)); - - public static final StreamCodec PACKET_CODEC = StreamCodec.composite( - ByteBufCodecs.registry(SpectrumRegistryKeys.RECIPE_SCALING), d -> d.type, - ByteBufCodecs.VAR_INT, d -> d.start, - ByteBufCodecs.VAR_INT, d -> d.scalingValue, - ByteBufCodecs.DOUBLE, d -> d.scalingFactor, - ByteBufCodecs.VAR_INT.apply(ByteBufCodecs.list()), d -> d.indexes, - ScalingData::new - ); - - public static final RecipeScaling LINEAR = new RecipeScaling(SpectrumCommon.locate("linear")) { - @Override - int getInputCount(double scaling, ScalingData data) { - return data.start + (int) Math.round(data.scalingValue * scaling * data.scalingFactor); - } - }; - - public static final RecipeScaling DOUBLING = new RecipeScaling(SpectrumCommon.locate("doubling")) { - @Override - int getInputCount(double scaling, ScalingData data) { - return data.start + data.scalingValue << Math.round(((scaling - 1) * data.scalingFactor)); - } - }; - - public static final RecipeScaling EXPONENTIAL = new RecipeScaling(SpectrumCommon.locate("exponential")) { - @Override - int getInputCount(double scaling, ScalingData data) { - return (int) (data.start + Math.round(Math.pow(data.scalingValue, scaling * data.scalingFactor))); - } - }; - - public static final RecipeScaling INDEXED = new RecipeScaling(SpectrumCommon.locate("indexed")) { - @Override - int getInputCount(double scaling, ScalingData data) { - var size = data.indexes.size(); - return data.indexes.get(Math.clamp((int) Math.round(scaling - 1), 0, size - 1)); - } - }; - - private final ResourceLocation id; - - public RecipeScaling(ResourceLocation id) { - this.id = id; - } - - abstract int getInputCount(double scaling, ScalingData data); - - public ResourceLocation getId() { - return id; - } - - public record ScalingData(RecipeScaling type, int start, int scalingValue, double scalingFactor, List indexes) { - public int apply(double scaling) { - return type.getInputCount(scaling, this); - } - } - - public static ScalingData linear(int start, int scalingValue, double scalingFactor, Integer... indices) { - return new ScalingData(LINEAR, start, scalingValue, scalingFactor, List.of(indices)); - } - - public static ScalingData doubling(int scalingValue, Integer... indices) { - return new ScalingData(DOUBLING, 0, scalingValue, 1.0F, List.of(indices)); - } - - public static ScalingData doubling(int start, int scalingValue, double scalingFactor, Integer... indices) { - return new ScalingData(DOUBLING, start, scalingValue, scalingFactor, List.of(indices)); - } - - public static ScalingData exponential(int start, int scalingValue, double scalingFactor, Integer... indices) { - return new ScalingData(EXPONENTIAL, start, scalingValue, scalingFactor, List.of(indices)); - } - - public static ScalingData indices(Integer... indices) { - return indexed(0, 0, 1.0f, indices); - } - - public static ScalingData indexed(int start, int scalingValue, double scalingFactor, Integer... indices) { - return new ScalingData(INDEXED, start, scalingValue, scalingFactor, List.of(indices)); - } -} diff --git a/src/main/java/de/dafuqs/spectrum/recipe/enchanter/EnchantmentUpgradeRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/enchanter/EnchantmentUpgradeRecipe.java index bcfc7fb938..6ed12e598c 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/enchanter/EnchantmentUpgradeRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/enchanter/EnchantmentUpgradeRecipe.java @@ -1,10 +1,11 @@ package de.dafuqs.spectrum.recipe.enchanter; -import com.google.gson.*; import com.mojang.datafixers.util.*; import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.api.item.*; +import de.dafuqs.spectrum.api.pastel_network.*; +import de.dafuqs.spectrum.api.recipe.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.recipe.*; import de.dafuqs.spectrum.registries.*; @@ -14,6 +15,7 @@ import net.minecraft.network.*; import net.minecraft.network.codec.*; import net.minecraft.resources.*; +import net.minecraft.util.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.item.enchantment.*; @@ -21,14 +23,28 @@ import java.util.*; -public class EnchantmentUpgradeRecipe extends GatedSpectrumRecipe { +public class EnchantmentUpgradeRecipe extends GatedStackSpectrumRecipe { - protected final Either, ResourceKey> either; - protected final int levelCap; - protected final Ingredient bulkItem; - protected final RecipeScaling.ScalingData itemScaling, XPScaling; + public record LevelData(Ingredient ingredient, int countPerBowl, int experience) { + + public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group( + Ingredient.CODEC_NONEMPTY.fieldOf("ingredient").forGetter(LevelData::ingredient), + ExtraCodecs.POSITIVE_INT.fieldOf("ingredient_count_per_bowl").forGetter(LevelData::countPerBowl), + ExtraCodecs.POSITIVE_INT.fieldOf("experience").forGetter(LevelData::experience) + ).apply(i, LevelData::new)); + + public static final StreamCodec STREAM_CODEC = PacketCodecHelper.tuple( + Ingredient.CONTENTS_STREAM_CODEC, o -> o.ingredient, + ByteBufCodecs.INT, o -> o.countPerBowl, + ByteBufCodecs.INT, o -> o.experience, + LevelData::new + ); + + } - protected final NonNullList inputs; + protected final Either, ResourceKey> either; + protected final List levelData; + protected final NonNullList inputs; protected final ItemStack output; public EnchantmentUpgradeRecipe( @@ -36,31 +52,22 @@ public EnchantmentUpgradeRecipe( boolean secret, Optional requiredAdvancementIdentifier, Either, ResourceKey> enchantmentEntry, - int levelCap, - Ingredient bulkItem, - RecipeScaling.ScalingData XPScaling, - RecipeScaling.ScalingData itemScaling + List levelData ) { super(group, secret, requiredAdvancementIdentifier); this.either = enchantmentEntry; - this.levelCap = levelCap; - this.bulkItem = bulkItem; - this.itemScaling = itemScaling; - this.XPScaling = XPScaling; - - NonNullList inputs = NonNullList.withSize(2, Ingredient.EMPTY); + this.levelData = levelData; if (enchantmentEntry.left().isPresent()) { - var enchantment = enchantmentEntry.left().get(); - var baseMax = enchantment.value().getMaxLevel(); - if (levelCap < baseMax) - throw new JsonParseException("Level Cap cannot be lower than the Enchantment's base level (levelCap " + levelCap + "< enchantment's" + baseMax + ")"); - - ItemStack ingredientStack = new ItemStack(Items.ENCHANTED_BOOK); - ingredientStack.enchant(enchantment, 1); - inputs.set(0, Ingredient.of(ingredientStack)); - inputs.set(1, bulkItem); + NonNullList inputs = NonNullList.withSize(1 + levelData.size(), IngredientStack.EMPTY); + ItemStack stack = new ItemStack(Items.ENCHANTED_BOOK); + stack.enchant(enchantmentEntry.left().get(), 1); + inputs.set(0, IngredientStack.of(Ingredient.of(stack))); + for(int i = 0; i < levelData.size(); ++i) { + LevelData ld = levelData.get(i); + inputs.set(i + 1, IngredientStack.of(ld.ingredient(), ld.countPerBowl())); + } this.inputs = inputs; ItemStack outputStack = new ItemStack(Items.ENCHANTED_BOOK); @@ -72,7 +79,6 @@ public EnchantmentUpgradeRecipe( } } - @Override public boolean matches(RecipeInput inv, Level world) { if (inv.size() > 9) { @@ -94,13 +100,14 @@ public boolean matches(RecipeInput inv, Level world) { var bookLevel = enchantments.getLevel(enchantment); - if (!enchantments.keySet().contains(enchantment) || bookLevel >= levelCap) { + if (!enchantments.keySet().contains(enchantment) || bookLevel >= getLevelCap()) { return false; } // Check XP requirements var availableXp = ExperienceStorageItem.getStoredExperience(inv.getItem(1)); - var requiredXp = XPScaling.apply(bookLevel); + LevelData levelData = getForSourceLevel(bookLevel); + var requiredXp = levelData.experience(); if (availableXp < requiredXp) return false; @@ -112,7 +119,7 @@ public boolean matches(RecipeInput inv, Level world) { if (!currentStack.isEmpty()) { ItemStack slotStack = inv.getItem(i + 1); - if (bulkItem.test(slotStack)) { + if (levelData.ingredient().test(slotStack)) { bulkInput += slotStack.getCount(); } else { return false; @@ -120,11 +127,31 @@ public boolean matches(RecipeInput inv, Level world) { } } - return bulkInput >= itemScaling.apply(bookLevel); + return bulkInput >= levelData.countPerBowl() * 8; } return false; } + public List getLevelData() { + return this.levelData; + } + + public LevelData getForSourceLevel(int sourceLevel) { + return this.levelData.get(sourceLevel - 1); + } + + public int getRequiredXPForSourceLevel(int sourceLevel) { + return this.levelData.get(sourceLevel - 1).experience(); + } + + public int getRequiredItemCountForSourceLevel(int sourceLevel) { + return this.levelData.get(sourceLevel - 1).countPerBowl() * 8; + } + + public int getLevelCap() { + return this.levelData.size() + 1; + } + @Override public ItemStack assemble(RecipeInput inv, HolderLookup.Provider drm) { return output.copy(); @@ -166,32 +193,8 @@ public String getRecipeTypeShortID() { } @Override - public NonNullList getIngredients() { - return inputs; - } - - // Janky Hack - public Item getBulkItem() { - var match = bulkItem.getItems(); - if (match.length > 0) - return bulkItem.getItems()[0].getItem(); - return Items.AIR; - } - - public int getBaseXPCost() { - return XPScaling.apply(1); - } - - public int getBaseItemCost() { - return itemScaling.apply(1); - } - - public RecipeScaling.ScalingData getXPScaling() { - return XPScaling; - } - - public RecipeScaling.ScalingData getItemScaling() { - return itemScaling; + public List getIngredientStacks() { + return this.inputs; } public Holder getEnchantment() { @@ -201,10 +204,6 @@ public Holder getEnchantment() { return either.left().get(); } - public int getLevelCap() { - return levelCap; - } - public boolean isInNormalRange(int level) { if (either.left().isEmpty()) { throw new UnsupportedOperationException("Attempted to match a datagen enchantment upgrade"); @@ -219,10 +218,7 @@ public static class Serializer implements RecipeSerializer recipe.secret), ResourceLocation.CODEC.optionalFieldOf("required_advancement").forGetter(recipe -> recipe.requiredAdvancementIdentifier), Codec.either(Enchantment.CODEC, ResourceKey.codec(Registries.ENCHANTMENT)).fieldOf("enchantment").forGetter(c -> c.either), - Codec.INT.fieldOf("level_cap").forGetter(recipe -> recipe.levelCap), - Ingredient.CODEC_NONEMPTY.fieldOf("bulk_item").forGetter(recipe -> recipe.bulkItem), - RecipeScaling.CODEC.fieldOf("xp_scaling").forGetter(recipe -> recipe.XPScaling), - RecipeScaling.CODEC.fieldOf("item_scaling").forGetter(recipe -> recipe.itemScaling) + LevelData.CODEC.listOf().fieldOf("levels").forGetter(recipe -> recipe.levelData) ).apply(i, EnchantmentUpgradeRecipe::new)); public static final StreamCodec PACKET_CODEC = PacketCodecHelper.tuple( @@ -230,10 +226,7 @@ public static class Serializer implements RecipeSerializer recipe.secret, ByteBufCodecs.optional(ResourceLocation.STREAM_CODEC), recipe -> recipe.requiredAdvancementIdentifier, ByteBufCodecs.either(Enchantment.STREAM_CODEC, ResourceKey.streamCodec(Registries.ENCHANTMENT)), c -> c.either, - ByteBufCodecs.VAR_INT, recipe -> recipe.levelCap, - Ingredient.CONTENTS_STREAM_CODEC, recipe -> recipe.bulkItem, - RecipeScaling.PACKET_CODEC, recipe -> recipe.XPScaling, - RecipeScaling.PACKET_CODEC, recipe -> recipe.itemScaling, + LevelData.STREAM_CODEC.apply(ByteBufCodecs.collection(NonNullList::createWithCapacity)), recipe -> recipe.levelData, EnchantmentUpgradeRecipe::new ); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java index 04ecebc93b..257f0964d8 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java @@ -28,7 +28,6 @@ public class SpectrumRegistries { public static final Registry GLASS_ARROW_VARIANT = register(SpectrumRegistryKeys.GLASS_ARROW_VARIANT, true); public static final Registry INK_COLOR = register(SpectrumRegistryKeys.INK_COLOR, true); public static final Registry PASTEL_UPGRADE = register(SpectrumRegistryKeys.PASTEL_UPGRADE, false); - public static final Registry RECIPE_SCALING = register(SpectrumRegistryKeys.RECIPE_SCALING, true); public static final Registry> RESONANCE_PROCESSOR_TYPE = register(SpectrumRegistryKeys.RESONANCE_PROCESSOR_TYPE, false); public static final Registry> PASTEL_PAYLOAD_TYPE = register(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, false); @@ -42,7 +41,6 @@ public static void registerBuiltInRegistries(NewRegistryEvent event) { event.register(GLASS_ARROW_VARIANT); event.register(INK_COLOR); event.register(PASTEL_UPGRADE); - event.register(RECIPE_SCALING); event.register(RESONANCE_PROCESSOR_TYPE); event.register(PASTEL_PAYLOAD_TYPE); } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java index e72dbdeaf6..2baa9f06a7 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java @@ -25,7 +25,6 @@ public class SpectrumRegistryKeys { public static final ResourceKey> LIZARD_FRILL_VARIANT = of("lizard_frill_variant"); public static final ResourceKey> LIZARD_HORN_VARIANT = of("lizard_horn_variant"); public static final ResourceKey> PASTEL_UPGRADE = of("pastel_upgrade"); - public static final ResourceKey> RECIPE_SCALING = of("recipe_scaling"); public static final ResourceKey>> RESONANCE_PROCESSOR_TYPE = of("resonance_processor_type"); public static final ResourceKey> RESONANCE_PROCESSOR = of("resonance_processor"); public static final ResourceKey>> PASTEL_PAYLOAD_TYPE = of("pastel_payload_type"); diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/bane_of_arthropods.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/bane_of_arthropods.json index 1807b20bcf..ad066a12b9 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/bane_of_arthropods.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/bane_of_arthropods.json @@ -1,16 +1,42 @@ { "type": "spectrum:enchantment_upgrade", + "group": "vanilla_enchantment_upgrades", + "enchantment": "minecraft:bane_of_arthropods", + "levels": [ + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 100 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_damage", + + + "bulk_item": { "item": "spectrum:black_pigment" }, - "enchantment": "minecraft:bane_of_arthropods", - "group": "vanilla_enchantment_upgrades", "item_scaling": { "type": "spectrum:doubling", "scaling_value": 8 }, "level_cap": 8, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_damage", "xp_scaling": { "type": "spectrum:doubling", "scaling_value": 100 From 9a42e998c957f39f88f1cee409c2d51403ec409b Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Thu, 30 Jul 2026 18:49:21 +0200 Subject: [PATCH 084/477] update sanity command --- .../blocks/enchanter/EnchanterBlockEntity.java | 6 +++--- .../spectrum/commands/SanityCommand.java | 9 +++++++-- .../registries/SpectrumRecipeScalings.java | 18 ------------------ 3 files changed, 10 insertions(+), 23 deletions(-) delete mode 100644 src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeScalings.java diff --git a/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlockEntity.java index 668b7168a8..40dd4e8cb2 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlockEntity.java @@ -551,7 +551,7 @@ public void craftEnchantmentUpgradeRecipe(Level world, EnchantmentUpgradeRecipe var curLevel = resultStack.get(DataComponents.STORED_ENCHANTMENTS).getLevel(upgrade.getEnchantment()); var targetLevel = Math.min(curLevel + 1, upgrade.getLevelCap()); - var xpCost = upgrade.getXPScaling().apply(curLevel); + var xpCost = upgrade.getRequiredXPForSourceLevel(curLevel); drainExperience(xpCost); @@ -571,7 +571,7 @@ public void craftEnchantmentUpgradeRecipe(Level world, EnchantmentUpgradeRecipe // update the item amount if chain upgrading if (recipeMatches(this, level)) { - craftingTimeTotal = upgrade.getItemScaling().apply(targetLevel); + craftingTimeTotal = upgrade.getRequiredItemCountForSourceLevel(targetLevel); } else { currentRecipe = null; } @@ -621,7 +621,7 @@ private static void calculateCurrentRecipe(Level world, EnchanterBlockEntity enc enchanter.currentItemProcessingTime = 0; var level = enchanter.items.get(0).get(DataComponents.STORED_ENCHANTMENTS).getLevel(upgrade.value().getEnchantment()); - enchanter.craftingTimeTotal = upgrade.value().getItemScaling().apply(level); + enchanter.craftingTimeTotal = upgrade.value().getRequiredItemCountForSourceLevel(level); EnchanterInventory testInventory = new EnchanterInventory(); testInventory.setItem(0, enchanter.virtualInventory.getItem(0)); diff --git a/src/main/java/de/dafuqs/spectrum/commands/SanityCommand.java b/src/main/java/de/dafuqs/spectrum/commands/SanityCommand.java index 36e6999bcb..be491b9b4d 100644 --- a/src/main/java/de/dafuqs/spectrum/commands/SanityCommand.java +++ b/src/main/java/de/dafuqs/spectrum/commands/SanityCommand.java @@ -407,8 +407,13 @@ private static int execute(CommandSourceStack source, String modId) { ItemStack output = recipe.getResultItem(source.registryAccess()); if (output.getItem() == Items.ENCHANTED_BOOK) { ItemEnchantments enchantments = EnchantmentHelper.getEnchantmentsForCrafting(output); - if (!enchantments.isEmpty() && recipe.getBulkItem() instanceof PigmentItem pigmentItem) { - upgradeColors.put(enchantments.keySet().stream().toList().getFirst(), pigmentItem.getInkColor()); + if (!enchantments.isEmpty()) { + for(ItemStack stack : recipe.getForSourceLevel(1).ingredient().getItems()) { + if(stack.getItem() instanceof PigmentItem pigmentItem) { + upgradeColors.put(enchantments.keySet().stream().toList().getFirst(), pigmentItem.getInkColor()); + break; + } + } } } } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeScalings.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeScalings.java deleted file mode 100644 index 6a48b16f03..0000000000 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeScalings.java +++ /dev/null @@ -1,18 +0,0 @@ -package de.dafuqs.spectrum.registries; - -import de.dafuqs.spectrum.recipe.*; -import net.minecraft.core.*; - -public class SpectrumRecipeScalings { - - public static void init() { - register(RecipeScaling.LINEAR); - register(RecipeScaling.DOUBLING); - register(RecipeScaling.EXPONENTIAL); - register(RecipeScaling.INDEXED); - } - - private static void register(RecipeScaling scaling) { - Registry.register(SpectrumRegistries.RECIPE_SCALING, scaling.getId(), scaling); - } -} From 71d8e77dfa91e7421245ea564289c8b447628885 Mon Sep 17 00:00:00 2001 From: 2hh8899 <2hh8899@naver.com> Date: Fri, 31 Jul 2026 15:29:35 +0900 Subject: [PATCH 085/477] Update ko_kr.json (apply changes from en_us.json) --- .../resources/assets/spectrum/lang/ko_kr.json | 51 +++++++++---------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/src/main/resources/assets/spectrum/lang/ko_kr.json b/src/main/resources/assets/spectrum/lang/ko_kr.json index b9e55d65a4..11b13506d9 100644 --- a/src/main/resources/assets/spectrum/lang/ko_kr.json +++ b/src/main/resources/assets/spectrum/lang/ko_kr.json @@ -3968,7 +3968,7 @@ "book.spectrum.guidebook.titration_barrel.le_fishe_au_chocolat.text": "*확실히 보통 물건은 아니다.*", "book.spectrum.guidebook.titration_barrel.page0.text": "[음식](entry://cuisine/titration_barrel@kimchi)과 [음료](entry://cuisine/infused_beverages)를 [색깔 나무](entry://general/colored_trees@colored_wood)로 짠 통 안에서 발효시켜 보겠다는 이 발상은 그리 터무니없는 건 아니었다.\\\n시간이 지나며 나무가 품고 있던 마법이 서서히 내용물을 침식해 간다. 결과물이 기가 막히게 맛있는 경우도 있고, 차라리 안 먹는 게 나을 만큼 끔찍한 적도 있지만 (물론 후자는 내 처참한 요리 실력 탓일 수도 있다), 적어도 한결같이 지루하지 않고 흥미로웠다.\\\n\\\n이 통에는 한 세트의 아이템과 물 양동이 하나 분량의 액체가 들어간다.", "book.spectrum.guidebook.titration_barrel.page1.text": "*가끔 눈을 깜빡일 때마다 세상이 사라진 것 같은 기분이 든다. 기분 탓일까? 신기하게도 그럴 때마다 통 안의 발효가 많이 진행되는 것 같다.*", - "book.spectrum.guidebook.titration_barrel.page2.text": "발효는 꼭 마실 것에만 쓸 수 있는 게 아니다! 서로 다른 채소 두 가지를 푹 삭혀 만든 김치는 그 자체로도 끝내주게 든든하며, 다른 요리에 곁들여 먹을 때 진가를 발휘한다.", + "book.spectrum.guidebook.titration_barrel.page2.text": "발효는 꼭 마실 것에만 쓸 수 있는 게 아니다! 서로 다른 채소 세 가지를 푹 삭혀 만든 김치는 그 자체로도 끝내주게 든든하며, 다른 요리에 곁들여 먹을 때 진가를 발휘한다.", "book.spectrum.guidebook.titration_barrel.page3.text": "시간은 좀 걸리지만, 그냥 무식하게 재료들을 한데 뭉쳐 조합하는 것보다 훨씬 효율적이다.", "book.spectrum.guidebook.titration_barrel.page4.text": "살짝 발효되어, 여전히 [우유](item://minecraft:milk_bucket)의 능력을 간직하고 있다. 이걸 삼키면 모든 효과가 씻겨나갈 것이다.", "book.spectrum.guidebook.titration_barrel.page5.text": "기가 막힌 간식거리다. 먹는 속도도 아주 빠르고, 뱃속을 적당히 든든하게 채워주기까지 한다.\\\n기분 좋게 달콤하고 상큼한 과일 향이 입안을 감돈다.", @@ -5965,31 +5965,30 @@ "subtitles.block.amethyst_block.chime": "보석 차임", "______vanilla_additions": "Additions:", - "potion.potency.6": "VI", - "potion.potency.7": "VII", - "potion.potency.8": "VIII", - "potion.potency.9": "IX", - "potion.potency.10": "X", - "potion.potency.11": "XI", - "potion.potency.12": "XII", - "potion.potency.13": "XIII", - "potion.potency.14": "XIV", - "potion.potency.15": "XV", - "potion.potency.16": "XVI", - "potion.potency.17": "XVII", - "potion.potency.18": "XVIII", - "potion.potency.19": "XIX", - "potion.potency.20": "XX", - "potion.potency.21": "XXI", - "potion.potency.22": "XXII", - "potion.potency.23": "XXIII", - "potion.potency.24": "XXIV", - "potion.potency.25": "XXV", - "potion.potency.26": "XXVI", - "potion.potency.27": "XXVII", - "potion.potency.28": "XXVIII", - "potion.potency.29": "XXIX", - "potion.potency.30": "XXX", + "potion.potency.6": "VII", + "potion.potency.7": "VIII", + "potion.potency.8": "IX", + "potion.potency.9": "X", + "potion.potency.10": "XI", + "potion.potency.11": "XII", + "potion.potency.12": "XIII", + "potion.potency.13": "XIV", + "potion.potency.14": "XV", + "potion.potency.15": "XVI", + "potion.potency.16": "XVII", + "potion.potency.17": "XVIII", + "potion.potency.18": "XIX", + "potion.potency.19": "XX", + "potion.potency.20": "XXI", + "potion.potency.21": "XXII", + "potion.potency.22": "XXIII", + "potion.potency.23": "XXIV", + "potion.potency.24": "XXV", + "potion.potency.25": "XXVI", + "potion.potency.26": "XXVII", + "potion.potency.27": "XXVIII", + "potion.potency.28": "XXIX", + "potion.potency.29": "XXX", "______sign_text_used_in_structures": "", "signtext.spectrum.stall_to_let.1": "점포 임대", From fb2e7b30225454f58160775e1e90bee810362dfa Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 31 Jul 2026 16:12:07 +0200 Subject: [PATCH 086/477] rework enchant upgrade recipes: - now allow ingredients - different levels are able to ask for different ingredients - make item and xp cost across all recipes more consistent --- .../recipe/enchanter/vanilla_books/lure.json | 8 +- .../minecraft/bane_of_arthropods.json | 17 +---- .../minecraft/blast_protection.json | 67 ++++++++++++---- .../enchantment_upgrade/minecraft/breach.json | 46 +++++++---- .../minecraft/density.json | 46 +++++++---- .../minecraft/depth_strider.json | 35 ++++----- .../minecraft/efficiency.json | 75 ++++++++++++------ .../minecraft/feather_falling.json | 59 +++++++++----- .../minecraft/fire_aspect.json | 42 +++++----- .../minecraft/fire_protection.json | 75 ++++++++++++------ .../minecraft/fortune.json | 56 ++++++++------ .../minecraft/frost_walker.json | 44 ++++++----- .../minecraft/impaling.json | 75 ++++++++++++------ .../minecraft/knockback.json | 56 ++++++++------ .../minecraft/looting.json | 65 +++++++++------- .../minecraft/loyalty.json | 41 ++++++---- .../minecraft/luck_of_the_sea.json | 56 ++++++++------ .../enchantment_upgrade/minecraft/lure.json | 57 ++++++++------ .../minecraft/piercing.json | 75 ++++++++++++------ .../enchantment_upgrade/minecraft/power.json | 67 ++++++++++++---- .../minecraft/projectile_protection.json | 76 +++++++++++++------ .../minecraft/protection.json | 75 ++++++++++++------ .../enchantment_upgrade/minecraft/punch.json | 56 ++++++++------ .../minecraft/quick_charge.json | 56 ++++++++------ .../minecraft/respiration.json | 66 +++++++++------- .../minecraft/riptide.json | 44 ++++++----- .../minecraft/sharpness.json | 67 ++++++++++++---- .../enchantment_upgrade/minecraft/smite.json | 76 +++++++++++++------ .../minecraft/soul_speed.json | 45 ++++++----- .../minecraft/sweeping_edge.json | 74 +++++++++++------- .../minecraft/swift_sneak.json | 63 +++++++++------ .../enchantment_upgrade/minecraft/thorns.json | 65 +++++++++------- .../minecraft/unbreaking.json | 65 +++++++++------- .../minecraft/wind_burst.json | 46 +++++++---- .../spectrum/big_catch.json | 31 ++++---- .../spectrum/clovers_favor.json | 63 +++++++++------ .../spectrum/disarming.json | 42 +++++----- .../spectrum/exuberance.json | 76 +++++++++++++------ .../spectrum/first_strike.json | 46 ++++++----- .../spectrum/improved_critical.json | 42 +++++----- .../enchantment_upgrade/spectrum/inertia.json | 50 +++++++----- .../enchantment_upgrade/spectrum/razing.json | 54 +++++++------ .../spectrum/serendipity_reel.json | 33 ++++---- .../enchantment_upgrade/spectrum/sniping.json | 50 +++++++----- .../spectrum/tight_grip.json | 42 +++++----- .../spectrum/treasure_hunter.json | 50 +++++++----- 46 files changed, 1599 insertions(+), 916 deletions(-) diff --git a/src/main/resources/data/spectrum/recipe/enchanter/vanilla_books/lure.json b/src/main/resources/data/spectrum/recipe/enchanter/vanilla_books/lure.json index b37cf1933e..a50f6f0dcf 100644 --- a/src/main/resources/data/spectrum/recipe/enchanter/vanilla_books/lure.json +++ b/src/main/resources/data/spectrum/recipe/enchanter/vanilla_books/lure.json @@ -8,10 +8,10 @@ "item": "minecraft:book" }, { - "item": "spectrum:blue_pigment" + "item": "spectrum:light_blue_pigment" }, { - "item": "spectrum:blue_pigment" + "item": "spectrum:light_blue_pigment" }, { "item": "minecraft:fishing_rod" @@ -20,10 +20,10 @@ "item": "spectrum:mermaids_gem" }, { - "item": "spectrum:blue_pigment" + "item": "spectrum:light_blue_pigment" }, { - "item": "spectrum:blue_pigment" + "item": "spectrum:light_blue_pigment" }, { "item": "minecraft:fishing_rod" diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/bane_of_arthropods.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/bane_of_arthropods.json index ad066a12b9..37840fc8b6 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/bane_of_arthropods.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/bane_of_arthropods.json @@ -25,20 +25,5 @@ "experience": 400 } ], - "required_advancement": "spectrum:unlocks/enchantments/vanilla_damage", - - - - "bulk_item": { - "item": "spectrum:black_pigment" - }, - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 8 - }, - "level_cap": 8, - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_value": 100 - } + "required_advancement": "spectrum:unlocks/enchantments/vanilla_damage" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/blast_protection.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/blast_protection.json index 7dfad4f3c8..541efd7e24 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/blast_protection.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/blast_protection.json @@ -1,18 +1,57 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:pink_pigment" - }, - "enchantment": "minecraft:blast_protection", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 8 - }, - "level_cap": 8, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_protection", - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_value": 100 - } + "enchantment": "minecraft:blast_protection", + "levels": [ + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 100 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 3200 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 64, + "experience": 6400 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_protection" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/breach.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/breach.json index 3f95bb46fd..d59329c654 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/breach.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/breach.json @@ -1,18 +1,36 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:red_pigment" - }, - "enchantment": "minecraft:breach", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 8 - }, - "level_cap": 5, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_trial_breaching", - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_value": 200 - } + "enchantment": "minecraft:breach", + "levels": [ + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_trial_breaching" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/density.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/density.json index ff81f8db6a..dc9e6ed5a8 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/density.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/density.json @@ -1,18 +1,36 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:cyan_pigment" - }, - "enchantment": "minecraft:density", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 16 - }, - "level_cap": 8, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_trial", - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_value": 400 - } + "enchantment": "minecraft:density", + "levels": [ + { + "ingredient": { + "item": "spectrum:cyan_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:cyan_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:cyan_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 3200 + }, + { + "ingredient": { + "item": "spectrum:cyan_pigment" + }, + "ingredient_count_per_bowl": 64, + "experience": 6400 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_trial" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/depth_strider.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/depth_strider.json index eb96dcc27c..2650e4b171 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/depth_strider.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/depth_strider.json @@ -1,21 +1,22 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:blue_pigment" - }, - "enchantment": "minecraft:depth_strider", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 8, - 32 - ] - }, - "level_cap": 3, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_water", - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_value": 200 - } + "enchantment": "minecraft:depth_strider", + "levels": [ + { + "ingredient": { + "item": "spectrum:blue_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:blue_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_water" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/efficiency.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/efficiency.json index 3009808cce..d0063f73fc 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/efficiency.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/efficiency.json @@ -1,26 +1,57 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:yellow_pigment" - }, - "enchantment": "minecraft:efficiency", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 8 - }, - "level_cap": 8, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_quitoxic", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 200, - 400, - 600, - 800, - 1600, - 2600, - 4000 - ] - } + "enchantment": "minecraft:efficiency", + "levels": [ + { + "ingredient": { + "item": "spectrum:yellow_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:yellow_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:yellow_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:yellow_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:yellow_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 3200 + }, + { + "ingredient": { + "item": "spectrum:yellow_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 6400 + }, + { + "ingredient": { + "item": "spectrum:yellow_pigment" + }, + "ingredient_count_per_bowl": 64, + "experience": 12800 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_quitoxic" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/feather_falling.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/feather_falling.json index ab7719ae8e..617185bf65 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/feather_falling.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/feather_falling.json @@ -1,24 +1,43 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:blue_pigment" - }, - "enchantment": "minecraft:feather_falling", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 8, - 16, - 32, - 64, - 256 - ] - }, - "level_cap": 6, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_quitoxic", - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_value": 250 - } + "enchantment": "minecraft:feather_falling", + "levels": [ + { + "ingredient": { + "item": "spectrum:blue_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:blue_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:blue_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:blue_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:blue_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 3200 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_quitoxic" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/fire_aspect.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/fire_aspect.json index 46a4936ced..74416d0b1b 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/fire_aspect.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/fire_aspect.json @@ -1,21 +1,29 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:red_pigment" - }, - "enchantment": "minecraft:fire_aspect", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_factor": 2.0, - "scaling_value": 8 - }, - "level_cap": 4, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_damage", - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_factor": 2.0, - "scaling_value": 200, - "start": 200 - } + "enchantment": "minecraft:fire_aspect", + "levels": [ + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_damage" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/fire_protection.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/fire_protection.json index ab2f161279..15419ec083 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/fire_protection.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/fire_protection.json @@ -1,26 +1,57 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:pink_pigment" - }, - "enchantment": "minecraft:fire_protection", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 8 - }, - "level_cap": 8, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_protection", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 100, - 200, - 300, - 400, - 800, - 1300, - 2000 - ] - } + "enchantment": "minecraft:fire_protection", + "levels": [ + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 100 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 3200 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 64, + "experience": 6400 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_protection" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/fortune.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/fortune.json index 05f6db2113..c8fafdcc74 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/fortune.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/fortune.json @@ -1,28 +1,36 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:light_blue_pigment" - }, - "enchantment": "minecraft:fortune", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 32, - 128, - 256, - 512 - ] - }, - "level_cap": 5, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_luck", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 100, - 400, - 3000, - 10000 - ] - } + "enchantment": "minecraft:fortune", + "levels": [ + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 3200 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_luck" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/frost_walker.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/frost_walker.json index a14a1243d2..230d9107a8 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/frost_walker.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/frost_walker.json @@ -1,23 +1,29 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:light_gray_pigment" - }, - "enchantment": "minecraft:frost_walker", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_factor": 2.0, - "scaling_value": 8 - }, - "level_cap": 4, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_treasure", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 400, - 1600, - 3200 - ] - } + "enchantment": "minecraft:frost_walker", + "levels": [ + { + "ingredient": { + "item": "spectrum:light_gray_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:light_gray_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:light_gray_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 3200 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_treasure" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/impaling.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/impaling.json index 1c1bcb80c9..388cbbbbe2 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/impaling.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/impaling.json @@ -1,26 +1,57 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:brown_pigment" - }, - "enchantment": "minecraft:impaling", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 8 - }, - "level_cap": 8, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_trident", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 100, - 200, - 300, - 400, - 800, - 1300, - 2000 - ] - } + "enchantment": "minecraft:impaling", + "levels": [ + { + "ingredient": { + "item": "spectrum:brown_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 100 + }, + { + "ingredient": { + "item": "spectrum:brown_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:brown_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:brown_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:brown_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:brown_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 3200 + }, + { + "ingredient": { + "item": "spectrum:brown_pigment" + }, + "ingredient_count_per_bowl": 64, + "experience": 6400 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_trident" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/knockback.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/knockback.json index 7adddf04df..3c559c0f7a 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/knockback.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/knockback.json @@ -1,28 +1,36 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:black_pigment" - }, - "enchantment": "minecraft:knockback", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 8, - 32, - 128, - 256 - ] - }, - "level_cap": 5, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_damage", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 200, - 1600, - 3200, - 6400 - ] - } + "enchantment": "minecraft:knockback", + "levels": [ + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_damage" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/looting.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/looting.json index e51177e5b9..f316905f54 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/looting.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/looting.json @@ -1,30 +1,43 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:light_blue_pigment" - }, - "enchantment": "minecraft:looting", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 8, - 32, - 128, - 512, - 512 - ] - }, - "level_cap": 6, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_luck", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 200, - 500, - 2400, - 10000, - 40000 - ] - } + "enchantment": "minecraft:looting", + "levels": [ + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 3200 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_luck" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/loyalty.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/loyalty.json index 7c9723428d..9a069b7ee1 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/loyalty.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/loyalty.json @@ -1,20 +1,29 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:brown_pigment" - }, - "enchantment": "minecraft:loyalty", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_factor": 2.0, - "scaling_value": 8 - }, - "level_cap": 4, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_trident", - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_factor": 2.0, - "scaling_value": 200 - } + "enchantment": "minecraft:loyalty", + "levels": [ + { + "ingredient": { + "item": "spectrum:brown_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:brown_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:brown_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_trident" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/luck_of_the_sea.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/luck_of_the_sea.json index 49829767bf..5e895b7905 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/luck_of_the_sea.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/luck_of_the_sea.json @@ -1,28 +1,36 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:light_blue_pigment" - }, - "enchantment": "minecraft:luck_of_the_sea", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 8, - 32, - 128, - 256 - ] - }, - "level_cap": 5, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_water_luck", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 200, - 400, - 2000, - 4000 - ] - } + "enchantment": "minecraft:luck_of_the_sea", + "levels": [ + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_water_luck" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/lure.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/lure.json index b1a4860f91..0a7cf2783a 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/lure.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/lure.json @@ -1,28 +1,37 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:blue_pigment" - }, - "enchantment": "minecraft:lure", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 8, - 32, - 128, - 256 - ] - }, - "level_cap": 5, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_water", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 200, - 400, - 2000, - 4000 - ] - } + "enchantment": "minecraft:lure", + + "levels": [ + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_water" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/piercing.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/piercing.json index 35b246f57f..8fce363ec1 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/piercing.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/piercing.json @@ -1,26 +1,57 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:red_pigment" - }, - "enchantment": "minecraft:piercing", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 8 - }, - "level_cap": 8, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_projectile", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 100, - 200, - 300, - 400, - 800, - 1300, - 2000 - ] - } + "enchantment": "minecraft:piercing", + "levels": [ + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 100 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 3200 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 64, + "experience": 6400 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_projectile" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/power.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/power.json index ef98ed0b15..47edf9bfa3 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/power.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/power.json @@ -1,18 +1,57 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:red_pigment" - }, - "enchantment": "minecraft:power", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 8 - }, - "level_cap": 8, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_projectile", - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_value": 200 - } + "enchantment": "minecraft:power", + "levels": [ + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 3200 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 6400 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 64, + "experience": 12800 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_projectile" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/projectile_protection.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/projectile_protection.json index d4a1c07df7..2c30d7c350 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/projectile_protection.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/projectile_protection.json @@ -1,26 +1,58 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:pink_pigment" - }, - "enchantment": "minecraft:projectile_protection", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 8 - }, - "level_cap": 8, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_protection", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 100, - 200, - 300, - 400, - 800, - 1300, - 2000 - ] - } + "enchantment": "minecraft:projectile_protection", + + "levels": [ + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 100 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 3200 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 64, + "experience": 6400 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_protection" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/protection.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/protection.json index 6c8fb6c305..7a38e73ce3 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/protection.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/protection.json @@ -1,26 +1,57 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:pink_pigment" - }, - "enchantment": "minecraft:protection", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 8 - }, - "level_cap": 8, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_protection", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 200, - 400, - 600, - 800, - 1600, - 4000, - 8000 - ] - } + "enchantment": "minecraft:protection", + "levels": [ + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 3200 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 6400 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 64, + "experience": 12800 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_protection" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/punch.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/punch.json index dd4a81ba2f..8b0e4bbca9 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/punch.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/punch.json @@ -1,28 +1,36 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:red_pigment" - }, - "enchantment": "minecraft:punch", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 8, - 32, - 128, - 256 - ] - }, - "level_cap": 5, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_projectile", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 200, - 1600, - 3200, - 6400 - ] - } + "enchantment": "minecraft:punch", + "levels": [ + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 1600 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_projectile" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/quick_charge.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/quick_charge.json index 1fe514ea38..b8213617e2 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/quick_charge.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/quick_charge.json @@ -1,28 +1,36 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:red_pigment" - }, - "enchantment": "minecraft:quick_charge", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 8, - 32, - 512, - 512 - ] - }, - "level_cap": 5, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_projectile", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 200, - 1600, - 5000, - 10000 - ] - } + "enchantment": "minecraft:quick_charge", + "levels": [ + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 3200 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_projectile" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/respiration.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/respiration.json index 45f81a8be8..93e7fe64c1 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/respiration.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/respiration.json @@ -1,30 +1,44 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:blue_pigment" - }, - "enchantment": "minecraft:respiration", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 8, - 32, - 128, - 256, - 512 - ] - }, - "level_cap": 6, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_water", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 100, - 200, - 1600, - 4800, - 10000 - ] - } + "enchantment": "minecraft:respiration", + + "levels": [ + { + "ingredient": { + "item": "spectrum:blue_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 100 + }, + { + "ingredient": { + "item": "spectrum:blue_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:blue_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:blue_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:blue_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_water" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/riptide.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/riptide.json index e9659283ce..87ef1fc66b 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/riptide.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/riptide.json @@ -1,23 +1,29 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:brown_pigment" - }, - "enchantment": "minecraft:riptide", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_factor": 2.0, - "scaling_value": 8 - }, - "level_cap": 3, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_trident", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 200, - 2400, - 10000 - ] - } + "enchantment": "minecraft:riptide", + "levels": [ + { + "ingredient": { + "item": "spectrum:brown_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:brown_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:brown_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_trident" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/sharpness.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/sharpness.json index 1ffae30034..1f5f5d7f9a 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/sharpness.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/sharpness.json @@ -1,18 +1,57 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:black_pigment" - }, - "enchantment": "minecraft:sharpness", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 8 - }, - "level_cap": 8, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_damage", - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_value": 75 - } + "enchantment": "minecraft:sharpness", + "levels": [ + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 3200 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 6400 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 64, + "experience": 12800 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_damage" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/smite.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/smite.json index 8562e0a5cf..91bb04c6e2 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/smite.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/smite.json @@ -1,26 +1,58 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:black_pigment" - }, - "enchantment": "minecraft:smite", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 8 - }, - "level_cap": 8, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_damage", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 100, - 200, - 300, - 400, - 800, - 1300, - 2000 - ] - } + "enchantment": "minecraft:smite", + + "levels": [ + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 100 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 3200 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 64, + "experience": 6400 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_damage" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/soul_speed.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/soul_speed.json index 116797b474..7149b490af 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/soul_speed.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/soul_speed.json @@ -1,23 +1,30 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:light_gray_pigment" - }, - "enchantment": "minecraft:soul_speed", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_factor": 2.0, - "scaling_value": 8 - }, - "level_cap": 3, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_treasure", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 200, - 2400, - 10000 - ] - } + "enchantment": "minecraft:soul_speed", + + "levels": [ + { + "ingredient": { + "item": "spectrum:light_gray_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:light_gray_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:light_gray_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_treasure" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/sweeping_edge.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/sweeping_edge.json index 972932c7ba..88a7040502 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/sweeping_edge.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/sweeping_edge.json @@ -1,32 +1,50 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:red_pigment" - }, - "enchantment": "minecraft:sweeping_edge", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 8, - 32, - 64, - 128, - 256, - 512 - ] - }, - "level_cap": 7, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_damage", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 100, - 400, - 1000, - 2000, - 5000, - 10000 - ] - } + "enchantment": "minecraft:sweeping_edge", + "levels": [ + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 3200 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 64, + "experience": 6400 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_damage" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/swift_sneak.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/swift_sneak.json index 22406f55c4..bc80f13d8d 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/swift_sneak.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/swift_sneak.json @@ -1,28 +1,43 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:light_blue_pigment" - }, - "enchantment": "minecraft:swift_sneak", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 8, - 32, - 128, - 256 - ] - }, - "level_cap": 5, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_swift_sneak", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 200, - 600, - 2000, - 5000 - ] - } + "enchantment": "minecraft:swift_sneak", + "levels": [ + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 3200 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 64, + "experience": 6400 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_swift_sneak" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/thorns.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/thorns.json index 3a87f6fc00..ac46135a16 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/thorns.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/thorns.json @@ -1,30 +1,43 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:pink_pigment" - }, - "enchantment": "minecraft:thorns", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 8, - 32, - 128, - 256, - 512 - ] - }, - "level_cap": 6, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_protection", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 100, - 400, - 2000, - 4000, - 10000 - ] - } + "enchantment": "minecraft:thorns", + "levels": [ + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 3200 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_protection" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/unbreaking.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/unbreaking.json index 0657e0e878..033906c8ad 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/unbreaking.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/unbreaking.json @@ -1,30 +1,43 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:cyan_pigment" - }, - "enchantment": "minecraft:unbreaking", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 8, - 32, - 256, - 512, - 512 - ] - }, - "level_cap": 6, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_unbreaking", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 100, - 400, - 2000, - 4000, - 10000 - ] - } + "enchantment": "minecraft:unbreaking", + "levels": [ + { + "ingredient": { + "item": "spectrum:cyan_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:cyan_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:cyan_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:cyan_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:cyan_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 3200 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_unbreaking" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/wind_burst.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/wind_burst.json index 904bcdb8bb..71d3629afe 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/wind_burst.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/minecraft/wind_burst.json @@ -1,18 +1,36 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:yellow_pigment" - }, - "enchantment": "minecraft:wind_burst", "group": "vanilla_enchantment_upgrades", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 16 - }, - "level_cap": 5, - "required_advancement": "spectrum:unlocks/enchantments/vanilla_damage", - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_value": 200 - } + "enchantment": "minecraft:wind_burst", + "levels": [ + { + "ingredient": { + "item": "spectrum:yellow_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:yellow_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:yellow_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:yellow_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 3200 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/vanilla_damage" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/big_catch.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/big_catch.json index 0a6c93f8fb..35d0e977f0 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/big_catch.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/big_catch.json @@ -1,20 +1,21 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:light_blue_pigment" - }, "enchantment": "spectrum:big_catch", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 32, - 128 - ] + "levels": [ + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 400 }, - "level_cap": 3, - "required_advancement": "spectrum:unlocks/enchantments/big_catch", - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_value": 400 - } + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 800 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/big_catch" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/clovers_favor.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/clovers_favor.json index 1d7102b1d1..a8ad60fec3 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/clovers_favor.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/clovers_favor.json @@ -1,29 +1,42 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:light_blue_pigment" - }, "enchantment": "spectrum:clovers_favor", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 8, - 32, - 128, - 512, - 512 - ] - }, - "level_cap": 6, - "required_advancement": "spectrum:unlocks/enchantments/clovers_favor", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 200, - 400, - 2000, - 10000, - 40000 - ] - } + "levels": [ + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 3200 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 6400 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/clovers_favor" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/disarming.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/disarming.json index 5dbd7cbc1d..0451bd9ba7 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/disarming.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/disarming.json @@ -1,22 +1,28 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:red_pigment" - }, "enchantment": "spectrum:disarming", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_factor": 2.0, - "scaling_value": 8 - }, - "level_cap": 4, - "required_advancement": "spectrum:unlocks/enchantments/disarming", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 400, - 2000, - 10000 - ] - } + "levels": [ + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 1600 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/disarming" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/exuberance.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/exuberance.json index c04264525f..a89f9066f1 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/exuberance.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/exuberance.json @@ -1,28 +1,56 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:purple_pigment" - }, "enchantment": "spectrum:exuberance", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 8, - 16, - 32, - 64, - 128, - 256, - 512, - 512, - 512 - ] - }, - "level_cap": 10, - "required_advancement": "spectrum:unlocks/enchantments/exuberance", - "xp_scaling": { - "type": "spectrum:linear", - "scaling_value": 200, - "start": 400 - } + "levels": [ + { + "ingredient": { + "item": "spectrum:purple_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:purple_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:purple_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:purple_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:purple_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 3200 + }, + { + "ingredient": { + "item": "spectrum:purple_pigment" + }, + "ingredient_count_per_bowl": 32, + "experience": 6400 + }, + { + "ingredient": { + "item": "spectrum:purple_pigment" + }, + "ingredient_count_per_bowl": 64, + "experience": 12800 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/exuberance" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/first_strike.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/first_strike.json index 481f4a4e4b..79a5f27464 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/first_strike.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/first_strike.json @@ -1,23 +1,35 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:pink_pigment" - }, "enchantment": "spectrum:first_strike", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_factor": 2.0, - "scaling_value": 8 + "levels": [ + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 1600 }, - "level_cap": 5, - "required_advancement": "spectrum:unlocks/enchantments/first_strike", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 200, - 400, - 2000, - 10000 - ] + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 3200 } +], + "required_advancement": "spectrum:unlocks/enchantments/first_strike" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/improved_critical.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/improved_critical.json index d3b9f17f28..509e80cc28 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/improved_critical.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/improved_critical.json @@ -1,22 +1,28 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:black_pigment" - }, "enchantment": "spectrum:improved_critical", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_factor": 2.0, - "scaling_value": 8 - }, - "level_cap": 4, - "required_advancement": "spectrum:unlocks/enchantments/improved_critical", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 400, - 2000, - 10000 - ] - } + "levels": [ + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 1600 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/improved_critical" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/inertia.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/inertia.json index 54c7e00c1e..0cf1ce40b1 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/inertia.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/inertia.json @@ -1,23 +1,35 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:brown_pigment" - }, "enchantment": "spectrum:inertia", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_factor": 2.0, - "scaling_value": 8 - }, - "level_cap": 5, - "required_advancement": "spectrum:unlocks/enchantments/inertia", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 200, - 400, - 2000, - 10000 - ] - } + "levels": [ + { + "ingredient": { + "item": "spectrum:brown_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:brown_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:brown_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:brown_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 1600 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/inertia" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/razing.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/razing.json index 3a6e4ad19e..df423eda45 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/razing.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/razing.json @@ -1,27 +1,35 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:gray_pigment" - }, "enchantment": "spectrum:razing", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 32, - 128, - 256, - 512 - ] - }, - "level_cap": 5, - "required_advancement": "spectrum:unlocks/enchantments/razing_usage", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 400, - 2000, - 10000, - 10000 - ] - } + "levels": [ + { + "ingredient": { + "item": "spectrum:gray_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:gray_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:gray_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:gray_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 1600 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/razing_usage" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/serendipity_reel.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/serendipity_reel.json index d3338be069..09de5f5f82 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/serendipity_reel.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/serendipity_reel.json @@ -1,20 +1,21 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:light_blue_pigment" - }, "enchantment": "spectrum:serendipity_reel", - "item_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 32, - 128 - ] - }, - "level_cap": 3, - "required_advancement": "spectrum:unlocks/enchantments/serendipity_reel", - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_value": 400 - } + "levels": [ + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 3200 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/serendipity_reel" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/sniping.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/sniping.json index b7a4362c63..5d583a47c7 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/sniping.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/sniping.json @@ -1,23 +1,35 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:green_pigment" - }, "enchantment": "spectrum:sniping", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_factor": 2.0, - "scaling_value": 8 - }, - "level_cap": 5, - "required_advancement": "spectrum:unlocks/enchantments/sniping", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 200, - 1000, - 5000, - 10000 - ] - } + "levels": [ + { + "ingredient": { + "item": "spectrum:green_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:green_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:green_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:green_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 3200 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/sniping" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/tight_grip.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/tight_grip.json index df6bb1003f..af9c1da909 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/tight_grip.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/tight_grip.json @@ -1,22 +1,28 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:yellow_pigment" - }, "enchantment": "spectrum:tight_grip", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_factor": 2.0, - "scaling_value": 8 - }, - "level_cap": 4, - "required_advancement": "spectrum:unlocks/enchantments/tight_grip", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 400, - 2000, - 10000 - ] - } + "levels": [ + { + "ingredient": { + "item": "spectrum:yellow_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:yellow_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:yellow_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 1600 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/tight_grip" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/treasure_hunter.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/treasure_hunter.json index 475c1e4de7..6b5c6a4b7f 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/treasure_hunter.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/treasure_hunter.json @@ -1,23 +1,35 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:light_blue_pigment" - }, "enchantment": "spectrum:treasure_hunter", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_factor": 2.0, - "scaling_value": 8 - }, - "level_cap": 5, - "required_advancement": "spectrum:unlocks/enchantments/treasure_hunter", - "xp_scaling": { - "type": "spectrum:indexed", - "indexes": [ - 200, - 400, - 2000, - 10000 - ] - } + "levels": [ + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 3200 + } + ], + "required_advancement": "spectrum:unlocks/enchantments/treasure_hunter" } \ No newline at end of file From 9d6ff85795df1c6a22a8a85232f3fbcc71aa8688 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 31 Jul 2026 16:14:53 +0200 Subject: [PATCH 087/477] crystalllarieum recipes: rename "fluid_medium" to "fluid" to be consistent with other recipe types --- raw/Generate-CrystallaeriumGrowables.ps1 | 2 +- .../spectrum/recipe/crystallarieum/CrystallarieumRecipe.java | 2 +- .../data/spectrum/recipe/crystallarieum/minecraft/coal.json | 2 +- .../data/spectrum/recipe/crystallarieum/minecraft/copper.json | 2 +- .../data/spectrum/recipe/crystallarieum/minecraft/diamond.json | 2 +- .../data/spectrum/recipe/crystallarieum/minecraft/echo.json | 2 +- .../data/spectrum/recipe/crystallarieum/minecraft/emerald.json | 2 +- .../spectrum/recipe/crystallarieum/minecraft/glowstone.json | 2 +- .../data/spectrum/recipe/crystallarieum/minecraft/gold.json | 2 +- .../data/spectrum/recipe/crystallarieum/minecraft/iron.json | 2 +- .../data/spectrum/recipe/crystallarieum/minecraft/lapis.json | 2 +- .../recipe/crystallarieum/minecraft/netherite_scrap.json | 2 +- .../recipe/crystallarieum/minecraft/prismarine_crystal.json | 2 +- .../data/spectrum/recipe/crystallarieum/minecraft/quartz.json | 2 +- .../data/spectrum/recipe/crystallarieum/minecraft/redstone.json | 2 +- .../data/spectrum/recipe/crystallarieum/spectrum/azurite.json | 2 +- .../data/spectrum/recipe/crystallarieum/spectrum/bismuth.json | 2 +- .../spectrum/recipe/crystallarieum/spectrum/bloodstone.json | 2 +- .../data/spectrum/recipe/crystallarieum/spectrum/malachite.json | 2 +- .../mod_integration/ae2/crystallarieum/certus_quartz.json | 2 +- .../recipe/mod_integration/ae2/crystallarieum/fluix.json | 2 +- .../recipe/mod_integration/create/crystallarieum/zinc.json | 2 +- .../recipe/mod_integration/gobber/crystallarieum/globette.json | 2 +- .../mod_integration/gobber/crystallarieum/globette_end.json | 2 +- .../mod_integration/gobber/crystallarieum/globette_nether.json | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/raw/Generate-CrystallaeriumGrowables.ps1 b/raw/Generate-CrystallaeriumGrowables.ps1 index e69c76c07e..bab51ab8d2 100644 --- a/raw/Generate-CrystallaeriumGrowables.ps1 +++ b/raw/Generate-CrystallaeriumGrowables.ps1 @@ -463,7 +463,7 @@ foreach($entry in $entries.GetEnumerator()) { New-Item -Path ".\crystallarieum\$name`.json" -ItemType File -Force -Value @" { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "$Fluid" }, "ingredient": { diff --git a/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java index 57aa0c5248..b7e7e9a1a0 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java @@ -243,7 +243,7 @@ public static class Serializer implements RecipeSerializer ).fieldOf("ink_cost_tier").forGetter(recipe -> recipe.inkPerSecond), Codec.BOOL.optionalFieldOf("grows_without_catalyst", false).forGetter(recipe -> recipe.growsWithoutCatalyst), CrystallarieumCatalyst.CODEC.listOf().fieldOf("catalysts").forGetter(recipe -> recipe.catalysts), - FluidIngredient.CODEC.fieldOf("fluid_medium").forGetter(recipe -> recipe.medium), + FluidIngredient.CODEC.fieldOf("fluid").forGetter(recipe -> recipe.medium), ItemStack.CODEC.listOf().optionalFieldOf("additional_recipe_manager_results", ImmutableList.of()).forGetter(recipe -> recipe.additionalResults) ).apply(i, CrystallarieumRecipe::new)); diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/coal.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/coal.json index 5994a8592c..2334e16208 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/coal.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/coal.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "spectrum:liquid_crystal" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/copper.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/copper.json index 5c6c217507..06b3b7263f 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/copper.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/copper.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "spectrum:liquid_crystal" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/diamond.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/diamond.json index fad98e347e..c313c66321 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/diamond.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/diamond.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "spectrum:liquid_crystal" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/echo.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/echo.json index 64339e8524..97897ed27b 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/echo.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/echo.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "spectrum:midnight_solution" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/emerald.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/emerald.json index e93d56ba1d..da2b052511 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/emerald.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/emerald.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "spectrum:liquid_crystal" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/glowstone.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/glowstone.json index 162a410c5a..0966da78c6 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/glowstone.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/glowstone.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "spectrum:liquid_crystal" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/gold.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/gold.json index 81c86680cd..3a72b74371 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/gold.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/gold.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "spectrum:liquid_crystal" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/iron.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/iron.json index cb8ff5c0b0..6c42de10e0 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/iron.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/iron.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "spectrum:liquid_crystal" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/lapis.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/lapis.json index 5b74c79062..fbd6b2dc5c 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/lapis.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/lapis.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "spectrum:liquid_crystal" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/netherite_scrap.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/netherite_scrap.json index 4341dc080f..bbe9b64437 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/netherite_scrap.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/netherite_scrap.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "minecraft:lava" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/prismarine_crystal.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/prismarine_crystal.json index cff08dc801..7f14a93bad 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/prismarine_crystal.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/prismarine_crystal.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "minecraft:water" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/quartz.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/quartz.json index d28fd09446..5e70801d7d 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/quartz.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/quartz.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "minecraft:water" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/redstone.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/redstone.json index 2a65e7a336..7fc8edcc04 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/redstone.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/redstone.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "spectrum:liquid_crystal" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/azurite.json b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/azurite.json index f823c4f95a..3c74684799 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/azurite.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/azurite.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "spectrum:liquid_crystal" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bismuth.json b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bismuth.json index 9b287119a8..30b71ab191 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bismuth.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bismuth.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "spectrum:liquid_crystal" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bloodstone.json b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bloodstone.json index 1f341dd65f..e5b3969ac8 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bloodstone.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bloodstone.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "spectrum:liquid_crystal" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/malachite.json b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/malachite.json index a70f7914ac..3b40c59c2a 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/malachite.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/malachite.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "spectrum:liquid_crystal" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/ae2/crystallarieum/certus_quartz.json b/src/main/resources/data/spectrum/recipe/mod_integration/ae2/crystallarieum/certus_quartz.json index 7dc348e089..9006b4ab40 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/ae2/crystallarieum/certus_quartz.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/ae2/crystallarieum/certus_quartz.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "spectrum:liquid_crystal" }, "ingredient": { diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/ae2/crystallarieum/fluix.json b/src/main/resources/data/spectrum/recipe/mod_integration/ae2/crystallarieum/fluix.json index 273c9df65c..803b6faf5d 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/ae2/crystallarieum/fluix.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/ae2/crystallarieum/fluix.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "spectrum:liquid_crystal" }, "ingredient": { diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crystallarieum/zinc.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crystallarieum/zinc.json index 711dee5e2f..152e2b433c 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crystallarieum/zinc.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crystallarieum/zinc.json @@ -1,6 +1,6 @@ { "type": "spectrum:crystallarieum_growing", - "fluid_medium": { + "fluid": { "fluid": "spectrum:liquid_crystal" }, "ingredient": { diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette.json b/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette.json index 2d8d843358..b4890dc29c 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette.json @@ -6,7 +6,7 @@ "ink_color": "spectrum:cyan", "ink_cost_tier": 2, "seconds_per_growth_stage": 60, - "fluid_medium": { + "fluid": { "fluid": "minecraft:water" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette_end.json b/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette_end.json index e100679e5f..6aefc30f4e 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette_end.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette_end.json @@ -6,7 +6,7 @@ "ink_color": "spectrum:gray", "ink_cost_tier": 4, "seconds_per_growth_stage": 60, - "fluid_medium": { + "fluid": { "fluid": "minecraft:water" }, "additional_recipe_manager_results": [ diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette_nether.json b/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette_nether.json index fa581a9f13..4cfdef867f 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette_nether.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette_nether.json @@ -6,7 +6,7 @@ "ink_color": "spectrum:orange", "ink_cost_tier": 3, "seconds_per_growth_stage": 60, - "fluid_medium": { + "fluid": { "fluid": "minecraft:lava" }, "additional_recipe_manager_results": [ From c3dd4ccd3184c02b2c5d79ecab8046212b7c13ce Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 31 Jul 2026 16:31:03 +0200 Subject: [PATCH 088/477] Jesus Christallarieum: catalyst => additive (since they usually get used up) --- raw/Generate-CrystallaeriumGrowables.ps1 | 2 +- .../crystallarieum/CrystallarieumBlock.java | 4 +- .../CrystallarieumBlockEntity.java | 50 +++++++------- .../CrystallarieumBlockEntityRenderer.java | 3 +- .../REI/plugins/CrystallarieumCategory.java | 13 ++-- .../REI/plugins/CrystallarieumDisplay.java | 9 ++- .../recipes/CrystallarieumEmiRecipeGated.java | 23 ++++--- ...BookCrystallarieumGrowingPageRenderer.java | 29 ++++----- .../CrystallarieumAdditive.java | 28 ++++++++ .../CrystallarieumCatalyst.java | 28 -------- .../crystallarieum/CrystallarieumRecipe.java | 48 +++++++------- .../resources/assets/spectrum/lang/en_us.json | 13 ++-- .../resources/assets/spectrum/lang/ko_kr.json | 5 +- .../resources/assets/spectrum/lang/ru_ru.json | 5 +- .../resources/assets/spectrum/lang/zh_cn.json | 5 +- .../recipe/crystallarieum/minecraft/coal.json | 2 +- .../crystallarieum/minecraft/copper.json | 2 +- .../crystallarieum/minecraft/diamond.json | 2 +- .../recipe/crystallarieum/minecraft/echo.json | 2 +- .../crystallarieum/minecraft/emerald.json | 2 +- .../crystallarieum/minecraft/glowstone.json | 2 +- .../recipe/crystallarieum/minecraft/gold.json | 2 +- .../recipe/crystallarieum/minecraft/iron.json | 2 +- .../crystallarieum/minecraft/lapis.json | 2 +- .../minecraft/netherite_scrap.json | 2 +- .../minecraft/prismarine_crystal.json | 2 +- .../crystallarieum/minecraft/quartz.json | 2 +- .../crystallarieum/minecraft/redstone.json | 2 +- .../crystallarieum/spectrum/azurite.json | 2 +- .../crystallarieum/spectrum/bismuth.json | 2 +- .../crystallarieum/spectrum/bloodstone.json | 2 +- .../crystallarieum/spectrum/malachite.json | 2 +- .../ae2/crystallarieum/certus_quartz.json | 2 +- .../ae2/crystallarieum/fluix.json | 2 +- .../create/crystallarieum/zinc.json | 65 ++++++++++--------- .../gobber/crystallarieum/globette.json | 2 +- .../gobber/crystallarieum/globette_end.json | 2 +- .../crystallarieum/globette_nether.json | 2 +- 38 files changed, 182 insertions(+), 192 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumAdditive.java delete mode 100644 src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumCatalyst.java diff --git a/raw/Generate-CrystallaeriumGrowables.ps1 b/raw/Generate-CrystallaeriumGrowables.ps1 index bab51ab8d2..2961f7e622 100644 --- a/raw/Generate-CrystallaeriumGrowables.ps1 +++ b/raw/Generate-CrystallaeriumGrowables.ps1 @@ -478,7 +478,7 @@ foreach($entry in $entries.GetEnumerator()) { "id": "spectrum:pure_$name" } ], - "catalysts": [ + "additives": [ { "consume_chance_per_second": x.x, "growth_acceleration_mod": x.x, diff --git a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlock.java index 2457b70273..ba7aadfde8 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlock.java @@ -5,8 +5,6 @@ import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.blocks.*; -import de.dafuqs.spectrum.blocks.fusion_shrine.*; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.network.chat.*; @@ -112,7 +110,7 @@ else if (stack.getItem() instanceof InkStorageItem inkStorageItem) { crystallarieumBlockEntity.setOwner(player); } } else { - if (exchangeStack(world, pos, player, hand, stack, crystallarieumBlockEntity, CrystallarieumBlockEntity.CATALYST_SLOT_ID)) { + if (exchangeStack(world, pos, player, hand, stack, crystallarieumBlockEntity, CrystallarieumBlockEntity.ADDITIVE_SLOT_ID)) { crystallarieumBlockEntity.setOwner(player); } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java index 976fd46369..24262d8783 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/CrystallarieumBlockEntity.java @@ -32,7 +32,7 @@ public class CrystallarieumBlockEntity extends InWorldInteractionBlockEntity imp private final static FlowAnimator.Factory FACTORY; - protected final static int CATALYST_SLOT_ID = 0; + protected final static int ADDITIVE_SLOT_ID = 0; protected final static int INK_STORAGE_STACK_SLOT_ID = 1; protected final static int INVENTORY_SIZE = 2; @@ -46,7 +46,7 @@ public class CrystallarieumBlockEntity extends InWorldInteractionBlockEntity imp @Nullable protected RecipeHolder currentRecipe; - protected CrystallarieumCatalyst currentCatalyst = CrystallarieumCatalyst.EMPTY; + protected CrystallarieumAdditive currentAdditive = CrystallarieumAdditive.EMPTY; protected FluidTank tank = new SpectrumFluidTank(1000, this); // for performance reasons, the crystallarieum only processes recipe logic every 20 ticks @@ -121,7 +121,7 @@ public static void serverTick(Level world, BlockPos blockPos, BlockState blockSt * gets called 1/second */ private static void tickRecipe(Level world, BlockPos blockPos, CrystallarieumBlockEntity crystallarieum, RecipeHolder recipe) { - if (crystallarieum.currentCatalyst == CrystallarieumCatalyst.EMPTY && !recipe.value().growsWithoutCatalyst()) { + if (crystallarieum.currentAdditive == CrystallarieumAdditive.EMPTY && !recipe.value().growsWithoutAdditive()) { return; } @@ -131,7 +131,7 @@ private static void tickRecipe(Level world, BlockPos blockPos, CrystallarieumBlo } // advance growing - float consumedInkFloat = (recipe.value().getInkPerSecond() * crystallarieum.currentCatalyst.growthAccelerationMod() * crystallarieum.currentCatalyst.inkConsumptionMod()); + float consumedInkFloat = (recipe.value().getInkPerSecond() * crystallarieum.currentAdditive.growthAccelerationMod() * crystallarieum.currentAdditive.inkConsumptionMod()); int consumedInt = Support.getIntFromDecimalWithChance(consumedInkFloat, world.getRandom()); if (crystallarieum.inkStorage.drainEnergy(recipe.value().getInkColor(), consumedInt) < consumedInt) { crystallarieum.canWork = false; @@ -141,16 +141,16 @@ private static void tickRecipe(Level world, BlockPos blockPos, CrystallarieumBlo } crystallarieum.setInkDirty(); - crystallarieum.currentGrowthStageTicks += (int) (SECOND * crystallarieum.currentCatalyst.growthAccelerationMod()); + crystallarieum.currentGrowthStageTicks += (int) (SECOND * crystallarieum.currentAdditive.growthAccelerationMod()); // check if a catalyst should get used up - if (world.getRandom().nextFloat() < crystallarieum.currentCatalyst.consumeChancePerSecond()) { - ItemStack catalystStack = crystallarieum.getItem(CATALYST_SLOT_ID); + if (world.getRandom().nextFloat() < crystallarieum.currentAdditive.consumeChancePerSecond()) { + ItemStack catalystStack = crystallarieum.getItem(ADDITIVE_SLOT_ID); catalystStack.shrink(1); crystallarieum.updateInClientWorld(); if (catalystStack.isEmpty()) { - crystallarieum.currentCatalyst = CrystallarieumCatalyst.EMPTY; - if (!recipe.value().growsWithoutCatalyst()) { + crystallarieum.currentAdditive = CrystallarieumAdditive.EMPTY; + if (!recipe.value().growsWithoutAdditive()) { crystallarieum.canWork = false; } } @@ -165,7 +165,7 @@ private static void tickRecipe(Level world, BlockPos blockPos, CrystallarieumBlo world.setBlockAndUpdate(topPos, nextState.get()); ServerPlayer owner = (ServerPlayer) crystallarieum.getOwnerIfOnline(world); if (owner != null) { - SpectrumAdvancementCriteria.CRYSTALLARIEUM_GROWING.trigger(owner, (ServerLevel) world, topPos, crystallarieum.getItem(CATALYST_SLOT_ID)); + SpectrumAdvancementCriteria.CRYSTALLARIEUM_GROWING.trigger(owner, (ServerLevel) world, topPos, crystallarieum.getItem(ADDITIVE_SLOT_ID)); } } else { crystallarieum.canWork = false; @@ -188,13 +188,13 @@ private static void transferInk(CrystallarieumBlockEntity crystallarieum) { @Override public void inventoryChanged() { if (this.currentRecipe == null || level == null) { - this.currentCatalyst = CrystallarieumCatalyst.EMPTY; + this.currentAdditive = CrystallarieumAdditive.EMPTY; this.canWork = false; } else { - this.currentCatalyst = this.currentRecipe.value().getCatalyst(getItem(CATALYST_SLOT_ID)); + this.currentAdditive = this.currentRecipe.value().getAdditive(getItem(ADDITIVE_SLOT_ID)); BlockState topState = this.level.getBlockState(this.worldPosition.above()); this.canWork = this.currentRecipe.value().getNextState(this.currentRecipe, topState).isPresent() - && (this.currentRecipe.value().growsWithoutCatalyst() || this.currentCatalyst != CrystallarieumCatalyst.EMPTY); + && (this.currentRecipe.value().growsWithoutAdditive() || this.currentAdditive != CrystallarieumAdditive.EMPTY); } super.inventoryChanged(); } @@ -212,11 +212,11 @@ public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup this.tank.readFromNBT(registryLookup, nbt); this.canWork = nbt.getBoolean("CanWork"); this.ownerUUID = PlayerOwnedWithName.readOwnerUUID(nbt); - this.currentCatalyst = CrystallarieumCatalyst.EMPTY; + this.currentAdditive = CrystallarieumAdditive.EMPTY; this.currentRecipe = MultiblockCrafter.getRecipeHolderFromNbt(level, nbt, CrystallarieumRecipe.class); this.currentGrowthStageTicks = nbt.getInt("CurrentGrowthStageDuration"); if (this.currentRecipe != null) { - this.currentCatalyst = this.currentRecipe.value().getCatalyst(getItem(CATALYST_SLOT_ID)); + this.currentAdditive = this.currentRecipe.value().getAdditive(getItem(ADDITIVE_SLOT_ID)); } } @@ -277,15 +277,15 @@ public void acceptStack(ItemStack itemStack, boolean creative, @Nullable UUID pl changed = true; } } else if (this.currentRecipe != null) { - ItemStack currentCatalystStack = getItem(CATALYST_SLOT_ID); + ItemStack currentCatalystStack = getItem(ADDITIVE_SLOT_ID); if (currentCatalystStack.isEmpty()) { - CrystallarieumCatalyst catalyst = this.currentRecipe.value().getCatalyst(itemStack); - if (catalyst != CrystallarieumCatalyst.EMPTY) { - setItem(CATALYST_SLOT_ID, itemStack.copy()); + CrystallarieumAdditive catalyst = this.currentRecipe.value().getAdditive(itemStack); + if (catalyst != CrystallarieumAdditive.EMPTY) { + setItem(ADDITIVE_SLOT_ID, itemStack.copy()); if (!creative) { itemStack.setCount(0); } - this.currentCatalyst = catalyst; + this.currentAdditive = catalyst; changed = true; } } else if (ItemStack.isSameItemSameComponents(currentCatalystStack, itemStack)) { @@ -324,12 +324,12 @@ public void onTopBlockChange(BlockState newState, @Nullable RecipeHolder implements BlockEntityRenderer { @@ -77,7 +76,7 @@ public void render(CrystallarieumBlockEntity crystal, float tickDelta, PoseStack } - ItemStack catalystStack = crystal.getItem(CrystallarieumBlockEntity.CATALYST_SLOT_ID); + ItemStack catalystStack = crystal.getItem(CrystallarieumBlockEntity.ADDITIVE_SLOT_ID); if (catalystStack.isEmpty()) return; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumCategory.java index 5097fb6a64..f96a86e061 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumCategory.java @@ -14,7 +14,6 @@ import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.item.*; -import javax.annotation.*; import java.util.*; @@ -61,16 +60,16 @@ public void setupWidgets(Point startPoint, Rectangle bounds, List widget } // catalysts - widgets.add(Widgets.createLabel(new Point(startPoint.x, startPoint.y + 44), Component.translatable("container.spectrum.rei.crystallarieum.catalyst")).leftAligned().color(0x3f3f3f).noShadow()); + widgets.add(Widgets.createLabel(new Point(startPoint.x, startPoint.y + 44), Component.translatable("container.spectrum.rei.crystallarieum.additive")).leftAligned().color(0x3f3f3f).noShadow()); widgets.add(Widgets.createLabel(new Point(startPoint.x, startPoint.y + 60), Component.translatable("container.spectrum.rei.crystallarieum.speed")).leftAligned().color(0x3f3f3f).noShadow()); widgets.add(Widgets.createLabel(new Point(startPoint.x, startPoint.y + 70), Component.translatable("container.spectrum.rei.crystallarieum.ink_drain")).leftAligned().color(0x3f3f3f).noShadow()); widgets.add(Widgets.createLabel(new Point(startPoint.x, startPoint.y + 80), Component.translatable("container.spectrum.rei.crystallarieum.depletion")).leftAligned().color(0x3f3f3f).noShadow()); int i = 0; int startX = 46; - int offsetPerReagent = 18; - for (CrystallarieumCatalyst catalyst : display.catalysts) { - int offsetX = startPoint.x + startX + offsetPerReagent * i; + int offsetPerAdditive = 18; + for (CrystallarieumAdditive catalyst : display.additives) { + int offsetX = startPoint.x + startX + offsetPerAdditive * i; widgets.add(Widgets.createSlot(new Point(offsetX, startPoint.y + 1 + 38)).markInput().entries(EntryIngredients.ofIngredient(catalyst.ingredient()))); int offsetU = CrystallarieumRecipe.growthSpeedOffsetU(catalyst); @@ -86,8 +85,8 @@ public void setupWidgets(Point startPoint, Rectangle bounds, List widget } // description texts - if (display.growsWithoutCatalyst) { - widgets.add(Widgets.createLabel(new Point(startPoint.x, startPoint.y + 92), Component.translatable("container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_catalyst_optional", display.secondsPerStage)).leftAligned().color(0x3f3f3f).noShadow()); + if (display.growsWithoutAdditive) { + widgets.add(Widgets.createLabel(new Point(startPoint.x, startPoint.y + 92), Component.translatable("container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_additive_optional", display.secondsPerStage)).leftAligned().color(0x3f3f3f).noShadow()); } else { widgets.add(Widgets.createLabel(new Point(startPoint.x, startPoint.y + 92), Component.translatable("container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds", display.secondsPerStage)).leftAligned().color(0x3f3f3f).noShadow()); } diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumDisplay.java index bb252e0145..75d3710d76 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumDisplay.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumDisplay.java @@ -12,16 +12,15 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; import java.util.*; public class CrystallarieumDisplay extends GatedSpectrumDisplay { protected final List growthStages; - protected final List catalysts; + protected final List additives; protected final InkColor inkColor; - protected final boolean growsWithoutCatalyst; + protected final boolean growsWithoutAdditive; protected final int secondsPerStage; public CrystallarieumDisplay(RecipeHolder recipe) { @@ -31,9 +30,9 @@ public CrystallarieumDisplay(RecipeHolder recipe) { for (BlockState state : recipe.value().getGrowthStages()) { growthStages.add(EntryIngredients.of(state.getBlock().asItem())); } - this.catalysts = recipe.value().getCatalysts(); + this.additives = recipe.value().getAdditives(); this.inkColor = recipe.value().getInkColor(); - this.growsWithoutCatalyst = recipe.value().growsWithoutCatalyst(); + this.growsWithoutAdditive = recipe.value().growsWithoutAdditive(); this.secondsPerStage = recipe.value().getSecondsPerGrowthStage(); } diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java index 03d7e82399..14993c8cc8 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java @@ -8,7 +8,6 @@ import dev.emi.emi.api.neoforge.*; import dev.emi.emi.api.stack.*; import dev.emi.emi.api.widget.*; -import dev.emi.emi.platform.neoforge.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.item.crafting.*; @@ -54,29 +53,29 @@ public void addUnlockedWidgets(WidgetHolder widgets) { x += 20; } - // catalysts - widgets.addText(Component.translatable("container.spectrum.rei.crystallarieum.catalyst"), 0, 43, 0x3f3f3f, false); + // additives + widgets.addText(Component.translatable("container.spectrum.rei.crystallarieum.additive"), 0, 43, 0x3f3f3f, false); widgets.addText(Component.translatable("container.spectrum.rei.crystallarieum.speed"), 0, 49 + LINE_HEIGHT, 0x3f3f3f, false); widgets.addText(Component.translatable("container.spectrum.rei.crystallarieum.ink_drain"), 0, 49 + LINE_HEIGHT * 2, 0x3f3f3f, false); widgets.addText(Component.translatable("container.spectrum.rei.crystallarieum.depletion"), 0, 49 + LINE_HEIGHT * 3, 0x3f3f3f, false); - List catalysts = recipe.getCatalysts(); - for (int i = 0; i < catalysts.size(); i++) { - CrystallarieumCatalyst catalyst = catalysts.get(i); + List additives = recipe.getAdditives(); + for (int i = 0; i < additives.size(); i++) { + CrystallarieumAdditive additive = additives.get(i); int xOff = 46 + 18 * i; - widgets.addSlot(EmiIngredient.of(catalyst.ingredient()), xOff, 38); - int offsetU = CrystallarieumRecipe.growthSpeedOffsetU(catalyst); + widgets.addSlot(EmiIngredient.of(additive.ingredient()), xOff, 38); + int offsetU = CrystallarieumRecipe.growthSpeedOffsetU(additive); widgets.addTexture(BACKGROUND_TEXTURE, xOff + 5, 59, 7, 7, offsetU, CrystallarieumRecipe.GROWTH_SPEED_V, 7, 7, 128, 128); - offsetU = CrystallarieumRecipe.consumptionOffsetU(catalyst, offsetU); + offsetU = CrystallarieumRecipe.consumptionOffsetU(additive, offsetU); widgets.addTexture(BACKGROUND_TEXTURE, xOff + 5, 69, 7, 7, offsetU, CrystallarieumRecipe.CONSUMPTION_V, 7, 7, 128, 128); - offsetU = CrystallarieumRecipe.consumeChanceOffsetU(catalyst, offsetU); + offsetU = CrystallarieumRecipe.consumeChanceOffsetU(additive, offsetU); widgets.addTexture(BACKGROUND_TEXTURE, xOff + 5, 79, 7, 7, offsetU, CrystallarieumRecipe.CONSUME_CHANCE_V, 7, 7, 128, 128); } - if (recipe.growsWithoutCatalyst()) { - widgets.addText(Component.translatable("container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_catalyst_optional", recipe.getSecondsPerGrowthStage()), 0, 90, 0x3f3f3f, false); + if (recipe.growsWithoutAdditive()) { + widgets.addText(Component.translatable("container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_additive_optional", recipe.getSecondsPerGrowthStage()), 0, 90, 0x3f3f3f, false); } else { widgets.addText(Component.translatable("container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds", recipe.getSecondsPerGrowthStage()), 0, 90, 0x3f3f3f, false); } diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java index 0dff7d338b..e11efe7b8f 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java @@ -3,7 +3,6 @@ import com.klikli_dev.modonomicon.book.*; import com.klikli_dev.modonomicon.client.gui.book.entry.*; import com.klikli_dev.modonomicon.data.*; -import com.klikli_dev.modonomicon.fluid.*; import com.mojang.blaze3d.systems.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.blocks.crystallarieum.*; @@ -40,21 +39,21 @@ public BookCrystallarieumGrowingPageRenderer(BookGatedRecipePage s.withFont(font))); + catalystText = new BookTextHolder(Component.translatable("container.spectrum.rei.crystallarieum.additive").withStyle(s -> s.withFont(font))); speedText = new BookTextHolder(Component.translatable("container.spectrum.rei.crystallarieum.speed").withStyle(s -> s.withFont(font))); inkDrainText = new BookTextHolder(Component.translatable("container.spectrum.rei.crystallarieum.ink_drain").withStyle(s -> s.withFont(font))); depletionText = new BookTextHolder(Component.translatable("container.spectrum.rei.crystallarieum.depletion").withStyle(s -> s.withFont(font))); } if (page.getRecipe1() != null) { - craftingTimeText1 = new BookTextHolder(Component.translatable(page.getRecipe1().value().growsWithoutCatalyst() - ? "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_catalyst_optional" + craftingTimeText1 = new BookTextHolder(Component.translatable(page.getRecipe1().value().growsWithoutAdditive() + ? "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_additive_optional" : "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds", page.getRecipe1().value().getSecondsPerGrowthStage()).withStyle(s -> s.withFont(font))); } if (page.getRecipe2() != null) { - craftingTimeText2 = new BookTextHolder(Component.translatable(page.getRecipe2().value().growsWithoutCatalyst() - ? "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_catalyst_optional" + craftingTimeText2 = new BookTextHolder(Component.translatable(page.getRecipe2().value().growsWithoutAdditive() + ? "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_additive_optional" : "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds", page.getRecipe2().value().getSecondsPerGrowthStage()).withStyle(s -> s.withFont(font))); } } @@ -77,25 +76,25 @@ protected void drawRecipe(GuiGraphics drawContext, RecipeHolder it = recipe.getGrowthStages().iterator(); BlockState growthState = it.next(); - parentScreen.renderItemStack(drawContext, recipeX + startX + offsetPerReagent, recipeY - 1, mouseX, mouseY, growthState.getBlock().asItem().getDefaultInstance()); + parentScreen.renderItemStack(drawContext, recipeX + startX + offsetPerAdditive, recipeY - 1, mouseX, mouseY, growthState.getBlock().asItem().getDefaultInstance()); int x = 0; while (it.hasNext()) { - parentScreen.renderItemStack(drawContext, recipeX + 62 + offsetPerReagent * x, recipeY + 4, mouseX, mouseY, it.next().getBlock().asItem().getDefaultInstance()); + parentScreen.renderItemStack(drawContext, recipeX + 62 + offsetPerAdditive * x, recipeY + 4, mouseX, mouseY, it.next().getBlock().asItem().getDefaultInstance()); x++; } // crystallarieum - parentScreen.renderItemStack(drawContext, recipeX + startX + offsetPerReagent, recipeY + 8, mouseX, mouseY, CrystallarieumBlock.withColor(SpectrumBlocks.CRYSTALLARIEUM.asItem().getDefaultInstance(), recipe.getInkColor())); + parentScreen.renderItemStack(drawContext, recipeX + startX + offsetPerAdditive, recipeY + 8, mouseX, mouseY, CrystallarieumBlock.withColor(SpectrumBlocks.CRYSTALLARIEUM.asItem().getDefaultInstance(), recipe.getInkColor())); // catalyst text renderBookTextHolder(drawContext, catalystText, 0, 42, BookEntryScreen.PAGE_WIDTH); @@ -107,9 +106,9 @@ protected void drawRecipe(GuiGraphics drawContext, RecipeHolder CODEC = RecordCodecBuilder.create(i -> i.group( + Ingredient.CODEC_NONEMPTY.fieldOf("ingredient").forGetter(CrystallarieumAdditive::ingredient), + Codec.FLOAT.fieldOf("growth_acceleration_mod").forGetter(CrystallarieumAdditive::growthAccelerationMod), + Codec.FLOAT.fieldOf("ink_consumption_mod").forGetter(CrystallarieumAdditive::inkConsumptionMod), + Codec.FLOAT.fieldOf("consume_chance_per_second").forGetter(CrystallarieumAdditive::consumeChancePerSecond) + ).apply(i, CrystallarieumAdditive::new)); + + public static final StreamCodec PACKET_CODEC = StreamCodec.composite( + Ingredient.CONTENTS_STREAM_CODEC, CrystallarieumAdditive::ingredient, + ByteBufCodecs.FLOAT, CrystallarieumAdditive::growthAccelerationMod, + ByteBufCodecs.FLOAT, CrystallarieumAdditive::inkConsumptionMod, + ByteBufCodecs.FLOAT, CrystallarieumAdditive::consumeChancePerSecond, + CrystallarieumAdditive::new + ); + +} diff --git a/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumCatalyst.java b/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumCatalyst.java deleted file mode 100644 index 7c21c5392a..0000000000 --- a/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumCatalyst.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.dafuqs.spectrum.recipe.crystallarieum; - -import com.mojang.serialization.*; -import com.mojang.serialization.codecs.*; -import net.minecraft.network.*; -import net.minecraft.network.codec.*; -import net.minecraft.world.item.crafting.*; - -public record CrystallarieumCatalyst(Ingredient ingredient, float growthAccelerationMod, float inkConsumptionMod, float consumeChancePerSecond) { - - public static final CrystallarieumCatalyst EMPTY = new CrystallarieumCatalyst(Ingredient.EMPTY, 0, 0, 0); - - public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group( - Ingredient.CODEC_NONEMPTY.fieldOf("ingredient").forGetter(CrystallarieumCatalyst::ingredient), - Codec.FLOAT.fieldOf("growth_acceleration_mod").forGetter(CrystallarieumCatalyst::growthAccelerationMod), - Codec.FLOAT.fieldOf("ink_consumption_mod").forGetter(CrystallarieumCatalyst::inkConsumptionMod), - Codec.FLOAT.fieldOf("consume_chance_per_second").forGetter(CrystallarieumCatalyst::consumeChancePerSecond) - ).apply(i, CrystallarieumCatalyst::new)); - - public static final StreamCodec PACKET_CODEC = StreamCodec.composite( - Ingredient.CONTENTS_STREAM_CODEC, CrystallarieumCatalyst::ingredient, - ByteBufCodecs.FLOAT, CrystallarieumCatalyst::growthAccelerationMod, - ByteBufCodecs.FLOAT, CrystallarieumCatalyst::inkConsumptionMod, - ByteBufCodecs.FLOAT, CrystallarieumCatalyst::consumeChancePerSecond, - CrystallarieumCatalyst::new - ); - -} diff --git a/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java index b7e7e9a1a0..fe9c3c75ca 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java @@ -35,12 +35,12 @@ public class CrystallarieumRecipe extends GatedSpectrumRecipe protected final int secondsPerGrowthStage; protected final InkColor inkColor; protected final int inkPerSecond; - protected final boolean growsWithoutCatalyst; - protected final List catalysts; + protected final boolean growsWithoutAdditive; + protected final List additives; protected final FluidIngredient medium; protected final List additionalResults; // these aren't actual results, but recipe managers will treat it as such, showing this recipe as a way to get them. Use for drops of the growth blocks, for example - public CrystallarieumRecipe(String group, boolean secret, Optional requiredAdvancementIdentifier, Ingredient ingredient, List growthStages, int secondsPerGrowthStage, InkColor inkColor, int inkPerSecond, boolean growsWithoutCatalyst, List catalysts, FluidIngredient medium, List additionalResults) { + public CrystallarieumRecipe(String group, boolean secret, Optional requiredAdvancementIdentifier, Ingredient ingredient, List growthStages, int secondsPerGrowthStage, InkColor inkColor, int inkPerSecond, boolean growsWithoutAdditive, List additives, FluidIngredient medium, List additionalResults) { super(group, secret, requiredAdvancementIdentifier); this.ingredient = ingredient; @@ -48,8 +48,8 @@ public CrystallarieumRecipe(String group, boolean secret, Optional 0.2) { if (accel >= 5) @@ -84,8 +84,8 @@ else if (accel < 1) return offset; } - public static int consumptionOffsetU(CrystallarieumCatalyst catalyst, int offsetU) { - float drain = catalyst.inkConsumptionMod(); + public static int consumptionOffsetU(CrystallarieumAdditive additive, int offsetU) { + float drain = additive.inkConsumptionMod(); if (drain >= 5) offsetU = 0; @@ -100,8 +100,8 @@ else if (drain < 1) return 70 + offsetU; } - public static int consumeChanceOffsetU(CrystallarieumCatalyst catalyst, int offsetU) { - float chance = catalyst.consumeChancePerSecond(); + public static int consumeChanceOffsetU(CrystallarieumAdditive additive, int offsetU) { + float chance = additive.consumeChancePerSecond(); if (chance >= 0.25) offsetU = 0; @@ -178,13 +178,13 @@ public Ingredient getIngredientStack() { return ingredient; } - public CrystallarieumCatalyst getCatalyst(ItemStack itemStack) { - for (CrystallarieumCatalyst catalyst : this.catalysts) { - if (catalyst.ingredient().test(itemStack)) { - return catalyst; + public CrystallarieumAdditive getAdditive(ItemStack itemStack) { + for (CrystallarieumAdditive additive : this.additives) { + if (additive.ingredient().test(itemStack)) { + return additive; } } - return CrystallarieumCatalyst.EMPTY; + return CrystallarieumAdditive.EMPTY; } public List getGrowthStages() { @@ -203,12 +203,12 @@ public int getInkPerSecond() { return inkPerSecond; } - public boolean growsWithoutCatalyst() { - return growsWithoutCatalyst; + public boolean growsWithoutAdditive() { + return growsWithoutAdditive; } - public List getCatalysts() { - return this.catalysts; + public List getAdditives() { + return this.additives; } public List getAdditionalResults() { @@ -241,8 +241,8 @@ public static class Serializer implements RecipeSerializer d -> d == 0 ? 0 : (1 << (d - 1)), e -> e == 0 ? 0 : (31 - Integer.numberOfLeadingZeros(e)) + 1 ).fieldOf("ink_cost_tier").forGetter(recipe -> recipe.inkPerSecond), - Codec.BOOL.optionalFieldOf("grows_without_catalyst", false).forGetter(recipe -> recipe.growsWithoutCatalyst), - CrystallarieumCatalyst.CODEC.listOf().fieldOf("catalysts").forGetter(recipe -> recipe.catalysts), + Codec.BOOL.optionalFieldOf("grows_without_additive", false).forGetter(recipe -> recipe.growsWithoutAdditive), + CrystallarieumAdditive.CODEC.listOf().fieldOf("additives").forGetter(recipe -> recipe.additives), FluidIngredient.CODEC.fieldOf("fluid").forGetter(recipe -> recipe.medium), ItemStack.CODEC.listOf().optionalFieldOf("additional_recipe_manager_results", ImmutableList.of()).forGetter(recipe -> recipe.additionalResults) ).apply(i, CrystallarieumRecipe::new)); @@ -256,8 +256,8 @@ public static class Serializer implements RecipeSerializer ByteBufCodecs.VAR_INT, recipe -> recipe.secondsPerGrowthStage, InkColor.PACKET_CODEC, recipe -> recipe.inkColor, ByteBufCodecs.VAR_INT, recipe -> recipe.inkPerSecond, - ByteBufCodecs.BOOL, recipe -> recipe.growsWithoutCatalyst, - CrystallarieumCatalyst.PACKET_CODEC.apply(ByteBufCodecs.list()), recipe -> recipe.catalysts, + ByteBufCodecs.BOOL, recipe -> recipe.growsWithoutAdditive, + CrystallarieumAdditive.PACKET_CODEC.apply(ByteBufCodecs.list()), recipe -> recipe.additives, FluidIngredient.STREAM_CODEC, recipe -> recipe.medium, ItemStack.STREAM_CODEC.apply(ByteBufCodecs.list()), recipe -> recipe.additionalResults, CrystallarieumRecipe::new diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 241fcb1e71..89139e8e38 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -2263,7 +2263,7 @@ "book.spectrum.guidebook.biomes.page0.text": "I still can't imagine how diverse the area down there can be. I mean... if no sunlight ever touches these areas, what can grow there? Sunlight and Water are the basic requirements for life and at least for the Sun part...", "book.spectrum.guidebook.biomes.page1.text": "I would be pleased if I can refute my own statement.", "book.spectrum.guidebook.bismuth.cluster_crushing.text": "When fully grown I can crush the cluster to get more flakes.\\\nI went through the calculations and it seems like the process is self-sustaining!", - "book.spectrum.guidebook.bismuth.crystal_crushing.text": "*Well, if I disregard the catalysts and Ink required, at least...*", + "book.spectrum.guidebook.bismuth.crystal_crushing.text": "*Well, if I disregard the additives and Ink required, at least...*", "book.spectrum.guidebook.bismuth.name": "Bismuth", "book.spectrum.guidebook.bismuth.page0.text": "A metal that shimmers in all the colors of the rainbow.\\\nThe little seedlings I collected are far too small to be of any meaningful use.\\\n\\\nHow do I grow them without a budding block? One thing I noticed: buds seem react to metallic blocks in close vicinity, just like a beacon.", "book.spectrum.guidebook.bismuth.page1.text": "Instead of sacrificing entire blocks of metal, the [Crystallarieum](entry://ink/crystallarieum) provides a controlled substrate that serves as a more efficient way to deliver nutrients.", @@ -2496,7 +2496,7 @@ "book.spectrum.guidebook.crystal_gardens.moss_balls.title": "Moss Balls", "book.spectrum.guidebook.crystal_gardens.page0.text": "Lakes of [Liquid Crystal](entry://general/liquid_crystal) and giant [crystalline structures](entry://dimension/hummingstone) define its appearance.", "book.spectrum.guidebook.crystal_gardens.page1.text": "The ground is covered with a small layer of soil. Not much, but more than enough to cover it with a thick carpet of moss.\\\n\\\nUnlike most other biomes, the many natural light sources in this one seem to allow for the growth of plants here, which I can also find on the surface.", - "book.spectrum.guidebook.crystallarieum.page0.text": "With budding blocks in mind, I designed an Ink-powered device that is able to grow chunks of raw ore into sparkling crystals.\\\n\\\nGrowing resources requires:\n- it being filled with the matching fluid\n- a starter bud thrown in\n- catalysts thrown in\n- a specific color of Ink, supplied via [Flask](entry://ink/ink_flask)", + "book.spectrum.guidebook.crystallarieum.page0.text": "With budding blocks in mind, I designed an Ink-powered device that is able to grow chunks of raw ore into sparkling crystals.\\\n\\\nGrowing resources requires:\n- it being filled with the matching fluid\n- a starter bud thrown in\n- additives thrown in\n- a specific color of Ink, supplied via [Flask](entry://ink/ink_flask)", "book.spectrum.guidebook.crystallarieum.page1.text": "Though my best efforts at growing [gems](entry://general/shards) failed, I quickly realised that it could grow all sorts of other resources.", "book.spectrum.guidebook.crystallarieum.page10.title": "Gold", "book.spectrum.guidebook.crystallarieum.page11.title": "Iron", @@ -2505,8 +2505,8 @@ "book.spectrum.guidebook.crystallarieum.page14.title": "Prismarine", "book.spectrum.guidebook.crystallarieum.page15.title": "Quartz", "book.spectrum.guidebook.crystallarieum.page16.title": "Redstone", - "book.spectrum.guidebook.crystallarieum.page2.text": "Each catalyst has a different effect on bud growth:\\\nwhile one catalyst may reduce the amount of ink required, another may alter the time required.", - "book.spectrum.guidebook.crystallarieum.page2.title": "Catalysts", + "book.spectrum.guidebook.crystallarieum.page2.text": "Each additive has a different effect on bud growth:\\\nwhile one may reduce the amount of ink required, another may alter the growth time.", + "book.spectrum.guidebook.crystallarieum.page2.title": "Additives", "book.spectrum.guidebook.crystallarieum.page3.text": "[#](449900)Metallic resources[#]() require unrefined materials such as [#](bb00bb)Raw Iron[#](), resulting in a [#](bb00bb)Small Iron Bud[#]() that will grow steadily until it can be safely harvested.\\\n\\\nFor [#](449900)crystalline resources[#](), an existing crystal can be used as a seed to grow identical copies of itself.", "book.spectrum.guidebook.crystallarieum.page3.title": "Metals vs. Crystals", "book.spectrum.guidebook.crystallarieum.page4.title": "Coal", @@ -4132,13 +4132,12 @@ "container.spectrum.rei.crafting_time_one_second": "%f second", "container.spectrum.rei.crafting_time_and_xp": "%f seconds – %f XP", "container.spectrum.rei.crafting_time_one_second_and_xp": "%f second – %f XP", - "container.spectrum.rei.crystallarieum.catalyst": "Catalyst:", + "container.spectrum.rei.crystallarieum.additive": "Additive:", "container.spectrum.rei.crystallarieum.speed": "Gr.Speed:", "container.spectrum.rei.crystallarieum.ink_drain": "Ink Drain:", "container.spectrum.rei.crystallarieum.depletion": "Depletion:", "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds": "%f seconds per stage", - "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_catalyst_optional": "%f sec – catalyst opt.", - "container.spectrum.rei.crystallarieum.requires_catalyst": "Requires Catalyst", + "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_additive_optional": "%f sec – additive opt.", "container.spectrum.rei.dragonrot_converting.title": "Dragonrot Dipping", "container.spectrum.rei.enchanter_recipe": "Enchanter Recipe", "container.spectrum.rei.enchanting.title": "Enchanting Items", diff --git a/src/main/resources/assets/spectrum/lang/ko_kr.json b/src/main/resources/assets/spectrum/lang/ko_kr.json index 33c52b356b..98441716bb 100644 --- a/src/main/resources/assets/spectrum/lang/ko_kr.json +++ b/src/main/resources/assets/spectrum/lang/ko_kr.json @@ -4132,13 +4132,12 @@ "container.spectrum.rei.crafting_time_one_second": "%f초", "container.spectrum.rei.crafting_time_and_xp": "%f초 – %f XP", "container.spectrum.rei.crafting_time_one_second_and_xp": "%f초 – %f XP", - "container.spectrum.rei.crystallarieum.catalyst": "촉매:", + "container.spectrum.rei.crystallarieum.additive": "촉매:", "container.spectrum.rei.crystallarieum.speed": "성장 속도:", "container.spectrum.rei.crystallarieum.ink_drain": "잉크 소모:", "container.spectrum.rei.crystallarieum.depletion": "고갈:", "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds": "단계당 %f초", - "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_catalyst_optional": "%f초 – 촉매 선택", - "container.spectrum.rei.crystallarieum.requires_catalyst": "촉매 필요", + "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_additive_optional": "%f초 – 촉매 선택", "container.spectrum.rei.dragonrot_converting.title": "용부액 담그기", "container.spectrum.rei.enchanter_recipe": "마법 부여기 레시피", "container.spectrum.rei.enchanting.title": "아이템 마법 부여", diff --git a/src/main/resources/assets/spectrum/lang/ru_ru.json b/src/main/resources/assets/spectrum/lang/ru_ru.json index 6078d677f8..029b1bda0d 100644 --- a/src/main/resources/assets/spectrum/lang/ru_ru.json +++ b/src/main/resources/assets/spectrum/lang/ru_ru.json @@ -4129,13 +4129,12 @@ "container.spectrum.rei.crafting_time_one_second": "%f секунды(а)", "container.spectrum.rei.crafting_time_and_xp": "%f секунд – %f опыта", "container.spectrum.rei.crafting_time_one_second_and_xp": "%f секунды(а) – %f опыта", - "container.spectrum.rei.crystallarieum.catalyst": "Катализ.:", + "container.spectrum.rei.crystallarieum.additive": "Катализ.:", "container.spectrum.rei.crystallarieum.speed": "Ск. роста:", "container.spectrum.rei.crystallarieum.ink_drain": "Исп. крас.:", "container.spectrum.rei.crystallarieum.depletion": "Использ.:", "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds": "%f секунд за этап", - "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_catalyst_optional": "%f секунд – опциональный катализатор.", - "container.spectrum.rei.crystallarieum.requires_catalyst": "Требуется катализатор", + "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_additive_optional": "%f секунд – опциональный катализатор.", "container.spectrum.rei.dragonrot_converting.title": "Окунание в дракогниль", "container.spectrum.rei.enchanter_recipe": "Рецепты зачарователя", "container.spectrum.rei.enchanting.title": "Зачаровка предметов", diff --git a/src/main/resources/assets/spectrum/lang/zh_cn.json b/src/main/resources/assets/spectrum/lang/zh_cn.json index 1c96da83b3..15be86e36d 100644 --- a/src/main/resources/assets/spectrum/lang/zh_cn.json +++ b/src/main/resources/assets/spectrum/lang/zh_cn.json @@ -2610,13 +2610,12 @@ "container.spectrum.rei.cinderhearth_recipe": "炼化炉配方", "container.spectrum.rei.ink_converting.color": "颜色: %s", "container.spectrum.rei.ink_converting.amount": "数量: %d", - "container.spectrum.rei.crystallarieum.requires_catalyst": "需要催化剂", "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds": "每生长阶段需要%f秒", - "container.spectrum.rei.crystallarieum.catalyst": "催化剂:", + "container.spectrum.rei.crystallarieum.additive": "催化剂:", "container.spectrum.rei.crystallarieum.speed": "生长速度:", "container.spectrum.rei.crystallarieum.ink_drain": "墨水消耗:", "container.spectrum.rei.crystallarieum.depletion": "消耗速度:", - "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_catalyst_optional": "%f 秒 – 催化剂可选", + "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_additive_optional": "%f 秒 – 催化剂可选", "container.spectrum.modonomicon.crystallarieum.catalyst": "催化剂:", "container.spectrum.modonomicon.crystallarieum.speed": "生长速度:", "container.spectrum.modonomicon.crystallarieum.ink_drain": "墨水消耗:", diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/coal.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/coal.json index 2334e16208..f1ff9aed5c 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/coal.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/coal.json @@ -9,7 +9,7 @@ "id": "spectrum:pure_coal" } ], - "catalysts": [ + "additives": [ { "consume_chance_per_second": 0.2, "growth_acceleration_mod": 2.0, diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/copper.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/copper.json index 06b3b7263f..06950f2dca 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/copper.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/copper.json @@ -9,7 +9,7 @@ "id": "spectrum:pure_copper" } ], - "catalysts": [ + "additives": [ { "consume_chance_per_second": 0.2, "growth_acceleration_mod": 4.0, diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/diamond.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/diamond.json index c313c66321..d9d7d21acf 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/diamond.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/diamond.json @@ -9,7 +9,7 @@ "id": "spectrum:pure_diamond" } ], - "catalysts": [ + "additives": [ { "consume_chance_per_second": 0.2, "growth_acceleration_mod": 8.0, diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/echo.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/echo.json index 97897ed27b..8b926629d9 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/echo.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/echo.json @@ -9,7 +9,7 @@ "id": "spectrum:pure_echo" } ], - "catalysts": [ + "additives": [ { "consume_chance_per_second": 0.02, "growth_acceleration_mod": 1.5, diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/emerald.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/emerald.json index da2b052511..09ad940922 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/emerald.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/emerald.json @@ -9,7 +9,7 @@ "id": "spectrum:pure_emerald" } ], - "catalysts": [ + "additives": [ { "consume_chance_per_second": 0.04, "growth_acceleration_mod": 4.0, diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/glowstone.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/glowstone.json index 0966da78c6..25c5370cb0 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/glowstone.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/glowstone.json @@ -9,7 +9,7 @@ "id": "spectrum:pure_glowstone" } ], - "catalysts": [ + "additives": [ { "consume_chance_per_second": 0.1, "growth_acceleration_mod": 16.0, diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/gold.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/gold.json index 3a72b74371..24d0058ba0 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/gold.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/gold.json @@ -9,7 +9,7 @@ "id": "spectrum:pure_gold" } ], - "catalysts": [ + "additives": [ { "consume_chance_per_second": 0.2, "growth_acceleration_mod": 4.0, diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/iron.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/iron.json index 6c42de10e0..6afca10a28 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/iron.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/iron.json @@ -9,7 +9,7 @@ "id": "spectrum:pure_iron" } ], - "catalysts": [ + "additives": [ { "consume_chance_per_second": 0.2, "growth_acceleration_mod": 4.0, diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/lapis.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/lapis.json index fbd6b2dc5c..fddad46bcd 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/lapis.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/lapis.json @@ -9,7 +9,7 @@ "id": "spectrum:pure_lapis" } ], - "catalysts": [ + "additives": [ { "consume_chance_per_second": 0.05, "growth_acceleration_mod": 8.0, diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/netherite_scrap.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/netherite_scrap.json index bbe9b64437..c34f088a06 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/netherite_scrap.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/netherite_scrap.json @@ -9,7 +9,7 @@ "id": "spectrum:pure_netherite_scrap" } ], - "catalysts": [ + "additives": [ { "consume_chance_per_second": 0.02, "growth_acceleration_mod": 1.5, diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/prismarine_crystal.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/prismarine_crystal.json index 7f14a93bad..13dccf13bc 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/prismarine_crystal.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/prismarine_crystal.json @@ -9,7 +9,7 @@ "id": "spectrum:pure_prismarine" } ], - "catalysts": [ + "additives": [ { "consume_chance_per_second": 0.04, "growth_acceleration_mod": 2.0, diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/quartz.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/quartz.json index 5e70801d7d..75b17e9fac 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/quartz.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/quartz.json @@ -9,7 +9,7 @@ "id": "spectrum:pure_quartz" } ], - "catalysts": [ + "additives": [ { "consume_chance_per_second": 0.25, "growth_acceleration_mod": 3.0, diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/redstone.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/redstone.json index 7fc8edcc04..75ca76928d 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/redstone.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/redstone.json @@ -9,7 +9,7 @@ "id": "spectrum:pure_redstone" } ], - "catalysts": [ + "additives": [ { "consume_chance_per_second": 0.01, "growth_acceleration_mod": 8.0, diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/azurite.json b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/azurite.json index 3c74684799..90d5271548 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/azurite.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/azurite.json @@ -9,7 +9,7 @@ "id": "spectrum:pure_azurite" } ], - "catalysts": [ + "additives": [ { "consume_chance_per_second": 0.05, "growth_acceleration_mod": 7.5, diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bismuth.json b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bismuth.json index 30b71ab191..e9ab1e95d2 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bismuth.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bismuth.json @@ -9,7 +9,7 @@ "id": "spectrum:bismuth_crystal" } ], - "catalysts": [ + "additives": [ { "consume_chance_per_second": 0.2, "growth_acceleration_mod": 8.0, diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bloodstone.json b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bloodstone.json index e5b3969ac8..a02a4604e2 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bloodstone.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bloodstone.json @@ -9,7 +9,7 @@ "id": "spectrum:pure_bloodstone" } ], - "catalysts": [ + "additives": [ { "consume_chance_per_second": 0.05, "growth_acceleration_mod": 7.5, diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/malachite.json b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/malachite.json index 3b40c59c2a..860806e66e 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/malachite.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/malachite.json @@ -9,7 +9,7 @@ "id": "spectrum:pure_malachite" } ], - "catalysts": [ + "additives": [ { "consume_chance_per_second": 0.04, "growth_acceleration_mod": 1.0, diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/ae2/crystallarieum/certus_quartz.json b/src/main/resources/data/spectrum/recipe/mod_integration/ae2/crystallarieum/certus_quartz.json index 9006b4ab40..6ddcc8c52f 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/ae2/crystallarieum/certus_quartz.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/ae2/crystallarieum/certus_quartz.json @@ -15,7 +15,7 @@ "id": "spectrum:pure_certus_quartz" } ], - "catalysts": [ + "additives": [ { "ingredient": [ { diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/ae2/crystallarieum/fluix.json b/src/main/resources/data/spectrum/recipe/mod_integration/ae2/crystallarieum/fluix.json index 803b6faf5d..06020a0734 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/ae2/crystallarieum/fluix.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/ae2/crystallarieum/fluix.json @@ -15,7 +15,7 @@ "id": "spectrum:pure_fluix" } ], - "catalysts": [ + "additives": [ { "ingredient": [ { diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crystallarieum/zinc.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crystallarieum/zinc.json index 152e2b433c..cf5b01926f 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crystallarieum/zinc.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crystallarieum/zinc.json @@ -14,38 +14,39 @@ "count": 1, "id": "spectrum:pure_zinc" } - ],"catalysts": [ - { - "ingredient": [ - { - "item": "create:zinc_nugget" - } - ], - "growth_acceleration_mod": 4.0, - "ink_consumption_mod": 0.5, - "consume_chance_per_second": 0.2 - }, - { - "ingredient": [ - { - "item": "spectrum:pure_copper" - } - ], - "growth_acceleration_mod": 8.0, - "ink_consumption_mod": 2.0, - "consume_chance_per_second": 0.05 - }, - { - "ingredient": [ - { - "item": "spectrum:neolith" - } - ], - "growth_acceleration_mod": 1.5, - "ink_consumption_mod": 0.25, - "consume_chance_per_second": 0.02 - } -], + ], + "additives": [ + { + "ingredient": [ + { + "item": "create:zinc_nugget" + } + ], + "growth_acceleration_mod": 4.0, + "ink_consumption_mod": 0.5, + "consume_chance_per_second": 0.2 + }, + { + "ingredient": [ + { + "item": "spectrum:pure_copper" + } + ], + "growth_acceleration_mod": 8.0, + "ink_consumption_mod": 2.0, + "consume_chance_per_second": 0.05 + }, + { + "ingredient": [ + { + "item": "spectrum:neolith" + } + ], + "growth_acceleration_mod": 1.5, + "ink_consumption_mod": 0.25, + "consume_chance_per_second": 0.02 + } + ], "growth_stage_states": [ { "Name": "spectrum:small_zinc_bud", diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette.json b/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette.json index b4890dc29c..9f6ba9a543 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette.json @@ -15,7 +15,7 @@ "id": "spectrum:pure_globette" } ], - "catalysts": [ + "additives": [ { "ingredient": { "item": "gobber2:gobber2_foo" diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette_end.json b/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette_end.json index 6aefc30f4e..8588651c4d 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette_end.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette_end.json @@ -15,7 +15,7 @@ "id": "spectrum:pure_globette_end" } ], - "catalysts": [ + "additives": [ { "ingredient": { "item": "gobber2:gobber2_foo" diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette_nether.json b/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette_nether.json index 4cfdef867f..3442201a52 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette_nether.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/gobber/crystallarieum/globette_nether.json @@ -15,7 +15,7 @@ "id": "spectrum:pure_globette_nether" } ], - "catalysts": [ + "additives": [ { "ingredient": { "item": "gobber2:gobber2_foo" From c9837f14831c1d5866eee855e52c7282b676d0eb Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 31 Jul 2026 16:48:59 +0200 Subject: [PATCH 089/477] format recipes --- .../blasting/blackslag_ores/copper.json | 6 ++- .../blasting/blackslag_ores/diamond.json | 6 ++- .../blasting/blackslag_ores/emerald.json | 6 ++- .../recipe/blasting/blackslag_ores/gold.json | 6 ++- .../recipe/blasting/blackslag_ores/iron.json | 6 ++- .../blasting/blackslag_ores/lapis_lazuli.json | 6 ++- .../blasting/blackslag_ores/redstone.json | 6 ++- .../spectrum/big_catch.json | 2 +- .../spectrum/first_strike.json | 52 +++++++++---------- .../create/crushing/leaves/black.json | 2 +- .../create/crushing/leaves/blue.json | 2 +- .../create/crushing/leaves/brown.json | 2 +- .../create/crushing/leaves/cyan.json | 2 +- .../create/crushing/leaves/gray.json | 2 +- .../create/crushing/leaves/green.json | 2 +- .../create/crushing/leaves/light_blue.json | 2 +- .../create/crushing/leaves/light_gray.json | 2 +- .../create/crushing/leaves/lime.json | 2 +- .../create/crushing/leaves/magenta.json | 2 +- .../create/crushing/leaves/orange.json | 2 +- .../create/crushing/leaves/pink.json | 2 +- .../create/crushing/leaves/purple.json | 2 +- .../create/crushing/leaves/red.json | 2 +- .../create/crushing/leaves/white.json | 2 +- .../create/crushing/leaves/yellow.json | 2 +- .../create/crushing/logs/black.json | 2 +- .../create/crushing/logs/blue.json | 2 +- .../create/crushing/logs/brown.json | 2 +- .../create/crushing/logs/cyan.json | 2 +- .../create/crushing/logs/gray.json | 2 +- .../create/crushing/logs/green.json | 2 +- .../create/crushing/logs/light_blue.json | 2 +- .../create/crushing/logs/light_gray.json | 2 +- .../create/crushing/logs/lime.json | 2 +- .../create/crushing/logs/magenta.json | 2 +- .../create/crushing/logs/orange.json | 2 +- .../create/crushing/logs/pink.json | 2 +- .../create/crushing/logs/purple.json | 2 +- .../create/crushing/logs/white.json | 2 +- .../create/crushing/logs/yellow.json | 2 +- .../recipe/smelting/blackslag_ores/coal.json | 6 ++- .../smelting/blackslag_ores/copper.json | 6 ++- .../smelting/blackslag_ores/diamond.json | 6 ++- .../smelting/blackslag_ores/emerald.json | 6 ++- .../recipe/smelting/blackslag_ores/gold.json | 6 ++- .../recipe/smelting/blackslag_ores/iron.json | 6 ++- .../smelting/blackslag_ores/lapis_lazuli.json | 6 ++- .../smelting/blackslag_ores/redstone.json | 6 ++- 48 files changed, 133 insertions(+), 73 deletions(-) diff --git a/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/copper.json b/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/copper.json index 6e89743df9..ef952c757a 100644 --- a/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/copper.json +++ b/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/copper.json @@ -1,7 +1,11 @@ { "type": "minecraft:blasting", "group": "copper", - "ingredient": [{"item": "spectrum:blackslag_copper_ore"}], + "ingredient": [ + { + "item": "spectrum:blackslag_copper_ore" + } + ], "result": { "id": "minecraft:raw_copper" }, diff --git a/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/diamond.json b/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/diamond.json index 34d56c9c1b..584305ddf3 100644 --- a/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/diamond.json +++ b/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/diamond.json @@ -1,7 +1,11 @@ { "type": "minecraft:blasting", "group": "diamond", - "ingredient": [{"item": "spectrum:blackslag_diamond_ore"}], + "ingredient": [ + { + "item": "spectrum:blackslag_diamond_ore" + } + ], "result": { "id": "minecraft:diamond" }, diff --git a/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/emerald.json b/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/emerald.json index f0da042089..3a9afa4007 100644 --- a/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/emerald.json +++ b/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/emerald.json @@ -1,7 +1,11 @@ { "type": "minecraft:blasting", "group": "emerald", - "ingredient": [{"item": "spectrum:blackslag_emerald_ore"}], + "ingredient": [ + { + "item": "spectrum:blackslag_emerald_ore" + } + ], "result": { "id": "minecraft:emerald" }, diff --git a/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/gold.json b/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/gold.json index 35dfaecfc1..799f59c1cf 100644 --- a/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/gold.json +++ b/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/gold.json @@ -1,7 +1,11 @@ { "type": "minecraft:blasting", "group": "gold_ingot", - "ingredient": [{"item": "spectrum:blackslag_gold_ore"}], + "ingredient": [ + { + "item": "spectrum:blackslag_gold_ore" + } + ], "result": { "id": "minecraft:gold_ingot" }, diff --git a/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/iron.json b/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/iron.json index 1bd28a8486..9c7bff286d 100644 --- a/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/iron.json +++ b/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/iron.json @@ -1,7 +1,11 @@ { "type": "minecraft:blasting", "group": "iron_ingot", - "ingredient": [{"item": "spectrum:blackslag_iron_ore"}], + "ingredient": [ + { + "item": "spectrum:blackslag_iron_ore" + } + ], "result": { "id": "minecraft:iron_ingot" }, diff --git a/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/lapis_lazuli.json b/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/lapis_lazuli.json index d959880632..6b780740e7 100644 --- a/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/lapis_lazuli.json +++ b/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/lapis_lazuli.json @@ -1,7 +1,11 @@ { "type": "minecraft:blasting", "group": "lapis_lazuli", - "ingredient": [{"item": "spectrum:blackslag_lapis_ore"}], + "ingredient": [ + { + "item": "spectrum:blackslag_lapis_ore" + } + ], "result": { "id": "minecraft:lapis_lazuli" }, diff --git a/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/redstone.json b/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/redstone.json index 54de40a388..0a19f96c60 100644 --- a/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/redstone.json +++ b/src/main/resources/data/spectrum/recipe/blasting/blackslag_ores/redstone.json @@ -1,7 +1,11 @@ { "type": "minecraft:blasting", "group": "redstone", - "ingredient": [{"item": "spectrum:blackslag_redstone_ore"}], + "ingredient": [ + { + "item": "spectrum:blackslag_redstone_ore" + } + ], "result": { "id": "minecraft:redstone" }, diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/big_catch.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/big_catch.json index 35d0e977f0..c2b4dba261 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/big_catch.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/big_catch.json @@ -8,7 +8,7 @@ }, "ingredient_count_per_bowl": 2, "experience": 400 - }, + }, { "ingredient": { "item": "spectrum:light_blue_pigment" diff --git a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/first_strike.json b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/first_strike.json index 79a5f27464..714f48c9c6 100644 --- a/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/first_strike.json +++ b/src/main/resources/data/spectrum/recipe/enchantment_upgrade/spectrum/first_strike.json @@ -2,34 +2,34 @@ "type": "spectrum:enchantment_upgrade", "enchantment": "spectrum:first_strike", "levels": [ - { - "ingredient": { - "item": "spectrum:pink_pigment" + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 400 }, - "ingredient_count_per_bowl": 2, - "experience": 400 - }, - { - "ingredient": { - "item": "spectrum:pink_pigment" + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 800 }, - "ingredient_count_per_bowl": 4, - "experience": 800 - }, - { - "ingredient": { - "item": "spectrum:pink_pigment" + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 1600 }, - "ingredient_count_per_bowl": 8, - "experience": 1600 - }, - { - "ingredient": { - "item": "spectrum:pink_pigment" - }, - "ingredient_count_per_bowl": 16, - "experience": 3200 - } -], + { + "ingredient": { + "item": "spectrum:pink_pigment" + }, + "ingredient_count_per_bowl": 16, + "experience": 3200 + } + ], "required_advancement": "spectrum:unlocks/enchantments/first_strike" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/black.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/black.json index 4748101929..4cefcf4b1d 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/black.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/black.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:black_sapling", + "id": "spectrum:black_sapling", "count": 1, "chance": 0.02 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/blue.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/blue.json index 88084a9d6c..cb3f01c3af 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/blue.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/blue.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:blue_sapling", + "id": "spectrum:blue_sapling", "count": 1, "chance": 0.02 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/brown.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/brown.json index 9cfedd86ed..7d23dc37cd 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/brown.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/brown.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:brown_sapling", + "id": "spectrum:brown_sapling", "count": 1, "chance": 0.02 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/cyan.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/cyan.json index 744b1a9af0..dfec52dc3b 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/cyan.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/cyan.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:cyan_sapling", + "id": "spectrum:cyan_sapling", "count": 1, "chance": 0.02 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/gray.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/gray.json index 3fc737dc83..aa35632565 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/gray.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/gray.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:gray_sapling", + "id": "spectrum:gray_sapling", "count": 1, "chance": 0.02 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/green.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/green.json index 7d0213f5de..182d124783 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/green.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/green.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:green_sapling", + "id": "spectrum:green_sapling", "count": 1, "chance": 0.02 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/light_blue.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/light_blue.json index b4473fd98c..fdf9675cd2 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/light_blue.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/light_blue.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:light_blue_sapling", + "id": "spectrum:light_blue_sapling", "count": 1, "chance": 0.02 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/light_gray.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/light_gray.json index f2dfa34e74..7acd7ddb9e 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/light_gray.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/light_gray.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:light_gray_sapling", + "id": "spectrum:light_gray_sapling", "count": 1, "chance": 0.02 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/lime.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/lime.json index 87c92628da..402d8f343e 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/lime.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/lime.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:lime_sapling", + "id": "spectrum:lime_sapling", "count": 1, "chance": 0.02 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/magenta.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/magenta.json index 168c8f3a7f..c53500fcf6 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/magenta.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/magenta.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:magenta_sapling", + "id": "spectrum:magenta_sapling", "count": 1, "chance": 0.02 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/orange.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/orange.json index 8a461146e4..2d1a7b5173 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/orange.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/orange.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:orange_sapling", + "id": "spectrum:orange_sapling", "count": 1, "chance": 0.02 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/pink.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/pink.json index b772d7f8e9..5577590ddd 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/pink.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/pink.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:pink_sapling", + "id": "spectrum:pink_sapling", "count": 1, "chance": 0.02 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/purple.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/purple.json index ef49646033..feb98a6a99 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/purple.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/purple.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:purple_sapling", + "id": "spectrum:purple_sapling", "count": 1, "chance": 0.02 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/red.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/red.json index f07abc0f68..ddfc49ead6 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/red.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/red.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:red_sapling", + "id": "spectrum:red_sapling", "count": 1, "chance": 0.02 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/white.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/white.json index 4449adc86e..9641dc38d1 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/white.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/white.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:white_sapling", + "id": "spectrum:white_sapling", "count": 1, "chance": 0.02 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/yellow.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/yellow.json index f742932588..ef5edea26d 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/yellow.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/leaves/yellow.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:yellow_sapling", + "id": "spectrum:yellow_sapling", "count": 1, "chance": 0.02 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/black.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/black.json index 298ccf85e2..8daeb9c347 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/black.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/black.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:black_pigment", + "id": "spectrum:black_pigment", "count": 1, "chance": 0.5 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/blue.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/blue.json index e78ccff57d..c68e67ec6e 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/blue.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/blue.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:blue_pigment", + "id": "spectrum:blue_pigment", "count": 1, "chance": 0.5 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/brown.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/brown.json index 38a4ade1e8..d0926bd1a9 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/brown.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/brown.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:brown_pigment", + "id": "spectrum:brown_pigment", "count": 1, "chance": 0.5 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/cyan.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/cyan.json index db83a9deb6..58a3648421 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/cyan.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/cyan.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:cyan_pigment", + "id": "spectrum:cyan_pigment", "count": 1, "chance": 0.5 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/gray.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/gray.json index bd8495180f..5d3aa01cc2 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/gray.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/gray.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:gray_pigment", + "id": "spectrum:gray_pigment", "count": 1, "chance": 0.5 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/green.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/green.json index e86bca1669..d809087dbf 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/green.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/green.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:green_pigment", + "id": "spectrum:green_pigment", "count": 1, "chance": 0.5 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/light_blue.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/light_blue.json index d2e6affe5f..4ef7d5e728 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/light_blue.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/light_blue.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:light_blue_pigment", + "id": "spectrum:light_blue_pigment", "count": 1, "chance": 0.5 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/light_gray.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/light_gray.json index d54bf84d53..ecd3117db1 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/light_gray.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/light_gray.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:light_gray_pigment", + "id": "spectrum:light_gray_pigment", "count": 1, "chance": 0.5 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/lime.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/lime.json index 00580cdfc4..4ede8e60b4 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/lime.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/lime.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:lime_pigment", + "id": "spectrum:lime_pigment", "count": 1, "chance": 0.5 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/magenta.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/magenta.json index 6027798574..603689be6c 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/magenta.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/magenta.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:magenta_pigment", + "id": "spectrum:magenta_pigment", "count": 1, "chance": 0.5 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/orange.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/orange.json index 11d1595b74..0ef5aaa8a1 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/orange.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/orange.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:orange_pigment", + "id": "spectrum:orange_pigment", "count": 1, "chance": 0.5 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/pink.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/pink.json index 9e70c5e7f1..977c35e207 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/pink.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/pink.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:pink_pigment", + "id": "spectrum:pink_pigment", "count": 1, "chance": 0.5 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/purple.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/purple.json index 23b7a47ce5..89f264e66e 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/purple.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/purple.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:purple_pigment", + "id": "spectrum:purple_pigment", "count": 1, "chance": 0.5 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/white.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/white.json index 620e6ad2e5..f574885547 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/white.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/white.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:white_pigment", + "id": "spectrum:white_pigment", "count": 1, "chance": 0.5 } diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/yellow.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/yellow.json index 794c04d7e2..6960a3619b 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/yellow.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/crushing/logs/yellow.json @@ -12,7 +12,7 @@ "chance": 1.0 }, { - "id": "spectrum:yellow_pigment", + "id": "spectrum:yellow_pigment", "count": 1, "chance": 0.5 } diff --git a/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/coal.json b/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/coal.json index 0def1f6522..3cd6a579a7 100644 --- a/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/coal.json +++ b/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/coal.json @@ -1,7 +1,11 @@ { "type": "minecraft:smelting", "group": "coal", - "ingredient": [{"item": "spectrum:blackslag_coal_ore"}], + "ingredient": [ + { + "item": "spectrum:blackslag_coal_ore" + } + ], "result": { "id": "minecraft:coal" }, diff --git a/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/copper.json b/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/copper.json index 9debd48359..6da5679fd5 100644 --- a/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/copper.json +++ b/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/copper.json @@ -1,7 +1,11 @@ { "type": "minecraft:smelting", "group": "copper", - "ingredient": [{"item": "spectrum:blackslag_copper_ore"}], + "ingredient": [ + { + "item": "spectrum:blackslag_copper_ore" + } + ], "result": { "id": "minecraft:raw_copper" }, diff --git a/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/diamond.json b/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/diamond.json index a4865cc61a..5dc9ebc7e4 100644 --- a/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/diamond.json +++ b/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/diamond.json @@ -1,7 +1,11 @@ { "type": "minecraft:smelting", "group": "diamond", - "ingredient": [{"item": "spectrum:blackslag_diamond_ore"}], + "ingredient": [ + { + "item": "spectrum:blackslag_diamond_ore" + } + ], "result": { "id": "minecraft:diamond" }, diff --git a/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/emerald.json b/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/emerald.json index a7efa8d63e..75d73b731c 100644 --- a/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/emerald.json +++ b/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/emerald.json @@ -1,7 +1,11 @@ { "type": "minecraft:smelting", "group": "emerald", - "ingredient": [{"item": "spectrum:blackslag_emerald_ore"}], + "ingredient": [ + { + "item": "spectrum:blackslag_emerald_ore" + } + ], "result": { "id": "minecraft:emerald" }, diff --git a/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/gold.json b/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/gold.json index 53c5999fb6..8c775aa4df 100644 --- a/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/gold.json +++ b/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/gold.json @@ -1,7 +1,11 @@ { "type": "minecraft:smelting", "group": "gold_ingot", - "ingredient": [{"item": "spectrum:blackslag_gold_ore"}], + "ingredient": [ + { + "item": "spectrum:blackslag_gold_ore" + } + ], "result": { "id": "minecraft:gold_ingot" }, diff --git a/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/iron.json b/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/iron.json index 68ed8eff99..7067546ad0 100644 --- a/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/iron.json +++ b/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/iron.json @@ -1,7 +1,11 @@ { "type": "minecraft:smelting", "group": "iron_ingot", - "ingredient": [{"item": "spectrum:blackslag_iron_ore"}], + "ingredient": [ + { + "item": "spectrum:blackslag_iron_ore" + } + ], "result": { "id": "minecraft:iron_ingot" }, diff --git a/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/lapis_lazuli.json b/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/lapis_lazuli.json index 457724e256..fe43b82556 100644 --- a/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/lapis_lazuli.json +++ b/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/lapis_lazuli.json @@ -1,7 +1,11 @@ { "type": "minecraft:smelting", "group": "lapis_lazuli", - "ingredient": [{"item": "spectrum:blackslag_lapis_ore"}], + "ingredient": [ + { + "item": "spectrum:blackslag_lapis_ore" + } + ], "result": { "id": "minecraft:lapis_lazuli" }, diff --git a/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/redstone.json b/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/redstone.json index 3c42b49828..cf96261bc7 100644 --- a/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/redstone.json +++ b/src/main/resources/data/spectrum/recipe/smelting/blackslag_ores/redstone.json @@ -1,7 +1,11 @@ { "type": "minecraft:smelting", "group": "redstone", - "ingredient": [{"item": "spectrum:blackslag_redstone_ore"}], + "ingredient": [ + { + "item": "spectrum:blackslag_redstone_ore" + } + ], "result": { "id": "minecraft:redstone" }, From 3ff454a9493621fc39c0c8521c6c174cbbf12409 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 31 Jul 2026 17:02:25 +0200 Subject: [PATCH 090/477] immensely important clover model chance --- .../assets/spectrum/models/block/clover.json | 179 +++++------------- 1 file changed, 43 insertions(+), 136 deletions(-) diff --git a/src/main/resources/assets/spectrum/models/block/clover.json b/src/main/resources/assets/spectrum/models/block/clover.json index 5fc0f385ca..908e786aab 100644 --- a/src/main/resources/assets/spectrum/models/block/clover.json +++ b/src/main/resources/assets/spectrum/models/block/clover.json @@ -1,138 +1,45 @@ { - "parent": "minecraft:block/block", - "credit": "Made with Blockbench", - "textures": { - "0": "spectrum:block/clover", - "particle": "spectrum:block/clover" - }, - "elements": [ - { - "from": [ - 2, - 1, - 2 - ], - "to": [ - 15, - 1, - 14 - ], - "faces": { - "north": { - "uv": [ - 0, - 0, - 12, - 1 - ], - "tintindex": 0, - "texture": "#0" - }, - "east": { - "uv": [ - 0, - 0, - 12, - 1 - ], - "tintindex": 0, - "texture": "#0" - }, - "south": { - "uv": [ - 0, - 0, - 12, - 1 - ], - "tintindex": 0, - "texture": "#0" - }, - "west": { - "uv": [ - 0, - 0, - 12, - 1 - ], - "tintindex": 0, - "texture": "#0" - }, - "up": { - "uv": [ - 1, - 1, - 14, - 14 - ], - "tintindex": 0, - "texture": "#0" - }, - "down": { - "uv": [ - 1, - 1, - 14, - 14 - ], - "tintindex": 0, - "texture": "#0" - } - } - }, - { - "from": [ - 8, - 0, - 8 - ], - "to": [ - 9, - 1, - 9 - ], - "faces": { - "north": { - "uv": [ - 6, - 7, - 7, - 8 - ], - "tintindex": 0, - "texture": "#0" - }, - "east": { - "uv": [ - 6, - 7, - 7, - 8 - ], - "tintindex": 0, - "texture": "#0" - }, - "south": { - "uv": [ - 8, - 5, - 9, - 6 - ], - "tintindex": 0, - "texture": "#0" - }, - "west": { - "uv": [ - 5, - 7, - 6, - 8 - ], - "tintindex": 0, - "texture": "#0" - } - } - } - ] + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", + "textures": { + "0": "spectrum:block/clover", + "particle": "spectrum:block/clover" + }, + "elements": [ + { + "from": [2, 1, 2], + "to": [15, 1, 14], + "faces": { + "north": {"uv": [0, 0, 12, 1], "texture": "#0", "tintindex": 0}, + "east": {"uv": [0, 0, 12, 1], "texture": "#0", "tintindex": 0}, + "south": {"uv": [0, 0, 12, 1], "texture": "#0", "tintindex": 0}, + "west": {"uv": [0, 0, 12, 1], "texture": "#0", "tintindex": 0}, + "up": {"uv": [1, 1, 14, 14], "texture": "#0", "tintindex": 0}, + "down": {"uv": [1, 1, 14, 14], "texture": "#0", "tintindex": 0} + } + }, + { + "from": [8.5, 0, 8], + "to": [9.5, 1, 8], + "rotation": {"angle": -45, "axis": "y", "origin": [9, 0.5, 8]}, + "faces": { + "north": {"uv": [6, 7, 7, 8], "texture": "#0", "tintindex": 0}, + "east": {"uv": [6, 7, 7, 8], "texture": "#0", "tintindex": 0}, + "south": {"uv": [8, 5, 9, 6], "texture": "#0", "tintindex": 0}, + "west": {"uv": [5, 7, 6, 8], "texture": "#0", "tintindex": 0} + } + }, + { + "from": [8.5, 0, 8], + "to": [9.5, 1, 8], + "rotation": {"angle": 45, "axis": "y", "origin": [9, 0.5, 8]}, + "faces": { + "north": {"uv": [6, 7, 7, 8], "texture": "#0", "tintindex": 0}, + "east": {"uv": [6, 7, 7, 8], "texture": "#0", "tintindex": 0}, + "south": {"uv": [8, 5, 9, 6], "texture": "#0", "tintindex": 0}, + "west": {"uv": [5, 7, 6, 8], "texture": "#0", "tintindex": 0} + } + } + ] } \ No newline at end of file From 0eb42abeb6d1d878fbefbc38cb238d82e0cc8fb1 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 31 Jul 2026 17:03:10 +0200 Subject: [PATCH 091/477] bump version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 8b342af1da..b8d461081a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,7 +14,7 @@ neoforge_version_range=[21.1.186,) # Mod Properties mod_id=spectrum -mod_version=1.11.8-1.21.1-neo +mod_version=1.11.9-1.21.1-neo maven_group=de.dafuqs archives_base_name=Spectrum From 656a75a5a2a76fa259c1e2596901f06c27717b44 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 31 Jul 2026 17:14:32 +0200 Subject: [PATCH 092/477] cleanup item groups --- .../dafuqs/spectrum/compat/ae2/AE2Compat.java | 26 ++++++++++- .../registries/SpectrumItemGroups.java | 43 ------------------- 2 files changed, 25 insertions(+), 44 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java b/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java index d8bb311108..1a4c72c0c2 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java @@ -1,18 +1,23 @@ package de.dafuqs.spectrum.compat.ae2; +import de.dafuqs.fractal.api.*; import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.item_group.*; import de.dafuqs.spectrum.blocks.crystallarieum.*; import de.dafuqs.spectrum.compat.*; +import de.dafuqs.spectrum.compat.create.*; import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.registries.SpectrumItems.*; import de.dafuqs.spectrum.registries.client.*; import net.minecraft.client.renderer.*; +import net.minecraft.resources.*; import net.minecraft.world.item.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.material.*; import net.neoforged.bus.api.*; import net.neoforged.fml.event.lifecycle.*; +import net.neoforged.neoforge.common.*; import net.neoforged.neoforge.registries.*; import static de.dafuqs.spectrum.registries.SpectrumBlocks.*; @@ -34,7 +39,7 @@ public class AE2Compat extends SpectrumIntegrationPacks.ModIntegrationPack { @Override public void register(IEventBus modBus) { - + NeoForge.EVENT_BUS.addListener(CreateCompat::addItemsToSubTabs); } @Override @@ -47,4 +52,23 @@ public void registerClient(FMLClientSetupEvent event) { ItemBlockRenderTypes.setRenderLayer(FLUIX_CLUSTER.get(), RenderType.cutout()); } + @SubscribeEvent + public static void addItemsToSubTabs(CreativeSubTabEvent event) { + ResourceLocation subGroupId = event.subGroup().getIdentifier(); + + if (subGroupId.equals(ItemGroupIDs.SUBTAB_PURE_RESOURCES)) { + event.getItemDisplayBuilder().accept(PURE_CERTUS_QUARTZ); + event.getItemDisplayBuilder().accept(SMALL_CERTUS_QUARTZ_BUD); + event.getItemDisplayBuilder().accept(LARGE_CERTUS_QUARTZ_BUD); + event.getItemDisplayBuilder().accept(CERTUS_QUARTZ_CLUSTER); + event.getItemDisplayBuilder().accept(PURE_CERTUS_QUARTZ_BLOCK); + + event.getItemDisplayBuilder().accept(PURE_FLUIX); + event.getItemDisplayBuilder().accept(SMALL_FLUIX_BUD); + event.getItemDisplayBuilder().accept(LARGE_FLUIX_BUD); + event.getItemDisplayBuilder().accept(FLUIX_CLUSTER); + event.getItemDisplayBuilder().accept(PURE_FLUIX_BLOCK); + } + } + } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java index 688040b1c1..a1d45bbcc8 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java @@ -752,49 +752,6 @@ public static void registerSubTabs() { entries.accept(SpectrumBlocks.LARGE_AZURITE_BUD); entries.accept(SpectrumBlocks.AZURITE_CLUSTER); entries.accept(SpectrumItems.PURE_AZURITE); - - if (SpectrumIntegrationPacks.isIntegrationPackActive(SpectrumIntegrationPacks.AE2_ID)) { - entries.accept(AE2Compat.PURE_CERTUS_QUARTZ); - entries.accept(AE2Compat.SMALL_CERTUS_QUARTZ_BUD); - entries.accept(AE2Compat.LARGE_CERTUS_QUARTZ_BUD); - entries.accept(AE2Compat.CERTUS_QUARTZ_CLUSTER); - entries.accept(AE2Compat.PURE_CERTUS_QUARTZ_BLOCK); - - entries.accept(AE2Compat.PURE_FLUIX); - entries.accept(AE2Compat.SMALL_FLUIX_BUD); - entries.accept(AE2Compat.LARGE_FLUIX_BUD); - entries.accept(AE2Compat.FLUIX_CLUSTER); - entries.accept(AE2Compat.PURE_FLUIX_BLOCK); - } - - if (SpectrumIntegrationPacks.isIntegrationPackActive(SpectrumIntegrationPacks.CREATE_ID)) { - entries.accept(CreateCompat.PURE_ZINC); - entries.accept(CreateCompat.SMALL_ZINC_BUD); - entries.accept(CreateCompat.LARGE_ZINC_BUD); - entries.accept(CreateCompat.ZINC_CLUSTER); - entries.accept(CreateCompat.PURE_ZINC_BLOCK); - } - - if (SpectrumIntegrationPacks.isIntegrationPackActive(SpectrumIntegrationPacks.GOBBER_ID)) { - entries.accept(GobberCompat.PURE_GLOBETTE); - entries.accept(GobberCompat.SMALL_GLOBETTE_BUD); - entries.accept(GobberCompat.LARGE_GLOBETTE_BUD); - entries.accept(GobberCompat.GLOBETTE_CLUSTER); - entries.accept(GobberCompat.PURE_GLOBETTE_BLOCK); - - entries.accept(GobberCompat.PURE_GLOBETTE_NETHER); - entries.accept(GobberCompat.SMALL_GLOBETTE_NETHER_BUD); - entries.accept(GobberCompat.LARGE_GLOBETTE_NETHER_BUD); - entries.accept(GobberCompat.GLOBETTE_NETHER_CLUSTER); - entries.accept(GobberCompat.PURE_GLOBETTE_NETHER_BLOCK); - - entries.accept(GobberCompat.PURE_GLOBETTE_END); - entries.accept(GobberCompat.SMALL_GLOBETTE_END_BUD); - entries.accept(GobberCompat.LARGE_GLOBETTE_END_BUD); - entries.accept(GobberCompat.GLOBETTE_END_CLUSTER); - entries.accept(GobberCompat.PURE_GLOBETTE_END_BLOCK); - } - }).build(); new CreativeSubTab.Builder(MAIN.get(), ItemGroupIDs.SUBTAB_BLOCKS, Component.translatable("itemGroup.spectrum.blocks")) From a3b25b4e643573b30664dbdc3958376db9bc0ff1 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 11:12:41 +0200 Subject: [PATCH 093/477] fix draconic twinsword Better Combat anim --- .../data/spectrum/weapon_attributes/draconic_twinsword.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/data/spectrum/weapon_attributes/draconic_twinsword.json b/src/main/resources/data/spectrum/weapon_attributes/draconic_twinsword.json index 82bb2d13c8..68b51796ce 100644 --- a/src/main/resources/data/spectrum/weapon_attributes/draconic_twinsword.json +++ b/src/main/resources/data/spectrum/weapon_attributes/draconic_twinsword.json @@ -1,4 +1,4 @@ { - "parent": "spectrum:singlehanded_twin_blade", + "parent": "bettercombat:twin_blade", "two_handed": false } \ No newline at end of file From 510627d273e43686126b7ec32ebf93823e8639fa Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 11:21:15 +0200 Subject: [PATCH 094/477] Thank you, sable. Fixes #933 --- .../mixin/AbstractBlockStateMixin.java | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java index e6589a3c87..72b2994a2a 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java @@ -5,16 +5,20 @@ import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.server.level.*; +import net.minecraft.tags.*; import net.minecraft.world.item.*; import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; +import net.minecraft.world.level.chunk.*; import net.minecraft.world.level.material.*; import net.minecraft.world.phys.shapes.*; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; +import javax.swing.text.html.*; + @Mixin(BlockBehaviour.BlockStateBase.class) public abstract class AbstractBlockStateMixin { @@ -28,21 +32,36 @@ public abstract class AbstractBlockStateMixin { } // https://github.com/apace100/water-walking-fix - @ModifyReturnValue(method = "getCollisionShape(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/phys/shapes/CollisionContext;)Lnet/minecraft/world/phys/shapes/VoxelShape;", at = @At( - "RETURN")) + @ModifyReturnValue(method = "getCollisionShape(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/phys/shapes/CollisionContext;)Lnet/minecraft/world/phys/shapes/VoxelShape;", at = @At("RETURN")) public VoxelShape getFluidloggedCollisionShape(VoxelShape original, BlockGetter level, BlockPos pos, CollisionContext context) { - FluidState fluidState = level.getFluidState(pos); + FluidState fluidState = spectrum$getFluidStateHelper(level, pos); + if(fluidState == null || fluidState.isEmpty()) { + return original; + } int fluidLevel = fluidState.getAmount(); if (fluidLevel == 0) return original; VoxelShape fluidShape = FLUID_LEVEL_SHAPES[fluidLevel]; - if ( - context.isAbove(fluidShape, pos, true) && - context.canStandOnFluid(level.getFluidState(pos.above()), fluidState) - ) return Shapes.or(original, fluidShape); + if (context.isAbove(fluidShape, pos, true) && context.canStandOnFluid(spectrum$getFluidStateHelper(level, pos.above()), fluidState)) { + return Shapes.or(original, fluidShape); + } return original; } + // Thank you, sable + @Unique + private static FluidState spectrum$getFluidStateHelper(BlockGetter level, BlockPos pos) { + if (level.isOutsideBuildHeight(pos)) { + return Fluids.EMPTY.defaultFluidState(); + } else { + if (level instanceof LevelAccessor levelAccessor) { + ChunkAccess chunk = levelAccessor.getChunk(pos); + return chunk.getFluidState(pos); + } + return level.getFluidState(pos); + } + } + @Unique private static final VoxelShape[] FLUID_LEVEL_SHAPES; static { From ad73488d80834d17ca5208949f74be52a1bebccf Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 12:19:35 +0200 Subject: [PATCH 095/477] Resonance drops aeronautics levitite --- .../mod_compat/aeronautics_levitite.json | 12 ++++++++++++ .../aeronautics_pearlescent_levitite .json | 12 ++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 src/main/resources/data/spectrum/spectrum/resonance_processor/mod_compat/aeronautics_levitite.json create mode 100644 src/main/resources/data/spectrum/spectrum/resonance_processor/mod_compat/aeronautics_pearlescent_levitite .json diff --git a/src/main/resources/data/spectrum/spectrum/resonance_processor/mod_compat/aeronautics_levitite.json b/src/main/resources/data/spectrum/spectrum/resonance_processor/mod_compat/aeronautics_levitite.json new file mode 100644 index 0000000000..6af9651804 --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/resonance_processor/mod_compat/aeronautics_levitite.json @@ -0,0 +1,12 @@ +{ + "type": "spectrum:drop_self", + "block": { + "blocks": "aeronautics:levitite" + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "aeronautics" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/resonance_processor/mod_compat/aeronautics_pearlescent_levitite .json b/src/main/resources/data/spectrum/spectrum/resonance_processor/mod_compat/aeronautics_pearlescent_levitite .json new file mode 100644 index 0000000000..ce6722fad5 --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/resonance_processor/mod_compat/aeronautics_pearlescent_levitite .json @@ -0,0 +1,12 @@ +{ + "type": "spectrum:drop_self", + "block": { + "blocks": "aeronautics:pearlescent_levitite" + }, + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "aeronautics" + } + ] +} \ No newline at end of file From 614d205434b2c37295635d57c273e236ca21a56a Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 12:36:41 +0200 Subject: [PATCH 096/477] Crystallarieum recipe viewers are now able to render fluids --- .../compat/REI/plugins/CrystallarieumDisplay.java | 9 ++++++++- .../compat/emi/recipes/CrystallarieumEmiRecipeGated.java | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumDisplay.java index 75d3710d76..42b0da91aa 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumDisplay.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/CrystallarieumDisplay.java @@ -11,6 +11,7 @@ import net.minecraft.client.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; +import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import java.util.*; @@ -55,7 +56,13 @@ public static List outputs(CrystallarieumRecipe recipe) { } for (BlockState growthStageState : recipe.getGrowthStages()) { - Item blockStateItem = growthStageState.getBlock().asItem(); + Block block = growthStageState.getBlock(); + // Yes, there was a request for the Crystallarieum to grow fluids + if(block instanceof LiquidBlock liquidBlock) { + outputs.add(EntryIngredients.of(liquidBlock.fluid)); + continue; + } + Item blockStateItem = block.asItem(); if (blockStateItem != Items.AIR) { outputs.add(EntryIngredients.of(blockStateItem)); } diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java index 14993c8cc8..5bd8de8a9f 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java @@ -11,8 +11,11 @@ import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.item.crafting.*; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.state.*; import java.util.*; +import java.util.function.*; import java.util.stream.*; public class CrystallarieumEmiRecipeGated extends GatedSpectrumEmiRecipe { @@ -44,7 +47,11 @@ public void addUnlockedWidgets(WidgetHolder widgets) { widgets.addFillingArrow(40, 9, recipe.getSecondsPerGrowthStage() * 1000); - List states = recipe.getGrowthStages().stream().map(s -> EmiStack.of(s.getBlock())).toList(); + // Yes, there was a request for the Crystallarieum to grow fluids + List states = recipe.getGrowthStages().stream().map(state -> { + Block block = state.getBlock(); + return block instanceof LiquidBlock liquidBlock ? EmiStack.of(liquidBlock.fluid) : EmiStack.of(block); + }).toList(); Iterator it = states.iterator(); widgets.addSlot(it.next(), 20, 0); int x = 66; From 5195b404371d94aed8e9b7244384adebeb936ed1 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 12:47:55 +0200 Subject: [PATCH 097/477] if FloatBlockEntitys can't place themselves, they now drop as items --- .../java/de/dafuqs/spectrum/entity/entity/FloatBlockEntity.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/FloatBlockEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/FloatBlockEntity.java index ea139a045a..0773468628 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/FloatBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/FloatBlockEntity.java @@ -257,6 +257,7 @@ public void trySetBlock() { boolean canPlace = this.blockState.canSurvive(this.level(), blockPos); if (!this.canSetBlock || !canPlace || !canReplace) { + this.dropAsItem(); return; } From 8b119b059c92638243a7548addf0c2a421447bc3 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 15:29:56 +0200 Subject: [PATCH 098/477] remove sludge --- .../dafuqs/spectrum/data/SpectrumItems.java | 1 - .../dafuqs/spectrum/blocks/FluidLogging.java | 24 ++- .../conditional/QuitoxicReedsBlock.java | 4 +- .../blocks/fluid/DragonrotFluidBlock.java | 2 - .../blocks/fluid/LiquidCrystalFluidBlock.java | 2 - .../fluid/MidnightSolutionFluidBlock.java | 1 - .../spectrum/blocks/fluid/SludgeFluid.java | 157 ------------------ .../blocks/fluid/SludgeFluidBlock.java | 61 ------- .../compat/REI/REIClientIntegration.java | 3 - .../spectrum/compat/REI/SpectrumPlugins.java | 1 - .../REI/plugins/SludgeConvertingCategory.java | 28 ---- .../REI/plugins/SludgeConvertingDisplay.java | 25 --- .../compat/emi/SpectrumEmiPlugin.java | 58 +------ .../emi/SpectrumEmiRecipeCategories.java | 1 - .../compat/modonomicon/ModonomiconCompat.java | 9 - .../TravelersBackpackCompat.java | 11 -- .../spectrum/config/SpectrumConfig.java | 5 - .../spectrum/mixin/LilyPadBlockMixin.java | 2 +- .../client/BlockOverlayRendererMixin.java | 49 ------ .../particle/SpectrumParticleFactories.java | 7 +- .../particle/SpectrumParticleTypes.java | 7 - .../client/SpectrumBlockLeakParticles.java | 48 ------ .../SludgeConvertingRecipe.java | 51 ------ .../spectrum/registries/SpectrumBlocks.java | 2 - .../SpectrumCauldronInteractions.java | 14 -- .../SpectrumDispenserBehaviors.java | 1 - .../registries/SpectrumEventListeners.java | 1 - .../registries/SpectrumFluidTags.java | 1 - .../spectrum/registries/SpectrumFluids.java | 18 -- .../registries/SpectrumGameRules.java | 3 - .../registries/SpectrumItemGroups.java | 1 - .../spectrum/registries/SpectrumItems.java | 1 - .../registries/SpectrumRecipeSerializers.java | 1 - .../registries/SpectrumRecipeTypes.java | 1 - .../registries/SpectrumSoundEvents.java | 1 - .../assets/spectrum/blockstates/sludge.json | 7 - .../spectrum/blockstates/sludge_cauldron.json | 7 - .../resources/assets/spectrum/lang/en_us.json | 20 +-- .../resources/assets/spectrum/lang/ko_kr.json | 15 -- .../resources/assets/spectrum/lang/pt_br.json | 58 ------- .../resources/assets/spectrum/lang/ru_ru.json | 16 +- .../resources/assets/spectrum/lang/zh_cn.json | 18 +- .../assets/spectrum/models/block/sludge.json | 5 - .../models/block/sludge_cauldron.json | 11 -- .../spectrum/models/item/sludge_bucket.json | 6 - .../spectrum/particles/dripping_sludge.json | 5 - .../spectrum/particles/falling_sludge.json | 5 - .../spectrum/particles/landing_sludge.json | 5 - .../spectrum/particles/sludge_fishing.json | 8 - .../assets/spectrum/particles/sludge_pop.json | 5 - .../spectrum/particles/sludge_splash.json | 8 - .../resources/assets/spectrum/sounds.json | 10 -- .../assets/spectrum/sounds/sludge_ambient.ogg | Bin 4839 -> 0 bytes .../spectrum/sounds/sludge_ambient2.ogg | Bin 5265 -> 0 bytes .../spectrum/sounds/sludge_ambient3.ogg | Bin 8053 -> 0 bytes .../spectrum/sounds/sludge_ambient4.ogg | Bin 7723 -> 0 bytes .../spectrum/sounds/sludge_ambient5.ogg | Bin 9065 -> 0 bytes .../spectrum/textures/block/sludge_flow.png | Bin 6721 -> 0 bytes .../textures/block/sludge_flow.png.mcmeta | 5 - .../spectrum/textures/block/sludge_still.png | Bin 7464 -> 0 bytes .../textures/block/sludge_still.png.mcmeta | 5 - .../textures/gui/guidebook/sludge.png | Bin 8405 -> 0 bytes .../spectrum/textures/item/sludge_bucket.png | Bin 5371 -> 0 bytes .../spectrum/textures/misc/sludge_overlay.png | Bin 4209 -> 0 bytes .../spectrum/textures/particle/sludge_pop.png | Bin 159 -> 0 bytes .../textures/particle/sludge_pop.png.mcmeta | 6 - .../textures/particle/sludge_splash_0.png | Bin 4740 -> 0 bytes .../textures/particle/sludge_splash_1.png | Bin 4713 -> 0 bytes .../textures/particle/sludge_splash_2.png | Bin 4683 -> 0 bytes .../textures/particle/sludge_splash_3.png | Bin 4721 -> 0 bytes .../data/minecraft/tags/block/cauldrons.json | 1 - .../tags/block/geode_invalid_blocks.json | 1 - .../minecraft/tags/block/replaceable.json | 1 - .../tags/block/replaceable_by_trees.json | 3 +- .../midgame/fish_in_many_liquids.json | 8 - .../{sludge.json => cinderhearth_ash.json} | 8 +- .../items/bottle_of_failing_essence.json | 22 +++ .../data/spectrum/entity_fishing/sludge.json | 29 ---- .../ink_color_mapping/fluid/spectrum.json | 4 - .../ink_color_mapping/item/spectrum.json | 1 - .../loot_table/blocks/sludge_cauldron.json | 20 --- .../gameplay/fishing/sludge/fish.json | 24 --- .../gameplay/fishing/sludge/fishing.json | 39 ----- .../gameplay/fishing/sludge/junk.json | 82 --------- .../gameplay/fishing/sludge/treasure.json | 94 ----------- .../gameplay/universal_fishing.json | 17 -- .../brewing/potion_workshop_crafting.json | 5 - .../guidebook/entries/general/failing.json | 6 + .../guidebook/entries/ink/cinderhearth.json | 15 +- .../entries/magical_blocks/sludge.json | 55 ------ .../recipe/pedestal/tier1/sludge_bucket.json | 29 ---- .../tier3/bottle_of_failing_essence.json | 29 ++++ .../pedestal/tier3/cinderhearth_ash.json | 29 ++++ .../sludge_bucket.json | 11 -- .../recipe/sludge_converting/rabbit_hide.json | 12 -- .../recipe/sludge_converting/slush.json | 12 -- .../recipe/sludge_converting/string.json | 12 -- .../sludge_converting/turtle_scute.json | 12 -- .../exempt_from_loot_table_debug_check.json | 1 - .../exempt_from_mineable_debug_check.json | 1 - .../tags/block/quitoxic_reeds_consumable.json | 6 + .../tags/block/quitoxic_reeds_plantable.json | 3 +- .../tags/fluid/bedrock_rod_fishable_in.json | 1 - .../tags/fluid/lagoon_rod_fishable_in.json | 1 - .../tags/fluid/molten_rod_fishable_in.json | 1 - .../data/spectrum/tags/fluid/sludge.json | 6 - .../spectrum/tags/fluid/swimmable_fluid.json | 8 - .../worldgen/biome/dragonrot_swamp.json | 1 - .../configured_feature/lake_sludge.json | 20 --- .../lake_sludge_underground.json | 34 ---- src/main/resources/spectrum.mixins.json | 1 - 111 files changed, 143 insertions(+), 1349 deletions(-) delete mode 100644 src/main/java/de/dafuqs/spectrum/blocks/fluid/SludgeFluid.java delete mode 100644 src/main/java/de/dafuqs/spectrum/blocks/fluid/SludgeFluidBlock.java delete mode 100644 src/main/java/de/dafuqs/spectrum/compat/REI/plugins/SludgeConvertingCategory.java delete mode 100644 src/main/java/de/dafuqs/spectrum/compat/REI/plugins/SludgeConvertingDisplay.java delete mode 100644 src/main/java/de/dafuqs/spectrum/mixin/client/BlockOverlayRendererMixin.java delete mode 100644 src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/SludgeConvertingRecipe.java delete mode 100644 src/main/resources/assets/spectrum/blockstates/sludge.json delete mode 100644 src/main/resources/assets/spectrum/blockstates/sludge_cauldron.json delete mode 100644 src/main/resources/assets/spectrum/models/block/sludge.json delete mode 100644 src/main/resources/assets/spectrum/models/block/sludge_cauldron.json delete mode 100644 src/main/resources/assets/spectrum/models/item/sludge_bucket.json delete mode 100644 src/main/resources/assets/spectrum/particles/dripping_sludge.json delete mode 100644 src/main/resources/assets/spectrum/particles/falling_sludge.json delete mode 100644 src/main/resources/assets/spectrum/particles/landing_sludge.json delete mode 100644 src/main/resources/assets/spectrum/particles/sludge_fishing.json delete mode 100644 src/main/resources/assets/spectrum/particles/sludge_pop.json delete mode 100644 src/main/resources/assets/spectrum/particles/sludge_splash.json delete mode 100644 src/main/resources/assets/spectrum/sounds/sludge_ambient.ogg delete mode 100644 src/main/resources/assets/spectrum/sounds/sludge_ambient2.ogg delete mode 100644 src/main/resources/assets/spectrum/sounds/sludge_ambient3.ogg delete mode 100644 src/main/resources/assets/spectrum/sounds/sludge_ambient4.ogg delete mode 100644 src/main/resources/assets/spectrum/sounds/sludge_ambient5.ogg delete mode 100644 src/main/resources/assets/spectrum/textures/block/sludge_flow.png delete mode 100644 src/main/resources/assets/spectrum/textures/block/sludge_flow.png.mcmeta delete mode 100644 src/main/resources/assets/spectrum/textures/block/sludge_still.png delete mode 100644 src/main/resources/assets/spectrum/textures/block/sludge_still.png.mcmeta delete mode 100644 src/main/resources/assets/spectrum/textures/gui/guidebook/sludge.png delete mode 100644 src/main/resources/assets/spectrum/textures/item/sludge_bucket.png delete mode 100644 src/main/resources/assets/spectrum/textures/misc/sludge_overlay.png delete mode 100644 src/main/resources/assets/spectrum/textures/particle/sludge_pop.png delete mode 100644 src/main/resources/assets/spectrum/textures/particle/sludge_pop.png.mcmeta delete mode 100644 src/main/resources/assets/spectrum/textures/particle/sludge_splash_0.png delete mode 100644 src/main/resources/assets/spectrum/textures/particle/sludge_splash_1.png delete mode 100644 src/main/resources/assets/spectrum/textures/particle/sludge_splash_2.png delete mode 100644 src/main/resources/assets/spectrum/textures/particle/sludge_splash_3.png rename src/main/resources/data/spectrum/advancement/unlocks/blocks/{sludge.json => cinderhearth_ash.json} (50%) create mode 100644 src/main/resources/data/spectrum/advancement/unlocks/items/bottle_of_failing_essence.json delete mode 100644 src/main/resources/data/spectrum/entity_fishing/sludge.json delete mode 100644 src/main/resources/data/spectrum/loot_table/blocks/sludge_cauldron.json delete mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/fishing/sludge/fish.json delete mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/fishing/sludge/fishing.json delete mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/fishing/sludge/junk.json delete mode 100644 src/main/resources/data/spectrum/loot_table/gameplay/fishing/sludge/treasure.json delete mode 100644 src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/magical_blocks/sludge.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/sludge_bucket.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/bottle_of_failing_essence.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/cinderhearth_ash.json delete mode 100644 src/main/resources/data/spectrum/recipe/potion_workshop_crafting/sludge_bucket.json delete mode 100644 src/main/resources/data/spectrum/recipe/sludge_converting/rabbit_hide.json delete mode 100644 src/main/resources/data/spectrum/recipe/sludge_converting/slush.json delete mode 100644 src/main/resources/data/spectrum/recipe/sludge_converting/string.json delete mode 100644 src/main/resources/data/spectrum/recipe/sludge_converting/turtle_scute.json create mode 100644 src/main/resources/data/spectrum/tags/block/quitoxic_reeds_consumable.json delete mode 100644 src/main/resources/data/spectrum/tags/fluid/sludge.json delete mode 100644 src/main/resources/data/spectrum/tags/fluid/swimmable_fluid.json delete mode 100644 src/main/resources/data/spectrum/worldgen/configured_feature/lake_sludge.json delete mode 100644 src/main/resources/data/spectrum/worldgen/placed_feature/lake_sludge_underground.json diff --git a/disabled/datagen/java/de/dafuqs/spectrum/data/SpectrumItems.java b/disabled/datagen/java/de/dafuqs/spectrum/data/SpectrumItems.java index 393cad6e0b..d63d2f0a21 100644 --- a/disabled/datagen/java/de/dafuqs/spectrum/data/SpectrumItems.java +++ b/disabled/datagen/java/de/dafuqs/spectrum/data/SpectrumItems.java @@ -232,7 +232,6 @@ public Map, Integer> getDefaultEnchantments() { // Fluid Buckets public static final DeferredItem LIQUID_CRYSTAL_BUCKET = register(simple(item("liquid_crystal_bucket", () -> new BucketItem(SpectrumFluids.LIQUID_CRYSTAL.get(), IS.of(1).craftRemainder(BUCKET)), InkColors.LIGHT_GRAY))); - public static final DeferredItem SLUDGE_BUCKET = register(simple(item("sludge_bucket", () -> new BucketItem(SpectrumFluids.SLUDGE.get(), IS.of(1).craftRemainder(BUCKET)), InkColors.BROWN))); public static final DeferredItem MIDNIGHT_SOLUTION_BUCKET = register(simple(item("midnight_solution_bucket", () -> new BucketItem(SpectrumFluids.MIDNIGHT_SOLUTION.get(), IS.of(1).craftRemainder(BUCKET)), InkColors.GRAY))); public static final DeferredItem DRAGONROT_BUCKET = register(simple(item("dragonrot_bucket", () -> new BucketItem(SpectrumFluids.DRAGONROT.get(), IS.of(1).craftRemainder(BUCKET)), InkColors.LIGHT_GRAY))); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/FluidLogging.java b/src/main/java/de/dafuqs/spectrum/blocks/FluidLogging.java index 7046bda7c1..d1c1417ff2 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/FluidLogging.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/FluidLogging.java @@ -23,7 +23,9 @@ public class FluidLogging { public enum State implements StringRepresentable { NOT_LOGGED("none", 0), WATER("water", 0), - LIQUID_CRYSTAL("liquid_crystal", SpectrumFluids.LIQUID_CRYSTAL_LIGHT_LEVEL); + LIQUID_CRYSTAL("liquid_crystal", SpectrumFluids.LIQUID_CRYSTAL_LIGHT_LEVEL), + MIDNIGHT_SOLUTION("midnight_solution", SpectrumFluids.MIDNIGHT_SOLUTION_LIGHT_LEVEL), + DRAGONROT("dragonrot", SpectrumFluids.DRAGONROT_LIGHT_LEVEL); private final String name; private final int luminance; @@ -43,6 +45,12 @@ public FluidState getFluidState() { case LIQUID_CRYSTAL -> { return SpectrumFluids.LIQUID_CRYSTAL.get().getSource(false); } + case MIDNIGHT_SOLUTION -> { + return SpectrumFluids.MIDNIGHT_SOLUTION.get().getSource(false); + } + case DRAGONROT -> { + return SpectrumFluids.MIDNIGHT_SOLUTION.get().getSource(false); + } case WATER -> { return Fluids.WATER.getSource(false); } @@ -65,6 +73,9 @@ public void onEntityCollision(BlockState state, Level world, BlockPos pos, Entit if (this == State.LIQUID_CRYSTAL) { SpectrumFluids.LIQUID_CRYSTAL.get().onEntityCollision(state, world, pos, entity); } + if (this == State.MIDNIGHT_SOLUTION) { + SpectrumFluids.MIDNIGHT_SOLUTION.get().onEntityCollision(state, world, pos, entity); + } } } @@ -80,7 +91,7 @@ public interface SpectrumFluidFillable extends LiquidBlockContainer { @Override default boolean canPlaceLiquid(@Nullable Player player, BlockGetter world, BlockPos pos, BlockState state, Fluid fluid) { - return state.getValue(ANY_INCLUDING_NONE) == State.NOT_LOGGED && (fluid == Fluids.WATER || fluid == SpectrumFluids.LIQUID_CRYSTAL.get()); + return state.getValue(ANY_INCLUDING_NONE) == State.NOT_LOGGED && (fluid == Fluids.WATER || fluid == SpectrumFluids.LIQUID_CRYSTAL.get() || fluid == SpectrumFluids.MIDNIGHT_SOLUTION.get()); } @Override @@ -93,6 +104,9 @@ default boolean placeLiquid(LevelAccessor world, BlockPos pos, BlockState state, } else if (fluidState.getType() == SpectrumFluids.LIQUID_CRYSTAL.get()) { world.setBlock(pos, state.setValue(ANY_INCLUDING_NONE, State.LIQUID_CRYSTAL), Block.UPDATE_ALL); world.scheduleTick(pos, fluidState.getType(), fluidState.getType().getTickDelay(world)); + } else if (fluidState.getType() == SpectrumFluids.MIDNIGHT_SOLUTION.get()) { + world.setBlock(pos, state.setValue(ANY_INCLUDING_NONE, State.MIDNIGHT_SOLUTION), Block.UPDATE_ALL); + world.scheduleTick(pos, fluidState.getType(), fluidState.getType().getTickDelay(world)); } } @@ -122,6 +136,12 @@ default ItemStack pickupBlock(@Nullable Player player, LevelAccessor world, Bloc world.destroyBlock(pos, true); } return new ItemStack(SpectrumItems.LIQUID_CRYSTAL_BUCKET.get()); + } else if (fluidLog == State.MIDNIGHT_SOLUTION) { + world.setBlock(pos, state.setValue(ANY_INCLUDING_NONE, State.NOT_LOGGED), Block.UPDATE_ALL); + if (!state.canSurvive(world, pos)) { + world.destroyBlock(pos, true); + } + return new ItemStack(SpectrumItems.MIDNIGHT_SOLUTION_BUCKET.get()); } return ItemStack.EMPTY; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java index 35c11de09a..87ab964146 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java @@ -165,12 +165,12 @@ public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random // if the quitoxic reeds are growing in liquid crystal: 1/4 chance to consume // search for block it could be planted on. 1 block => 1 quitoxic reed Optional posToConsumeBlock = searchConsumableBlock(world, pos.below(height), SpectrumBlockTags.QUITOXIC_REEDS_PLANTABLE, random); - if (posToConsumeBlock.isEmpty() || world.getBlockState(posToConsumeBlock.get().above()).getBlock() instanceof QuitoxicReedsBlock) { + if (posToConsumeBlock.isEmpty()) { return; } if (!bottomLiquidCrystalLogged || random.nextInt(4) == 0) { - world.setBlock(posToConsumeBlock.get(), Blocks.DIRT.defaultBlockState(), 3); + world.setBlockAndUpdate(posToConsumeBlock.get(), bottomLiquidCrystalLogged ? SpectrumBlocks.SLUSH.get().defaultBlockState() : Blocks.MUD.defaultBlockState()); world.playSound(null, posToConsumeBlock.get(), SoundEvents.GRAVEL_BREAK, SoundSource.BLOCKS, 1.0F, 1.0F); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/DragonrotFluidBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/DragonrotFluidBlock.java index acb437ffae..07170e11d1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fluid/DragonrotFluidBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fluid/DragonrotFluidBlock.java @@ -55,8 +55,6 @@ public boolean isPathfindable(BlockState state, PathComputationType type) { return SpectrumBlocks.SLUSH.get().defaultBlockState(); } else if (otherState.is(FluidTags.LAVA)) { return Blocks.TERRACOTTA.defaultBlockState(); - } else if (otherState.is(SpectrumFluidTags.SLUDGE)) { - return direction == Direction.DOWN ? SpectrumBlocks.BLACKSLAG.get().defaultBlockState() : SpectrumBlocks.COBBLED_BLACKSLAG.get().defaultBlockState(); } else if (otherState.is(SpectrumFluidTags.LIQUID_CRYSTAL)) { return Blocks.TUFF.defaultBlockState(); } else if (otherState.is(SpectrumFluidTags.MIDNIGHT_SOLUTION)) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/LiquidCrystalFluidBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/LiquidCrystalFluidBlock.java index f7002d636d..e410912d98 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fluid/LiquidCrystalFluidBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fluid/LiquidCrystalFluidBlock.java @@ -54,8 +54,6 @@ public void animateTick(BlockState state, Level world, BlockPos pos, RandomSourc return state.isSource() && direction != Direction.DOWN ? SpectrumBlocks.FROSTBITE_CRYSTAL.get().defaultBlockState() : Blocks.CALCITE.defaultBlockState(); } else if (otherState.is(FluidTags.LAVA)) { return state.isSource() && direction != Direction.DOWN ? SpectrumBlocks.BLAZING_CRYSTAL.get().defaultBlockState() : Blocks.COBBLED_DEEPSLATE.defaultBlockState(); - } else if (otherState.is(SpectrumFluidTags.SLUDGE)) { - return Blocks.CLAY.defaultBlockState(); } return null; } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/MidnightSolutionFluidBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/MidnightSolutionFluidBlock.java index a07f1076e0..08a29fbe9b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fluid/MidnightSolutionFluidBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fluid/MidnightSolutionFluidBlock.java @@ -111,7 +111,6 @@ public boolean shouldSpreadLiquid(Level world, BlockPos pos, BlockState state) { @Override public @Nullable BlockState handleFluidCollision(Level world, FluidState state, FluidState otherState, Direction direction) { if (otherState.is(FluidTags.LAVA)) return Blocks.BLACKSTONE.defaultBlockState(); - if (otherState.is(SpectrumFluidTags.SLUDGE)) return SpectrumBlocks.BLACK_SLUDGE.get().defaultBlockState(); return null; } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/SludgeFluid.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/SludgeFluid.java deleted file mode 100644 index 4b0d09be25..0000000000 --- a/src/main/java/de/dafuqs/spectrum/blocks/fluid/SludgeFluid.java +++ /dev/null @@ -1,157 +0,0 @@ -package de.dafuqs.spectrum.blocks.fluid; - -import de.dafuqs.spectrum.particle.*; -import de.dafuqs.spectrum.recipe.fluid_converting.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.core.*; -import net.minecraft.core.particles.*; -import net.minecraft.sounds.*; -import net.minecraft.util.*; -import net.minecraft.world.effect.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.item.*; -import net.minecraft.world.item.crafting.*; -import net.minecraft.world.level.*; -import net.minecraft.world.level.block.state.*; -import net.minecraft.world.level.block.state.properties.*; -import net.minecraft.world.level.material.*; -import net.minecraft.world.level.pathfinder.*; -import net.neoforged.neoforge.fluids.*; -import javax.annotation.*; - -public abstract class SludgeFluid extends SpectrumFluid { - - @Override - public FluidType getFluidType() { - return SpectrumFluids.SLUDGE_TYPE.get(); - } - - @Override - public Fluid getSource() { - return SpectrumFluids.SLUDGE.get(); - } - - @Override - public Fluid getFlowing() { - return SpectrumFluids.FLOWING_SLUDGE.get(); - } - - @Override - public Item getBucket() { - return SpectrumItems.SLUDGE_BUCKET.get(); - } - - @Override - protected BlockState createLegacyBlock(FluidState fluidState) { - return SpectrumBlocks.SLUDGE.get().defaultBlockState().setValue(BlockStateProperties.LEVEL, getLegacyLevel(fluidState)); - } - - @Override - public boolean isSame(Fluid fluid) { - return fluid == SpectrumFluids.SLUDGE.get() || fluid == SpectrumFluids.FLOWING_SLUDGE.get(); - } - - @Override - protected boolean canConvertToSource(Level level) { - return level.getGameRules().getBoolean(SpectrumGameRules.RULE_SLUDGE_SOURCE_CONVERSION); - } - - @Override - public void animateTick(Level world, BlockPos pos, FluidState state, RandomSource random) { - BlockPos topPos = pos.above(); - BlockState topState = world.getBlockState(topPos); - if (topState.isAir() && !topState.isSolidRender(world, topPos) && random.nextInt(1000) == 0) { - world.playLocalSound(pos.getX(), pos.getY(), pos.getZ(), SpectrumSoundEvents.SLUDGE_AMBIENT, SoundSource.BLOCKS, 0.2F + random.nextFloat() * 0.2F, 0.9F + random.nextFloat() * 0.15F, false); - } - } - - @Override - protected int getSlopeFindDistance(LevelReader worldView) { - return 1; - } - - @Override - protected int getDropOff(LevelReader worldView) { - return 3; - } - - @Override - public int getTickDelay(LevelReader worldView) { - return 50; - } - - @Override - public ParticleOptions getDripParticle() { - return SpectrumParticleTypes.DRIPPING_SLUDGE; - } - - @Override - public ParticleOptions getSplashParticle() { - return SpectrumParticleTypes.SLUDGE_SPLASH; - } - - @Override - public RecipeType getDippingRecipeType() { - return SpectrumRecipeTypes.SLUDGE_CONVERTING; - } - - /** - * Entities colliding with sludge will get a slowness effect - * and losing their breath far quicker - */ - @Override - public void onEntityCollision(BlockState state, Level world, BlockPos pos, Entity entity) { - super.onEntityCollision(state, world, pos, entity); - - if (!world.isClientSide() && entity instanceof LivingEntity livingEntity) { - // the entity is hurt at air == -20 and then reset to air = 0 - // this way the entity loses its breath way faster, but gets damaged just as slow afterwards - if (livingEntity.isEyeInFluidType(SpectrumFluids.SLUDGE_TYPE.get()) && world.getGameTime() % 2 == 0 && livingEntity.getAirSupply() > 0) { - livingEntity.setAirSupply(livingEntity.getAirSupply() - 1); - } - - // just check every 20 ticks for performance - if (world.getGameTime() % 20 == 0) { - MobEffectInstance slownessInstance = livingEntity.getEffect(MobEffects.MOVEMENT_SLOWDOWN); - if (slownessInstance == null || slownessInstance.getDuration() < 20) { - MobEffectInstance newSlownessInstance = new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 60, 3); - livingEntity.addEffect(newSlownessInstance); - } - } - } - } - - public static class FlowingSludge extends SludgeFluid { - - @Override - protected void createFluidStateDefinition(StateDefinition.Builder builder) { - super.createFluidStateDefinition(builder); - builder.add(LEVEL); - } - - @Override - public int getAmount(FluidState fluidState) { - return fluidState.getValue(LEVEL); - } - - @Override - public boolean isSource(FluidState fluidState) { - return false; - } - - } - - public static class StillSludge extends SludgeFluid { - - @Override - public int getAmount(FluidState fluidState) { - return 8; - } - - @Override - public boolean isSource(FluidState fluidState) { - return true; - } - - } -} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/SludgeFluidBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/SludgeFluidBlock.java deleted file mode 100644 index d25072becb..0000000000 --- a/src/main/java/de/dafuqs/spectrum/blocks/fluid/SludgeFluidBlock.java +++ /dev/null @@ -1,61 +0,0 @@ -package de.dafuqs.spectrum.blocks.fluid; - -import de.dafuqs.spectrum.particle.*; -import net.minecraft.core.*; -import net.minecraft.core.particles.*; -import net.minecraft.tags.*; -import net.minecraft.util.*; -import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.state.*; -import net.minecraft.world.level.material.*; -import net.minecraft.world.level.pathfinder.*; -import org.jspecify.annotations.Nullable; - -public class SludgeFluidBlock extends SpectrumFluidBlock { - - public SludgeFluidBlock(SpectrumFluid fluid, BlockState ultrawarmReplacementBlockState, Properties settings) { - super(fluid, ultrawarmReplacementBlockState, settings); - } - -// @Override -// public MapCodec getCodec() { -// //TODO: Make the codec -// return null; -// } - - @Override - public SimpleParticleType getSplashParticle() { - return SpectrumParticleTypes.SLUDGE_SPLASH; - } - - @Override - public Tuple getFishingParticles() { - return new Tuple<>(SpectrumParticleTypes.SLUDGE_POP, SpectrumParticleTypes.SLUDGE_FISHING); - } - - @Override - public void animateTick(BlockState state, Level world, BlockPos pos, RandomSource random) { - super.animateTick(state, world, pos, random); - if (!world.getBlockState(pos.above()).isRedstoneConductor(world, pos.above()) && random.nextFloat() < 0.03F) { - world.addParticle(SpectrumParticleTypes.SLUDGE_POP, pos.getX() + random.nextDouble(), pos.getY() + 1, pos.getZ() + random.nextDouble(), 0, random.nextDouble() * 0.1, 0); - } - } - - @Override - public boolean isPathfindable(BlockState state, PathComputationType type) { - return true; - } - - @Override - public @Nullable BlockState handleFluidCollision(Level world, FluidState state, FluidState otherState, Direction direction) { - if (otherState.is(FluidTags.WATER)) { - return direction == Direction.DOWN ? Blocks.COARSE_DIRT.defaultBlockState() : Blocks.DIRT.defaultBlockState(); - } - if (otherState.is(FluidTags.LAVA)) { - return Blocks.MUD.defaultBlockState(); - } - return null; - } - -} diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/REIClientIntegration.java b/src/main/java/de/dafuqs/spectrum/compat/REI/REIClientIntegration.java index 34cca72176..e7ed800f79 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/REIClientIntegration.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/REIClientIntegration.java @@ -54,7 +54,6 @@ public void registerCategories(CategoryRegistry registry) { registry.add(new PotionWorkshopCraftingCategory()); registry.add(new PotionWorkshopReactingCategory()); registry.add(new SpiritInstillingCategory()); - registry.add(new SludgeConvertingCategory()); registry.add(new LiquidCrystalConvertingCategory()); registry.add(new MidnightSolutionConvertingCategory()); registry.add(new DragonrotConvertingCategory()); @@ -90,7 +89,6 @@ public void registerCategories(CategoryRegistry registry) { registry.addWorkstations(SpectrumPlugins.FREEZING, EntryStacks.of(SpectrumBlocks.POLAR_BEAR_IDOL)); registry.addWorkstations(SpectrumPlugins.ENCHANTER_CRAFTING, EntryStacks.of(SpectrumBlocks.ENCHANTER)); registry.addWorkstations(SpectrumPlugins.ENCHANTMENT_UPGRADE, EntryStacks.of(SpectrumBlocks.ENCHANTER)); - registry.addWorkstations(SpectrumPlugins.SLUDGE_CONVERTING, EntryStacks.of(SpectrumItems.SLUDGE_BUCKET)); registry.addWorkstations(SpectrumPlugins.LIQUID_CRYSTAL_CONVERTING, EntryStacks.of(SpectrumItems.LIQUID_CRYSTAL_BUCKET)); registry.addWorkstations(SpectrumPlugins.MIDNIGHT_SOLUTION_CONVERTING, EntryStacks.of(SpectrumItems.MIDNIGHT_SOLUTION_BUCKET)); registry.addWorkstations(SpectrumPlugins.DRAGONROT_CONVERTING, EntryStacks.of(SpectrumItems.DRAGONROT_BUCKET)); @@ -115,7 +113,6 @@ public void registerDisplays(DisplayRegistry registry) { registry.registerRecipeFiller(PotionWorkshopBrewingRecipe.class, SpectrumRecipeTypes.POTION_WORKSHOP_BREWING, PotionWorkshopBrewingDisplay::new); registry.registerRecipeFiller(PotionWorkshopCraftingRecipe.class, SpectrumRecipeTypes.POTION_WORKSHOP_CRAFTING, PotionWorkshopCraftingDisplay::new); registry.registerRecipeFiller(SpiritInstillerRecipe.class, SpectrumRecipeTypes.SPIRIT_INSTILLING, SpiritInstillingDisplay::new); - registry.registerRecipeFiller(SludgeConvertingRecipe.class, SpectrumRecipeTypes.SLUDGE_CONVERTING, SludgeConvertingDisplay::new); registry.registerRecipeFiller(LiquidCrystalConvertingRecipe.class, SpectrumRecipeTypes.LIQUID_CRYSTAL_CONVERTING, LiquidCrystalConvertingDisplay::new); registry.registerRecipeFiller(MidnightSolutionConvertingRecipe.class, SpectrumRecipeTypes.MIDNIGHT_SOLUTION_CONVERTING, MidnightSolutionConvertingDisplay::new); registry.registerRecipeFiller(DragonrotConvertingRecipe.class, SpectrumRecipeTypes.DRAGONROT_CONVERTING, DragonrotConvertingDisplay::new); diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/SpectrumPlugins.java b/src/main/java/de/dafuqs/spectrum/compat/REI/SpectrumPlugins.java index afa0cd6f40..e684550dd1 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/SpectrumPlugins.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/SpectrumPlugins.java @@ -16,7 +16,6 @@ public class SpectrumPlugins { public static final CategoryIdentifier POTION_WORKSHOP_CRAFTING = CategoryIdentifier.of(SpectrumCommon.locate("potion_workshop_crafting")); public static final CategoryIdentifier POTION_WORKSHOP_REACTING = CategoryIdentifier.of(SpectrumCommon.locate("potion_workshop_reacting")); public static final CategoryIdentifier SPIRIT_INSTILLER = CategoryIdentifier.of(SpectrumCommon.locate("spirit_instiller")); - public static final CategoryIdentifier SLUDGE_CONVERTING = CategoryIdentifier.of(SpectrumCommon.locate("sludge_converting")); public static final CategoryIdentifier LIQUID_CRYSTAL_CONVERTING = CategoryIdentifier.of(SpectrumCommon.locate("liquid_crystal_converting")); public static final CategoryIdentifier MIDNIGHT_SOLUTION_CONVERTING = CategoryIdentifier.of(SpectrumCommon.locate("midnight_solution_converting")); public static final CategoryIdentifier DRAGONROT_CONVERTING = CategoryIdentifier.of(SpectrumCommon.locate("dragonrot_converting")); diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/SludgeConvertingCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/SludgeConvertingCategory.java deleted file mode 100644 index db06bf5074..0000000000 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/SludgeConvertingCategory.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.dafuqs.spectrum.compat.REI.plugins; - -import de.dafuqs.spectrum.compat.REI.*; -import de.dafuqs.spectrum.registries.*; -import me.shedaniel.rei.api.client.gui.*; -import me.shedaniel.rei.api.common.category.*; -import me.shedaniel.rei.api.common.util.*; -import net.minecraft.network.chat.*; - - -public class SludgeConvertingCategory extends FluidConvertingCategory { - - @Override - public CategoryIdentifier getCategoryIdentifier() { - return SpectrumPlugins.SLUDGE_CONVERTING; - } - - @Override - public Renderer getIcon() { - return EntryStacks.of(SpectrumItems.SLUDGE_BUCKET); - } - - @Override - public Component getTitle() { - return Component.translatable("container.spectrum.rei.sludge_converting.title"); - } - -} diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/SludgeConvertingDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/SludgeConvertingDisplay.java deleted file mode 100644 index 3d5a6b57b9..0000000000 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/SludgeConvertingDisplay.java +++ /dev/null @@ -1,25 +0,0 @@ -package de.dafuqs.spectrum.compat.REI.plugins; - -import de.dafuqs.spectrum.compat.REI.*; -import de.dafuqs.spectrum.recipe.fluid_converting.*; -import me.shedaniel.rei.api.common.category.*; -import net.minecraft.resources.*; -import net.minecraft.world.item.crafting.*; - -public class SludgeConvertingDisplay extends FluidConvertingDisplay { - - public SludgeConvertingDisplay(RecipeHolder recipe) { - super(recipe); - } - - @Override - public CategoryIdentifier getCategoryIdentifier() { - return SpectrumPlugins.SLUDGE_CONVERTING; - } - - @Override - public ResourceLocation getUnlockIdentifier() { - return SludgeConvertingRecipe.UNLOCK_IDENTIFIER; - } - -} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiPlugin.java b/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiPlugin.java index b1b7f05cf1..3805d41b9b 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiPlugin.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiPlugin.java @@ -65,7 +65,6 @@ public void registerCategories(EmiRegistry registry) { registry.addCategory(SpectrumEmiRecipeCategories.POTION_WORKSHOP_CRAFTING); registry.addCategory(SpectrumEmiRecipeCategories.POTION_WORKSHOP_REACTING); registry.addCategory(SpectrumEmiRecipeCategories.SPIRIT_INSTILLER); - registry.addCategory(SpectrumEmiRecipeCategories.SLUDGE_CONVERTING); registry.addCategory(SpectrumEmiRecipeCategories.LIQUID_CRYSTAL_CONVERTING); registry.addCategory(SpectrumEmiRecipeCategories.MIDNIGHT_SOLUTION_CONVERTING); registry.addCategory(SpectrumEmiRecipeCategories.DRAGONROT_CONVERTING); @@ -105,7 +104,6 @@ public void registerCategories(EmiRegistry registry) { registry.addWorkstation(SpectrumEmiRecipeCategories.FREEZING, EmiStack.of(SpectrumBlocks.POLAR_BEAR_IDOL)); registry.addWorkstation(SpectrumEmiRecipeCategories.ENCHANTER, EmiStack.of(SpectrumBlocks.ENCHANTER)); registry.addWorkstation(SpectrumEmiRecipeCategories.ENCHANTMENT_UPGRADE, EmiStack.of(SpectrumBlocks.ENCHANTER)); - registry.addWorkstation(SpectrumEmiRecipeCategories.SLUDGE_CONVERTING, EmiStack.of(SpectrumItems.SLUDGE_BUCKET)); registry.addWorkstation(SpectrumEmiRecipeCategories.LIQUID_CRYSTAL_CONVERTING, EmiStack.of(SpectrumItems.LIQUID_CRYSTAL_BUCKET)); registry.addWorkstation(SpectrumEmiRecipeCategories.MIDNIGHT_SOLUTION_CONVERTING, EmiStack.of(SpectrumItems.MIDNIGHT_SOLUTION_BUCKET)); registry.addWorkstation(SpectrumEmiRecipeCategories.DRAGONROT_CONVERTING, EmiStack.of(SpectrumItems.DRAGONROT_BUCKET)); @@ -136,7 +134,6 @@ public void registerRecipes(EmiRegistry registry) { addAll(registry, SpectrumRecipeTypes.POTION_WORKSHOP_CRAFTING, (r) -> new PotionWorkshopEmiRecipeGated<>(SpectrumEmiRecipeCategories.POTION_WORKSHOP_CRAFTING, r)); addAll(registry, SpectrumRecipeTypes.POTION_WORKSHOP_REACTING, PotionWorkshopReactingEmiRecipe::new); addAll(registry, SpectrumRecipeTypes.SPIRIT_INSTILLING, SpiritInstillingEmiRecipeGated::new); - addAll(registry, SpectrumRecipeTypes.SLUDGE_CONVERTING, (r) -> new FluidConvertingEmiRecipeGated<>(SpectrumEmiRecipeCategories.SLUDGE_CONVERTING, r)); addAll(registry, SpectrumRecipeTypes.LIQUID_CRYSTAL_CONVERTING, (r) -> new FluidConvertingEmiRecipeGated<>(SpectrumEmiRecipeCategories.LIQUID_CRYSTAL_CONVERTING, r)); addAll(registry, SpectrumRecipeTypes.MIDNIGHT_SOLUTION_CONVERTING, (r) -> new FluidConvertingEmiRecipeGated<>(SpectrumEmiRecipeCategories.MIDNIGHT_SOLUTION_CONVERTING, r)); addAll(registry, SpectrumRecipeTypes.DRAGONROT_CONVERTING, (r) -> new FluidConvertingEmiRecipeGated<>(SpectrumEmiRecipeCategories.DRAGONROT_CONVERTING, r)); @@ -190,20 +187,12 @@ public void registerRecipes(EmiRegistry registry) { EmiStack dragonrot = EmiStack.of(SpectrumFluids.DRAGONROT.get(), amount); EmiStack liquidCrystal = EmiStack.of(SpectrumFluids.LIQUID_CRYSTAL.get(), amount); EmiStack midnightSolution = EmiStack.of(SpectrumFluids.MIDNIGHT_SOLUTION.get(), amount); - EmiStack sludge = EmiStack.of(SpectrumFluids.SLUDGE.get(), amount); EmiStack waterCatalyst = water.copy().setRemainder(water); EmiStack lavaCatalyst = lava.copy().setRemainder(lava); EmiStack dragonrotCatalyst = dragonrot.copy().setRemainder(dragonrot); EmiStack liquidCrystalCatalyst = liquidCrystal.copy().setRemainder(liquidCrystal); EmiStack midnightSolutionCatalyst = midnightSolution.copy().setRemainder(midnightSolution); - EmiStack sludgeCatalyst = sludge.copy().setRemainder(sludge); - addRecipeSafe(registry, () -> SpectrumWorldInteractionRecipe.customBuilder() - .id(syntheticId("world/fluid_interaction", SpectrumBlocks.SLUSH.get())) - .leftInput(dragonrotCatalyst) - .rightInput(waterCatalyst, false) - .output(EmiStack.of(SpectrumBlocks.SLUSH)) - .requiredAdvancement(DragonrotConvertingRecipe.UNLOCK_IDENTIFIER) - .build()); + addRecipeSafe(registry, () -> SpectrumWorldInteractionRecipe.customBuilder() .id(syntheticId("world/fluid_interaction", Blocks.TERRACOTTA)) .leftInput(dragonrotCatalyst) @@ -211,22 +200,6 @@ public void registerRecipes(EmiRegistry registry) { .output(EmiStack.of(Blocks.TERRACOTTA)) .requiredAdvancement(DragonrotConvertingRecipe.UNLOCK_IDENTIFIER) .build()); - addRecipeSafe(registry, () -> SpectrumWorldInteractionRecipe.customBuilder() - .id(syntheticId("world/fluid_interaction", SpectrumBlocks.BLACKSLAG.get())) - .leftInput(dragonrotCatalyst) - .rightInput(sludgeCatalyst, false) - .output(EmiStack.of(SpectrumBlocks.BLACKSLAG)) - .requiredAdvancement(DragonrotConvertingRecipe.UNLOCK_IDENTIFIER) - .requiredAdvancement(SludgeConvertingRecipe.UNLOCK_IDENTIFIER) - .build()); - addRecipeSafe(registry, () -> SpectrumWorldInteractionRecipe.customBuilder() - .id(syntheticId("world/fluid_interaction", SpectrumBlocks.COBBLED_BLACKSLAG.get())) - .leftInput(dragonrotCatalyst) - .rightInput(sludgeCatalyst, false) - .output(EmiStack.of(SpectrumBlocks.COBBLED_BLACKSLAG.get())) - .requiredAdvancement(DragonrotConvertingRecipe.UNLOCK_IDENTIFIER) - .requiredAdvancement(SludgeConvertingRecipe.UNLOCK_IDENTIFIER) - .build()); addRecipeSafe(registry, () -> SpectrumWorldInteractionRecipe.customBuilder() .id(syntheticId("world/fluid_interaction", Blocks.TUFF)) .leftInput(dragonrotCatalyst) @@ -271,14 +244,6 @@ public void registerRecipes(EmiRegistry registry) { .output(EmiStack.of(Blocks.COBBLED_DEEPSLATE)) .requiredAdvancement(LiquidCrystalConvertingRecipe.UNLOCK_IDENTIFIER) .build()); - addRecipeSafe(registry, () -> SpectrumWorldInteractionRecipe.customBuilder() - .id(syntheticId("world/fluid_interaction", Blocks.CLAY)) - .leftInput(liquidCrystalCatalyst) - .rightInput(sludgeCatalyst, false) - .output(EmiStack.of(Blocks.CLAY)) - .requiredAdvancement(LiquidCrystalConvertingRecipe.UNLOCK_IDENTIFIER) - .requiredAdvancement(SludgeConvertingRecipe.UNLOCK_IDENTIFIER) - .build()); addRecipeSafe(registry, () -> SpectrumWorldInteractionRecipe.customBuilder() .id(syntheticId("world/fluid_interaction", Blocks.BLACKSTONE)) .leftInput(midnightSolutionCatalyst) @@ -286,27 +251,6 @@ public void registerRecipes(EmiRegistry registry) { .output(EmiStack.of(Blocks.BLACKSTONE)) .requiredAdvancement(MidnightSolutionConvertingRecipe.UNLOCK_IDENTIFIER) .build()); - addRecipeSafe(registry, () -> SpectrumWorldInteractionRecipe.customBuilder() - .id(syntheticId("world/fluid_interaction", Blocks.DIRT)) - .leftInput(sludgeCatalyst) - .rightInput(waterCatalyst, false) - .output(EmiStack.of(Blocks.DIRT)) - .requiredAdvancement(SludgeConvertingRecipe.UNLOCK_IDENTIFIER) - .build()); - addRecipeSafe(registry, () -> SpectrumWorldInteractionRecipe.customBuilder() - .id(syntheticId("world/fluid_interaction", Blocks.COARSE_DIRT)) - .leftInput(sludgeCatalyst) - .rightInput(waterCatalyst, false) - .output(EmiStack.of(Blocks.COARSE_DIRT)) - .requiredAdvancement(SludgeConvertingRecipe.UNLOCK_IDENTIFIER) - .build()); - addRecipeSafe(registry, () -> SpectrumWorldInteractionRecipe.customBuilder() - .id(syntheticId("world/fluid_interaction", Blocks.MUD)) - .leftInput(sludgeCatalyst) - .rightInput(lavaCatalyst, false) - .output(EmiStack.of(Blocks.MUD)) - .requiredAdvancement(SludgeConvertingRecipe.UNLOCK_IDENTIFIER) - .build()); } public void registerRecipeHandlers(EmiRegistry registry) { diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiRecipeCategories.java b/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiRecipeCategories.java index c915f93389..ef125b7e31 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiRecipeCategories.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiRecipeCategories.java @@ -20,7 +20,6 @@ public class SpectrumEmiRecipeCategories { public static final EmiRecipeCategory POTION_WORKSHOP_CRAFTING = new SpectrumCategory(SpectrumCommon.locate("potion_workshop_crafting"), EmiStack.of(SpectrumBlocks.POTION_WORKSHOP)); public static final EmiRecipeCategory POTION_WORKSHOP_REACTING = new SpectrumCategory(SpectrumCommon.locate("potion_workshop_reacting"), EmiStack.of(SpectrumBlocks.POTION_WORKSHOP)); public static final EmiRecipeCategory SPIRIT_INSTILLER = new SpectrumCategory(SpectrumCommon.locate("spirit_instiller"), EmiStack.of(SpectrumBlocks.SPIRIT_INSTILLER), SpectrumBlocks.SPIRIT_INSTILLER.get().getDescriptionId()); - public static final EmiRecipeCategory SLUDGE_CONVERTING = new SpectrumCategory(SpectrumCommon.locate("sludge_converting"), EmiStack.of(SpectrumItems.SLUDGE_BUCKET)); public static final EmiRecipeCategory LIQUID_CRYSTAL_CONVERTING = new SpectrumCategory(SpectrumCommon.locate("liquid_crystal_converting"), EmiStack.of(SpectrumItems.LIQUID_CRYSTAL_BUCKET)); public static final EmiRecipeCategory MIDNIGHT_SOLUTION_CONVERTING = new SpectrumCategory(SpectrumCommon.locate("midnight_solution_converting"), EmiStack.of(SpectrumItems.MIDNIGHT_SOLUTION_BUCKET)); public static final EmiRecipeCategory DRAGONROT_CONVERTING = new SpectrumCategory(SpectrumCommon.locate("dragonrot_converting"), EmiStack.of(SpectrumItems.DRAGONROT_BUCKET), "container.spectrum.rei.dragonrot_converting.title"); diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/ModonomiconCompat.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/ModonomiconCompat.java index ad9dd497fb..07c14f789d 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/ModonomiconCompat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/ModonomiconCompat.java @@ -45,7 +45,6 @@ public class ModonomiconCompat extends SpectrumIntegrationPacks.ModIntegrationPa public static final ResourceLocation LIQUID_CRYSTAL_CONVERTING_PAGE = SpectrumCommon.locate("liquid_crystal_converting"); public static final ResourceLocation MIDNIGHT_SOLUTION_CONVERTING_PAGE = SpectrumCommon.locate("midnight_solution_converting"); public static final ResourceLocation DRAGONROT_CONVERTING_PAGE = SpectrumCommon.locate("dragonrot_converting"); - public static final ResourceLocation SLUDGE_CONVERTING_PAGE = SpectrumCommon.locate("sludge_converting"); public static final ResourceLocation CRYSTALLARIEUM_GROWING_PAGE = SpectrumCommon.locate("crystallarieum_growing"); public static final ResourceLocation CINDERHEARTH_SMELTING_PAGE = SpectrumCommon.locate("cinderhearth_smelting"); public static final ResourceLocation TITRATION_BARREL_FERMENTING_PAGE = SpectrumCommon.locate("titration_barrel_fermenting"); @@ -86,7 +85,6 @@ private void registerPages() { registerGatedRecipePage(LIQUID_CRYSTAL_CONVERTING_PAGE, SpectrumRecipeTypes.LIQUID_CRYSTAL_CONVERTING, false); registerGatedRecipePage(MIDNIGHT_SOLUTION_CONVERTING_PAGE, SpectrumRecipeTypes.MIDNIGHT_SOLUTION_CONVERTING, false); registerGatedRecipePage(DRAGONROT_CONVERTING_PAGE, SpectrumRecipeTypes.DRAGONROT_CONVERTING, false); - registerGatedRecipePage(SLUDGE_CONVERTING_PAGE, SpectrumRecipeTypes.SLUDGE_CONVERTING, false); registerGatedRecipePage(CRYSTALLARIEUM_GROWING_PAGE, SpectrumRecipeTypes.CRYSTALLARIEUM, false); registerGatedRecipePage(CINDERHEARTH_SMELTING_PAGE, SpectrumRecipeTypes.CINDERHEARTH, false); registerGatedRecipePage(TITRATION_BARREL_FERMENTING_PAGE, SpectrumRecipeTypes.TITRATION_BARREL, true); @@ -158,13 +156,6 @@ public ResourceLocation getBackgroundTexture() { return SpectrumCommon.locate("textures/gui/guidebook/dragonrot.png"); } }); - - PageRendererRegistry.registerPageRenderer(SLUDGE_CONVERTING_PAGE, p -> new BookFluidConvertingPageRenderer<>((BookGatedRecipePage) p) { - @Override - public ResourceLocation getBackgroundTexture() { - return SpectrumCommon.locate("textures/gui/guidebook/sludge.png"); - } - }); } } diff --git a/src/main/java/de/dafuqs/spectrum/compat/travelersbackpack/TravelersBackpackCompat.java b/src/main/java/de/dafuqs/spectrum/compat/travelersbackpack/TravelersBackpackCompat.java index 1afa43aecd..f2beacb075 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/travelersbackpack/TravelersBackpackCompat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/travelersbackpack/TravelersBackpackCompat.java @@ -39,17 +39,6 @@ public void register(IEventBus modBus) { } private void registerFluidEffects() { - EffectFluidRegistry.registerFluidEffect(new SpectrumEffectFluid("sludge", SpectrumFluids.SLUDGE.get().getSource()) { - @Override - public void affectDrinker(FluidStack fluidStack, Level world, Entity entity) { - if (entity instanceof LivingEntity livingEntity) { - livingEntity.addEffect(new MobEffectInstance(MobEffects.CONFUSION, 200)); - livingEntity.addEffect(new MobEffectInstance(MobEffects.DAMAGE_RESISTANCE, 400, 2)); - livingEntity.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 600, 3)); - } - } - }); - EffectFluidRegistry.registerFluidEffect(new SpectrumEffectFluid("liquid_crystal", SpectrumFluids.LIQUID_CRYSTAL.get().getSource()) { @Override public void affectDrinker(FluidStack fluidStack, Level world, Entity entity) { diff --git a/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java b/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java index 2a3d9736e0..95bc73a9dd 100644 --- a/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java +++ b/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java @@ -151,7 +151,6 @@ public class SpectrumConfig { public final ModConfigSpec.ConfigValue DragonrotDripstoneDripChance; public final ModConfigSpec.ConfigValue LiquidCrystalDripstoneDripChance; public final ModConfigSpec.ConfigValue MidnightSolutionDripstoneDripChance; - public final ModConfigSpec.ConfigValue SludgeDripstoneDripChance; private SpectrumConfig(ModConfigSpec.Builder builder) { ToastTimeMilliseconds = builder @@ -663,10 +662,6 @@ private SpectrumConfig(ModConfigSpec.Builder builder) { .translation("config.spectrum.midnight_solution_dripstone_drip_chance") .comment("The chance for Dripstone to fill a Cauldron with Midnight Solution") .define("midnight_solution_dripstone_drip_chance", 0.01D); - SludgeDripstoneDripChance = builder - .translation("config.spectrum.sludge_dripstone_drip_chance") - .comment("The chance for Dripstone to fill a Cauldron with Sludge") - .define("sludge_dripstone_drip_chance", 0.01D); } public final boolean canPedestalCraftVanillaRecipes() { diff --git a/src/main/java/de/dafuqs/spectrum/mixin/LilyPadBlockMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/LilyPadBlockMixin.java index 202f498c46..e650efce04 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/LilyPadBlockMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/LilyPadBlockMixin.java @@ -18,6 +18,6 @@ public class LilyPadBlockMixin { return true; FluidState localState = world.getFluidState(pos); FluidState aboveState = world.getFluidState(pos.above()); - return (localState.getType() == SpectrumFluids.SLUDGE.get() || localState.getType() == SpectrumFluids.LIQUID_CRYSTAL.get()) && aboveState.getType() == Fluids.EMPTY; + return (localState.getType() == SpectrumFluids.LIQUID_CRYSTAL.get()) && aboveState.getType() == Fluids.EMPTY; } } diff --git a/src/main/java/de/dafuqs/spectrum/mixin/client/BlockOverlayRendererMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/client/BlockOverlayRendererMixin.java deleted file mode 100644 index 1c9e655f91..0000000000 --- a/src/main/java/de/dafuqs/spectrum/mixin/client/BlockOverlayRendererMixin.java +++ /dev/null @@ -1,49 +0,0 @@ -package de.dafuqs.spectrum.mixin.client; - -import net.minecraft.client.renderer.*; -import org.spongepowered.asm.mixin.*; - - -@Mixin(ScreenEffectRenderer.class) -public abstract class BlockOverlayRendererMixin { - - // TODO: still needed? - /* - @Inject(method = "renderScreenEffect", at = @At("TAIL")) - private static void spectrum$renderFluidOverlay(Minecraft minecraft, PoseStack poseStack, CallbackInfo ci) { - if (!minecraft.player.isSpectator()) { - if (minecraft.player.isEyeInFluid(SpectrumFluidTags.LIQUID_CRYSTAL)) { - spectrum$renderOverlay(minecraft, poseStack, SpectrumFluids.LIQUID_CRYSTAL_OVERLAY_TEXTURE, SpectrumFluids.LIQUID_CRYSTAL_OVERLAY_ALPHA); - } else if (minecraft.player.isEyeInFluid(SpectrumFluidTags.SLUDGE)) { - spectrum$renderOverlay(minecraft, poseStack, SpectrumFluids.SLUDGE_OVERLAY_TEXTURE, SpectrumFluids.SLUDGE_OVERLAY_ALPHA); - } else if (minecraft.player.isEyeInFluid(SpectrumFluidTags.MIDNIGHT_SOLUTION)) { - spectrum$renderOverlay(minecraft, poseStack, SpectrumFluids.MIDNIGHT_SOLUTION_OVERLAY_TEXTURE, SpectrumFluids.MIDNIGHT_SOLUTION_OVERLAY_ALPHA); - } else if (minecraft.player.isEyeInFluid(SpectrumFluidTags.DRAGONROT)) { - spectrum$renderOverlay(minecraft, poseStack, SpectrumFluids.DRAGONROT_OVERLAY_TEXTURE, SpectrumFluids.DRAGONROT_OVERLAY_ALPHA); - } - } - } - - @Unique - private static void spectrum$renderOverlay(Minecraft client, PoseStack poseStack, ResourceLocation textureIdentifier, float alpha) { - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, textureIdentifier); - BlockPos blockPos = BlockPos.containing(client.player.getX(), client.player.getEyeY(), client.player.getZ()); - float f = LightTexture.getBrightness(client.player.level().dimensionType(), client.player.level().getMaxLocalRawBrightness(blockPos)); - RenderSystem.enableBlend(); - RenderSystem.setShaderColor(f, f, f, alpha); - - float m = -client.player.getYRot() / 64.0F; - float n = client.player.getXRot() / 64.0F; - Matrix4f matrix4f = poseStack.last().pose(); - BufferBuilder bufferBuilder = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); - bufferBuilder.addVertex(matrix4f, -1.0F, -1.0F, -0.5F).setUv(4.0F + m, 4.0F + n); - bufferBuilder.addVertex(matrix4f, 1.0F, -1.0F, -0.5F).setUv(0.0F + m, 4.0F + n); - bufferBuilder.addVertex(matrix4f, 1.0F, 1.0F, -0.5F).setUv(0.0F + m, 0.0F + n); - bufferBuilder.addVertex(matrix4f, -1.0F, 1.0F, -0.5F).setUv(4.0F + m, 0.0F + n); - BufferUploader.drawWithShader(bufferBuilder.buildOrThrow()); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.disableBlend(); - }*/ - -} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/particle/SpectrumParticleFactories.java b/src/main/java/de/dafuqs/spectrum/particle/SpectrumParticleFactories.java index c4c03d0efb..c0bb651d4b 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/SpectrumParticleFactories.java +++ b/src/main/java/de/dafuqs/spectrum/particle/SpectrumParticleFactories.java @@ -82,7 +82,6 @@ public static void register(RegisterParticleProvidersEvent event) { event.registerSpriteSet(SpectrumParticleTypes.LIQUID_CRYSTAL_SPARKLE, LitParticle.Factory::new); event.registerSpriteSet(SpectrumParticleTypes.DRAGONROT, BubblePopParticle.Provider::new); event.registerSpriteSet(SpectrumParticleTypes.VOID_FOG, VoidFogParticle.Factory::new); - event.registerSpriteSet(SpectrumParticleTypes.SLUDGE_POP, BubblePopParticle.Provider::new); event.registerSpriteSet(SpectrumParticleTypes.BLUE_BUBBLE_POP, BubblePopParticle.Provider::new); event.registerSpriteSet(SpectrumParticleTypes.GREEN_BUBBLE_POP, BubblePopParticle.Provider::new); event.registerSpriteSet(SpectrumParticleTypes.SPIRIT_SALLOW, WindParticle.Factory::new); @@ -104,32 +103,27 @@ public static void register(RegisterParticleProvidersEvent event) { event.registerSpriteSet(SpectrumParticleTypes.AZURE_MOTE_SMALL, AzureMoteParticle.Factory::new); // Fluid Splash - event.registerSpriteSet(SpectrumParticleTypes.SLUDGE_SPLASH, SplashParticle.Provider::new); event.registerSpriteSet(SpectrumParticleTypes.LIQUID_CRYSTAL_SPLASH, SplashParticle.Provider::new); event.registerSpriteSet(SpectrumParticleTypes.MIDNIGHT_SOLUTION_SPLASH, SplashParticle.Provider::new); event.registerSpriteSet(SpectrumParticleTypes.DRAGONROT_SPLASH, SplashParticle.Provider::new); // Fluid Dripping - event.registerSpriteSet(SpectrumParticleTypes.DRIPPING_SLUDGE, SpectrumBlockLeakParticles.DrippingSludgeFactory::new); event.registerSpriteSet(SpectrumParticleTypes.DRIPPING_LIQUID_CRYSTAL, SpectrumBlockLeakParticles.DrippingLiquidCrystalFactory::new); event.registerSpriteSet(SpectrumParticleTypes.DRIPPING_MIDNIGHT_SOLUTION, SpectrumBlockLeakParticles.DrippingMidnightSolutionFactory::new); event.registerSpriteSet(SpectrumParticleTypes.DRIPPING_DRAGONROT, SpectrumBlockLeakParticles.DrippingDragonrotFactory::new); // Fluid Falling - event.registerSpriteSet(SpectrumParticleTypes.FALLING_SLUDGE, SpectrumBlockLeakParticles.FallingSludgeFactory::new); event.registerSpriteSet(SpectrumParticleTypes.FALLING_LIQUID_CRYSTAL, SpectrumBlockLeakParticles.FallingLiquidCrystalFactory::new); event.registerSpriteSet(SpectrumParticleTypes.FALLING_MIDNIGHT_SOLUTION, SpectrumBlockLeakParticles.FallingMidnightSolutionFactory::new); event.registerSpriteSet(SpectrumParticleTypes.FALLING_DRAGONROT, SpectrumBlockLeakParticles.FallingDragonrotFactory::new); // Fluid Landing - event.registerSpriteSet(SpectrumParticleTypes.LANDING_SLUDGE, SpectrumBlockLeakParticles.LandingSludgeFactory::new); event.registerSpriteSet(SpectrumParticleTypes.LANDING_LIQUID_CRYSTAL, SpectrumBlockLeakParticles.LandingLiquidCrystalFactory::new); event.registerSpriteSet(SpectrumParticleTypes.LANDING_MIDNIGHT_SOLUTION, SpectrumBlockLeakParticles.LandingMidnightSolutionFactory::new); event.registerSpriteSet(SpectrumParticleTypes.LANDING_DRAGONROT, SpectrumBlockLeakParticles.LandingDragonrotFactory::new); // Fluid Fishing event.registerSpriteSet(SpectrumParticleTypes.LAVA_FISHING, WakeParticle.Provider::new); - event.registerSpriteSet(SpectrumParticleTypes.SLUDGE_FISHING, WakeParticle.Provider::new); event.registerSpriteSet(SpectrumParticleTypes.LIQUID_CRYSTAL_FISHING, WakeParticle.Provider::new); event.registerSpriteSet(SpectrumParticleTypes.MIDNIGHT_SOLUTION_FISHING, WakeParticle.Provider::new); event.registerSpriteSet(SpectrumParticleTypes.DRAGONROT_FISHING, WakeParticle.Provider::new); @@ -148,6 +142,7 @@ public static void register(RegisterParticleProvidersEvent event) { event.registerSpriteSet(SpectrumParticleTypes.DYNAMIC_ALWAYS_SHOW, DynamicParticle.Factory::new); } + // TODO: unused public static TextureSheetParticle createFallingSporeBlossom(SimpleParticleType type, ClientLevel world, double x, double y, double z, double velocityX, double velocityY, double velocityZ) { int i = (int) (64.0F / Mth.randomBetween(world.getRandom(), 0.1F, 0.9F)); DripParticle blockLeakParticle = new DripParticle.FallingParticle(world, x, y, z, Fluids.EMPTY, i); diff --git a/src/main/java/de/dafuqs/spectrum/particle/SpectrumParticleTypes.java b/src/main/java/de/dafuqs/spectrum/particle/SpectrumParticleTypes.java index b06bb845ec..adb3a6e8f6 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/SpectrumParticleTypes.java +++ b/src/main/java/de/dafuqs/spectrum/particle/SpectrumParticleTypes.java @@ -60,13 +60,6 @@ public class SpectrumParticleTypes { public static final SimpleParticleType PRIMORDIAL_FLAME = register("primordial_flame", true); public static final SimpleParticleType PRIMORDIAL_FLAME_SMALL = register("primordial_flame_small", true); - public static final SimpleParticleType SLUDGE_SPLASH = register("sludge_splash", false); - public static final SimpleParticleType DRIPPING_SLUDGE = register("dripping_sludge", false); - public static final SimpleParticleType FALLING_SLUDGE = register("falling_sludge", false); - public static final SimpleParticleType LANDING_SLUDGE = register("landing_sludge", false); - public static final SimpleParticleType SLUDGE_FISHING = register("sludge_fishing", false); - public static final SimpleParticleType SLUDGE_POP = register("sludge_pop", false); - public static final SimpleParticleType LIQUID_CRYSTAL_SPLASH = register("liquid_crystal_splash", false); public static final SimpleParticleType DRIPPING_LIQUID_CRYSTAL = register("dripping_liquid_crystal", false); public static final SimpleParticleType FALLING_LIQUID_CRYSTAL = register("falling_liquid_crystal", false); diff --git a/src/main/java/de/dafuqs/spectrum/particle/client/SpectrumBlockLeakParticles.java b/src/main/java/de/dafuqs/spectrum/particle/client/SpectrumBlockLeakParticles.java index 9d8bfd3dcb..8d490bb19e 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/client/SpectrumBlockLeakParticles.java +++ b/src/main/java/de/dafuqs/spectrum/particle/client/SpectrumBlockLeakParticles.java @@ -9,54 +9,6 @@ public class SpectrumBlockLeakParticles { - public static class LandingSludgeFactory implements ParticleProvider { - protected final SpriteSet spriteProvider; - - public LandingSludgeFactory(SpriteSet spriteProvider) { - this.spriteProvider = spriteProvider; - } - - @Override - public Particle createParticle(SimpleParticleType defaultParticleType, ClientLevel clientWorld, double d, double e, double f, double g, double h, double i) { - DripParticle blockLeakParticle = new DripParticle.DripLandParticle(clientWorld, d, e, f, SpectrumFluids.SLUDGE.get()); - blockLeakParticle.setColor(SpectrumFluids.SLUDGE_COLOR_VEC.x(), SpectrumFluids.SLUDGE_COLOR_VEC.y(), SpectrumFluids.SLUDGE_COLOR_VEC.z()); - blockLeakParticle.pickSprite(this.spriteProvider); - return blockLeakParticle; - } - } - - public static class FallingSludgeFactory implements ParticleProvider { - protected final SpriteSet spriteProvider; - - public FallingSludgeFactory(SpriteSet spriteProvider) { - this.spriteProvider = spriteProvider; - } - - @Override - public Particle createParticle(SimpleParticleType defaultParticleType, ClientLevel clientWorld, double d, double e, double f, double g, double h, double i) { - DripParticle blockLeakParticle = new DripParticle.FallAndLandParticle(clientWorld, d, e, f, SpectrumFluids.SLUDGE.get(), SpectrumParticleTypes.LANDING_SLUDGE); - blockLeakParticle.setColor(SpectrumFluids.SLUDGE_COLOR_VEC.x(), SpectrumFluids.SLUDGE_COLOR_VEC.y(), SpectrumFluids.SLUDGE_COLOR_VEC.z()); - blockLeakParticle.pickSprite(this.spriteProvider); - return blockLeakParticle; - } - } - - public static class DrippingSludgeFactory implements ParticleProvider { - protected final SpriteSet spriteProvider; - - public DrippingSludgeFactory(SpriteSet spriteProvider) { - this.spriteProvider = spriteProvider; - } - - @Override - public Particle createParticle(SimpleParticleType defaultParticleType, ClientLevel clientWorld, double d, double e, double f, double g, double h, double i) { - DripParticle blockLeakParticle = new DripParticle.DripHangParticle(clientWorld, d, e, f, SpectrumFluids.SLUDGE.get(), SpectrumParticleTypes.FALLING_SLUDGE); - blockLeakParticle.setColor(SpectrumFluids.SLUDGE_COLOR_VEC.x(), SpectrumFluids.SLUDGE_COLOR_VEC.y(), SpectrumFluids.SLUDGE_COLOR_VEC.z()); - blockLeakParticle.pickSprite(this.spriteProvider); - return blockLeakParticle; - } - } - public static class LandingLiquidCrystalFactory implements ParticleProvider { protected final SpriteSet spriteProvider; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/SludgeConvertingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/SludgeConvertingRecipe.java deleted file mode 100644 index 846bd597cc..0000000000 --- a/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/SludgeConvertingRecipe.java +++ /dev/null @@ -1,51 +0,0 @@ -package de.dafuqs.spectrum.recipe.fluid_converting; - -import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.resources.*; -import net.minecraft.world.item.*; -import net.minecraft.world.item.crafting.*; -import javax.annotation.*; - -import java.util.*; - -public class SludgeConvertingRecipe extends FluidConvertingRecipe { - - public static final ResourceLocation UNLOCK_IDENTIFIER = SpectrumCommon.locate("unlocks/blocks/sludge"); - private static final Set outputItems = new HashSet<>(); - - public SludgeConvertingRecipe(String group, boolean secret, Optional requiredAdvancementIdentifier, Ingredient inputIngredient, ItemStack outputItemStack) { - super(group, secret, requiredAdvancementIdentifier, inputIngredient, outputItemStack); - outputItems.add(outputItemStack.getItem()); - } - - public static boolean isExistingOutputItem(ItemStack itemStack) { - return outputItems.contains(itemStack.getItem()); - } - - @Override - public ItemStack getToastSymbol() { - return new ItemStack(SpectrumItems.SLUDGE_BUCKET.get()); - } - - @Override - public RecipeSerializer getSerializer() { - return SpectrumRecipeSerializers.SLUDGE_CONVERTING_SERIALIZER; - } - - @Override - public RecipeType getType() { - return SpectrumRecipeTypes.SLUDGE_CONVERTING; - } - - @Override - public ResourceLocation getRecipeTypeUnlockIdentifier() { - return UNLOCK_IDENTIFIER; - } - - @Override - public String getRecipeTypeShortID() { - return "sludge_converting"; - } - -} diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index b9bb394111..b7bfba0626 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -1857,12 +1857,10 @@ private static BlockBehaviour.Properties fluid(MapColor mapColor) { } public static final DeferredBlock LIQUID_CRYSTAL = register(singleton(block("liquid_crystal", () -> new LiquidCrystalFluidBlock(SpectrumFluids.LIQUID_CRYSTAL.get(), BLAZING_CRYSTAL.get().defaultBlockState(), fluid(MapColor.CRIMSON_STEM).lightLevel((state) -> SpectrumFluids.LIQUID_CRYSTAL_LIGHT_LEVEL).replaceable())), SpectrumTexturedModelProviders.particle(b -> b, "_still"))); - public static final DeferredBlock SLUDGE = register(singleton(block("sludge", () -> new SludgeFluidBlock(SpectrumFluids.SLUDGE.get(), MUD.defaultBlockState(), fluid(MapColor.TERRACOTTA_BROWN).replaceable())), SpectrumTexturedModelProviders.particle(b -> b, "_still"))); public static final DeferredBlock MIDNIGHT_SOLUTION = register(singleton(block("midnight_solution", () -> new MidnightSolutionFluidBlock(SpectrumFluids.MIDNIGHT_SOLUTION.get(), BLACK_MATERIA.get().defaultBlockState(), fluid(MapColor.WARPED_STEM).replaceable())), SpectrumTexturedModelProviders.particle(b -> b, "_still"))); public static final DeferredBlock DRAGONROT = register(singleton(block("dragonrot", () -> new DragonrotFluidBlock(SpectrumFluids.DRAGONROT.get(), BLACKSTONE.defaultBlockState(), fluid(MapColor.ICE).lightLevel((state) -> SpectrumFluids.DRAGONROT_LIGHT_LEVEL).replaceable())), SpectrumTexturedModelProviders.particle(b -> b, "_still"))); public static final DeferredBlock LIQUID_CRYSTAL_CAULDRON = register(simple(block("liquid_crystal_cauldron", () -> new SpectrumCauldronBlock(SpectrumFluids.LIQUID_CRYSTAL, CauldronInteraction.newInteractionMap(SpectrumCauldronInteractions.LIQUID_CRYSTAL_INTERACTION), BlockBehaviour.Properties.ofFullCopy(Blocks.CAULDRON))))); - public static final DeferredBlock SLUDGE_CAULDRON = register(simple(block("sludge_cauldron", () -> new SpectrumCauldronBlock(SpectrumFluids.SLUDGE, CauldronInteraction.newInteractionMap(SpectrumCauldronInteractions.SLUDGE_INTERACTION), BlockBehaviour.Properties.ofFullCopy(Blocks.CAULDRON))))); public static final DeferredBlock MIDNIGHT_SOLUTION_CAULDRON = register(simple(block("midnight_solution_cauldron", () -> new SpectrumCauldronBlock(SpectrumFluids.MIDNIGHT_SOLUTION, CauldronInteraction.newInteractionMap(SpectrumCauldronInteractions.MIDNIGHT_SOLUTION_INTERACTION), BlockBehaviour.Properties.ofFullCopy(Blocks.CAULDRON))))); public static final DeferredBlock DRAGONROT_CAULDRON = register(simple(block("dragonrot_cauldron", () -> new SpectrumCauldronBlock(SpectrumFluids.DRAGONROT, CauldronInteraction.newInteractionMap(SpectrumCauldronInteractions.DRAGONROT_INTERACTION), BlockBehaviour.Properties.ofFullCopy(Blocks.CAULDRON))))); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumCauldronInteractions.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumCauldronInteractions.java index 2808c6f6fd..cc7bc4f6f8 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumCauldronInteractions.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumCauldronInteractions.java @@ -7,7 +7,6 @@ public class SpectrumCauldronInteractions { public static String LIQUID_CRYSTAL_INTERACTION = "spectrum_liquid_crystal"; - public static String SLUDGE_INTERACTION = "spectrum_sludge"; public static String MIDNIGHT_SOLUTION_INTERACTION = "spectrum_midnight_solution"; public static String DRAGONROT_INTERACTION = "spectrum_dragonrot"; @@ -23,17 +22,6 @@ public class SpectrumCauldronInteractions { state1 -> true, SoundEvents.BUCKET_FILL ); - public static final CauldronInteraction FILL_SLUDGE = (state, level, pos, player, hand, stack) -> CauldronInteraction.emptyBucket( - level, pos, player, hand, stack, - SpectrumBlocks.SLUDGE_CAULDRON.get().defaultBlockState(), - SoundEvents.BUCKET_EMPTY - ); - public static final CauldronInteraction EMPTY_SLUDGE = (state, level, pos, player, hand, stack) -> CauldronInteraction.fillBucket( - state, level, pos, player, hand, stack, - new ItemStack(SpectrumItems.SLUDGE_BUCKET.get()), - state1 -> true, - SoundEvents.BUCKET_FILL - ); public static final CauldronInteraction FILL_MIDNIGHT_SOLUTION = (state, level, pos, player, hand, stack) -> CauldronInteraction.emptyBucket( level, pos, player, hand, stack, SpectrumBlocks.MIDNIGHT_SOLUTION_CAULDRON.get().defaultBlockState(), @@ -60,13 +48,11 @@ public class SpectrumCauldronInteractions { public static void register() { // filling empty cauldrons CauldronInteraction.INTERACTIONS.get("empty").map().put(SpectrumItems.LIQUID_CRYSTAL_BUCKET.get(), FILL_LIQUID_CRYSTAL); - CauldronInteraction.INTERACTIONS.get("empty").map().put(SpectrumItems.SLUDGE_BUCKET.get(), FILL_SLUDGE); CauldronInteraction.INTERACTIONS.get("empty").map().put(SpectrumItems.MIDNIGHT_SOLUTION_BUCKET.get(), FILL_MIDNIGHT_SOLUTION); CauldronInteraction.INTERACTIONS.get("empty").map().put(SpectrumItems.DRAGONROT_BUCKET.get(), FILL_DRAGONROT); // emptying filled cauldrons CauldronInteraction.INTERACTIONS.get(LIQUID_CRYSTAL_INTERACTION).map().put(Items.BUCKET, EMPTY_LIQUID_CRYSTAL); - CauldronInteraction.INTERACTIONS.get(SLUDGE_INTERACTION).map().put(Items.BUCKET, EMPTY_SLUDGE); CauldronInteraction.INTERACTIONS.get(MIDNIGHT_SOLUTION_INTERACTION).map().put(Items.BUCKET, EMPTY_MIDNIGHT_SOLUTION); CauldronInteraction.INTERACTIONS.get(DRAGONROT_INTERACTION).map().put(Items.BUCKET, EMPTY_DRAGONROT); } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumDispenserBehaviors.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumDispenserBehaviors.java index f089063dfd..4894bd2ddd 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumDispenserBehaviors.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumDispenserBehaviors.java @@ -31,7 +31,6 @@ public static void register() { // Fluid Buckets DispenseItemBehavior fluidBucketBehavior = DispenserBlock.DISPENSER_REGISTRY.get(Items.WATER_BUCKET); - DispenserBlock.registerBehavior(SpectrumItems.SLUDGE_BUCKET, fluidBucketBehavior); DispenserBlock.registerBehavior(SpectrumItems.LIQUID_CRYSTAL_BUCKET, fluidBucketBehavior); DispenserBlock.registerBehavior(SpectrumItems.MIDNIGHT_SOLUTION_BUCKET, fluidBucketBehavior); DispenserBlock.registerBehavior(SpectrumItems.DRAGONROT_BUCKET, fluidBucketBehavior); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index 0dab5bdc53..702594adcb 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -99,7 +99,6 @@ public static void registerAdditional(ModelEvent.RegisterAdditional event) { @SubscribeEvent public static void registerCauldronFluids(RegisterCauldronFluidContentEvent event) { event.register(SpectrumBlocks.LIQUID_CRYSTAL_CAULDRON.get(), SpectrumFluids.LIQUID_CRYSTAL.get(), FluidType.BUCKET_VOLUME, null); - event.register(SpectrumBlocks.SLUDGE_CAULDRON.get(), SpectrumFluids.SLUDGE.get(), FluidType.BUCKET_VOLUME, null); event.register(SpectrumBlocks.DRAGONROT_CAULDRON.get(), SpectrumFluids.DRAGONROT.get(), FluidType.BUCKET_VOLUME, null); event.register(SpectrumBlocks.MIDNIGHT_SOLUTION_CAULDRON.get(), SpectrumFluids.MIDNIGHT_SOLUTION.get(), FluidType.BUCKET_VOLUME, null); } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluidTags.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluidTags.java index 3e1a81f7ad..482fba5f29 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluidTags.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluidTags.java @@ -14,7 +14,6 @@ public class SpectrumFluidTags { public static final TagKey BEDROCK_ROD_FISHABLE_IN = of("bedrock_rod_fishable_in"); public static final TagKey LIQUID_CRYSTAL = of("liquid_crystal"); - public static final TagKey SLUDGE = of("sludge"); public static final TagKey MIDNIGHT_SOLUTION = of("midnight_solution"); public static final TagKey DRAGONROT = of("dragonrot"); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java index dd11b0341f..24ba0a9ff5 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java @@ -51,23 +51,6 @@ public class SpectrumFluids { public static final Vector3f LIQUID_CRYSTAL_COLOR_VEC = SpectrumColorHelper.colorIntToVec(LIQUID_CRYSTAL_COLOR); public static final float LIQUID_CRYSTAL_OVERLAY_ALPHA = 0.6F; - // SLUDGE - public static final int SLUDGE_LIGHT_LEVEL = 0; - public static final DeferredHolder SLUDGE_TYPE = registerFluidType("sludge", () -> new SpectrumFluidType(true, SpectrumGameRules.RULE_SLUDGE_SOURCE_CONVERSION, FluidType.Properties.create() - .descriptionId("block.spectrum.sludge") - .fallDistanceModifier(0F) - .canDrown(true).canExtinguish(true).supportsBoating(false).canHydrate(false).lightLevel(SLUDGE_LIGHT_LEVEL) - .pathType(PathType.WATER).adjacentPathType(PathType.WATER_BORDER) - .density(5000).viscosity(8000).temperature(350) - .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL).sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY) - .addDripstoneDripping(SpectrumConfig.CONFIG.SludgeDripstoneDripChance.get().floatValue(), SpectrumParticleTypes.DRIPPING_SLUDGE, SpectrumBlocks.SLUDGE_CAULDRON.get(), SoundEvents.POINTED_DRIPSTONE_DRIP_WATER_INTO_CAULDRON)) { - }); - public static final DeferredHolder SLUDGE = registerFluid("sludge", SludgeFluid.StillSludge::new); - public static final DeferredHolder FLOWING_SLUDGE = registerFluid("flowing_sludge", SludgeFluid.FlowingSludge::new); - public static final int SLUDGE_COLOR = 0xFF4e2e0a; - public static final Vector3f SLUDGE_COLOR_VEC = SpectrumColorHelper.colorIntToVec(SLUDGE_COLOR); - public static final float SLUDGE_OVERLAY_ALPHA = 1.0F; - // MIDNIGHT SOLUTION public static final int MIDNIGHT_SOLUTION_LIGHT_LEVEL = 0; public static final DeferredHolder MIDNIGHT_SOLUTION_TYPE = registerFluidType("midnight_solution", () -> new SpectrumFluidType(true, SpectrumGameRules.RULE_MIDNIGHT_SOLUTION_SOURCE_CONVERSION, @@ -118,7 +101,6 @@ private static DeferredHolder registerFluid(String name, S public static void registerClient(RegisterClientExtensionsEvent event) { setupFluidRendering(event, LIQUID_CRYSTAL_TYPE.get(), "liquid_crystal", LIQUID_CRYSTAL_OVERLAY_ALPHA); - setupFluidRendering(event, SLUDGE_TYPE.get(), "sludge", SLUDGE_OVERLAY_ALPHA); setupFluidRendering(event, MIDNIGHT_SOLUTION_TYPE.get(), "midnight_solution", MIDNIGHT_SOLUTION_OVERLAY_ALPHA); setupFluidRendering(event, DRAGONROT_TYPE.get(), "dragonrot", DRAGONROT_OVERLAY_ALPHA); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumGameRules.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumGameRules.java index 55459db2fa..0db7b38c62 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumGameRules.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumGameRules.java @@ -16,9 +16,6 @@ public class SpectrumGameRules { public static final GameRules.Key RULE_MIDNIGHT_SOLUTION_SOURCE_CONVERSION = GameRules.register( "spectrum:midnightSolutionSourceConversion", GameRules.Category.UPDATES, GameRules.BooleanValue.create(false) ); - public static final GameRules.Key RULE_SLUDGE_SOURCE_CONVERSION = GameRules.register( - "spectrum:sludgeSourceConversion", GameRules.Category.UPDATES, GameRules.BooleanValue.create(false) - ); public static void register() { diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java index a1d45bbcc8..a927833742 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java @@ -663,7 +663,6 @@ public static void registerSubTabs() { entries.accept(SpectrumItems.MOONSTONE_CORE); entries.accept(SpectrumItems.LIQUID_CRYSTAL_BUCKET); - entries.accept(SpectrumItems.SLUDGE_BUCKET); entries.accept(SpectrumItems.MIDNIGHT_SOLUTION_BUCKET); entries.accept(SpectrumItems.DRAGONROT_BUCKET); }).build(); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java index 194cbb5efd..b44e0bb142 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java @@ -225,7 +225,6 @@ public Map, Integer> getDefaultEnchantments() { // Fluid Buckets public static final DeferredItem LIQUID_CRYSTAL_BUCKET = register("liquid_crystal_bucket", () -> new BucketItem(SpectrumFluids.LIQUID_CRYSTAL.get(), IS.of(1).craftRemainder(BUCKET))); - public static final DeferredItem SLUDGE_BUCKET = register("sludge_bucket", () -> new BucketItem(SpectrumFluids.SLUDGE.get(), IS.of(1).craftRemainder(BUCKET))); public static final DeferredItem MIDNIGHT_SOLUTION_BUCKET = register("midnight_solution_bucket", () -> new BucketItem(SpectrumFluids.MIDNIGHT_SOLUTION.get(), IS.of(1).craftRemainder(BUCKET))); public static final DeferredItem DRAGONROT_BUCKET = register("dragonrot_bucket", () -> new BucketItem(SpectrumFluids.DRAGONROT.get(), IS.of(1).craftRemainder(BUCKET))); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeSerializers.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeSerializers.java index fc788c2f85..6bdaef6c43 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeSerializers.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeSerializers.java @@ -64,7 +64,6 @@ public class SpectrumRecipeSerializers { public static final RecipeSerializer POTION_WORKSHOP_REACTING_SERIALIZER = register("potion_workshop_reacting", new PotionWorkshopReactingRecipe.Serializer()); // Fluid converting - public static final FluidConvertingRecipe.Serializer SLUDGE_CONVERTING_SERIALIZER = register("sludge_converting", new FluidConvertingRecipe.Serializer<>(SludgeConvertingRecipe::new)); public static final FluidConvertingRecipe.Serializer LIQUID_CRYSTAL_CONVERTING_SERIALIZER = register("liquid_crystal_converting", new FluidConvertingRecipe.Serializer<>(LiquidCrystalConvertingRecipe::new)); public static final FluidConvertingRecipe.Serializer MIDNIGHT_SOLUTION_CONVERTING_SERIALIZER = register("midnight_solution_converting", new FluidConvertingRecipe.Serializer<>(MidnightSolutionConvertingRecipe::new)); public static final FluidConvertingRecipe.Serializer DRAGONROT_CONVERTING_SERIALIZER = register("dragonrot_converting", new FluidConvertingRecipe.Serializer<>(DragonrotConvertingRecipe::new)); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeTypes.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeTypes.java index cc555be68e..1cd5b3fb81 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeTypes.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeTypes.java @@ -30,7 +30,6 @@ public class SpectrumRecipeTypes { public static final RecipeType POTION_WORKSHOP_BREWING = register("potion_workshop_brewing"); public static final RecipeType POTION_WORKSHOP_CRAFTING = register("potion_workshop_crafting"); public static final RecipeType POTION_WORKSHOP_REACTING = register("potion_workshop_reacting"); - public static final RecipeType SLUDGE_CONVERTING = register("sludge_converting"); public static final RecipeType LIQUID_CRYSTAL_CONVERTING = register("liquid_crystal_converting"); public static final RecipeType MIDNIGHT_SOLUTION_CONVERTING = register("midnight_solution_converting"); public static final RecipeType DRAGONROT_CONVERTING = register("dragonrot_converting"); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumSoundEvents.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumSoundEvents.java index 3aaa959367..4c62d3c6f5 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumSoundEvents.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumSoundEvents.java @@ -149,7 +149,6 @@ public class SpectrumSoundEvents { public static final SoundEvent RADIANCE_STAFF_BREAK = register("radiance_staff_break"); public static final SoundEvent LIQUID_CRYSTAL_AMBIENT = register("liquid_crystal_ambient"); - public static final SoundEvent SLUDGE_AMBIENT = register("sludge_ambient"); public static final SoundEvent MIDNIGHT_SOLUTION_AMBIENT = register("midnight_solution_ambient"); public static final SoundEvent FADING_PLACED = register("fading_placed"); diff --git a/src/main/resources/assets/spectrum/blockstates/sludge.json b/src/main/resources/assets/spectrum/blockstates/sludge.json deleted file mode 100644 index e6c3108ead..0000000000 --- a/src/main/resources/assets/spectrum/blockstates/sludge.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "spectrum:block/sludge" - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/blockstates/sludge_cauldron.json b/src/main/resources/assets/spectrum/blockstates/sludge_cauldron.json deleted file mode 100644 index fac5470f9c..0000000000 --- a/src/main/resources/assets/spectrum/blockstates/sludge_cauldron.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "spectrum:block/sludge_cauldron" - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 89139e8e38..78a761eed9 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -1254,7 +1254,6 @@ "block.spectrum.fish_idol": "Social Idol", "block.spectrum.flowing_liquid_crystal": "Liquid Crystal", "block.spectrum.flowing_midnight_solution": "Midnight Solution", - "block.spectrum.flowing_sludge": "Sludge", "block.spectrum.fluix_cluster": "Fluix Crystal Cluster", "block.spectrum.forfeiture": "Forfeiture", "block.spectrum.four_leaf_clover": "Four-Leaved Clover", @@ -1532,7 +1531,6 @@ "block.spectrum.mooshroom_brown_head": "Brown Mooshroom Head", "block.spectrum.mooshroom_red_head": "Red Mooshroom Head", "block.spectrum.moss_ball": "Moss Ball", - "block.spectrum.sludge": "Sludge", "block.spectrum.mule_head": "Mule Head", "block.spectrum.neolith_block": "Block of Neolith", "block.spectrum.nephrite_blossom_bulb": "Nephrite Blossom Bulb", @@ -2175,7 +2173,6 @@ "block.spectrum.dragonrot_cauldron": "Dragonrot Cauldron", "block.spectrum.liquid_crystal_cauldron": "Liquid Crystal Cauldron", "block.spectrum.midnight_solution_cauldron": "Midnight Solution Cauldron", - "block.spectrum.sludge_cauldron": "Sludge Cauldron", "book.spectrum.guidebook.abyssal_vines.page0.text": "Serpentine stalks and glowing fruit make for an awfully familiar sight. Though dimmer and leafier, it is easy to see that these hanging vines are related to glow berries.\\\nGiven their paleness and crystalline aura, I guess that centuries of darkness and feeding on [Liquid Crystal](entry://general/liquid_crystal) transformed them into something that feels at home in the cool twilight of the abyss.", "book.spectrum.guidebook.abyssal_vines.page1.text": "*Touch fuzzy get dizzy*", @@ -2409,7 +2406,7 @@ "book.spectrum.guidebook.cheong.page1.text": "*It's a marmalade... It's a syrup... It's Cheong!*", "book.spectrum.guidebook.chrysocolla.page0.text": "My latest result of fermenting wine turned out a *bit* too strong.\\\nImmensely bitter and slightly acidic in taste.\\\nWhile it retains some of the properties it once resembled, it seems to me to be more useful for medicine than for drinking.", "book.spectrum.guidebook.cinderhearth.page0.text": "A state-of-my-art Blast Furnace that consumes [#](e16201)Orange Ink[#]() to smelt ores and the like.\\\n\\\nI can further enhance its abilities using [Upgrades](entry://magical_blocks/upgrades).", - "book.spectrum.guidebook.cinderhearth.page1.text": "Putting in a [Knowledge Gem](entry://enchanting/knowledge_gem) will funnel experience gained from smelting XP into it.", + "book.spectrum.guidebook.cinderhearth.knowledge_gem.text": "Putting in a [Knowledge Gem](entry://enchanting/knowledge_gem) will funnel experience gained from smelting XP into it.", "book.spectrum.guidebook.cinderhearth.page2.text": "Upgrades must be placed on the two Chiseled Blocks.", "book.spectrum.guidebook.cinderhearth.page3.text": "- 1 Cinderhearth\n- 21 Polished Blocks\n- 6 Crest Blocks\n- 5 Glass-like Blocks\n- 2 Chiseled Blocks\n- 6 Buckets of Lava\n\n\\\n*Did it really need that [#](bb00bb)Lava[#]() underneath since I already have [#](e16201)Ink[#]()*?\\\nNo, not really. But it looks so. much. better.", "book.spectrum.guidebook.cinderhearth.page4.text": "[Upgrades](entry://magical_blocks/upgrades) placed on the [#](bb00bb)Chiseled Blocks[#]() require an additional type of [Ink](entry://ink/ink), depending on the type of Upgrade. The higher the upgrade's level, the higher the consumption.", @@ -2469,7 +2466,7 @@ "book.spectrum.guidebook.crafting_tablet.page0.text": "The Crafting Tablet is so much more than just a portable [](item://minecraft:crafting_table). It remembers the recipe I insert and lets me craft it on demand later.", "book.spectrum.guidebook.crafting_tablet.page1.text": "There may come a time when I need a certain material so often that I want to automate it. Or maybe I will become one of those masochists who automates every single item just because I can.\\\n\\\nThe [Pigment Pedestal](entry://general/pedestal) has a dedicated slot for a Crafting Tablet. If I add a Crafting Tablet and then hopper items into it, they will be placed as specified in the saved recipe.", "book.spectrum.guidebook.crafting_tablet.page1.title": "Pedestal Automation", - "book.spectrum.guidebook.crawfish.page0.text": "Look what my last fishing trip brought ashore! It is not actually a fish, but a *crustacean*.\\\n\\\nThey seem to thrive even in the [weirdest of ponds](entry://magical_blocks/sludge).", + "book.spectrum.guidebook.crawfish.page0.text": "Look what my last fishing trip brought ashore! It is not actually a fish, but a *crustacean*.\\\n\\\nThey seem to thrive even in the weirdest of ponds.", "book.spectrum.guidebook.creating_enchanted_books.name": "Creating Enchanted Books", "book.spectrum.guidebook.creating_enchanted_books.page0.text": "Using [Pigment](entry://general/pigment), selected ingredients and some experience the [Enchanter](entry://enchanting/enchanter) enables me to add Enchantments to [regular Books](item://minecraft:book).\\\n\\\nWhile this process consumes more experience than enchanting in a common Enchanting Table, I have granular control over which Enchantment I want to create.", "book.spectrum.guidebook.creating_enchanted_books.page1.text": "I can also use this process to enchant my magical tools.", @@ -2656,6 +2653,7 @@ "book.spectrum.guidebook.failing.name": "Experiment #2: Failing", "book.spectrum.guidebook.failing.page0.text": "I'd be lying if I said that I wasn't gripped by ambition. These are my first big leaps towards changing the world, I can feel it!\\\nEmpowered by the potent [Onyx](entry://general/onyx_shards)[#]() and [Stratine](entry://general/stratine), this second organism I have created is clearly... more active than the last creation.\\\n**And definitely hungrier.\\\nMUCH hungrier.**", "book.spectrum.guidebook.failing.page1.text": "Perhaps one of the toughest materials I know will satisfy their hunger?", + "book.spectrum.guidebook.failing.essence_recipe.text": "This one is spicy.", "book.spectrum.guidebook.fatal_slumber.page0.text": "[#](449900)Induces instant death if the effect is allowed to run its course.[#]() While I was at the verge of passing on, I saw something. A bottomless sea, a bottomless dream; faint shards of light shimmered amidst the velvet – almost a silver thread, luring me deeper down.... I knew better than to follow.", "book.spectrum.guidebook.fatal_slumber.page1.text": "This is a great work of night alchemy, latent with fundamental velvet magic. It is thus affected by mental constitution and sleep resistance.\\\n\\\nThough only beings of immense power could resist calm waters.", "book.spectrum.guidebook.first_strike.page0.text": "All it takes is a single well-considered hit... or so the saying must have gone.\\\n\\\nWhatever.\\\nOn a related note, I invented First Strike! I am sure it will be of great help, especially against many weak opponents.", @@ -3080,7 +3078,6 @@ "book.spectrum.guidebook.lightweight.page0.text": "[#](449900)Makes me a bit lighter[#]() with each level, allowing me to jump further and fall slower.\\\nHigh levels even made me take [#](449900)no more fall damage[#]().", "book.spectrum.guidebook.liquid_crystal.page0.text": "The pure energy of gems in liquid form. Seems to have a healing effect.", "book.spectrum.guidebook.liquid_crystal.page1.text": "Bringing it in contact with other liquids results in various materials with interesting properties.", - "book.spectrum.guidebook.liquid_crystal.page2.text": "Letting Liquid Crystal collide with [Sludge](entry://magical_blocks/sludge) creates [#](bb00bb)Clay[#]()! Surely there are more combinations to be discovered!\\\n\\\n*Thomas had never seen such an imbalance before.*", "book.spectrum.guidebook.liquid_crystal.page3.text": "Allowing an entire block of Liquid Crystal to absorb the immense heat of Lava resulted in this.\\\nAlmost feels like a [](item://minecraft:magma_block), albeit way hotter.", "book.spectrum.guidebook.liquid_crystal.page4.text": "When [#](bb00bb)Water[#]() flowed into a full block of Liquid Crystal, the crystal solidified.\\\nSince even the slightest touch was enough to give me a cold shiver, I named it Frostbite Crystal.", "book.spectrum.guidebook.liquid_crystal_essences.name": "Crystallization", @@ -3447,11 +3444,6 @@ "book.spectrum.guidebook.moonstone_shards.page0.text": "I was quite simple-minded not so long ago, wasn't I? Thought I knew everything, but that everything was always merely half the truth.\\\n\\\nI know better now. This white, pure gem in my hand, shimmering with a soft, warm glow, is a monument to my personal growth.", "book.spectrum.guidebook.moonstone_shards.page1.text": "I have never been remotely omnipotent, never will be. Not with all the magic in the world. Nobody is. But with a little humility, care and support, I can at least get a little closer.\\\n\\\n**[#](b9bebe)Purity.**", "book.spectrum.guidebook.moving_budding_blocks": "Moving Budding Blocks", - "book.spectrum.guidebook.sludge.page0.text": "It is... something. I wanted to create a cool thing, failed and now ended up with this. Last but not least I even forgot what I wanted to do originally, damn.\\\nNot particularly pretty or useful in itself, what *is* useful is the collision with other liquids, such as [#](bb00bb)Water[#]() or [#](bb00bb)Lava[#](), creating [](item://minecraft:dirt) or [](item://minecraft:mud), respectively.", - "book.spectrum.guidebook.sludge.page1.text": "*While a sludge bath sounds like wellness, it is not advised. Believe me, I tried.*", - "book.spectrum.guidebook.sludge.page2.text": "Some items that come into contact with Sludge will tan.\\\nFor example, [](item://minecraft:rotten_flesh) will turn into [hide](item://minecraft:rabbit_hide).", - "book.spectrum.guidebook.sludge.page3.text": "Others will instead cure.\\\n[](item://minecraft:wheat) just needs a bit of TLC to become [](item://minecraft:string).", - "book.spectrum.guidebook.sludge.page4.text": "I accidentally dropped a [Four Leaf Clover](entry://general/clover) into Sludge.\\\nI tried to find it to no avail, but in a stroke of luck I did spot a [verdant piece of shell!](item://minecraft:turtle_scute)", "book.spectrum.guidebook.multitool.page0.text": "Whenever I leave my home, I carry half a tool shed with me. Considering the tons of stone I can carry around with me, that's almost negligible. Nevertheless, a universal tool that combines the abilities of a Pickaxe, Axe, Shovel and Hoe would suit me well.", "book.spectrum.guidebook.multitool.page1.text": "Not as efficient for individual tasks, but much better than having to change tools every three seconds.", "book.spectrum.guidebook.myceylon.page0.text": "Using an [#](bb00bb)Axe[#]() or [Multitool](entry://equipment/tools_and_armor/multitool) I was able to peel small, but unexpectedly sturdy pieces of bark off a [Noxshroom](entry://dimension/noxshroom_forest). Both unexpectedly sturdy for a mushroom and... tasty.\\\n\\\nThis Myceylon, as I called it, definitely adds a great flavor to baked goods and drinks.", @@ -4154,7 +4146,6 @@ "container.spectrum.rei.ink_converting.title": "Ink Converting", "container.spectrum.rei.liquid_crystal_converting.title": "Crystal Dipping", "container.spectrum.rei.midnight_solution_converting.title": "Midnight Dipping", - "container.spectrum.rei.sludge_converting.title": "Sludge Dipping", "container.spectrum.rei.pedestal_crafting.recipe_not_unlocked_line_1": "You have not discovered", "container.spectrum.rei.pedestal_crafting.recipe_not_unlocked_line_2": "this recipe yet", "container.spectrum.rei.pedestal_crafting.secret_recipe": "Secret Recipe!", @@ -4800,7 +4791,6 @@ "item.spectrum.moonstruck_nectar.tooltip": "Repairs any damaged tool", "item.spectrum.moonstruck_nectar.tooltip2": "Can be drunk for a burst of Regeneration", "item.spectrum.morchella": "Morchella", - "item.spectrum.sludge_bucket": "Bucket of Sludge", "item.spectrum.multitool": "Multitool", "item.spectrum.music_disc_credits": "Music Disc", "item.spectrum.music_disc_credits.desc": "Radiarc – Irrelevance Fading", @@ -5332,7 +5322,6 @@ "spectrum.subtitles.block.midnight_solution.ambient": "Midnight Solution fizzles", "spectrum.subtitles.block.arcane_charge.explode": "Arcane Charge explodes", "spectrum.subtitles.block.moonstone_block.chime": "Moonstone chimes", - "spectrum.subtitles.block.sludge.ambient": "Sludge pops", "spectrum.subtitles.block.onyx_block.chime": "Onyx chimes", "spectrum.subtitles.block.parametric_mining_device.throw": "Mining Device flies", "spectrum.subtitles.block.ruin.place": "Ruin placed", @@ -5697,7 +5686,6 @@ "tag.spectrum.molten_rod_fishable_in": "Molten Rod Fishable", "tag.spectrum.moonstone_crystals": "Moonstone Crystals", "tag.spectrum.moonstone_ores": "Moonstone Ores", - "tag.spectrum.sludge": "Sludge", "tag.spectrum.nightdew_herbs": "Nightdew Herbs", "tag.spectrum.noxcap_stems": "Noxcap Stems", "tag.spectrum.noxshrooms": "Noxshrooms", @@ -5883,7 +5871,6 @@ "config.spectrum.dragonrot_dripstone_drip_chance": "Dragonrot Dripstone Drip Chance", "config.spectrum.liquid_crystal_dripstone_drip_chance": "Liquid Crystal Dripstone Drip Chance", "config.spectrum.midnight_solution_dripstone_drip_chance": "Midnight Solution Dripstone Drip Chance", - "config.spectrum.sludge_dripstone_drip_chance": "Sludge Dripstone Drip Chance", "trinkets.slot.chest.pin": "Pin", "trinkets.slot.head.crown": "Crown", @@ -5955,7 +5942,6 @@ "structure.minecraft.village_taiga": "Village", "fluid_type.spectrum.liquid_crystal": "Liquid Crystal", - "fluid_type.spectrum.sludge": "Sludge", "fluid_type.spectrum.midnight_solution": "Midnight Solution", "fluid_type.spectrum.dragonrot": "Dragonrot", diff --git a/src/main/resources/assets/spectrum/lang/ko_kr.json b/src/main/resources/assets/spectrum/lang/ko_kr.json index 32377502f6..1da21cd3d6 100644 --- a/src/main/resources/assets/spectrum/lang/ko_kr.json +++ b/src/main/resources/assets/spectrum/lang/ko_kr.json @@ -1254,7 +1254,6 @@ "block.spectrum.fish_idol": "사교적인 우상", "block.spectrum.flowing_liquid_crystal": "액체 수정", "block.spectrum.flowing_midnight_solution": "자정의 용액", - "block.spectrum.flowing_sludge": "진흙탕", "block.spectrum.fluix_cluster": "액정 수정 군집", "block.spectrum.forfeiture": "상실", "block.spectrum.four_leaf_clover": "네잎클로버", @@ -1532,7 +1531,6 @@ "block.spectrum.mooshroom_brown_head": "갈색 무시룸 머리", "block.spectrum.mooshroom_red_head": "빨간색 무시룸 머리", "block.spectrum.moss_ball": "마리모", - "block.spectrum.sludge": "진흙탕", "block.spectrum.mule_head": "노새 머리", "block.spectrum.neolith_block": "네오리스 블록", "block.spectrum.nephrite_blossom_bulb": "연옥 꽃나무 구근", @@ -2175,7 +2173,6 @@ "block.spectrum.dragonrot_cauldron": "용부액 가마솥", "block.spectrum.liquid_crystal_cauldron": "액체 수정 가마솥", "block.spectrum.midnight_solution_cauldron": "자정의 용액 가마솥", - "block.spectrum.sludge_cauldron": "진흙탕 가마솥", "book.spectrum.guidebook.abyssal_vines.page0.text": "구불구불한 줄기와 빛나는 열매는 꽤나 익숙한 광경이다. 조금 더 어둡고 잎이 무성하긴 하지만, 이 늘어진 덩굴들이 발광 열매와 친척 관계라는 것은 쉽게 알 수 있다.\\\n창백한 빛과 수정 같은 기운을 뿜어내는 것을 보면, 수 세기 동안의 어둠 속에서 [액체 수정](entry://general/liquid_crystal)을 머금으며 자라난 끝에 이 서늘하고 어스름한 심연에 완벽하게 적응한 형태로 변모한 것 같다.", "book.spectrum.guidebook.abyssal_vines.page1.text": "*만지면 어질어질해진다*", @@ -3080,7 +3077,6 @@ "book.spectrum.guidebook.lightweight.page0.text": "레벨이 오를수록 [#](449900)내 몸을 점점 더 가볍게 만들어[#](), 더 멀리 뛰고 깃털처럼 천천히 떨어지게 해 주었다.\\\n높은 레벨에 도달하자 아예 [#](449900)낙하 피해를 전혀 입지 않게[#]() 되었다.", "book.spectrum.guidebook.liquid_crystal.page0.text": "액체 형태로 녹아내린 순수한 보석의 에너지다. 무언가를 치유하는 힘을 품고 있는 것 같다.", "book.spectrum.guidebook.liquid_crystal.page1.text": "이 액체를 다른 액체들과 맞닿게 하면 꽤나 흥미로운 특성을 지닌 갖가지 물질들이 탄생한다.", - "book.spectrum.guidebook.liquid_crystal.page2.text": "액체 수정을 [진흙탕](entry://magical_blocks/sludge)과 충돌시키니 [#](bb00bb)점토[#]()가 만들어졌다! 분명 이 밖에도 내가 아직 발견하지 못한 수많은 조합이 존재할 것이다!\\\n\\\n*토마스도 이런 부조화는 한 번도 본 적이 없었다.*", "book.spectrum.guidebook.liquid_crystal.page3.text": "액체 수정 한 블록 전체가 용암의 무시무시한 열기를 온전히 집어삼키도록 내버려 두었더니 이런 결과물이 나왔다.\\\n마치 [](item://minecraft:magma_block) 같은 질감이지만, 그보다 비교도 안 될 정도로 뜨겁다.", "book.spectrum.guidebook.liquid_crystal.page4.text": "[#](bb00bb)물[#]()이 꽉 찬 액체 수정 블록 속으로 흘러 들어오자, 수정이 그대로 얼어붙어 버렸다.\\\n살짝 스치기만 해도 뼛속까지 시린 오한이 밀려오길래, 나는 이것에 '동상의 결정'이라는 찰떡같은 이름을 붙여주었다.", "book.spectrum.guidebook.liquid_crystal_essences.name": "결정화", @@ -3447,11 +3443,6 @@ "book.spectrum.guidebook.moonstone_shards.page0.text": "불과 얼마 전까지만 해도 참 순진했었지, 안 그런가? 세상 모든 이치를 통달했다고 생각했지만, 그 모든 것은 언제나 진실의 절반에 불과했다.\\\n\\\n이제 나는 깨달았다. 내 손안에서 은은하고 따스한 빛으로 일렁이는 이 하얗고 순수한 보석은, 그동안 내가 이루어낸 성장의 빛나는 기념비다.", "book.spectrum.guidebook.moonstone_shards.page1.text": "나는 단 한 번도 전지전능함의 발끝에조차 닿아본 적이 없으며, 앞으로도 영원히 그럴 것이다. 세상의 모든 마법을 그러쥔다 해도 말이다. 그 누구도 전지전능해질 수는 없다. 하지만 약간의 겸손과 인내, 그리고 보살핌이 있다면, 적어도 그 경지에 한 발짝 더 다가설 수는 있다.\\\n\\\n**[#](b9bebe)순수.**", "book.spectrum.guidebook.moving_budding_blocks": "싹 틔우는 블록 옮기기", - "book.spectrum.guidebook.sludge.page0.text": "이건... 뭐랄까. 나는 뭔가 끝내주게 멋진 걸 만들고 싶었는데, 장대하게 실패한 끝에 내 손에 남은 건 이 끈적이는 오물 덩어리뿐이다. 게다가 애초에 내가 뭘 만들려고 했었는지 그 목적조차 까먹어버렸다, 젠장.\\\n이 자체로는 딱히 예쁘지도, 쓸모가 있지도 않지만, 그나마 *쓸모를 찾는다면* 다른 액체와 충돌할 때 나타난다. [#](bb00bb)물[#]()과 닿으면 [](item://minecraft:dirt)이, [#](bb00bb)용암[#]()과 닿으면 [](item://minecraft:mud)이 만들어진다.", - "book.spectrum.guidebook.sludge.page1.text": "*진흙 목욕이 건강에 좋을 것 같다고 생각하겠지만, 절대 추천하지 않는다. 날 믿어라, 내가 직접 해봤으니까.*", - "book.spectrum.guidebook.sludge.page2.text": "이 진흙과 접촉한 일부 아이템들은 무두질될 것이다.\\\n예를 들어, [](item://minecraft:rotten_flesh)은 [가죽](item://minecraft:rabbit_hide)으로 변형된다.", - "book.spectrum.guidebook.sludge.page3.text": "반대로 어떤 아이템들은 경화되기도 한다.\\\n[](item://minecraft:wheat)은 아주 약간의 애정 어린 손길만 거치면 [](item://minecraft:string)로 둔갑한다.", - "book.spectrum.guidebook.sludge.page4.text": "실수로 진흙 속에 [네잎클로버](entry://general/clover)를 떨어뜨려 버렸다.\\\n허둥지둥 찾아보려 했지만 헛수고였는데, 대신 뜻밖의 행운으로 [초록빛이 도는 단단한 껍데기](item://minecraft:turtle_scute) 조각을 발견했다!", "book.spectrum.guidebook.multitool.page0.text": "나는 집을 나설 때마다 공구 창고의 절반은 족히 될 법한 도구들을 짊어진다. 수 톤에 달하는 돌덩이도 가뿐히 들고 다니는 걸 생각하면 그깟 도구 무게야 무시할 만한 수준이긴 하다. 그럼에도 불구하고, 곡괭이, 도끼, 삽, 괭이의 능력을 하나로 합친 만능 도구가 있다면 훨씬 완벽할 것이다.", "book.spectrum.guidebook.multitool.page1.text": "각각의 도구를 따로 쓸 때만큼 효율이 압도적이지는 않지만, 3초마다 도구를 바꿔 들어야 하는 빌어먹을 번거로움에 비하면 훨씬 낫다.", "book.spectrum.guidebook.myceylon.page0.text": "[#](bb00bb)도끼[#]()나 [멀티툴](entry://equipment/tools_and_armor/multitool)을 사용하여, [어스름버섯](entry://dimension/noxshroom_forest)에서 작지만 예상외로 아주 질긴 껍질 조각들을 벗겨낼 수 있었다. 버섯치고는 놀라울 정도로 튼튼하고... 무엇보다 맛이 끝내준다.\\\n\\\n내가 균사피라 이름 붙인 이 조각은 제빵이나 음료에 곁들였을 때 확실히 환상적인 풍미를 더해준다.", @@ -4154,7 +4145,6 @@ "container.spectrum.rei.ink_converting.title": "잉크 변환", "container.spectrum.rei.liquid_crystal_converting.title": "액체 수정 담그기", "container.spectrum.rei.midnight_solution_converting.title": "자정의 용액 담그기", - "container.spectrum.rei.sludge_converting.title": "진흙탕 담그기", "container.spectrum.rei.pedestal_crafting.recipe_not_unlocked_line_1": "아직 발견하지 못한", "container.spectrum.rei.pedestal_crafting.recipe_not_unlocked_line_2": "레시피입니다", "container.spectrum.rei.pedestal_crafting.secret_recipe": "비밀 레시피!", @@ -4800,7 +4790,6 @@ "item.spectrum.moonstruck_nectar.tooltip": "손상된 모든 도구를 수리합니다", "item.spectrum.moonstruck_nectar.tooltip2": "마셔서 순간적인 재생 효과를 얻을 수 있습니다", "item.spectrum.morchella": "모르첼라", - "item.spectrum.sludge_bucket": "진흙탕 양동이", "item.spectrum.multitool": "멀티툴", "item.spectrum.music_disc_credits": "음반", "item.spectrum.music_disc_credits.desc": "Radiarc – Irrelevance Fading", @@ -5332,7 +5321,6 @@ "spectrum.subtitles.block.midnight_solution.ambient": "자정의 용액이 쉬익거림", "spectrum.subtitles.block.arcane_charge.explode": "마법 폭약이 폭발함", "spectrum.subtitles.block.moonstone_block.chime": "월장석이 울림", - "spectrum.subtitles.block.sludge.ambient": "진흙탕이 톡톡거림", "spectrum.subtitles.block.onyx_block.chime": "오닉스가 울림", "spectrum.subtitles.block.parametric_mining_device.throw": "채굴 장치가 날아감", "spectrum.subtitles.block.ruin.place": "파멸 설치됨", @@ -5697,7 +5685,6 @@ "tag.spectrum.molten_rod_fishable_in": "녹아내린 낚시대로 낚을 수 있음", "tag.spectrum.moonstone_crystals": "월장석 결정", "tag.spectrum.moonstone_ores": "월장석 광석", - "tag.spectrum.sludge": "진흙탕", "tag.spectrum.nightdew_herbs": "밤이슬 허브", "tag.spectrum.noxcap_stems": "어스름버섯 줄기", "tag.spectrum.noxshrooms": "어스름버섯", @@ -5883,7 +5870,6 @@ "config.spectrum.dragonrot_dripstone_drip_chance": "용부액 점적석 채워짐 확률", "config.spectrum.liquid_crystal_dripstone_drip_chance": "액체 수정 점적석 채워짐 확률", "config.spectrum.midnight_solution_dripstone_drip_chance": "자정의 용액 점적석 채워짐 확률", - "config.spectrum.sludge_dripstone_drip_chance": "진흙탕 점적석 채워짐 확률", "trinkets.slot.chest.pin": "핀", "trinkets.slot.head.crown": "왕관", @@ -5955,7 +5941,6 @@ "structure.minecraft.village_taiga": "마을", "fluid_type.spectrum.liquid_crystal": "액체 수정", - "fluid_type.spectrum.sludge": "진흙탕", "fluid_type.spectrum.midnight_solution": "자정의 용액", "fluid_type.spectrum.dragonrot": "용부액", diff --git a/src/main/resources/assets/spectrum/lang/pt_br.json b/src/main/resources/assets/spectrum/lang/pt_br.json index ac9f9472dd..44b5007109 100644 --- a/src/main/resources/assets/spectrum/lang/pt_br.json +++ b/src/main/resources/assets/spectrum/lang/pt_br.json @@ -1,9 +1,4 @@ { - "recipeGroup.spectrum.topaz_runes": "Runas de Topázio", - "recipeGroup.spectrum.amethyst_runes": "Runas de Ametista", - "recipeGroup.spectrum.citrine_runes": "Runas de Citrino", - "recipeGroup.spectrum.onyx_runes": "Runas de Ônix", - "recipeGroup.spectrum.moonstone_runes": "Runas de Pedra da Lua", "recipeGroup.spectrum.colored_lamps": "Lâmpadas Coloridas", "recipeGroup.spectrum.gemstone_glass": "Vidro de Pedras Preciosas", "recipeGroup.spectrum.gemstone_chimes": "Carrilhões de Pedras Preciosas", @@ -46,7 +41,6 @@ "container.spectrum.rei.pedestal_crafting.recipe_not_unlocked_line_1": "Você ainda", "container.spectrum.rei.pedestal_crafting.recipe_not_unlocked_line_2": "não descobriu essa receita", "container.spectrum.rei.enchanting.title": "Encantamento Spectrum", - "container.spectrum.rei.crafting_time": "%f segundos", "container.spectrum.rei.crafting_time_one_second": "%f segundos", "container.spectrum.rei.enchantment_upgrading.title": "Melhoria de Encatamento", "container.spectrum.rei.midnight_solution_converting.title": "Mergulho da Meia Noite", @@ -84,7 +78,6 @@ "death.attack.spectrum_dike_gate": "%s não entendeu que não foi convidado(a)", "entity.spectrum.block_flooder_projectile": "Alagador de Blocos", - "entity.spectrum.gravity_block": "Bloco de Gravidade", "entity.spectrum.phantom_frame": "Moldura Phantom", "entity.spectrum.glow_phantom_frame": "Moldura Phantom Brilhante", "entity.spectrum.shooting_star": "Estrela Cadente", @@ -142,7 +135,6 @@ "spectrum.subtitles.celestial_pocket_watch_ticking": "Tiques de Relógio de bolso", "spectrum.subtitles.shooting_star_cracker": "Estalos de Estrela cadente", "spectrum.subtitles.block.memory.advance": "Memória define além", - "spectrum.subtitles.block.sludge.ambient": "Lama flui", "spectrum.subtitles.block.liquid_crystal.ambient": "Badalar de Cristal Líquido", "spectrum.subtitles.block.midnight_solution.ambient": "Solução da Meia Noite rosna", "spectrum.subtitles.dimension.ambient": "Caverna uiva", @@ -151,7 +143,6 @@ "spectrum.subtitles.block.failing.place": "Ruído agudo", "spectrum.subtitles.block.ruin.place": "Ruído agudo", "spectrum.subtitles.spectrum_theme_plays": "Tema Spectrum toca", - "spectrum.subtitles.boss_theme_plays": "Tema de Chefe toca", "spectrum.subtitles.deeper_down_theme_plays": "Tema do Mais Profundo toca", "spectrum.subtitles.player_teleports": "Jogador teletransporta", "spectrum.subtitles.puff_circlet": "Bracelete Pufante Pufa", @@ -196,50 +187,6 @@ "spectrum.toast.message.fourth_potion_reagent_unlocked.title": "Maestria em Fermentação", "spectrum.toast.message.fourth_potion_reagent_unlocked.text": "Use um Quarto Reagente na Fermentação de Poção", - "config.spectrum.EndermanHoldingEnderTreasureChance": "Chance de Enderman segurando um bloco especial", - "config.spectrum.EndermanHoldingEnderTreasureInEndChance": "Chance de Enderman segurando um bloco especial no end", - "config.spectrum.ColoredTreePatchChanceChunk": "Tenta gerar Árvores Coloridas a cada X chunks", - "config.spectrum.ShootingStarWorlds": "Mundos com Estrelas Cadente", - "config.spectrum.ShootingStarChance": "Chance de uma Estrela Cadente cair a cada 100 ticks", - "config.spectrum.StormStonesWorlds": "Mundos que geram Pedras de Tempestade", - "config.spectrum.StormStonesChance": "Chance de gerar Pedra de Tempestade em um ralâmpago", - "config.spectrum.VanillaRecipeCraftingTimeTicks": "Quantidade de ticks para o Pedestal fabricar receitas Vanilla", - "config.spectrum.FadingDecayTickRate": "Velocidade de Propagação de Desvanecimento", - "config.spectrum.FailingDecayTickRate": "Velocidade de Propagação de Falha", - "config.spectrum.RuinDecayTickRate": "Velocidade de Propagação de Ruína", - "config.spectrum.ForfeitureDecayTickRate": "Velocidade de Propagação de Terror", - - "config.spectrum.ExuberanceEnchantmentEnabled": "Encantamento Exuberância disponível", - "config.spectrum.InventoryInsertionEnchantmentEnabled": "Encantamento Inserção de Inventário disponível", - "config.spectrum.PestControlEnchantmentEnabled": "Encantamento Controle de Pragas disponível", - "config.spectrum.ResonanceEnchantmentEnabled": "Encantamento Ressonância disponível", - "config.spectrum.TreasureHunterEnchantmentEnabled": "Encantamento Caçador de Tesouros disponível", - "config.spectrum.DisarmingEnchantmentEnabled": "Encantamento Desarmamento disponível", - "config.spectrum.FirstStrikeEnchantmentEnabled": "Encantamento Primeiro Ataque disponível", - "config.spectrum.ImprovedCriticalEnchantmentEnabled": "Encantamento Crítico Melhorado disponível", - "config.spectrum.InertiaEnchantmentEnabled": "Encantamento Inércia disponível", - "config.spectrum.CloversFavorEnchantmentEnabled": "Encantmento Auxílio do Treco disponível", - "config.spectrum.SnipingEnchantmentEnabled": "Encatamento Sniping disponível", - "config.spectrum.TightGripEnchantmentEnabled": "Encantamento Aperto Firme disponível", - "config.spectrum.SteadfastEnchantmentEnabled": "Encantamento Firme disponível", - "config.spectrum.IndestructibleEnchantmentEnabled": "Encantamento Indestrutível disponível", - - "config.spectrum.TreasureHunterMaxLevel": "Nível máximo para encantamento Caçador de Tesouros", - "config.spectrum.DisarmingMaxLevel": "Nível máximo para encantamento Desarmamento", - "config.spectrum.FirstStrikeMaxLevel": "Nível máximo para encantamento Primeiro Ataque", - "config.spectrum.CloversFavorMaxLevel": "Nível máximo para encantamento Auxílio do Treco", - "config.spectrum.ImprovedCriticalMaxLevel": "Nível máximo para encantamento Crítico Melhorado", - "config.spectrum.InertiaMaxLevel": "Nível máximo para encantamento Inércia", - "config.spectrum.TightGripMaxLevel": "Nível máximo para encantamento Aperto Firme", - "config.spectrum.ExuberanceMaxLevel": "Nível máximo para encantamento Exuberância", - "config.spectrum.ExuberanceBonusExperiencePercentPerLevel": "XP bônus em abate com encantamento Exuberância", - "config.spectrum.ImprovedCriticalExtraDamageMultiplierPerLevel": "Dano extra por nível de encanatamento Crítico Melhorado", - "config.spectrum.FirstStrikeDamagePerLevel": "Dano extra por nível de encanatamento Primeiro Abate", - "config.spectrum.GlowVisionGogglesDuration": "Duração dos Óculos de visão brilhante em segundos para cada bolsa de tinta brilhante", - "config.spectrum.DisarmingChancePerLevelMobs": "Chance por nível de desarmar Monstros atingidos por arma com encantamento Desarmamento", - "config.spectrum.DisarmingChancePerLevelPlayers": "Chance por nível de desarmar Jogadores atingidos por arma com encantamento Desarmamento", - "config.spectrum.REIListsRecipesAsNotUnlocked": "Mostrar 'receita não desbloqueada' em telas do REI para receitas não desbloqueadas", - "block.spectrum.upgrade_speed": "Acelerador de Fabricação", "block.spectrum.upgrade_speed2": "Acelerador de Fabricação T2", "block.spectrum.upgrade_speed3": "Acelerador de Fabricação T3", @@ -638,10 +585,6 @@ "block.spectrum.yellow_slab": "Lage de Tábua Amarela", "block.spectrum.yellow_fence_gate": "Portão de Tábua Amarela", - "item.spectrum.sludge_bucket": "Balde de Lama", - "block.spectrum.sludge": "Lama", - "block.spectrum.flowing_sludge": "Lama", - "item.spectrum.liquid_crystal_bucket": "Balde de Cristal Líquido", "block.spectrum.liquid_crystal": "Cristal Líquido", "block.spectrum.flowing_liquid_crystal": "Cristal Líquido", @@ -821,7 +764,6 @@ "block.spectrum.enderman_head": "Cabeça de Enderman", "block.spectrum.endermite_head": "Cabeça de Endermite", "block.spectrum.evoker_head": "Cabeça de Invocador", - "block.spectrum.fox_head": "Cabeça de Raposa", "block.spectrum.fox_arctic_head": "Cabeça de Raposa Ártica", "block.spectrum.ghast_head": "Cabeça de Ghast", "block.spectrum.guardian_head": "Cabeça de Guardião", diff --git a/src/main/resources/assets/spectrum/lang/ru_ru.json b/src/main/resources/assets/spectrum/lang/ru_ru.json index 029b1bda0d..46943fae6b 100644 --- a/src/main/resources/assets/spectrum/lang/ru_ru.json +++ b/src/main/resources/assets/spectrum/lang/ru_ru.json @@ -1254,7 +1254,6 @@ "block.spectrum.fish_idol": "Подводный идол", "block.spectrum.flowing_liquid_crystal": "Жидкий кристалл", "block.spectrum.flowing_midnight_solution": "Полуночный раствор", - "block.spectrum.flowing_sludge": "Грязь", "block.spectrum.fluix_cluster": "Изменчивая друза", "block.spectrum.forfeiture": "Потеря", "block.spectrum.four_leaf_clover": "Четырёхлистный клевер", @@ -1532,7 +1531,6 @@ "block.spectrum.mooshroom_brown_head": "Голова коричневого муушрума", "block.spectrum.mooshroom_red_head": "Голова красного муушрума", "block.spectrum.moss_ball": "Комок мха", - "block.spectrum.sludge": "Грязь", "block.spectrum.mule_head": "Голова мула", "block.spectrum.neolith_block": "Блок неолита", "block.spectrum.nephrite_blossom_bulb": "Луковица цветущего нефрита", @@ -2464,7 +2462,7 @@ "book.spectrum.guidebook.crafting_tablet.page0.text": "Планшетный верстак – это гораздо больше, чем просто портативный [верстак](item://minecraft:crafting_table). Он сохраняет введённый мной рецепт и позволяет создавать его по надобности.", "book.spectrum.guidebook.crafting_tablet.page1.text": "Может наступить момент, когда определённый материал нужен мне так часто, что я захочу его автоматизировать. Или я стану одним из тех мазохистов, которые автоматизируют каждый предмет, потому что могут.\\\n\\\n[Пигментный пьедестал](entry://general/pedestal) имеет специальный слот для планшетного верстака. Если я добавлю на пьедестал предметы с помощью воронок, они будут размещены соответствующим образом и равномерно, как указано в сохранённом рецепте.", "book.spectrum.guidebook.crafting_tablet.page1.title": "Автоматизация пьедестала", - "book.spectrum.guidebook.crawfish.page0.text": "Посмотрите, что моя последняя рыбалка принесла на берег! Это на самом деле не рыба, а *ракообразное*.\\\n\\\nКажется, они живут даже в самых [странных прудах](entry://magical_blocks/sludge).", + "book.spectrum.guidebook.crawfish.page0.text": "Посмотрите, что моя последняя рыбалка принесла на берег! Это на самом деле не рыба, а *ракообразное*.\\\n\\\nКажется, они живут даже в самых странных прудах.", "book.spectrum.guidebook.creating_enchanted_books.name": "Создание чародейских книг", "book.spectrum.guidebook.creating_enchanted_books.page0.text": "Используя [пигмент](entry://general/pigment), выбранные ингредиенты, и некоторое количество опыта, [зачарователь](entry://enchanting/enchanter) позволяет мне добавлять чары на [обычные книги](item://minecraft:book).\\\n\\\nХотя этот процесс требует больше опыта, чем зачарование в обычном чародейском столе, я могу полностью контролировать, какое зачарование я хочу создать.", "book.spectrum.guidebook.creating_enchanted_books.page1.text": "Я также могу использовать этот процесс, чтобы зачаровать мои магические инструменты.", @@ -3074,7 +3072,7 @@ "book.spectrum.guidebook.lightweight.page0.text": "[#](449900)Делает меня немного легче[#]() с каждым уровнем, позволяя мне дальше прыгать и медленее падать.\\\nВысокие уровни даже [#](449900)убирают урон от падения[#]().", "book.spectrum.guidebook.liquid_crystal.page0.text": "Чистая энергия самоцветов в форме жидкости. Кажется, имеет исцеляющий эффект.", "book.spectrum.guidebook.liquid_crystal.page1.text": "При контакте с другими жидкостями образуются различные материалы с интересными свойствами.", - "book.spectrum.guidebook.liquid_crystal.page2.text": "Позволив жидкому кристаллу столкнуться с [грязью](entry://magical_blocks/sludge) создаёт [#](bb00bb)глину[#]()! Наверняка есть ещё больше комбинаций, которые предстоит открыть!\\\n\\\n*Фома никогда не видел такого дисбаланса.*", + "book.spectrum.guidebook.liquid_crystal.page2.text": "Позволив жидкому кристаллу столкнуться с грязью создаёт [#](bb00bb)глину[#]()! Наверняка есть ещё больше комбинаций, которые предстоит открыть!\\\n\\\n*Фома никогда не видел такого дисбаланса.*", "book.spectrum.guidebook.liquid_crystal.page3.text": "Если позволить полному блоку жидкого кристалла поглотить огромное количество тепла лавы, в результате получится это.\\\nПочти что [магма](item://minecraft:magma_block), только гораздо горячее.", "book.spectrum.guidebook.liquid_crystal.page4.text": "Когда [#](bb00bb)вода[#]() пыталась стечь в полный блок жидкого кристалла, кристалл застывал.\\\nПоскольку даже лёгкого прикосновения было достаточно, чтобы вызвать у меня холодную дрожь, я назвал его морозный кристалл.", "book.spectrum.guidebook.liquid_crystal_essences.name": "Кристаллизация", @@ -3444,11 +3442,6 @@ "book.spectrum.guidebook.moonstone_shards.page0.text": "Не так давно я был весьма простодушен, не так ли? Думал, что знаю всё, но это всё всегда было лишь половиной правды.\\\n\\\nТеперь я знаю больше. И этот белый, чистый самоцвет в моей руке, переливается мягким, тёплым светом, – памятник моему личному росту.", "book.spectrum.guidebook.moonstone_shards.page1.text": "Я никогда не был всемогущим и никогда не буду. Не со всей магией в мире. Никто не всемогущ. Но, проявив немного смирения, заботы и поддержки, я смогу хотя бы немного приблизиться к этому.\\\n\\\n**[#](b9bebe)Чистота.**", "book.spectrum.guidebook.moving_budding_blocks": "Перетаскивание цветущих блоков", - "book.spectrum.guidebook.sludge.page0.text": "Это... что-то. Я хотел создать крутую вещь, потерпел неудачу, и теперь остался с этим. Последнее, но не менее важное, я даже забыл что я изначально хотел сделать, блин.\\\nНе особенно красиво и полезно само по себе, но *что* полезно, так это контакт с другими жидкостями, такими как [#](bb00bb)вода[#]() или [#](bb00bb)лава[#](), создаёт [землю](item://minecraft:dirt) или [грязь](item://minecraft:mud), соответственно.", - "book.spectrum.guidebook.sludge.page1.text": "*Пусть грязевая ванна и звучит как оздоровительная, она не рекомендуется. Поверьте мне, я пробовал.*", - "book.spectrum.guidebook.sludge.page2.text": "Некоторые предметы, соприкоснувшись с грязью, загорят.\\\nНапример, [гнилая плоть](item://minecraft:rotten_flesh) превратится в [шкуру](item://minecraft:rabbit_hide).", - "book.spectrum.guidebook.sludge.page3.text": "Другие, наоборот, очистятся.\\\n[Пшенице](item://minecraft:wheat) просто нужно немного телеканала 'Домашний', чтобы превратиться в [нить](item://minecraft:string).", - "book.spectrum.guidebook.sludge.page4.text": "Я случайно уронил [четырёхлистный клевер](entry://general/clover) в грязь.\\\nЯ пытался найти его, но безуспешно, но по счастливой случайности я заметил [зелёный кусок скорлупы!](item://minecraft:turtle_scute)", "book.spectrum.guidebook.multitool.page0.text": "Выходя из дома, я беру с собой половину сарая с инструментами. Учитывая тонны камня, которые я могу унести с собой, это почти ничто. Тем не менее универсальный инструмент, сочетающий в себе способности кирки, топора, лопаты и мотыги, мне бы очень подошел.", "book.spectrum.guidebook.multitool.page1.text": "Не так эффективно при выполнении отдельных задач, но гораздо лучше, чем менять инструменты каждые три секунды.", "book.spectrum.guidebook.myceylon.page0.text": "С помощью [#](bb00bb)топора[#]() или [мультиинструмента](entry://equipment/tools_and_armor/multitool) я смог снять небольшие, но неожиданно прочные куски коры с [мракогриба](entry://dimension/noxshroom_forest). Они оказались неожиданно крепкими для грибов и... вкусными.\\\n\\\nЭтот грибной цейлон, как я его назвал, придаёт великолепный вкус выпечке и напиткам.", @@ -4151,7 +4144,6 @@ "container.spectrum.rei.ink_converting.title": "Конвертация краски", "container.spectrum.rei.liquid_crystal_converting.title": "Окунание в жидкий кристалл", "container.spectrum.rei.midnight_solution_converting.title": "Окунание в полуночный раствор", - "container.spectrum.rei.sludge_converting.title": "Окунание в грязь", "container.spectrum.rei.pedestal_crafting.recipe_not_unlocked_line_1": "Вы пока что не знаете", "container.spectrum.rei.pedestal_crafting.recipe_not_unlocked_line_2": "данный рецепт", "container.spectrum.rei.pedestal_crafting.secret_recipe": "Секретный рецепт!", @@ -4796,7 +4788,6 @@ "item.spectrum.moonstruck_nectar.tooltip": "Чинит любой предмет", "item.spectrum.moonstruck_nectar.tooltip2": "Можно выпить для сильной регенерации", "item.spectrum.morchella": "Грибовуха", - "item.spectrum.sludge_bucket": "Ведро грязи", "item.spectrum.multitool": "Мультиинструмент", "item.spectrum.music_disc_credits": "Пластинка", "item.spectrum.music_disc_credits.desc": "Тема Глубоких Низин: Radiarc – Irrelevance Fading", @@ -5328,7 +5319,6 @@ "spectrum.subtitles.block.midnight_solution.ambient": "Шипение полуночного раствора", "spectrum.subtitles.block.arcane_charge.explode": "Взрыв арканового заряда", "spectrum.subtitles.block.moonstone_block.chime": "Лунокамень звенит", - "spectrum.subtitles.block.sludge.ambient": "Грязь брызгается", "spectrum.subtitles.block.onyx_block.chime": "Оникс звенит", "spectrum.subtitles.block.parametric_mining_device.throw": "Добыватель летит", "spectrum.subtitles.block.ruin.place": "Пронзительный визг", @@ -5693,7 +5683,6 @@ "tag.spectrum.molten_rod_fishable_in": "Можно рыбачить расплавленной удочкой", "tag.spectrum.moonstone_crystals": "Кристаллы лунокамня", "tag.spectrum.moonstone_ores": "Лунокаменные руды", - "tag.spectrum.sludge": "Грязь", "tag.spectrum.nightdew_herbs": "Травы ночной росы", "tag.spectrum.noxcap_stems": "Ножки мракогриба", "tag.spectrum.noxshrooms": "Мракогрибы", @@ -5946,7 +5935,6 @@ "structure.minecraft.village_taiga": "Деревня", "fluid_type.spectrum.liquid_crystal": "Жидкий кристалл", - "fluid_type.spectrum.sludge": "Грязь", "fluid_type.spectrum.midnight_solution": "Полуночный раствор", "fluid_type.spectrum.dragonrot": "Дракогниль", diff --git a/src/main/resources/assets/spectrum/lang/zh_cn.json b/src/main/resources/assets/spectrum/lang/zh_cn.json index f50ceaa40f..97ae325981 100644 --- a/src/main/resources/assets/spectrum/lang/zh_cn.json +++ b/src/main/resources/assets/spectrum/lang/zh_cn.json @@ -916,9 +916,6 @@ "block.spectrum.stuck_storm_stone": "风暴之石", "block.spectrum.radiating_ender": "末影辐光", "item.spectrum.bone_ash": "龙骨灰", - "item.spectrum.sludge_bucket": "泥浆桶", - "block.spectrum.sludge": "泥浆", - "block.spectrum.flowing_sludge": "泥浆", "item.spectrum.liquid_crystal_bucket": "液态水晶桶", "block.spectrum.liquid_crystal": "液态水晶", "block.spectrum.flowing_liquid_crystal": "液态水晶", @@ -2599,7 +2596,6 @@ "container.spectrum.rei.pedestal_crafting.recipe_not_unlocked_line_2": "这个配方", "container.spectrum.rei.enchanting.title": "附魔物品", "container.spectrum.rei.enchantment_upgrading.title": "附魔升级", - "container.spectrum.rei.sludge_converting.title": "泥浆:侵染", "container.spectrum.rei.liquid_crystal_converting.title": "液态水晶:侵染", "container.spectrum.rei.midnight_solution_converting.title": "午夜溶液:侵染", "container.spectrum.rei.dragonrot_converting.title": "龙腐脓浆:侵染", @@ -2949,7 +2945,6 @@ "spectrum.subtitles.celestial_pocket_watch_ticking": "天体怀表:滴答作响", "spectrum.subtitles.shooting_star_cracker": "流星:破裂", "spectrum.subtitles.block.memory.advance": "记忆:再塑", - "spectrum.subtitles.block.sludge.ambient": "泥浆:冒泡", "spectrum.subtitles.block.liquid_crystal.ambient": "液态水晶:鸣响", "spectrum.subtitles.block.midnight_solution.ambient": "午夜溶液:嘶嘶作响", "spectrum.subtitles.howling_wind_high": "风声:呼啸", @@ -3234,7 +3229,6 @@ "config.spectrum.dragonrot_dripstone_drip_chance": "龙腐脓浆钟乳石滴落概率", "config.spectrum.liquid_crystal_dripstone_drip_chance": "液体水晶钟乳石滴落概率", "config.spectrum.midnight_solution_dripstone_drip_chance": "午夜溶液钟乳石滴落概率", - "config.spectrum.sludge_dripstone_drip_chance": "泥浆钟乳石滴落概率", "item.spectrum.least_black_lotus": "淡黑莲花", "item.spectrum.least_black_lotus.tooltip": "是不是洗掉色了?", @@ -3500,7 +3494,6 @@ "tag.spectrum.mob_heads.lizard_heads": "恶蜥的头", "tag.spectrum.weeping_gala_logs": "乳脂原木", "tag.spectrum.requires_omni_accelerator_pvp_enabled": "需要启用全能发射器 PvP", - "tag.spectrum.sludge": "泥浆", "tag.spectrum.dragonrot": "龙腐脓浆", "tag.spectrum.liquid_crystal": "液态水晶", "tag.spectrum.midnight_solution": "午夜溶液", @@ -3515,7 +3508,6 @@ "tag.spectrum.pastel_node_upgrades": "绘彩节点升级用品", "tag.spectrum.tag_filtering_items": "标签筛选物品", "tag.spectrum.unlocks_bag_of_holding": "解锁手持末影袋", - "tag.spectrum.crossbows": "光谱弩", "spectrum.gui.guidebook.reveal_hint_button.text": "解锁线索", "spectrum.gui.guidebook.reveal_hint_button.tooltip.pay": "支付少量费用以解锁提示", @@ -3970,7 +3962,7 @@ "book.spectrum.guidebook.crafting_tablet.page1.title": "基座自动化", "book.spectrum.guidebook.crafting_tablet.page1.text": "总有一天,我需要频繁反复合成某样材料,以至于想过搞自动化。或许我也会变成某种流水生产线每个物品都搞自动生产的肝帝人皇。\\\n\\\n[七彩基座](entry://general/pedestal)有专门放置合成模板的槽位。使用漏斗或者类似的器件填充基座的时候,物品会按照合成模板中配方的指示均匀地落在对应的槽位上。", - "book.spectrum.guidebook.crawfish.page0.text": "看看我上次钓鱼钓上来了什么!这其实不是鱼,而是一种**甲壳动物**。\\\n\\\n它们似乎即使在[最泥泞的池塘](entry://magical_blocks/sludge)里也能活得好好的。", + "book.spectrum.guidebook.crawfish.page0.text": "看看我上次钓鱼钓上来了什么!这其实不是鱼,而是一种**甲壳动物**。\\\n\\\n它们似乎即使在最泥泞的池塘里也能活得好好的。", "book.spectrum.guidebook.creating_enchanted_books.name": "制作附魔书", "book.spectrum.guidebook.creating_enchanted_books.page0.text": "[附魔基座](entry://enchanting/enchanter)可以消耗[颜料](entry://general/pigment),原材料与经验对[#](bb00bb)普通书本[#]()添加附魔。 \\\n\\\n虽然经验开销略高于附魔台,但我可以对附魔的附魔进行更为细致入微的选取。", @@ -4687,7 +4679,6 @@ "book.spectrum.guidebook.liquid_crystal.page0.text": "宝石晶的纯净能量以液态形式存在,似乎具有治疗效果。", "book.spectrum.guidebook.liquid_crystal.page1.text": "使其与其他液体结合会产生具有有趣特性的各种材料。", - "book.spectrum.guidebook.liquid_crystal.page2.text": "液态水晶与[液态泥浆](entry://magical_blocks/sludge)[#]()碰撞,产生了[#](bb00bb)黏土[#]()!肯定还有更多组合等待发现!\\\n\\\n*从未见过如此不平衡的现象。*", "book.spectrum.guidebook.liquid_crystal.page3.text": "完整的一格液态水晶在吸收了[#](bb00bb)熔岩[#]()的巨大热量之后形成了这个东西。\\\n感觉很像[](item://minecraft:magma_block),但要热得多。", "book.spectrum.guidebook.liquid_crystal.page4.text": "当[#](bb00bb)水[#]()流入液态水晶的源头时,水晶固化了。\\\n只是轻轻触碰,我就感受到了凛冽而刺骨的严寒。我将其命名为霜冻水晶。", @@ -4826,12 +4817,6 @@ "book.spectrum.guidebook.moving_budding_blocks": "可移动的母岩", - "book.spectrum.guidebook.sludge.page0.text": "这东西...也算个成果吧。我本来想做出点厉害的玩意儿,结果失败了,最后就搞出了这东西。而且我连当初想做什么都忘了,真服了。\\\n泥浆本身既不好看,也没什么用,有用的*是*和其他液体混合的效果,例如和[#](bb00bb)水[#]()混合会变成[](item://minecraft:dirt),和[#](bb00bb)熔岩[#]()混合则会变成[](item://minecraft:mud)。", - "book.spectrum.guidebook.sludge.page1.text": "*虽然泥浆浴听起来挺养生的,但千万别试。相信我,我试过了。*", - "book.spectrum.guidebook.sludge.page2.text": "有些物品接触泥浆后会发生鞣化。\\\n比如把[](item://minecraft:rotten_flesh)扔进去,就会变成[](item://minecraft:rabbit_hide)。", - "book.spectrum.guidebook.sludge.page3.text": "还有些物品则会被纯化。\\\n为什么小麦会变成线呢?怎么会事呢? 莫非是线面?", - "book.spectrum.guidebook.sludge.page4.text": "我不小心把一片[四叶草](entry://general/clover)掉进了泥浆里。\\\n我找了半天也没找着,可运气不错,我居然捡到了一片[翠绿的龟壳!](item://minecraft:turtle_scute)", - "book.spectrum.guidebook.multitool.page0.text": "每次出门冒险的时候,我总要带上一大包工具,虽说我连成吨的石头都能随便扛,这点工具根本不算什么。但如果有一把能集镐、斧、锹、锄于一体的万用工具,那肯定方便多了。", "book.spectrum.guidebook.multitool.page1.text": "虽然单独做某件事时效率没那么高,但总好过每隔三秒就要切一次工具。", @@ -6368,7 +6353,6 @@ "structure.minecraft.village_taiga": "针叶林村庄", "fluid_type.spectrum.liquid_crystal": "液态水晶", - "fluid_type.spectrum.sludge": "泥浆", "fluid_type.spectrum.midnight_solution": "午夜溶液", "fluid_type.spectrum.dragonrot": "龙腐脓浆", diff --git a/src/main/resources/assets/spectrum/models/block/sludge.json b/src/main/resources/assets/spectrum/models/block/sludge.json deleted file mode 100644 index 3f97fa16ab..0000000000 --- a/src/main/resources/assets/spectrum/models/block/sludge.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "textures": { - "particle": "spectrum:block/sludge_still" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/sludge_cauldron.json b/src/main/resources/assets/spectrum/models/block/sludge_cauldron.json deleted file mode 100644 index a490579725..0000000000 --- a/src/main/resources/assets/spectrum/models/block/sludge_cauldron.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "parent": "minecraft:block/template_cauldron_full", - "textures": { - "bottom": "minecraft:block/cauldron_bottom", - "content": "spectrum:block/sludge_still", - "inside": "minecraft:block/cauldron_inner", - "particle": "minecraft:block/cauldron_side", - "side": "minecraft:block/cauldron_side", - "top": "minecraft:block/cauldron_top" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/sludge_bucket.json b/src/main/resources/assets/spectrum/models/item/sludge_bucket.json deleted file mode 100644 index 98a06e09c4..0000000000 --- a/src/main/resources/assets/spectrum/models/item/sludge_bucket.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "spectrum:item/sludge_bucket" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/particles/dripping_sludge.json b/src/main/resources/assets/spectrum/particles/dripping_sludge.json deleted file mode 100644 index 17f53bf906..0000000000 --- a/src/main/resources/assets/spectrum/particles/dripping_sludge.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "textures": [ - "minecraft:drip_hang" - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/particles/falling_sludge.json b/src/main/resources/assets/spectrum/particles/falling_sludge.json deleted file mode 100644 index 4c396ae331..0000000000 --- a/src/main/resources/assets/spectrum/particles/falling_sludge.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "textures": [ - "minecraft:drip_fall" - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/particles/landing_sludge.json b/src/main/resources/assets/spectrum/particles/landing_sludge.json deleted file mode 100644 index d0b043950d..0000000000 --- a/src/main/resources/assets/spectrum/particles/landing_sludge.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "textures": [ - "minecraft:drip_land" - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/particles/sludge_fishing.json b/src/main/resources/assets/spectrum/particles/sludge_fishing.json deleted file mode 100644 index e4e5f5175c..0000000000 --- a/src/main/resources/assets/spectrum/particles/sludge_fishing.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "textures": [ - "spectrum:sludge_splash_0", - "spectrum:sludge_splash_1", - "spectrum:sludge_splash_2", - "spectrum:sludge_splash_3" - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/particles/sludge_pop.json b/src/main/resources/assets/spectrum/particles/sludge_pop.json deleted file mode 100644 index 4b254054e6..0000000000 --- a/src/main/resources/assets/spectrum/particles/sludge_pop.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "textures": [ - "spectrum:sludge_pop" - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/particles/sludge_splash.json b/src/main/resources/assets/spectrum/particles/sludge_splash.json deleted file mode 100644 index e4e5f5175c..0000000000 --- a/src/main/resources/assets/spectrum/particles/sludge_splash.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "textures": [ - "spectrum:sludge_splash_0", - "spectrum:sludge_splash_1", - "spectrum:sludge_splash_2", - "spectrum:sludge_splash_3" - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/sounds.json b/src/main/resources/assets/spectrum/sounds.json index c70adcfd46..c51f7a73eb 100644 --- a/src/main/resources/assets/spectrum/sounds.json +++ b/src/main/resources/assets/spectrum/sounds.json @@ -769,16 +769,6 @@ "spectrum:ender_splice_bound" ] }, - "sludge_ambient": { - "subtitle": "spectrum.subtitles.block.sludge.ambient", - "sounds": [ - "spectrum:sludge_ambient", - "spectrum:sludge_ambient2", - "spectrum:sludge_ambient3", - "spectrum:sludge_ambient4", - "spectrum:sludge_ambient5" - ] - }, "liquid_crystal_ambient": { "subtitle": "spectrum.subtitles.block.liquid_crystal.ambient", "sounds": [ diff --git a/src/main/resources/assets/spectrum/sounds/sludge_ambient.ogg b/src/main/resources/assets/spectrum/sounds/sludge_ambient.ogg deleted file mode 100644 index 63e4953abc9be2d204b10594682d393a6a7d205a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4839 zcmb_feLR%e+dp1vhOk4@u)~g*DdVliQt?wi24PgVMNFk_h8UvE(9@>fl&Q5$(ij#$ zy~qrSQL3SrZ4((1k~G=gOHo^!+BSOG>bdTFs%@V?p3n2gbAN8*I_G=Nb)D;bUFSOI z4oggoM7rq1LkZ9dH#EX79UGl>YlJ+32=CIdi`F9HZQB2}I$`+CPY*s*2U_!E6ld(?jU)Gu>y-oITTn?uaGCXYvJUiS)p^|En2mf4ewPy#F zA9OrEk9}@)Uttu&C&+0_!i6EOBNd`5>XPpC2Xv6`(-XVX4HzI5c#TMf1uQLUB4py@ zHk$|KrPokFlG8xik4venW~s2(3#4KC516pQ6Gy3uCc;U$7B#N#5w2O{**u^fM+_!@ zB)ED)N@I;!h#GJ$(4=Ym=pOM?P$5ElD;@LhI+{?d4jZCQgebo0=0Q8nLmO%5FFF{L zjbkU^JdBJXo@=_2nghpGZBg{d-+T+n#mg0EC*DntkUn0yIKP5t}Fo}d97 zrcAVqFN6h(%?YJK&_~m{1t7i|Xn~kRkkBDW>Tpi#5>n)I{s{gq90*uACF*ii>Xot7 z6=SKlE+^a?OSpD9VR=cy4OQxL&GO|}GXMD!u4n6`?1Fp1I=sOJ@?b+EIE6Zhg0idT zD0JzNdW3?HmjW*Qxh!HieR9V@p>G8cG=PHUYjz9^(Fs;~x&9N5CI2_j!8MnKlsNXM0kyD6; zFq)*8gi$=m;jl_%yw$GitGs$on4tw+o2-^fJcA^DpbCsDa2vHMSQV)9CNYX-JQs$l z6aY{~vQ8)YB1TcwjH;jpe~iDng){}%a2-MKf-c(`HdP4S6L~e zh7!glEX{RZy%zu>47C)?cWqh*#%nafR967HJ=M#yl&X;duCi9e1)#%9RIeJo=?9*h zEd?8(%2mzvXEqYX+X>?_B1c@+2jgn0Xp!g|av7guC6@6_*a~xgZ%D0-2Q-xNA$b`5UN16ZD}@un zP(XAUip5ahH|rtaY~ymXd_8lk!)AzVfanw~k2OMv$9yq zy$5*~(Y0Sz!WNXt`?*P#2p!TR!QZ6HzQSVUYlG0{LQDca0yXLikqJ{l1u|=>{BAgl zA|^|gRAfRlxoT>L8P2*1+Yu*HVl5_`)PKQXV2-s8kBLIVb0KJEX}I`c z4Qvx&4sw>8!l_kJ`SmJ|E^3)fL)nI_W32DUlUxoFK2Ag}6a>pcdM0pCPLpjWs!uIW zAMUsqvr-Uot@Yq|L0mDctD-0zLIt6R{RYcc=0J8ZRTg|wrA!7Hqc&kX;mz&VL;|U) z{xH~rFHvp7^9jP|N}#G?F5a|C>4BscPsCaOGCF7u(`u57M?3=+l8`U`ESyDNKgf9a zMZh1Dt`ujRs%0A%2e$_84FLx}-3tmnh2igj^g=y%S__r%P(-|F%g()ok9V{_b^yIt za_JUen<4LGSC!(S0xI1f$mNS6@7r-lNRjQ~d z#&{T3voz(fw;_uqjhgaMmF?G3KTGB)v+NF{&RscV+kn3#kT`6b5@u9fGQ^ z7~s{ZMre{JM9IeU?a8U6z7W{^T+x%cq!m6;9w7bZlD?A6+$SsH)i-Kr8%^g^BRHY1 z>hi3fQ&hf~!&Gy#dXJARlbFs^SnwN;kK1f?Ykhea&W`cBIbX~puap$Bh6hDYPfg`Z zzG&@SCUR?~4&~2meMw)fJWg660e$?9qnI$(AI&Nx$ zawp9MzhC#hG|cAiBg6v5xOUr$+)go>@GinXKp9`zC*i% z9lvl(|CX9UR&Gd_HQ&&7LhZUf)>iW>E6lJAGfY04$`;Yy1Mw~TKl1>t4n-9>Pz8U27mAmNF4orQ_K&B$-<0u`1(s1 z@MsMCtubNrfP{-mulG*V@|XwHPkrBJ(Gi-AU2=JK;z@qm&4I?&6FEbb2N%3~*C+@Z z|I0D&$kO-q>J`n?55Bp(d;9q|`I`&USBYVT;d%pQ4Nj-umD~ycnVIdlv!`y#_f_vb zQ<}OPz_5`*$Lw319?#i@=j{ZmeLF3SzmE9Qb;HR68(pvMXT)6`-{{VA3hkoREqXgQ zHIBJG?DBuDb+`wHnSNiJNtKyOj?ytRaO6t$^W@>5*9rC=_Y9qv78rJVe8r z?BJ!y^qX^20-dW`@85c!IpU;=-SyD=^`%U*UCgiUl@~oSPxSm+>EB#)`nAxYrswLW z765uYdHad5sO*5G5H+uS{#0Ir_Wv zCYy3ReT-Mi{8dqu(MJompg zc_*yey7^&W_o}ONp1c|T_g4>R@irVBU3tVabWhVyo12%r_{23EDT<3-eEgE`EdI{* zP0jrqC)U>&rZ*0F*zAaX`0M=Z9qG6+m!d%a;^s9Bdj}t*$bCJ#?G`*czUzMe!C!v6 z=rwlq3eBbImVu?4=d#^pRaG0NL@c@Z-P%*X^=z0E(feYaYDUJiDbC%?OuqVUM|rIG zXx+O)S*hJ^R#x35%ZvPro@X5+TQf`a5{~$Jh-AWR31+xKj|ma9gS}HFNo%i;?y*m_ z*w=VUWbxDM8K-(X+m?6jKPns-v+Ojb&+aT=d-dNpm%a|v^O}6}M)2~qWG9~);}>d9 zcU?ES(Z)@gOdcqBVc+n^r#B`fD0|Wn_RAk{m(H3S_iAZ_297s0K%MjB9iD@JwR%<1 zE3de;YgGqtEhynwCtfX}`R`P}eg9U*$bJ3p)`Uzcb;-lAXMffexd=9{7rt0O<&j{l pea6XOZtAHwOn=%e{VD0HiA5xBx`20O-2ckFrpoJktRmnx_}|Nd%x3@q diff --git a/src/main/resources/assets/spectrum/sounds/sludge_ambient2.ogg b/src/main/resources/assets/spectrum/sounds/sludge_ambient2.ogg deleted file mode 100644 index 217e657cdb3122cafbf65833bdd3f469c1461776..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5265 zcmb_fd0bP+w;$GoEe#kk&>#T`5CJ6!RS*>d8i*ipae*jW6A;-U0V+jXmY|3!Vh9uv ztw@4E2`CyAefqi=~bLFmZO4?0osz24m*~Qs;p|dO19*K%fE$MBO9 z6QUAR>F699I%*p>OrNzHzzYB}lQ>sL&MWljoM|O8JA8=QP4BQ^4p>#&_~d&i-8#rT zR%>JdvnzX`XbnIINGa=r`TkB5m4a&Wy2~k(R4Co2Mqf_Rqd}?AeL~DHWT;UBpN{Hf zlUM~QN61i;QlM0eN(qdUVt$`Hl*XyM5PqW@ijt!Vd;`>q61DdbwJdTwIi%LZl(8QX zY95mk855?0M$`&yQq+A^*T|Wm2!KOX_62wC2}JW|eb5O2(JO_-+DBS>jM8((#t3f| zu7mQ7hkAZHrG5pnu)-}d2W`JUY+rGB?yt=;-OY|Y%@0q{!-o3-5FA2kPbT58aghMv zzqK!@UQ~E5Oe_mOh!gH?&;(fkXhS_i)-h7xUpD=Jd-gy3pRamaDgYqIK9a2UDFk>c zb2Fa*s%CEEU`_O*wMe(v*$Sa1`hcK&RjFRCgIx4giS9K zZVgA>dKq@5J6V;qJl9$ z7>`0)xY#zPG&-a7NJd5N?%9|M3=CuqK3Rvcu-Sx{*2Ek$E&{m&o_j8lNP!z;ZqQx z3i@;iJmK2~senSUr~g&g!2jcm5~~Sd@=@B$G7)xNpSK^wE_$(&a-wWMVJ0(xs5bXh2#UMG_bFqG076=$yO#B3NmW8e#G4Bkpf5JmK=B8g18RS68KCI$XE3gKF`L5e28GyANR zR9}%do+c$R{pegn=6I##vO8TSQ8DRt%SGOumBnIrJDOw=q01D(>^Ka7i4_|tZ#QSh zI7tRM5E$b8Bv+WvQBouO{JScP5q69m0^^ht0+Veal(5-Or4r8N%Hlz9mMpgj@u#(j z5fQCqgw1A@O1SY(%HOyRZg7MeaB4AMFLGmvyrC&LxeT47P61a1O?lvGB@(V9O;H8` zXbNW~6C?37*$9&^R|6y5%L>IvtbJWOI){wBUZiLliG3tJVT$aA%jNDlrc!a_RTA<_ zY;qApb(7oR4gr6fQjF|zYS{oMKceC%I6>gDn{q>@Trn}kk=H3W5a=)$G$_V@_lBOE ztcPK0~S+Ghz3;{RA+Bj&69QR0V>f}hQT=8RaOofS@r;2Aj`H2oxCEw*#Ow2~lW-vos z`_p7Fx-{8pSl_d?fLE4Lg~=W*l6kWU!0Q1j5h-9yP$go7ZOjaC*R>KNNUReK^*BWs z%x25i1Tdfkt<)*l3}q!OKXkgH6qaMOk1kWWjH~-(LmV6|L2NjYit`YyNOYNWh!cnP z$)pm_9)`M4jKncY5p=8siE~mSY&t5fl(&~b5srm@9NNOW6>}6eFK;iOetb?mXn%$IvSmcDl1<#bSTGsuGn8 zy{bgaxd-zsq`Ov9%8V(O4sy0u0dQ0c2mcJJ28v36*K7c?ix3g?5mKY96cFe#G9>c| znRgkUMWG_bI6RP00G>)H@aecBFfj>Ng#uLJ016P9Fjlo~8i3liVqdS`iX45Ta6KS} zJFU|hnt@zP;GV)ms_fgz7^MON*5oM3sU|4v1g1Soq{u>uHOY&iGGvaCj>bf$;yPk9 zGgKT@Sp~NVWDe#mCyrgGAoCg&DoxNfg95Vj7={Xl9_}}|YMY|0ZUcB1(N!{>ydig6CwG>_|rNiEbxS^s)1YZ2Ytz|l3528wXNi+Ty3 zMee&KT=XK~1Cy={Wt*&K8!iss8q_xg6!?5EDEu6Te*)46>-pSdSP74YL<(~D9m0IP zqxP`_(u>5F%E68z1Xc*!dstUNbVHS&ysVY{&u~4OTd;@g3B`i+v2FnBtO+{Sa*&`}0sv>xN z7Jy%?PWp}4-C-509h)m2I{>C^&Vh11~niVL`}iiVoe%4$43BR|1$!jUjp>crqE$u zjG)WV8t~bGUKP5kk4=-$66~XW0U&U>Uo=0h1?&6L0HP0o2O3Z3!-LF6u4CPEl6|c% zYOmhf$p%z-aCvEasOd6>!NjEeGL#xMh5z#G)0+NS-T$*h0%_%U0C~ygF+&Ic=)CIl zc{>}l!64lDJec0}PU&%Y|1#ncnYaT&Qfw`)W+wx0m5QcSOPD~nN(w8alQJx~cL_{2 zSV^I>`>Zio)n!B6UlkJ+(POM+qxtsu?A8H)xc51N$4hXVJYji&>9+)DDRMq6DdjdC zQ&F}XuONr8S2`&xGJDUGc|tZ_$;s?%o!B5UUMe%?HMYK*y?x$=sk`v(cy%}TtEKqO zq9Vrlh~VkjSv=8K7dkfx=3O9t(J>K>wZc~Rc85i(#MDS-+aAo-v z+_5Xjn}iym)tCVC4OW;S(PnGSQ^xej)I*XLxWIxZFeLZsA)`?lX@)X7Xr2Kk=z1R?2`G{F;(VBpfGm zX18~YTYe|?zD>K0HLoaVFy}}SBj3Ne?5Att#e@H_Tyaq99vVi?PkwYuZhy|lgb$pFM=tKORpxCu*}2GC)fU-Zp#U@E4z`IX!=6Y zZRdUFpI)l0gjsE?O zx!D3n`3cs<_5NPQu;n|I`*7W0igg|dnJP}t+&;Z64+(E*eKNn!D)Rlvj5lX{SvOX{ zYEL;35pjM-*6(j*Vov!n!$h1he5a6vQWw_ByLKe_myFWE6?L5g+r>B*BBb(ZlLmB#RJ z1ddI4cULG9o#wCf(y2-I`*C>a)UI80=iGfjEM~?gbbK4%a80()ZTo|tKfGVI zz`|ll^vhL!Cgu*q4#T}Ai|2C>-2S^I>Bnb_6BnmW4)pq5jp-vQ1>%6NYTuLII>ghu z|LICrcrP}o$8vOL)tl*iMcC{^){15kh&%Q~Z)Y@h}-P@Q%yAiQ} z5f1l0VEk0?<+W*YkA}1(j+3x2vXIy$rUUp}Fw~n8cF#Ja2 zx}djxLAoz=7-m&$J0z@Iu^4&z==|7jUn*S5l$e(_+BTe8X8RbmZH=X^XT=!i? zMu3ga=~tcxwYxlHH?T6+T0R*kdIc=l_?Pv3LdDWkrcz5ZZXP2A@N>>@;f9LI;Va3$ z#;z3JM9710(^5+rL#KZ;GFUt(-R(uw)h#p4hZinQOn*GyvvNn!hv)B)Z}EEZYRjcf z@jtw1dvj(@kgoB>xt-r_M%st#RENxlw?(+NP7zvvD=$N0zw>-Mvc1dptIpf;?GAC) zGke}_ufCP|!`&wnt@F*ErWHu!jfVriHyCTv9_`74JJxiB=?3hHWYN$*k-dSQa#Mlt zcl;k#*Y{1_uL<2fuhjF_w$#!0El*-6?xph>X$6gfh#yK5Ta7Xu?hd~5cvrMG##4Ly zwh-QascqHfA}7}audnySF8IED9g+~RyKApOlvjmd$@SLaY7#iymU>kXk<5BhA)a+c z)9cZ)k|667YsR-O-cUT$+%g~X1GJCpITmDJSmuqZ{xkkh_hqYY6h<`FcWb7-%B5NH zem&*9utTyw>4oE?8<8J0+}^p&dAuZH11q}i_zjSi@VGw+9J)<9w~^JM7)^keap3B} z|NhQG{FISx`Av_EO|O0^5jA(OiS=#xxzH)%c}GR;*a-EPinNVQ)WAQ@YIH6&7w?T* z>$=14)D6 zOCyfIj@mvRh!RDr@-w*b4upD6-!X4;@efHJ=P(>jTdu{gk9iwMV;T0peovpA-O^?F z;Elue`L=1d>e<(lCTzzxJzKOYV&GQ%wdp&5^c_F9tUP~ms^#E8>48;;|L)nR)6p7z zdFYK>6@dyxi(^*7a1+^qWHHNql&8v*O>}J#7&|B5bk~g+VU;p LuM@MV3`9p8)8 diff --git a/src/main/resources/assets/spectrum/sounds/sludge_ambient3.ogg b/src/main/resources/assets/spectrum/sounds/sludge_ambient3.ogg deleted file mode 100644 index 5ab8739fa09bd638e8890c2c8f30e8b275a7ef82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8053 zcmb_>c|4Te`~PjpQqqtz)PWG#HpjOTei&*%5Y@AduTd%y0vUFTfqT-UkY*K*E%JL~3V4zWUiUG{q0 z#L5SQdKPh(z{`G)9t1`g%fSoV9J7Y)zZ90UjG6yjjF~K;C80iZY>(d7zpoLtZ8?g7 zZRK&rUH+_}8^X)O@d8si!T_OgOyStE6UP)0(pVSg04EP0H^eEQKo7smKHe@q{wRhH zmL1zNkQm(yERZ$?!7(tI9aN`ywU&JnM4`L~m{wG?7^X`iAE_IoMptTvJL%Ur$70^x z>`JhJ7!wLaEzSH4sO}4;KJQ_{dO^=&>8Z+G9(j~s(ZG_F$XgrM22`K z<%6EuPbgzZ0Zq~EK7^w4J}3c#9^^{Lj!N^wge!MKEf56L_7%`i6fmj~efuYJH`i|K z9Soegz_>Hf1!rQ(R`ISL_oc4oNoVBAlvH}OR?5Du{8}r|oPGv^%+3ikT@m19&U1z! zu8Y#K`6}__R!L;*`-I$Pv^nNvCe}QXMXd>+>2bLm~6qE`UMMB>|O~o6Sfr zi6}>b!+O4j2tZ9Bty+VpkzAi5VVI{`A#ZEI3?>x7#+QgF7zT_14^#mOdj?gQ<`|1= z7A3Tyn-P&b3eyjgP1W8MB$=wUBJ<<1o+z4txpBqBekUreFN^R<2jxUW)8YSl9Ad%% z42E$CIVXSxMhP&5`T=>O+hzeKBN;?bVUhZNNc|+_nNT|Uvg?fUHO-Us~m%``on9SV;h2dIPlOnkwaolNH>us|>< zJYOYt>IUx=P5zfR16WoF1fOVAS_syV(xGz(ec0_JUGzy> zChtCsF-}g|IR-98ZSF>467n+)TN2Q*cof;33q>K5y3q83!ake~`H47i9v`F!Y7CbI z9p)5+=8%Ylq3H;J*g?8z6c2_&f+S%01`)-NF-Uac!EgdDmOIxOhCxZB0GG0gf}d;@ zSPMJk%L;K}Iwa@_J)#bmWPt$Y49bxQGnqwdQ$>+UeHaww6j7%oD>+H^uq3G)iz3s^ z3_Y0)5LkE`ha9OJ2N*rLI4Vu}5FO#%Velp^8Efc41&m426kd#>SQN?7P%f2( zYs*UR*3l}t3>@1tX>Dqt8$(vz@vNC#NXZv%7yQF3&gE~zH1y3Lf z?)hz7RCPa|N?W!ke4~NTX5j=SXm6`_uEY_RaA^p74JX4RyATB=Czx;)$&nXB7I5k? zppYB^4CziFcqE-VRJkN?!3+%~$-ujkCU@4v8o%7B2@}Jt-PxW@t#YFh&CkNTJXS(ex}(eo!b{Dk#T{J`}l6VRE~V z+=Jr;CCCsc>cf3yR3sF+pa?0SDaCgw#eMwkPbSjoHmxT3{qhk$G49bYwlm|8TIEb@zt;M8Nj7NGwH_km5g38%A!EaY? zS3(M;Ee=696R<>JBY=jUMc_q|;Q-7cxKkV0i_D4WNw6U?7+_aoF#g`Icri?hGnc_Y zM0GJ3Fbwcj@kO>x(UvNl)%eu;^=UH zeg^8i7-+ zoEo-I2n@zQ=Ysfu-0&ZVbbxv;a|Kkw@^j9Fh{Oj>8$WN`*bLys;?p7k+L8rbnEW(` zs{oV=(**_RLEJYn3@yN70R?IlBOHkUa%PA+5@`(M<(jOVs7!0AG`Qz(h8w)leHkFP zK@<}!`ZA2bTri|&(iWIpW#vg#0%ZcYCd0F%uBgwEF@!Kz2SLf4oKP{lh?|vx+7Z#+ z@=P2=pm0PZu#d6(GB$T+k}@e0*02Di`rnKw0LBB5m0Z9phA5%G7>3g1D1J32gPX}9 z`-5t*or_@H4D-aW%^-C%L;>G2o01G2e=)Fz|Cs@}|7M{65yhDHuNf#ZqXzsVfIFA5 zs=u22|4^V$@?Q)rSnj`?f3Jnv_iq8%oe-qP@aM6-Zp=5uvDQOZ^duVC&%3u6LI|*N zX|tMHqC;@!2WMMR#OTwQKR#jF6j@$xJA?4^+k?k5F)IcQ#gH;8` zKvgIAIF`_+M2U0ElFf*>xjOeQ1CaYT!kh-DgE}Y=ApA5q4-k*#ky0H?EBZvQ^PPsD zGc=N;XN0uZ!JVQEQFL5LN6nNikx!Gn->Ix-Mf|$_>(x=PcdU#??$PABL`* z2|5w?yl$~2$iIe<-8uGp72!p#;dCGZc}~~ol~x~wpkH$xB7(;!!k?#BLB^hjJ4CTS zHGI5K%&yb?ST~^y!oFkN@Pi2;_gEk_sM+8wQjh?^2DSaaj-6S|N(w?Ck^U5G z9PQl49s~QIIwO149FHrEV`W_Z4o)Wu<16^Tb?x-|&dMxhkPrlo7m!FeIblqzj)ziA z3t|GrvK2x=xY#4P$IbJ!d3yfHpJ&j*}8B z2lLX?OUj?VZ0YJBnf|^Caq|g*V)fU>%E~xgZ@(zAvi|h~DZ9;Nyg)LzJx-6nl|$~G*LMW!QM1x@kTl4oGGnU08c|&KY)eN>Vv*Y?!uP+bE)?GdtW|v?8PNuIp7H5&J^kS|ZPjwA?x{`8aNXBlCei}A= zA=Y^#`hEM((aGP~G)q%Yird-r`!ioC7xoKh%To1wlAV-^&ol?6bQ@-ee_Yeu1yug7 zvfhEh?e~PqEpM#QKTWf=e719I8rZs7ztoeVldnD^*b}$MA$ZJgfLgb#IS;}RQqd~6 z!acJz5L+_79ettZz`V-5pqAJDvOa414}YbgLrzzR8}aqmazY2H$9{aBIB@O4tcK7` z-nop8nY;D*kACH-QdM^ekVE<7h*UKJ{1X}ExvtC_PJK+gUTY0oUlDbi8QT^FAY~U-~MuJ zU;I?H&tuPS!R8tKyDHrf2Th(&$;$Ib_5w?j-2L{Ng|ptI99=x6*2+k>eQ8~W4yHxN^krhK(NE;sg zb@cR^3H#hz`x3fvQ*-&PyYUNA!9C|T=$%A zbKbMF%rv;_v;A68U7?@#WSgW&!qI!f7!6;cu+8;VwO~CB`)lU&Gu;wY$KyYzeMoc> zRU`gn_H$DM$FFJ1E%r-{v_Ay4dp+(g7gI8}ULD)h7cOw+idGDkSl2h*KaSnJKKAp| z;!q>~Rm;`!v2w}i?$)zmCDps`&3?^7VGi;2+{ljC;wxOlc$Bu^&a|6djNKYpm$D@P z!4ZS>{gs~dtHBlia{NbsYrT8x(phi!$KXT+DatAIvYhBV*#YT!NV`4U=>5=Bm=fDz z82f{gE&R5SOTscV_wt|Z^1dvmV1{PgRmkD~F9-n0epgO9pY|0t5uzo9?l?~#?5FSIBAW8RIB0NvwhzXv|< zKZGp&c6E9}Lhwu!8 zpV^(wBLef4-irKD5?5FVJM!KlJPrGEP|@Zi~A9{-bDbfb?-e0BD z%r;8fa`}ep)=!^0arybT1FtnC&x;15O&)Y~TM(I?f zNbokPZ+?FupxkE_J=D2)URU32`gT_p0Sk1rYF?V2=(lxn~7AEDJe58LnUm0GS2 z@=%nL3Vj)a`*)$@_222_w?<5bcq>s~-z$<733j7>u=J`g-l=u=s7FKjf(5M;P0!+uGROniv3HFvC9i>$dNzZKFT>E9g3`q zx}&Zb@oZ*h!r&L`2rv&>LbDog{}$%HTUWSI&}3)RGUi&)POV!4g1d9e57DlsdbU=JT9G-)>wjzCw_@WRYITk3IC_ zew`kFa%fMQnGlEZ*B1))mLaeAyahWdlo6v)@_+>rF~0wH)kp{>V32t09EO!re9`Q9 z=HWXo4j)$h-r3E(F0oEAxO&C%R6=xCY_7A7`LBl=&$I8h;n~!*B9-;orMrXfI(HsN zwprkRTzzs4w&Qw8$(`sk!LVfG^o&0pDfTV{QwU`Uaw~i4-d3b_;Ifz%xnuN#@zU^( z=W(dS3ky^Z@UC|u25UZo2!Ak+y{1>GV4*E z%dT!uR3i3sCxlBR=&JYqPRkrtn!GLMW**Of?!C!-*F#n3V7GGSq=dMWPLy?bes?D< zOWemn=tw!`wkO(3mVNiOnr@SBFmhku=nYnk6!KDpJG`oBKKoAk$$;*S4@t|kgh$jT zDE-b;2W3QzWL=W0bQa8Z^-9}Y$ftgKr?J>?CaNl+(JMF~{UwK*`hBf^d3cHQgRC9Y zwb>H*eCda)3m=Ed=F7$z|H9AS>Z>?_A|zUUE_Kw7qZoPew0O}qnKr*Lto8emr!QtV zJiHXGszU9qdSsLkNpn1G#F`5pRuDu^)b84&;IsD~R)xu(+o*R`6( zz2W8Z_MXddb07cH&|%%jVWYq5_fJMJ4>9~#`H#F5f|RFQKS$D@m-WgB9hX90ynbSI z;BsnCXY6t7sP?Mw-CH`IjTc(*8>RjniGg{`_>7e22aFyZ`@VuJ?(>s5o~dN>wxy|U zRHn$BZOWu`Q6ke`*4oatH_B`SdSRj`QIt2bk?6W(!s{a7^d-*Xd(?svEWyJvVZ&d7qE0obhsN7QH-|r<<;^_B-dmQfcbG zr3ZY?w9{4h`lUTV?Y<)CSvqUC8|}?v})j|F}WvH?3y9SlY6H^pu&dn{U_E zg(`VY5Vl%mGgAxaARY?0#EEeiH-T5LSikoK89Y0YD$ABuShM6eH+wWR@N9oc1^M&~ zBVjLVdnNm_vge!q=|QTt&pr$gzP#Pk(*L~}cIY_PF!2u(to`G6<2yPIo~q%OL>m{@ zJAYaSBJb|Js_i}L@Nup{sAGJykr6oTB|bav_6bKtNEl8GFTA#WuHK=!;P4?GM%Swi zt0YSwpHpe?345{6L8dgjw*8>#$G{U=4-fB^{I33~SVQ3%6?@pV!$RWQf`4UOB>TlT zUb@Qpv)-H62Xy$Uf3nkG1d-8er{=e;1c0g}H^&=h)0#K0c4x_564Y~bmAHA$n<6WR zE8BeIMK>kGcDNw}H`ng1vz~M&5N`w>A{SVkg-l5%{iX0zq(@^exb5V?n<*fRe6Ur9L8FU;F&WK)J$+4~n~gwN#~FdwbVw%H(i| zj4w$*|WcdPjYEXKUJz6C04$>do_~{D8cDF9s&OeDXyjw$gMo*j9;P) z$7&mDk7zkisAnJjcBc2=zZ|wU!R?wAnBYzO?G-1Jy+wC=9v93}5p=5Ql~t4TN0Wv# z?{j#y174mYm%foVoZ@JIqp=v5{XVX&{EhHiW8;2wC(_L#3NENo(_t!nYH+XQhmTPn zPY&N-823tiv8yyu$OeK!^^^7;>(WshNXtmLXgsia$Y?#(j+SHRzPa?6qmz*B8Crfq z@Z;@j-@|y%^J+fxoG)h27K|p97}*uXJR0Iz5;!Wp5p*!NbDA$kNAKb@f%-wYoZ?5~ znqj^-;5oZ0PHN_}Ll9!Ol#L5q|CV$RtG4o1*Nf_D`DlIXMzy}x%1?^N033nthU+i2 z*?(NT`+bN&hwoB>dwTsE?wwu?RDZa|9~d!O5ny9$TXj!Ss!Y08ww??I$Np~;a zR>|)zhxO2z9r0_k>eXhbS=Nk7wgdtTJ`sE)7I#VU zt{3{KeP@2X7nkl4Gje{)K}}b3vkLy=y~#3}x1$-#3J`+JW}Jg)fH0IjV1Hv`*~_N_ z*u`@sm!13EQ(E_Lv5lN>DU;J{1{whkvEJ{b17VKc?r%F{p5X(?C)SG=zisNgIApzi zk6>4{-vhm7)*#J8Hl3-FEYTkvQakVS%z=X?zMr$q0(cpPS+*S z#pL+eyQ!B$l?OGoZaeeNzOT2h_dK+8*Y>@Ic(3B(d6764*x=xsUggai@mTitIGol^ z&+O25&o&k8{edzFc`}(JWke(#C7^9l-4Uj+)U9s(b7D9vs6Y20dPOWgyF+IVry^=o zWAQ=FfFRN&d^XOFXs_|OMzGGODx+VnW>tOArC0Wa>xu)l_e^Jr^ywXG_2Nc$k0U>B z`9s3GxR_ak>b6R9veTFnq z6=Qm!wr$7Ijz8r?wA6iFh4`Wy`by-CjxROr@rc_M6L0lm9>?e#Hz@Z z*|dXGA1q!!u^URA-CM#oA9^peEL4kU?hoiUUj0$%$-W^;a#;A+d#V=WX|H}k^- z`>TI_cwiJ66}Pn<7MF1;MP8Jo)LV68j*{uG{_gXSYD{qn{zc=Jw-` RAD^!d#D)1jGXt8S{{ex-3=seT diff --git a/src/main/resources/assets/spectrum/sounds/sludge_ambient4.ogg b/src/main/resources/assets/spectrum/sounds/sludge_ambient4.ogg deleted file mode 100644 index b324b1fead39510dcf8c12f024b6a3301fe78143..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7723 zcmb_>c|4Te`~Pjr*oV*%8Zu=P86oQvLt*SgwjvpleND=mJ%+?sqbxHtLblN!k21DM z_N62hQfQ@;`ks3{&+~aczdwGj?;qd$bWc2&r*9^y|9yI_v zdIz0SwhHk=`+2+Dv$Ug4(W)w{Dk=w5)X)k(4Gy_haeOlxreKkl&Re%CQFtmFU9v@JEidhvK8`%soG5SP87-bwnrMi`}{!G z5eObYm2$8SF;$u`4y`~rJPuw!1L+Og>v1p-21uD&^VuPpxJ^_r1Pk{&FKV0?T!jJ> zRSHPgV96hMGdrYT3rKV56kElgP7J6JPW{pRpyKUQbf7a3O1k^*q^ z;-Pi07Vs#w*@jm05QDNHsI*KWZB{`LDcQ&ibwLnPKUmcGlBijORPR%H0fc}P7tAvP z^fO7OnxxSjGf#S7*>$d5p{RV%^+xZW#=X6b@9rqGhMPc;wT);;kSI56oCgFU+!WF( zG&5g2X49Oma3?0$utRYW#0mQG8#jnre3XCkN%zU;|M%WBi-sU5Ucm#!@plLivXT;p zB}9>9yyAE%VMA$rzagELFoR9PkOpmQ3=pzWD|&0wkt>@aKtj+7QO(rzo$?6TM0e5M zM!}V6Aia@y>^Zw2k9eMd#NR58?7a;}u&4k&wxJV|c+dxYVW||N3AVDpJq_C_75W(0 ziB8~GT`0}5)b6HcTWa^nS7Z`>u?$gL^M*I#q*}&kap(;LEQyR`qW<%>lSKn?7`a8l zBMVG0QIw@L1n866bPIs+VvssSls68MH_n#t&faU9qubjA-xkA07Gg(6j`)wQ`X68Q ze=*|uV%2kM#M33u^Et!cWz@xG?DT)%EZ5^Wp}5S~fOT-2WKvCdS;5I-gOE^Mg=X3- z6A+I~j8pb5?>w)wc~xhNu3eB}bpe3^tbr@8oE0{Cr@TtDARfMU~$F z|C_x`_BsUdK#+82u#|DIRA(^k6^mgs2ZV+oLmR0>A$vQs)y#m8Lq<=&9JA3lZR_Cw zcMw1q`05PR1$Q@~0th*}rbB8L|H~UDmK_4gC)H69NhHww4NP#my>ysT%>|bQ#qj3N zN*W%is9m+4gIIi4MG>JZ3zz1DrP(5|bQ)y<$D~${I`5%1%YfhsLq?#+AY_?HQYvnX zYyuL;M28{em{N)S_${&&Q9?I5Q3P*#iNufR1}KrI%mazX%I1QQvP*%_-b64LPAHfi zLg4#lnP?-j0Rlr6#hYN=`SEkbl*d|F8f6rZr5_?2bQR}hYwgBR28mc2!#k6D-$(Y=60s)staraYVPP*5qgAtp6Qj6qKvbr(Z0H^}SX|N4C1I!Aj(&onG zQr!1q7zF?Ts<>ro*+f4KZ5)rS-2}$nA2S%^J__^>*ai)Cl+0)u_jylk7AIZ+({)d8 z7#(%4Eu)~!SjNe?(P!>8S^zM`Ftds2N-f8L@v6}feW0hr-_pKP3aVOKtmx3 zBoBtvuZ6%QAql1!8i+22W(Vr~c@9WFPM}C6okLWzQ3OKpKxiZ}4L6UbWD^O(cyp~S zvWY~Zj}i#=oK&JUflzzI90w$zh0Y-0n8l#{V6lumP>$g?ENxVEZnKRx?92^H5CIq( zb$$m|BrJ_O?Ci^Gqfsf&>A20dY@#nNj|h*Y5Pg-HL;@C;%xXIdfC$EdHk2)pz}SWk z6bVo;3dS-~z7~H=q*_qir8Gf7Mj7muI3j+cf@hmd94lpQ08_YB+#^&-ra@P!Q9q8S zFtJO^n3j`m%2Sp*s){Yk&31kb^30~^8YK_!T}T~tK2-)m^&H&b!&f$tl?&<1K+yRt zA{qDys9_d|3Swy}KxP$+^cd_#wq)EK*pOfV>`E~3_jV;Fn~@RfB_^P#Ohib z8-#8Lv357pg3MXN9mW; zQ+w-KK5l{9kPw&_#32Ya%3YN6tm;FD>4P0lBudg)aiyyfv_M>m#Gc|DYY-|Bda&NW zv}+SUc3>IeB14*5@ z1!jG_y|E@%l5ek?2L{UGhV;>oz+R-4LUD%=0)`;z3ShQTn{0#0fm6fg2>}NFITvL9 z6Ndi;q#xAtJwc!n*4uc5#$PIB`S^0v$4)>m(Wf9Du#KS(;42E?Pys4c7pPP_koO(1 zqf{ahNT5c+=|~2Yvr^QZ%z&L&>To30vb?QjpnL`3F!oWfl+Hp*Zv-;2*sE z!kas5k+LKTkw67Y{cj)v5(uU)yQa*@(ulA~EXONNXLr%L>T?7aXHZFZm?M=FbK`>cTY5`2m zCWZgy+23>e&+Pt>B~j>f;Y$dmcj6VlqN!I>#h*#ZHJs2OSokE6-qPOBEj&@E+DP$89=jtPBwAk{!61)a6Fy#iI8Htc?#F)u}4W|eF> z-k%ij3j)f|>qh6(} zw0}eU)!yblP6ql&Q7h`-N+WUYh@E8c^*r?Hp>JTt9!4EcWP@%C3qq-Uhee29684h8 zuXs>$Szzt4K{!ye!C8cw1;_@q{lAW##jHvSL2aDyPNz7Y>*UO^c{Xh7`o&;otG4@o z)z`#5Cqv{GE=l?{h`b-*4fw#$DrJxa1ihwGD9%cf_#Ojq_0%r(8~F}-IZ{^qV0={; zF4eS0n#3#1MGqgqC5cu@5_t=Wygt=h$(guoxZN*_JhUw!bC3`kEf2Lp27mHHDw_Hz zE#v|M9dwEV;y3Ctce6$a2&%Hpu*u=~Kqlta6y-1jgfKN7ozAUXeCy*Qf!$%J5?IH- zI4DjCic4fqO+9(Cu6>q$ry(h!;^8X}c_R;bRtJ4(1{^14+2qO#3$NGTYU>&ppIP|u z4dM}&0LALBi=7=lTyMT8va_>ZAUWy#H$nIX5=L`$4kOWFL214r0e%U2; zONfq3h)E6z3=L0@jg0o^yzH7MFE+XNH>ZLKq9lPk@J8&x4o5FbzRP_AGI-U7lU-yU2hJJ|XrjhS5pM2Kh-D#7cYTTskQJTX4* z(7QUbi=m0D$e*jbHvlz5Hy(*FJoOe~^y zl$fg?@C56AVaF4>f{2%@`1!nRdlF)pUY3c57~2b_68_zTh2K9GLM1IFeNW?k#*jRk z9dS$H>3++7k90wkByLKkMIkGNzG`PXUwic!puFKCMNjUBgZ={#6AZRhYn{oCP^$?U^vx?35cp)o(+K1|u}D&WoC+s=-7 zcS+YbsUXyQ08pkKJP3LoerE($c8JcjNCMo7s#0&#aRMv9z&< zp+RrmQ=Jaadfe<0yQFUv$~p>h11xJqrVm$ zO{hulbu;P@E{xrHP&=5=&|CD#uc4x>Sma|znX=+3ZrCD&Q+xS@%18Mgr_+axd&X|f z`$X1{Pe;Cfb56Q2iBIQ=@>m%H}?cJ~QeIwslj@nOL)o8sV#r&l* zRX;T8+sAi2mClAt<∾s&#*7bRX=`iE&TPPPc`Mhni{Ujm`~@=S4mT) zoF4Jn{RIy;K0NU64jI*<;Ad~&QowDjWCZa|F%xyiJ#|i0dEGPLSebsYK+AbrBkZv2 z(|yY{2j`u9vS$o`PEIXGS2V3DYRtFDyj?UA5B3KKAn4o$5pnsd z_%8-2D*2w3HNHHK_?1s=WQnaJn)LT?$f|!(>YLRtPK2mG?C<)~&`Y-qc0_piJigW} z--5X;E`SX^c`Z<`JjpQOyXoC%`xX6`VM(o8OC1L@1vl!*{GZKf*DZX|vy=OtnH?<> z-XG1|)>L=Rer;~Ws$G0wwfOP%g3%xnBbhg>H&xnrI|Rur;DsU4F3IKh!uxPcGJ>b^ z_wol(KNJi;`Kzl%*FRYUhbylUe0$ePgy`&-|mJFRi2!xw7=OFwq1Gh$@5hWT>nm? z_~s`D38|p6{Hkh~(6mNR4rP|RFW4D-^c>#Sp@O}xJSjo=y1b&q z87EqL-=RQnaX+RSVTAD3=uoK1U%9i|Te8<|cvTh7?HI3eb%--d>ZJJf6J#z!Gqlh~ z^EdmKvooKEu2;xT-Lk-a*d`{pikQ)kIff1%NB1ebn*Er(isi0PjM6lIN}F+^=MRLrtLokx zv^Jy=`)R$Ognv8oH~;)K>$o&-cLrzDDi&3K-le>?(bK8qP^atu*%|%cIx$b)xAsj; zt_9HL6y61HH6I)lY=C$nzR#1I{o9*vB|UxofxiAT1fIc}Mlr}POXiDe&=}4(%~Vr% z;g&XEy5Cxu-jeoYo~4PR&PD$b{Y;`{;Wz1_A%bdtq@+s1vCDnKX~~WPSc91K-nyZ1 zWKl%Z&2)K((?13lFEW2ecV9+X*Hi=@(HyI5ndD%OWj->f6wyG6>T4_w{aWB`vG;w& zV63efe_inAgrMpCcwSU0x{zs(W8?N<+`K$g_3aYL;q{rK#|6&iT90q2@0a6}F)OOJ zv;8Xj?Z@Gh#Zh>gjaBWpeMR__8osOgM6q*-{;D4+QGAo~kZ-L)+pkr#kN2Cq1_t|a zR-XEwhXmg9Uzsr#5*_|^f#+t)fNzU`;%(+y?N82~APO;^?Rwxh$&{OY>db<|EVspy zl$GUMA%WC_OQS&(Hc#hNTJ=f|BVAQ zd*`j5+krQ?*d;t#dEP;M9PJe<*8M&^R+EhnB7NFpc?=b{?PWN0d33MOt?K5K!MAFD z72R%d4#XUo)kCA>tW&(EZyr{$m3JHe^e9xVw!Hacc$4;JfnTfEt#6m4b{ZGIu8G`J zXm+Sm-R9VO?xCSSFb3ySvevdfOH3Q~GDM|JHgMlK*Qt%$`lTYRJ~fhmd#Jrd0PoJZ zkQwGg&*@#d6&zN4(AB#JUqnjEzx$VHU3MMkT><8e2gM*xq)8=b2dDWtaazv9t1dAM z6|elN!|LsnaXX&)7R@YLE^+8gBx%yWQxnb8tIPVd8xwd|(;j{N7<-BqPJ+rTl7?j7F`oEXNxv}d|HODzCD(nnQmrw?Cd_FLhOOXye-NJw33|5yMD_2X1`)Q z%LN%B7q!+r-N}VXoVIBqL)*%u3j_H}0uBj|+GgG9Pmb{W^Z6^k6||jS+BZ?+#aJP$ z`-%<%&MjKu2fTjCYKVr7YRy@Vg?U~|FI;xr&35v*X6?1}gQssJap3hG`J%W!;*{39 zw+~G;Zd;kT=_dzM-++@U_-jqmJ!Qf$_h$yhRFL|rs-(0e&exZ;UiA|1JK2`Gk`D97WP_1e>Z7UL|GvI_gvo>_{Wb|2YS0YE?zGq~+ zF$X=xTha=VGtqHlW^ECMGN>cO{iZczGj-382}ow%co+1=u!kLbdVX#9>Vvww2QRCx zi+bpE)_ZBefgDWG#w*DtiWCmRd zCLCoPSPp1qj$Ga%QJUCf__;eq|K_f{92-khM^>#`kn6hZDQRf6(jO zZo=1Nr78~=`mT1`_nfO4$m@$}6n?r^>GE-Q=FpcZu^khw7L2>hqrGbR2X4HIRn?m~ z*x?p&WmGGTyGP03y3ij7d(!aAXP=7cg?-ASzg*F>%@AXBal5Z;Om+;q-aj9*a19H5 zHvhB!%ku^g?baXk9q&xu&dD9Ry&C&b{{AZiCB9(??TfApW-EQc{a2^abeXR{+pE)} zPB$mxrgU`QU{o^H{C5bf+ulazCtd8^e?+hE+0{Ef-`8!ET>B}yKSIu$Kk(#9ot$jG z(57MfIAccBrd+QC26#lHNPgSDu{BY&C|Kb@`S96`!1n-b;&& zyy6@&Oo<&%-+w~+?Y^X?eP5O6zsSr0Q)0k@+V{_Pmhhc%X^qcqjjn3i-}8WfWNwGX z+Hi}_Ak@I{E;_lRH8{}gvyB5VY1Fj5kYuKGU(!ty(Zmz|g)d2GK1?7EyE^^Cw6o!( zY1IX8Q{l&EY&!U{ZJ4POE@!CnH?A-i*R7Tom+j2+nI$n5jNvr4tzWOES6NjZuif}` z{d4TL$OK2#Y}*}gvmMm7m~y(=m=oT9*svN8`r4bL2ucm~V;&!^5*Jr=`|hL4(`swMI=JXIUtU@%6>gKsp#K96;3PVAd}JEzz?@7t9&cD8pH z;h{o3oB!RG7#>%v5(f)yM~$U+vlvbWPlV;*xUP(v1i9-PURKv|=g zU!E7Xm6vxrpndv4;JM->H)@`4WOwJxxclWeJ) zl0TwOJsLZ~=av=RRFP~vXDj6P>9TFm&bd2wxu@--7+S#iv_?E)kbM3YN6fV{gw3O% z4_rwJ6`vNO?tBTkzEgwz_3LpzIW`{`*8_rx%CmwwLxTfuD}QO=bA#@x`ux=#8293XJ^^;_y(@ diff --git a/src/main/resources/assets/spectrum/sounds/sludge_ambient5.ogg b/src/main/resources/assets/spectrum/sounds/sludge_ambient5.ogg deleted file mode 100644 index 44344d1507ef76988f1f210f5dbb68b0c782e1e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9065 zcmb_=cUV(f)9(Km-8+F(5*yB2p51mrxIg z3ZY0xno=xOK@p`$|5m~|=Y7BX$9?V}cRxEjv(~INv*tImX3gIE_Vz{)E%f)*aA}`t z)Ve@J!$;%m?q%cXP3fXJWwOsPc)S0fPoqzn`R_%UNdsC}t{8T)UfTQb>l59+92vki zbM$aHtM6qGcX6~ap-P8q!KJ07rKIGfWZ+_GJ6j*DqnkbavYW4?m%E#*o!e~$MF$PT zz6>GMMH3oG4T4}OHgSexY>Z+XmjI4CD+ASmXg!JQ704F47^z5>ZG~YqYHg!X?GJim zjUmbe0Nu}%1whTfBhX$YvJ@`Np2h1BMGBcBZ-F8iCtLk~e;jo%^?{>^r&4an z*<;=%6e*y|yWaC0fVE_iR z9pJW&1q%%0qzd%{@_6^n0!+$g;Ju6%((n?}h!bj$JEIk^{O%>?)_s3Tm&JIR5Q3N?=wz!WuZAaYt0%=OD#CC&2o6CP4S6qnooS7exe9C?xYV;^X?Whp z$kg>8Cx9W8tJPZ>-0c7gK*TF+4an&JKi(8zX(14Nye-KAXzl!NbxowGy%L$XGWi(` z7fJ^sao#o(CQ{tmk3hv{r)sywBBPuTL?b3dJ`vxGBolImFyh2YKHxld=n}{=Oaf#! zY$Wo4KqwoM48P5Gip(2!7z5CxPIDLV2= zU{yerBBO8u-sX%jDH$+;C`JKd9NI;gID$eH?=wbhI!UAvC$an%iVh;o0!OMEaatr) z9z#C@%e8r2J~V_W&cws6QkCP7Lt{2Y3V@*{OpZf8mZ-7>%5#UjTqOXbQI*L7TOCZ;IV8xVR#!B6p<6# zt(A|r0WhRsLGTD;yA_y(AF^p{2@`>Lg^AZdet$p*sRbWN<#4MHgptn z7LJcYYqO(t6b=Z4q0vqfz|}LnVFudT#l|{FKmjTFByA))4Wu6gf|Ll-F{KYd9Fm^d z?<2m)FoG1M4HOMw7AP4BK_tA#I8*zG1U%+3a=$MQ?Tk!BQ|98)&Jtv_HiAN3EpAB$ zB$x~OU`BufbIV&`SOCEgm`jE^>;6Mwi$QYdl?MqKrY_2DeC%d6^KrglYRDP_q>z!w zW|&uudRxY&ZX|O`Set?dF+NUS+dJv1o0UH4{4am9k7QjD1t z20W~n!eB!IU*$E?K=7t3PrI0}gd99#&I}R2PHU3_VgS~7u&0;+RAMbKDx}^l)Fy@u zyUjsCodqRE0TOpIjM{`Lfx!Sdq%XxM#37qARG5)N7|P%wuuTARAZ9Vn+W90Hwum%D z3pE|(g@O;dn4SDga5z&&webMd#0G(7L3AwOpcKJBpk|+Z3Vam9!_YiLs$cVEv=x9~ z(ddq}cmv=n;Cis%z_N=&L3AKU$FPic^0~MN$b@Bvw%#F6GpIIx-nX$8z>9WD4gqKj6M9kE z$rM)sD5d8Jgliz~TPTJS&}cw`97PF79Dtk}qBb}Z#dwJpGi)){+F}yS`3S`gF36!& zu(v@J%~dhdXtXQYk!In*g@@Ka4N{Mh4iGOu#GJ2=2cb+G4~o4n-=1 znaUvE2H9YLFM@IN)QVxBf$yh?0=}g-g(*7zW}vnIGXrq{n}PUO6lL0f%|H+-IpALb z%$bx`{oUmFmjZpl|HVLq<^EUmpS4i?{#yY0AOtB={3(^yk6M)Z+9Bw1N#HI0HHS8B z2o4S|HG0K;xY&U+sZ?Y#1)6;b|CeR|tm!|i`~OUFLOv;aQbMHWcIYFixjD;hb+m8l^UM;ZqG2TB^7_TdX^Z>$7g^?d8m4#2VDJmc0 zy~ln9W~hBtf}9%A)d0hWX(Py(fbQB^OC0+J;xTMV?KBR|82SRg9TsC2IC=ayrRL0dukRbz(+AGYcAvIVbWeAPYW(&HY9y)#eH`B4mCu?U z9s*8==(Aad-%7-aeKuJTUACAX>q_TJbBdbG$uWv>OyNZZCN$j}*6*RO&q&;<4cMu8 zIAYoT*9oq->dXn<2Fve1ycqK^;LlcR)Cs!2#7gwxkeYcXzq2UWs^8jg*BNZ-c!H=u z*K&1yHJATv(FvdqqY-k!BSX!hY27w1#YRAYgGds2`INLWJiIe%Ch)QHXwm~W73b%N z4}G3~^pf?Rj+fKNHq>fcoOi9x*i48+Y*|_^!KE*x3H~*_7M(5J@-X#{@y0S^wx`*y zn02YlG0BRU>bf2-`lc04^U2GvwG-K%LsCSpKi{_9au)|>zPRYcTT}$FnS!OPiEOk7G!g&6Y^Z0!2yR*NC63;d)H8N*?E9nl* zp@F_+UWOq|w#JRbq1IS+PQBm>crL9Yen??*$dA*qqV(ygoS~a{Cx5!~9k#naRL=z*g8Jk27lx}R zod=|Vw8Qyj%1JtLMqEDMR^}6)>%YKos}WipH`l|@#6&MnVs?EV&JFIqTA7~yQ8*oB z6ck{(x4pZhHPC#uAZ0bW{p6vmt&iYQTJNegp1842`6PXG;*0#|V-2H84lgshGn+Sa zQ~!z@kNb;;?*lWkcTO$cOOyiT2|bbbYi+Tmwo`B+=5^AKbMOxyk@tp{m9523j@>tZ z94Khf_~b+rxs8dv3R}Q&$jRyDmlh1a9{$1OPrtc<`ZUZy7b4uXrBC`gmKc=5CWMl}khD78p$BYNw9xw*faP3<54{)`yo|`>)gllO`cz;8XxJN=`HY@Tj?4* z+mbG%P6Mro=aqDBjFc&=Ax2kZ4b3FUL+VSX3VBSwSQl%YSbyZ;;la24#jPma;PA`z zy4B8<09muX&R6Txb??KgBA0SXyss<$ar$0fAg;V~Q;L@1+n)S(jF_*vWE4uHF;}pI9Pd8r?U+wbssvh4ms|kEo z=W>2=!{FJyj2%pnYp|8ir|qK)Do(P|*^ZLA{W`4AN(^logX5zdd|p@=^|WgS_omg3 zjs3YXVG-k=EDF>>iy2k1%1`JGc_w78Sg8tf>4tV^x<;Sb_-)a4bm9D{RP;RQQN>1- z>YzhzxK={E{48ee_W9A_BaEf;J*D{(C5*$>B|{ygsOlQ~CN(DXSBrs}x{l%Xdr4(2 zr=(^}Sy_f!*W6Od z8862_HyFz=n6%!rRr;P9+7ywHHL6){EbrUDtF!Sm9DT;|TK)46uEVK6^Mdgvmjp8& zM76U{@R46SJPDxN)Lwcote=mTfTVuUhAn0=|uNv9>t7^Z9p~ zkcQe|c414(~?E|5>i zqk0F8+Fyf1AEPEqE}{&MmAZ$;G9GO_Z1H>QlX68Cv2*V1;bnNEOjZs(R>OAh>rUu`vUy7cy8QkAds@3$4xBgx;C{Yr1q1GSt; zAEAneaGkIV1$W>_nNtPR_cRJ8?^}8Gvk;BE<+6%>t2p+S7Db zUir4CnaXC?Rresj&5z-~{ml!k3Kt)?@^fZ0GpP0O2l4$i(|J#VJzj>-^+U^CqW_pL zLEDrLsN0tDQLklm;k(Y6&+U5K)IWUX=%kptrAgTdYvF;>d-9&6EPIZleZC#P)W7aL znjEog%|1Ci-&!gwT9Hn)Pt^+C2>LUcy{xQSFx#m$$5f-Ny8K8^HK6iEb~UO+hjj{# zP1D=^GBR=fz6E6`Y|A*XZLvsULLCPBt~XpODhVmqTRo$CXUO019cKY~yRT2PUCAzB z#qvefw~= ztyEjf=1ZKjwkhZf-alxafi`IK4q62=0B`6~kw~lnP0*mf3cuEt>d%o4FZq*Q}(O2fO_C;Ff`JkNXv^>F^ijtVqlTBw7b_R+6Xki@&6O>XKB>&|8DOat$i8 z&(_x+8GHJ6>gc;w6CWW zT`BQBB#J)W^nf<=_4^9VD1@)P!QzD!4}}OxLCNZN1 zu57gst=dersY|fq9j#w@aJ%$0o3z7H^98Zh9hYawNhMMk&y$``m-GcQ!(+m5Op?bq z7oQgNfjkWB7*i?v>hNdBzo3(e=w*rH6JZ}+^e#M( zGf7cd>#xi+O^W>lKCh6k7bW_+@)XvmH7Q*47BlW|xBl#O0wlKwo^Q^tH#jql55xb7?{hwv=E(O<>{SORG@SZ^F(7S_;e5XM{oo}Oz^@? zbp#G6ppKB&yTf-Xum@=o=>naYRF$vZ*-i12n;4OCdY(9nZV_LrdUNZkj?xvw+#27x zWHW>vLqZL^uJ-izEbF_sjOv3zc3%f!=Vh*I#U}Qte_Pu6C>w-Gx@9*Ut|jrE=Esh- z!t6o?11HUQ|BO?ADsew{9*xef)l=!Y#O8M`7+Y1^tczM z1|OgObI-}-iTA}0v8S6w0;Ml6V?k1}&kBTRIkT<%zsyGB*f}_Up2(NWzLnJ`i3#EwcbeUr56_i?h6|^k79FnA zC{3RaTrN4a+wxFX(s(oIbbTq3!KU?d?bpP_y}x@54TnEj84CM~ z>va1Dw-zzuWalcS z4KT~Pr`Qd3c`pwTE7mVbP+DdLuJo*ZaenYb2dME(t+rk z$afzw{iuV}yhMw;mU3-6-z-R%;?dy%i}prrQ?DA`LGuDfP7kI7KQ-##OP)GaQ0ys)j`r`i-Blxv;ZhK*U)N zgkb7NuH7K?33z>x7J{H%kqQ;47ye^aA)*h~!pRI<^DC{(oExvdW4RUGBfp#-kXOVb z@yW`;X(}X=N!G3>UG`3#Exhvf5?zwCMONg@j_YK=c^%%`{*n8V&z{}%&v_m$*T*pH z!`|M!T;Ki@rnXbFtq`lny9BE2Pfzp^ax)QKN!?*}M+U-~AU=(LS%^M%adq|u7wx$g zdYtRK0e@+us=~`Zw>kBH!p`lib&QVF#1|g)HfJr)FZg!9KtHVlKmix!`vaw`PAB@y>^6>C<^llVq1WyO;vcJ9lkqE!Sz>6hhrlJ)^@_V{w)+Wcc>g`AO`m#wXfH%Ac#$*-hUGg~xE zyX+R$W**L%f5Cf|-SV>e@h`Z~WMK zjNZE$KTSIRYlM7t?bhu`O`{o8vY^Gw=f4UrO=`b0=G)tBZFKd%C@LjMs@e&wAap#u zKEr=uXZ-lM>ocy?4eOOWE$>NZ;Q~mvlGEwcW26rp@gBXtKI!nS>!VYg1XEqvPc9dm2cFOZ7q#Dz(3a zdN!xa`Zp=xwdk|0ROb?1(X(B2xoN%bH&8Z~>WAv7H|RXc zPHfXVqK9jcg(2+D$!y(?-`G~#+Zh~v)w^DptNXDYRr5ZrT{oRhv*uZYf10a9PQ+RT zeNp|rEt9+@*Q6k$^RBZLKsoa@Pq(D2;ccaNeb0zDmyMO+e2K1I)(GeOMC($M^B*VP z2NrD=N{6rW&zlA5I!^S}GX1dsemjE1Vhz(&|EajPTvvc~cyf0_+d7hj#<%FU2Vf1VdXiYdojoYhJwf#ZEd)eH&yj!(FYsokrQE{(3U!PoCiySI3zP$ZM u+`U5eNMYCAzpUF)^)E?UWpJ$?%{$h?Y%D_NY7s!R>XoV3;hqaycTf) diff --git a/src/main/resources/assets/spectrum/textures/block/sludge_flow.png b/src/main/resources/assets/spectrum/textures/block/sludge_flow.png deleted file mode 100644 index dce9650d3dfd2d1811fdf1d7c76ae661f94090ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6721 zcmeHLc{r47{~wW&(iAGEq-ji@QnMH{hRK9bqijjGl*Y_6Ow3|t>^rTfwW)=%RF=6_xJwXpYP|pJkMj7lfxVeJgAXaqt9p{5GH#U9%52wZN5ySPi7nIUMQNWkF+Kxj#r5JE$tTn+*e z+Q4(N)Vz&WE9y;LuB0;KC@Vv9()@LA(h6FBch%0bYmAo&i!xEyG_aZ}UImw(YtZ(d zZ&zy1jdERaCJod9zJU?sP3QV@Mg2m<$Fu@V(%D88yQE| zpL=vY{clsThS8k6rKU$>sg1!NIxa^u8xaVlZCooWCtEA4F?WCyhoknDuDNZYTkie% zK%$H8JM^)XZ1wn!E@f+T+*Kx@IA4>KP%hoEjwRO?8nYzRI?m@!9Cv`X1Pg9AB z{fylC$FZce&&9`UFck@}mKWU^xE6s_duXukp;R|(%Yl6kW#wMc>!%cBwj$zn?(8hH zqaX5ka7!H7c>7NM4V`M)@`29R>(m!2M`AweKGsMIO$g;Yt~Kq^TIKHHyt8`O?^6oV zANA{@gH0v}b!Uch%I==*+@)XUb0(=B&w;EKWG>uekh5}dMHRHIccyQFr*C(JY}WS4 z4Xd|zk$3EqYNj$Qw5awz zM4W7FLLG`0UAa4@VFJjzU@pincY8Y;OTfc3*#aL3AIcMg#6uv=%tM7tmOmsx`#`>2 zJ{{9@qZEVYvgsH%iapU@Xa)Ik8Q~&mUATh_E8L%D%Ep*4S2qi#0RSE(VWLBM0emqn zl#Y?((!h6knt(yeO(gzwjJv%P+DagT&}2LrPsG`Ta)U{jwW{J2$30J^J z!_BNmlqOd=Umi5$amP_}%rgvnf-s7xG@%pu~)6cAP>hsDHE*v1s155#11SjOWZ97SA^mCS(gtY9cMfFd!eK5Rn@ zgkwW&9~_xuM8Ww`$y6LfA(M#|GKEO-VacJ`EZRzeh{pus!b;y8N&o68CNPu6hxpv@FPXK=;f{4n{HqNdhC zfr^o07{HYm6B;cq3mTK9a6!xrhS+kR086pN@?-LSA<#cY6LxH#`)`tg0#QkZY$6qB zVnhP@L?$zFJ`fASF)79@HkD&&WWu5Th%OdzBq2-@Wa$fZ1X_Uvm1~7wG#aYKKiY@* zL2w*^WH@llILR=CQD+Ho#~Ab0jPQT-Fq0dMYcXJ-Vh*$}&HABrUvmAF0zYN^E4zNl^-~J`l<}|Z`mf2Q{{3YN;)5rk5b&yG=6I9< zUb9qv)~vEdkl^2k8N^O7GfBws5F-$iwctM`M8;tqFo~4d+S?%CB2^|Dm1)dm*k?UMVJ*4_4BFdluxc003(&PA zgF|^S_bVI=oX@4nJ~$8mSz79`xU@)nf%pBkqcy6ZtD1T$>jSQ(Ilt&7j6A6SllN75 z@^I&t67vbUb6;&LDI{*yA1N_t!IXr4UTV@umNaEDvOVw}e~P8$Oub+=J6+BnROw|6 z|MnBM?&aBMihU$)H8C`mmy1t5+oe-kFN-ODS>*b>|4rX;L2BMAR3L#6wz+J9hfHeK zCsjr@E1AV2KS)V>PYX|)cZCUzmkd%~W>TA$Zy0e&ZsR)DWFfGzDk%s}ixmm+suMNT zVRM9@RQc1nUOEN&;PP7H46KccE!KPgirVwRagleG@l~kmOxq{V%6D8{H9s})iIR=K zPH``0-|!dvoWJs>`|p)5#>gt{_QYFP)<02PF6F$e)_#P$2Az+5th}%)cpXX!91)68 z&~xaO_C1~kbC|$DOhPLGLZiH4BKO0aFHfA(7=w*J&au=yVt218FF(!SBjs>l@VVmS zy`1j*T!F1GmVnzX`bY#AwN0@J2m3~pc3nVjDY=rfzE69dtlrOQI1+W(@cHvOHHEGl zVye?3*Z0?yO}{nD!Rg-mk|-3zZ=4+QNO+_m8D~Y`Y_nm{sSf|M=T`R6v)j%h2SomU zb&~9*n+byV*m5vGwWqR9a?6E=&;0!WrUnIrOF2M84TlXyJagr_qU+wSYPeq zgJ{#gT3eJre5dxtCg}<5loy7hH|;@rweE%^KAHxzwaJS>3~nlD!6UGil9RoQz=yUC zr7YD*UB@t#w$I}FjcLj)}`0Hk}Aq` zUdOT*r`VOwcjoYV?!@GEbUm{g>E@;vD;*2M+wF^tVjo~ff4-Elm;S7~J>7i3#2FP1 z80V;^8YEyp-`Y3KPhn?ho*(X0-PRWOu4{+gPDT9+Ud7!=x_zeOjaKf4%$~*ml%K{o2`#=&x#1N+fx8^Yf2Hd<@qig-yb~pUo&~ zqX#ani+oEXrUnLm!9IBL;@zi{?yE~YE6p!;47RS09*L^NWchVxXXNe6^NAd;=JyY3 zyY!y%B+B+g*AGcCZ{z$n$t*gQlj_Yzvp+6~e&N&5h7XtG{i3_CcE0yCO#J^k(?AEe z^<&F}j;;rFY4z_=$+>fqNRr7Jxq(Mq-$Z$WFj z>q9q3J?|#;0MIMAImq(W8}x7C3m%-Cb5*)5%WqS}l_N<47kc2bEV}u=$i|_xiux9} zUVBtz2=m#iI7ajUa^_!Ms^7|$*rfcpQ(BA8wp1ExS@JxMQ-}|eCt$8`Q&>ZR?9A`9 zXH_0e_Xtxp^DU=W5=Q1~JyO{hsg7N3%XhuqKJ{iHditR&rpUA*b*Q)3QiQ#ZI<#GL6?|A54xH=$>ctMVsggP9^t$=H^=oB)y_vMF0Dev$r z$&28)W+^BgnyLv({ac_92hVSaNQ??|Sc{3-Z7N*EAZ_5qB{`G5tKBa@HB-T7#%~!Z z2@&m%Zsx$D?eX9L>V8TO|1Q6>LD#ZB?BJbW;qa$~|wCX6@ni-K5RL-?_Q5ady95 zNmcsbjZTZcbYGc&qbhsl#uN)5AKrxrYUxi27f73J+DUrCz?WOAD*pC?~zCn}%wRJKC)T z-&-m@&>x>^s1MRC;Cmh5C@*rjX8oL+4lFLy52VSD+|x*@b9P%H|nlk z8gqyJ+8OV7x+5rWe3H@35Oa7UtxU)WeasLBv#m3Xy7seky=oq%S8acCgxPUGUjcNYJ z3^AHaKr*iw#? z<^3n~*17HhJ!-n9j$7I$*?U{G#PoYTtUu%%i(}qmgwVd z?Q>=@Tv9xbgq%9j_BHNF#n%sBnP=PTO(tKda+{o4y}Beq4O6|uSvJehNxR!}O>q%< zf<7O$eYDCp@4nRBGPJ!ao-#kRXOGl=SlSvqh+6tY)%L@hyf=<^eohF*GliltgCHxs g(@4Au9tcz~?vMqz$5$)|kAetW8wcy$6`SM#1&lm_NdN!< diff --git a/src/main/resources/assets/spectrum/textures/block/sludge_flow.png.mcmeta b/src/main/resources/assets/spectrum/textures/block/sludge_flow.png.mcmeta deleted file mode 100644 index addfdd5531..0000000000 --- a/src/main/resources/assets/spectrum/textures/block/sludge_flow.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "animation": { - "frametime": 4 - } -} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/textures/block/sludge_still.png b/src/main/resources/assets/spectrum/textures/block/sludge_still.png deleted file mode 100644 index 933c56a0a47bfe7f8611b0e233e6cb06485ea388..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7464 zcmeHKcT`hZw+{rp2*?FdVFnB_N|iteEyN3iB7#%_5m1nj1dNc-f+X}1P!Oc4G#jAU zu%Ke2NHKzqW_gxt@r&mH|3tY&)&bY_iyjBlauUdzj?XX z?_vl9V!5@Ig%f<2LLh_@qD$dXO8Lk$_*NU?;>L0!hogf+0)6QLG&GA7L_^cqbYBF5 z-NA6&DtQkrIzPB_qp}%HAs;qMOVQ{Up2B);(`~#-|l}OXj4<|n-q&V+6b2BB=_*ChYMD>`gZ*rfnKcEy9 zrsFP<`F)8imo`=>-q~{}hCF`T%*Z=qh&a<-^=c-qv5Q>Pl-!!@9)&<7ddh{wl#;+W!2P3IswZk#278Xl-u(M=)>*$D%WHPO!rywqO+>u-Qp*M2!{X`!Yx69DK=t-&g|AoL!h(WdzNp%o;W^p5n%Px}>O5A4L>QTOh1BP~~7-vE9Csw?zToDVUb2$CYZ z0=`gIijE3j+Q*1he7$#AWWofw-J@Zbzwq^wrwxc6A4G?`mug<#m|qF(97FIN%Bfaq zeP`8Hrqq1-E!r6+cY8@h+ncVAFNA2swdXIUmInoirXEp^?Ck9{>a3cNJk!|?=Ea2E zd?3*w3|HM=I$T|DcD6)HAVZT(4fLUDvKc{e*&z^+2|I{P@u#uSJ~Tf%(+D$OQH?>< zsYaOXdUiOwAamMox>ZC7%{ju}g%aUUF{ENljKv@}5e8t;SY$Mt5x@*3vW+l{xI}oo zAlAa57gbpPMi@6cN3?lh2o0^PsjG>@Zer8-;xWczXefm0OLVfZ{0RX+8DVy_SV2TB zt?=-0&2Syfzz{zzZ9_vtEgW78kH^9q*ia6WMP_4}q3aePeqdP8LMb8iAQnB4iC(}Y z`viuuj4&8@9{q=Zj37I^KjE37KUskJ&|;H=w6ryGS`3EPuNI-KO?zRGpAP*;i%=JM zlWIB9LIcA>D6~y`X-w9-Um>WJKkb9ULIM`Up;EMH0W=1z8Vawf{kJ7ITiZGQX|X_o zADt1jXa$q~H%%7Z_b;;k=G(%|VmQA#0-OJd`#0@BVqa8-we0MO7J-zo1^28ij4%u9 z6RCj|I+eIMq*2L+R02T{t4)Pdp-aJ0u|9gfIIKQRN1KKt(6qJj+P^?qGecQqCWW>D z1%qqSVH{syLtg`&j}MmOqeI5(QVBX(Lqlym7EdQ z0u&X7($UA`3@HRdtN}p}hNAiEVh!;=6s)$Mfvz^$N6)}l+jkL)N+DVXhA_x*I_V6u zA5ANW>9;tsKseFV(b@=u*TnrLaSR}{d|?B4573#^!0^z&rd;R@nlp>Mz^AqWK}TCx z$ADmf*VWV4)%{D!l@<~T*Wv=IHcnIL$IL=vh;TSCwd93Lg#i{V;An{EAv7{8FvKM= zFu(}2;1qhn^3Q2IctcUiEV2ceMT0?cczq(yfQZv|fxmTi;PD0=o{0NJKafiI<@{gT z3)=?`{YbhMJrrJ_vncwpr<`fQKc0R(2GAEb6B@m^Er?{wj}Su1duh}~KVhsNQ|om6oY{QjiyJyYh!gNdU{x0oDWLE)DPwn<_a#*MXu1QKU1alcm43)w1qstlwolO*k35aX#EUUYoTNO5iO+kzxaR_ z6@FYQ;2$afTV4Os z^^X|%N6Pz5cq{xV?J&WmMjahat}oy z#AOyfLWulhagi$A37^6~kB#ffOPw`phW=VaY?*9JOA)!g}<8~j9*xbS9FKY+H6JqPz z_)*o@=Y`+O=!f}c&dw6c8NN|^^X-IPvO&W`S3meU%fA|=hRM!J=FfSatR9Z_4l0?M zJ&(0qm*#hZc_>&ubv%_4@x0*!aaoB;vscD=#XE<>4}(#AKb|wQaL7}9sCTBd)UNaG zr;9e;VR@_Y(t7i?vdxUF&h~ckUcN)&=01yF)vcpa#=^WV^0#lZlY~x><9df%Y5d#E z%k^^4Ql>H0^5Br>!rSt77Uid&>GcY)?)fP0-aV@z zG2d2S>rmJr>)h-k^5xm*`|-h9Yf!e?=eSP&To;b__q!7{q1&1Z>en2Hyro_il$4KM z1j`U)o#*Wv-*=&Xs)ADh5drr#OL%6{(Mx%S!Z zY@DPIhA06lhtEJ;H>S^D_Yc1rdxbB0OTbG6wl?)_x{?9t`^f><8+h;XUd`686V!eZ zY-ZO)C{)%Vv%rbC+HJSk=!Y#g8&96c|34oo#N3&yu^H+&^`lro@Y9&GF`1vPD;oAFy?3!hu zs2e?Biw(tf4kha6B{GMBKEC~HsMO1Sfa@AuR%Ltem2mH^^(!1UKN9dRwdNi2k}e{Y zT^SNR$Q$B`+vf5KLZZ{h_Cz%>EU1M=b4wL zo$fuoP9UTNWmG_=>38lUg_f7!M}B(?O{9uW_OO=|I>j_EE1;(n>pOMTrbuywsz&5^ zYmCG~?MS&b9VYa0+j93GkcPQv5@{Ud6h!ynLH=(pPAK%_$1ca6#VDZ}{ag`&NNT1A zNJs%4iKm`LUA=RtUntMD>G?%93k`<*h6$)h>%8Hx61S>7LYrTGUS5 z6=YRO?qWZhyEqz_wF1lzvy2a1H5td@14~e%Ru&ddTIv&HZY{5Z`57&}&zpIfk0M`u z6IbhoIo_ExAeHb&TTtj%p^UOBcph~a$WPB>Q`pv{$cZ_gBVTQLej3>;%!> zq)W!b5G36@alP01t~V#H+-ABb#q@4aA~5)XwI4ViLn?@rMd_+s(wauNW1h-*UVZsk zHh_9zb3bm^Z9Z~+7=17^6(F|U4;bUk_ zf(Vg?c{H;;qn!d%)>Ee_@6InyQE}_>2D@6^-($=sp-;CVlB+D-QnIc#@&e4%`%U+S zD0R$c0MDT7pM?AM!RO=YS}$5?sMMjp7dp{y!Fd4B@`_62u}L)0gtz}*G@jP!H-;0-<6v>+$W?0m6osAVTwNh1~k=(O)8;UR5*@l zU`yY@k%_qVpuP&KRHx#FoQdRuYJsgu5*uwv-1oUo303eL!}{slWFYDg&{=`mxTmQO zDaQ7e(K2Z1vtTn)!;dVRvb1NT!#UoHVMhTfyCs~B_{b}P;^u0{8<2a?h&iE#xC1M| z%KGc#3Y=C@p{*+oyvZhU_l-?@uOOdTF}$QJ<}96^V-gRz?&us4atiNGFVJtWetGV_ ztJX9ra=f`;DC7(lRp3?5M;fj45^%@nPz;Hi+J$KBXhxX-%z9hpy69x!>+2~}j2g(7 zKi;~`9F>}wx|5~u@9nw6m3ICuXLIaQ@QnLd5+JaZc^LSZ_fERc$N^K+_K}o-7xKH-DTu*@r6<3Q?Fer_K=g3cMmTEgp?t|oHJ|q-R-s-Y1 zNVunjqVAozHQke8WbiT_t+?Z4?qp5c66YqkzOOw-3QyK`KjQi7KZ$^((g6#9PYFJ9 zh8=Y7(uMe^T_@|1I|>7i0v>UL8=$zY!)q3jSn#?>r(fLB^{HICcm_aIirf#3e2V=f ziUKPc2fEWAZ3x3puI=LnUpNNrjUj8OsZJx#A1PPAuMgJOQe^J*b6Ga-KV&7LC$GC1~Dz&#AV6hThLrROLq52U9&MgZ;d7Vt}Cb&eqj05Lcnn zaIt+740io(4}OLHjjo9z$RK*>M`pyZUO8>>51Olk!z9-evFoXfe6Lk>3UFoZW&hY_0TMq~`|c5iYoZ{adG33YxqgJX z)ofDeoRBtl2s>Sqf34m%8R)`(Kg#ZLKXF#&TO%|fKng*h%%IZk8>UI?UHu`{huxCN zsrlTZ+;6Nc3Poy8ZdVxx_=gm(@{zA|l~AuPxcmkVkV&4>?IJ)n#~vJ+Ahmp`(RwSi z&MzOzY_oWLyntlLbK#(mLT(@U70{4ZvWd&OhL=5oEH3bJG$*TcBP6wB#mz^^H4im* z;4mfTt6IoWac({H6_1f+e#ogB*O4{fVpeim!oG({S=kE8dv`Gg7F4s$g-UAr#yTSW`u|4EIuGc6sdMXic-JG;%tQ?wnU(6}?vDtQEWFw&L zY4vi%fJ(2fxd7b=?&_vf2a@$Zue>8DLm*@8E8(VK>g9T$% z&AcJSx5kQ*fLByObZxKDHg-({2hmnc8_pDA1u^>1!7|k@Ojz<7(**yqWw+ zB`L+E=j@5n<=!fcn>n%`N6xlxDmcsuA`}NJJp;==+Wq#`KFWI=qfe%@q;KZ{ca27l zo?7h}S!ER4IEb(fcpxv&(6fmt`IZX|d5_zp!OB-8b#wVmACHVr)ueGzU_Le*c{u;_ zV@RR=guv|y#ozqqY}d@z#NzZPc9d8T=E#V1UY9$ydxur|-D?d?Hs(E+25;9Oli590 z^SyY`iqtkX6-P48n~FQGQ1pcNE-gkKY>AO7k01st||JJVVhF?`ITn0a{MGjWNu zc%M*j<=dS(LcP4zId@0j*BGno*nP><0Iw+>Im=RQiu@u4mhEtOF|7XhU}w&n(f5Er zL}0W7$PzSSTU5stkOO6X+*6yr3Egl_Ngf`Oty(6H0>~6DO1Tw89GP6x)vPSyEoWK0^=M`mbiKuNTsFLhu zut)99_lQlZ5~aHYre!`C{o+sQO=iXP)F#GV_PCtx5_7Vo0eOWQkq4Zx`WzV5{Y43N ztY~FKcSS{#9($L3U+vSxJ#x3&HP)g;?~jN31_`!ANu}jrHu)WpxTrz8&0~DLV4FBw q6$w1m1esOi(Hu|9sk^h^ku+u3<&OqinedqhVZF)T;f3 z(l*xSPQZ682qXYnAqt#De2P8=0*Sp3cXs1CkwU;Mb|9VMPXlwqSTry#ltBl9LLXMS z1+bqt$Sm~km|88I4nFw&O}%g6o75}Pw!!`#C$`b^cPq#r5*6ThrTu%whcSH8;QQHsCgqaYTe$+z;|36OGZ9q)~jM} z(j+3e* z-f#{leDp||ePGHYdfd52V9 z_Uv=Ws_=hY@;rONE(PPES_irw-KPF&TJm+k>v7VIOYJ-GCR#kA%{6*K#^`IC#~umu zj$;ew-qJo$+oi2~YTQK4eRkU%JIR0a<^5=bC0I9~23u`Le#9sikJ2@HY;3hj?l8ZCtPW!7wdJ2(i1Tcq8Psq?*AX?`@g%U$bn7gr{bw(24+Xkzs<^N(1&R@e;sVOtE7j&EPH*kq9WilllD}GP zj`E_YL`o&7U-%e32l;Nmy}Y~8_=0@9?N*mPjh*Lq&Q$d6yjU}%QE0i=xB19yVz`xb z{TZC>3pONG3G_UD#lcE5kZC<7Sk5+CjnFX#zqwZ~>FBfL((G%oUOCs!jVJBq%Wk)t zu3<^$X;2Zgr=o zy5wT!;gu6=H{t%m?`wtKtNkzRq!Tjbc$Py=IA6>Oh%ByhIv`C8jLkej(aE=;M~TkPyTgvrS0oRB(S zd603_b7R?uGoG7!;FWQ68xs4DNSI7v+)EV4tO<{Ni0hpWdwKVILEN$*A#{Al!z|*% zb}1b=_%$z0yj^;*J!|a+-}`5?ORnv#xEM`!7Vvs6bxiw~l|>uAv(P!r2|Qq3A1`R} z*tpw&g$H?>%`-VD>^80=5CqcXJhKovx_i??}%z$3H86_u+ z!y3$UcCy;c)ASyRJ+u3bQ(cbWH=9eWxMi&zD%GLFGwGf<=!f~}Q)KM)unoadzNSFz ztLhx*$C$Ld*S^#2UgYMb)U!&r?zc4UJVch=*-R#Sv&i@wuevQ8&omY(ugjHgFrIdd zYnWKMLR>d~mhZ7mKy%dT^1!jwfXeA#lnZZIJp z#AIDZSBXCu_Y;Iz-~=XDDdlLGSKYv;$45c#*~GU>A-kM-0u9p5zHWG<_JP?Pl~O;@ zqdnlNseaQnI+xer*CSKjb1SQ}5vq@Nxt0#{D|{GJF#n3Wb+nq2X`9??r0yC{9AY-&@})uFzYlGjh{ zuTJcRLi}n?r;YL zy2;v(-M52}bZ#h{Om-aUsTkIFHrT9^9tLr4P)wxHVTu~dyJId)i0Q37AZiq$5&i62 zP4h~lecxT59`K$|$-eFb{W0KNfdav0~ucAzM-lH$hDKq*kNc zt7FDJ@^f10qB10!qAR#&Wqzk%Rh))L!U%U(;MN0l+YD*eP-|o!e%XYq6C;ynuD&sz zVsR?*X7z`4E}NyIRy^PCJNezj_c^RASmSH!p=&2^T>ZA~$_5$7U1#t*71QSE^GEen z6lDmnZ(LMCsSd*GK9zg66}WuSLyw@aZ&EW(GUwUY)vEeC>XY}{HXX_dyY&%P7AiaZ zhIQ}G%gW}u$*zynxgVk;AGEe}G-6y;Ck%aI(gstVR|HsT`&(uML+idvzAY+dnDx+sjoj&!nF{=+5a0E5Ki~%`lC$Hz3^+N!GZmzj@)t zWuJN;%FJ>-#z7ULkg|JI2trS3<6EhHZrd@PYtPB(ef9urbVFUf>m6vn(o_0(Kr59Ca1;!?rc{N)Nu zfq)rQLx?NJ4sORXqxmqb!`ZYQ;r7mya6bxx3NhLuVGv3L00L-S5;!!#pUEMH8bX$E ziNN{dFbo1-65;w8Lfq^e!DfMM8W^pQ)`vqaLK(qG$QB8(0h>xEI+!xAwFC# ziwJ{-goNmap!5UT-Y^7#K!CxKFeDNRNI*GZOfD%D%H(J+LM&sL(>N41gT-Y8GQo?O zBywO7*AM~$=E1+)7r?T!`w7qF{9pm#0~ShR!4UdzSU>>mR}Bu=A{YSqVbH(S;5Y*t zTbL7#6Bxv%&@6&!Os?jy5LC)feO3_Lf5{yx1xE9y1puNPU{%DQmb9|5bNs2XNP#ya zfVHFrko_k~E`$CDS%0!^ac0S#Ukw4&f8zd0`gh-#gaIi#JED0YC1}w+8*@X*;`&5t zAca9CE}fDnBs?09Lqjoe5)F#RqbN{3hJ=J-2^bUtNy1_fH1sb}HcSqe#H7#`p#X4w z27rTtBM?*sk`ASzu@op8O~C>XG(41yBEV@FGzv+<;(mc}U^9TMB>Dep)glxXfWjk4 zI2sCzhEgeL9AFI^3B^<3NZ=BVL*NKhIu=e?f}&E0mVxX55)e*C0LhyMV==v#CKd@N znmF1RLXi6KKSmt=NnARh0Mr13Nev9){4wRs2%zoYk{0MA zP*f6^WKQDJ08ls*MMNNo2(&W-M}%XENURn{*0w!0)v;zf=Hq)yTBm@)2K^!0$9sa6dw}Pn+Eic9|`;WIOAU= z1CoxUAgE|G6pbM)CIbo!CF96cC<>25VbF9M34vKohM(x1Ksq;s#HN{e13Us;0SUUq z6{l5eO&(z8F0OoCuWle;|5DJPD5ldJ>dG!K0vP3X%pT z(eXGal8hk$jgW?;qsV`gdqC(G4`(=zh(Z%F{}K1#NIDgdqvD_x3Z4!{qcC(RfdH6+ zKmnbYf}$b_l)tO?08k)$Kik#M<-pTF={EM(usdp=QH zxOr8221W)_o(G?I*4sE$Jt__w7He3mD57tycN3Lp^^s@aqaSRk_^7Yh>P!E?+o!Iv zE2Y0J5aWWp&V1wv^m9LKk?bFlZK3Tav+5^Tjwx4olmrz7&(E-CLgEsNjM_bw)}`t( zGMqJ0#<$n?TB~5Z8Nx&FLSiNzig##5h}v9Ms{z4qb#=*6cKm$x_F7MaG9sIp+UzW zUAY^&yL@iln@Kar1C3Gm1VNQcO4gYk0@GRQI};p83aXQBfrI5@kz}Cii%>+WD|pd!<5|ZF>TxjE3s` z@mU%<@;a#ssHh$W-$(aTiRhI}QY=YUj4mPIaOQn>i=^CEI>IsKWd6(Cu2XRrc=J5s zK#(Y2X2ID2rja>896L0~Y5lCO-WYuIqTGb!Jy5RMdR?Ut`bc9{*Wx>GznsIbguBY; z8Rft4sgZeLyEV7f4qCeb?VT+Z5rW})@HO}}{#UYedQeYs1;z&Dlw;_>l|%Ws5c$oi z6owaCFySD!Qu2F!5%;D8Ja734>M&Xbw}?fG7=&Sl%e-Bzz9*|TeRn#Q zox0~r|JY-Dj{E%qQ*{?P3!N`5x?Idz@n)gWl$SZY!B?*Qw_2y8HxElvcLrS%yf-rm zwUkXKh^TsuDuEi%u1GqxY#awSRNrul91#x4z)m6lwMDFh%VnF){=!JZ(GP{KT4*JU_vDs>Iji zAJ#hkO&)1d_k9-2+C*S1sK+J*sg)~xb@#V%-Pe-G0Ala6MD?qneKKfr>dR*z0{R$`3Hj`QU-G)Ox k2K_PhQ|AB6iSUA0uCZgLzF@L4(C|Sv7WU@Vre5*?1)vrn3jhEB diff --git a/src/main/resources/assets/spectrum/textures/item/sludge_bucket.png b/src/main/resources/assets/spectrum/textures/item/sludge_bucket.png deleted file mode 100644 index af1bc6593fc44d5ef0ec54b75ad0450ad27edf9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5371 zcmeHKX;c&05)Pv*Vo(GW1%wz>7RjEFg-r}w)Ub&wpmaJN5+n;rAb_JHii!vVqK+e@ zj3A1L2)Lk#iV8B|z!MP^WDy1jWnUC@Mtz-t+j;ZHbKd+jIZ3+fR()0VRo&{`cyCX4 z9c?3R1OlPM@^JBme|41~Ee-hFY~%xgKul#t`>m7v0t%EwD&`47A(T8y0->Nt0S|$Q zY|2~fpW2B+{@rNxT5Io-cA90rsahpHt*!( zo`vJxrMIEXM253gNJ(Aq`X^5Yoaz^(k6tw8pFz46y+dxh;xu~B^Ek~}sz_S)#O#le zoqWZIXB{5mo%8nY4p6vc@d)i`qSMQ;@ z_3$2Bjy65kiJ3<|$kP2GdiN}ZF_ki_lyWaMIXO7WS8=Ahsw#Cn?)|cTL&uJ1&@3M2 z59J(halL7mb+n_TGW%Sm#nyx+cddTw>@U@LSt`t3(O`aR+ot-0G^;Yac^A)fgdf}N zeE11^1IkaV*0p-}p$FRT4H>73x~k&suF&UTWBB0@V|{vlIJp};_koXLrk4Ga2gRG! z*3L$TtXi7CV-3#6zO!Q9dCAiDstfhV;Pz&|QH$5bBT3O_i)zo^u9_`*QDB7t@zm&b zJ9PWq=U+YAo*9^5maDc?luZxX!Rq?mHR5_>!x?i@ye(cn_eyDnuR_yf7RN3In4*#9 zK2#LEXv1{U@Z4Kov6(UKOp;~LpK|r(iFwbQJ^y2F`&`S*zi%|V;;1@0eaLO8j;(%i zA?>lZ6K6_@CB5^Uti~>^%=O6ip$5Bw(($nIMFdWHykQE;#}{9wVfbURuI1h2lSvwT zG7}t^BMB90y5ut1?cS+7(+X=AH}@9SrZSW0v(vl^%4cuNnrdB;bv8GLW^p#(mzhYR zh%8U>j%~idnvS_#?-SA@Zw?#_jP5QtU2gQyt%teg1jTXP!-F}1Wddd8YT>tH za=)NDC_rOMC&D;A=T<|AQN2#hpj+8_iIHUs>hy3B64_MI6u$9k%TIPgZVm4Z#czX> zG{T+AOmtpu#E(@r>o>fNY&L-SMDpcl9%qSy{AG}owBc30P4^>% zUmTgPVwb*#EUQk}8;Of^65Jj<%BsA%Ba^h(U$W{gu=Z_zSDlaRvAUim3mH@U8wmUC z(+=BSX=%#V**8=+LfSuS?X0;!!>Bc!q?N>VIy9|B(RjVm$HZ*iF?F$N-+1;>Bc90x zW@^?hFigZ)6=M8Cx1o~qsEFrK;9suL-wqLazwbafTY6A(H`Gy|cn=yA= zh8E1BXI(xW`s3nOw`Jbm5T;H{YKG@!M8rS(SUsG-ZL zyqUlC?`wf)3-2F?ia;U1Kmv;7bT*_psv!-R3S}&`b{#s}lvhZEn3f_G}X$ zzr^9V^lI%tF*PBVYMRFWz#(T}JcMi%B%*dKT9^{6H80%HJ1)+$&&XRXisF-CqKNoIe~+&0!=<5~VR%iE-TYeC-uAJm2E7mY5z+Zx)Or+@1MGC(kY zd)~DB+frM*`6=c>LB_?!{rq85$<--HhZm^}=&2_Td)xdl5Io9`3L2c#?JxVQ!SUXU zDaofcV%iXzdv2|ZFKl#Zo!{Hve3R1m{vG1}Drt3Tz)xlH^JcC9ey*%zuVjE?Ar|0@ zIS@8dD1mzefv|UqlmOsnNRHw_!2*#3dZ6Sc8YSR5px08^c(#NI@dX~yQfO7Qrym%- z8KiU3PLA64kqj6>2+09dq%c$@V?;WjRk#fJS}De%Q7RSrW(V{-wl|6?mO>~pmW;(? zTq6Y$M6{ze%3jLlF??OzCL!QE2Q*(UmoRWRg+hTrW zNDf3|L^5+F!~}*5Bm<>zLkq+rloAu*h{NR$Xf(Wz`WT;3!e)Ph7s)1Bfcd~h0umen zi^mCtxGybaa@PnLWHO+Cw2=A1k7t}OBol{ALC7@%63NZKgy4do>?PsSP*ply5C?@q zLReJ>dnJ73(w)Wj{$!z~AXp%jsH|YJztWToc%RAoDmLYcDxEI_fz3bRex>~}ca<`% z#bz^H#9+8GJeG?CTIrv`6@vmULv=|7ARZCI(=a@UM!=A{JTiuk2MHJ=-4+DNT!3WD zgT8=biDYs>1VTzE7#u5raX=b{$f4ST7$OMLFk}({V(1`TR|+i0bMQPW!~ws6@RADP zt^`8Aj7kZ`g`ub%fX1Pd01Tc^reMf0Du%-a01QB+lL;gazy-N<6%-d_xQV4g04}FM z2n0hoi6~gLpd_5(?9FmO6S4Tu67Ntz&Vvo$Js=Qq#R}QyB|m`>S|taRd=hMlG%A%u zrICqL3Xx3sth5G_%HUp9q7v{}B3ZSfEDQrq2c{NKb}9^@lEc|Bm{JIki=}>Iai{}Y z85BxsscLYP{X|(j1Tt77O4;+1UB3zno4A|U1fc@e5(=eiTm}G6IFSJn5Le|0wwqW2 z`G6=Gf_M02OMR3J{-InX9vPx>2mppkrNb2`b0G|!4Dv7p3YkO%sU!{vO%V49T_)zq z6@V0S4u&&@vw>Skl?}>rl1!_wqfzi7B~y4J0RuM{f#^q|Fz|E+nT*CwCW}+<>5tjk zjO{!)lT*C58XuYqAdiq6ZlIyOVF?_d8wR>G~!HzDfCe zcYUYpn;7^ees2v*6<{lI7y;N2|^|Sm3#9sex;4rJnv0 z=Eb56)UUn;8CgHqY`?Q9BV*W{e>h3tW|#VAD)ZcB?;sn4JGYA~&gCzNiW<9q^~gM0 z;jY}H**W2_4*BN3NnBxhYAOnOr|WuPtgWmdE%of#$BvG8Y}yTr;%hf7l0bx=^Ienn zQu_x7B+sY!-ruE*Z>k;G;)D-q-Fkvkds`BgfVkU3S{8F@uwf=5{jF)qi17@b_u)kw zHV@lx(&>+}sor~X?@7z2h?s>e%W6GD9t9ED2<#7gU!lKtWQk?4y7M3@sA>F2(-bm$ zBsZgnL0xLK=;bwy459z&NNvfslr{5ggf>*uiy3KpQOEO96?6Z5y*+BBd!weoxTw8a S>WP7=LaleO%>eE>egSzuC0su?^v>L z^r0trDW1G{=^dc`+}e>DM_yjOd%^Bv(7A9$+V_y8K7)MkM|M=D58m>|@g2<{ZP~xs>wfyonfzTjxxc?vRi`fe z@{9Lp4ohG1`1Qu0nds(x(d zkbT55Z0V@OtJdM;*IX{OkGeE3@-%TSQ#VJz;4{G$(>5K6Cy! zVrtc#idDx}j~}uJzdG(DeBrd?h1{G(u>HfW=U0zw54_&;oizyE_rH|4u3*QM-zFc0 z%YV)Z?VKCB+;r`(6@xn-T5*wIxxQ`q(`6;gT7`n`2PU`9T03%t-0@`7^_96x)>N~* z3u?|)O|lf+cX;TH%>8={TPmN4RygiVpBL^DM`m3f^u~(Fl6z0pUrhgL;%&3%9-db_ z=$)5evkP;7$@>0uhV{({H@=ryeFbZNc#l-J?%cKqMz*wdjb2=N&!}CuH=g|Zn~pBW zV(jhDzqn>m)vVU%@|!x(cDg$E{n50w^YqXSkHy~oa7f1>RCe_;Dz7TvbU{=iRv;+> zXiY>^RCgFwG%=w9u@>rh0EXnKi}-Qxegc;z7cslgNBdMaoG+I(#$aXR48Pb|D>@}& zVsUm+LO=i!r~^C^2}d;{;UY|20o@y7ioi`3z1Brk`O0y(5`#Ez<*hVXnvm;RqBt8b zib+AC!ZW2C0zJ8i`MRzO6cvxht#Qt(#6lF~bUG=TrC63k8l=_`)j@)cYU2!uB!&lS zVoX+bS&8BXCI~2Xx{DytI^N@7MD_W4;iFnN3y2RY0aS{y(o`furCMluX*~kzcIY21 zG(YN6ssd_CT}*_f^)RZBONEfcUVF7J7B<6?L<)vs1gUChSEkRFQ@y_OUJHYQkQ`A> zD@1l5OZU0hXjC=tSPwf}{gNnk?k# zfCxm$aje~hl0;#O5{m$oPB{WXkW!-|bHN~7C@J^42-Zs9l9Y#m9z+JH2jr-v#I;*X zemMdwbztzx*c}|ha}LJA^Bm1212++8!I*|>(LiNrE61DWMq&gM4x$zqm5KmNIf_Pb z#~{#^m|s!CF2aDo4a?qTA8IHG=)ePXh(Kx9CeU_)=Kbi*a{}j>K(hj!qOVADu;Jgd zjrPHdl1VRUVV3U6FJ3!X}UHxL9U&;g3H9%Lt80eSsKz03RbY^rE8qjA}Mqt`h55^k*BOB@SNOFf-Hb=v-!6S?#4coYB6cT3YUSDbEh0OHZC*+;G zDK0{yv0hJ!-|?}?4?EjsF+Qc}r(_-ke;s F^iSTY;!ywq diff --git a/src/main/resources/assets/spectrum/textures/particle/sludge_pop.png b/src/main/resources/assets/spectrum/textures/particle/sludge_pop.png deleted file mode 100644 index 07315218334a4bf64b8c1e3b694f10a0c7688725..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0ze$V!3JWj{>lra(mY)pLn00*CrGd!mYw0b;g9*` zgrEKXyq7Z!dYb|b=4>*FJA1+;@+srZZT&z#7h80sLt&*sL7W8Z;)Ir`Zi}*0Ch<6i z`%E*}_;e_v(tykDG?P@yio{93HS{K~2-|RJf3JxN1B2BOJ(+u2{@y?v89ZJ6T-G@y GGywo5hBcc2 diff --git a/src/main/resources/assets/spectrum/textures/particle/sludge_pop.png.mcmeta b/src/main/resources/assets/spectrum/textures/particle/sludge_pop.png.mcmeta deleted file mode 100644 index e08ce8c73c..0000000000 --- a/src/main/resources/assets/spectrum/textures/particle/sludge_pop.png.mcmeta +++ /dev/null @@ -1,6 +0,0 @@ -{ - "animation": { - "interpolate": false, - "frametime": 3 - } -} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/textures/particle/sludge_splash_0.png b/src/main/resources/assets/spectrum/textures/particle/sludge_splash_0.png deleted file mode 100644 index d6e0462651b260cab5a2b9400df36ab52313f2e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4740 zcmeHKX;>5I7EVNVf!-pBfF(plu!iibi3nkfn1F<>g>s$DOdvoOlK{b`MHWTVTLty1 z;H9Fqf?BzXLM@0`0k2vW1f|7=N?lM{c6b$i~Xq3WLGe2!j2?!MBCsv@iqLdb?UZ24g~79TB4qhthE>wNffeL2=p)6^cW3 zGARb5Ywy{)LVeG3#)b}d!$(+w#irj@&WK!-%^n$Xy1A`)UgU0}kFX)agwVgGX~C`D zrZ0Y9{G-qJtne9v%bE-9&Smo*j&|wdqIpT1AC zmvudIaaTU9d(H~GR@N8lSL3|uj35!rCe&-U?;azn@(%9xDIt<*AeR zwkXcLQsmt^8WXgudaHlyA{iSuc+PjBSyw65qrmg!Ld(?cYd5>&+#0-U2Nu@sS3m2r ze`P;&QJ}t%YfA0t*_d{1L3P}VguIR;i+bXR&&GGhce?*)klNS_eOa3pEe;GGJXMzb zagd!oGbiq=o0N+)BmdjuY1&|Nyb3$~QS7ZSX9vm3+1nEjF3Wz|%t%s^S0(T--HNd- z(yzMfLCzEx=9(4F{G|a~fi17QSVhzxiT&!nGu!cwC3QD0(AwwBw`&*D8kcA6>q#VDMEYsuEC$M8?)AvtX$dt2rQ*+x1D4;5Z-J(+m9Kzw6Q#r@&_!yf-!PAJ+Pd+c%Nh3geXYx+A+ zs{Y1xJ$X;k5aM-G(rk5qbM?m_tv?KS#I|cM70GLNe8>1EG(;GyxWPSf?eUfBZk?z* zqw4n1@ix(%vQ}|hadm3nfwuJ#E|hCc`5SHA(AFa7+}vlM4Rh!}ln(eNiB1$bE9lkp z5|@ay6ce&&dMCpYSCT=|i@a9t>hh?FaXRQXJN|J_Maw+1tTOv2dy8%>)poc1mUVPC z&N@YEKAjb}t80n-Q1MOk*5|{?E&Fn^o46aOr7KjgNhNF0^1+~jE}!R&A0v(> zcXrC^8Lj0|jbPE?hV`@BFSS2CUSN0n0B1zMNFy@ot0`}9XL7A~4p$eiBm8{2xLED- zs46lvlx}O;V_GkDiN7m+)saE#cMR{ZeB<`7FKW=%L!PM^3^qr`=Z6XS{PF$)U9)Fh zJ}>xO*v#Be@qv8~ri=4fNU6xNelu&CgMMYn35QQpNg0paXtLn&I9JoQtZW~Br1`9b z&*sFL`u3aGH(wAm2P~^0dY#A{ID3EHo}nvuYhPhXRzQb-p<9*~qTh6q$wjdaCgok{ zaFH{!>X-BK84(d)8x(w1xNKKqR^g7Cbn zn-$9_JmHm@is`7qReqeJBWweC-j|Cph#__XX; z)Yq?b&(>5HJm6gS?2Pf7Cdk{mfvez62lekZkuR@3+u`5Rd5DU%FbC`sLnx zarVuxLn)X2v=@a|jhVf(ZjLyaOsig6p}5&`zVbE~`}%6#jvLRTUFy0QJbG5?xMZ4H z<$C>-N{>G5&c${8+q`EN%pESv@x$tT_A4)9`Bh8%3Kv)1V2j)`XIxGiHe<1-H|n>a z?j7hYzH;jKH3#Wu+|)zrgB#KFM6-RBxp^fk$>-L{m^XP}KmhOV&HF8CHzxOb!H?PvE|zJ)XN!8E6TG9DgO8Y6wr@&%+!1a}Xsg zLpa7;I?SSxQM!~sLJ^cegQ+9}i^8T8BnXoXLkt>BffgDfTGaZu#^dG=@bT) zK%>!7f`rb52ofe$LZ`BsWC($cPzcNkRI23=*iM-oNS5-igIjSNH0k5#=G zT{ZeN+5{;w;}Q;MEL;u*k2=vnX((cJ1nfqa;6zA~fPxMmE2(k0>`%6fN`g^{%|ZxN z3X@KtG3W>Zf)KFdGzvncu~G5p2#Q))gYgCvt1c2SB3=9`AtB4cBYK$)f zg@55^Y#;tY4*+_~$$RlTMb{Kv@5R7-DNj|`6kYGdz^*&O8<1G4f3!5)LpN0x~F~fFMmA@fdU8k;oAc0&)mJ7Abk_qA-BIxXK}E!4y=4^z2T|}EWn2fGF98&uoj*R$&Og#mr@QN`daLTK`YP$1 zh_Jws)-Kir0%4>m$UhQXtqiA?1^BN0x;mFYFmq2A$KsK2Dx}t^q%t`M;c03N!gMkz zfuOtFSvbG^{uJA+2j2x0#*3_S+TzL4cYF(XxFa+4O_*mH-dH2vmb7!Vz2A=0c0Kjo zqpDkqw+sAP;k?q3;g@Jy-}<9(HPd0AsP|}L`RG@aR~;#R{w~F4Nn9sync_y%KLeKGA8M8f ze=U-@!Cijk#nPMxldax%kyM|+A9n`rYTsWg)TFIko-tP6`L~!BvrYR0;y=Xj4e?7v~;alOuuINyexjLFRVkV$!E-}-)hNt#p1!RAd{?62X;Zmk~lHK`);r!c~+M^aqG7Y9$MPv1(?l- z#_7!4--I|=Ua~%6I`u*ImBY%Jh5K7$kBwq(jbAr5Gc)Y{wJT1HwjA~;#QcgHVT zDhGR6NKj^QrE|q7kM(vl&9hwBWTiq-wDM&^$-_#g8BIrM_3c-%wn=qAn%hqk*(R2c zIkfiJ?L6efFdiPnmuf(xIt#mt^wG>^_WDnECwWdCGN_rp6OPo^Jp zW$ER2w3kccubMWPSJ;dRzLU0D(Dk#vIpx8dh10I->-Mpt_fJSVP`Y?S){eVbG1NbzFQmToX8;`rtptD+|M7IdULAZEgjH^{GFsd|?#GK(AU z9QW4S98(=3Dd%JurlT-_?2^!hd43x_qaqR8x~oXNIHdB5d9D{oM3&$YAhVxVZ` zn_3Ua;oE04mK6oXqr)B6I7XLbcswgVo0eNKuk7&L9lx(WbE2x?3IE2FN3njUqU^jm zLTAU=>?;TICB%SVXkUNKejHv9;u+(-&edkG-|E)i&U}2>EpPP0FNRvzE$dT+tyepQ#d@nqMluAeUdt7nOxb;@1St^Gw1`Hg#$_rcWWaL~%gDtdpKneiq59m)Vv|{iJK#9b(s$>m<1*Bj~eBxjT z6!~PYPS(hc>7WP&lVb{?ss&zYLtF-mLL)v|7$``PDbz+QK=u$#TqgZY){xi?E5>vN z2LjAL;SSLr$la(6v_eDq{wgHd5T3|iKs5O0qbfv(@{PA#27+>!Tn35CX0S+1D#{_j z5(b@wvLq5N%4Bfq9Qq(Aky4ApN(3`N0dTSm;2=~gMn@!45}VDYlb8$)A;B<@O5y-( z37sc_F*bJ)M7Tx-Uq0w|Qp;W1#I1O!6kk(g30O5*WYED{Z&B6JplvRO=~ z5eh~4vs4-d49Y1}zzG;dtxPa37zpS4Mu-GNI+^-e5+R3iDKG$gK&C`hsoKv=VwnPq z!eIlSG&Y;drcs%|3y;TTa6T)|#WY&biw0C0l}zso!cZ7KNC!|08#)yL7%f0He4z$| zag|1_Qpp8GLr{>x(%9gTS6^9zWLlt+X6X6;u8+bN_dWG(0=dk%1VP5e<-F9b5{zOTP;r!rNa!#dp-G3L zYgJM_71m(B2_RFD4QL@_HqexQGN%sJPff%OOi{u9rqM_=wwT7^vzUAulSt`LmSWh` z1KD~}{)Z1Qqr#ve0POl?V7P!;Mfo(W`uQ?Y_!oZq>+lzP0MNruzKGvpx`yfcA_l%l zdAPfV>G~oDzDRkvyZ&!C^a2o#6Z!j!ovtJCPIDojZ7tq&tlc)v baWo}hE~ft}bJ_3|s1QT}Vg3jF;#d9wJoEI# diff --git a/src/main/resources/assets/spectrum/textures/particle/sludge_splash_2.png b/src/main/resources/assets/spectrum/textures/particle/sludge_splash_2.png deleted file mode 100644 index 757a421cbfd353f3614549dbe939f07bedff2073..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4683 zcmeHKc~BE+77s9jA}GrthbV2FQV}~zha{v!B1Zs;8VHAqx1CN0g5=mFkbt0a4vOml zD(reNB3hu7xB`lZ2doUP4hk%eCpyB6<0uL!m9%Mz2EoV ztMoQe$RcY?7fTX}WGx5|2nY9xhI67hxHe9`kV7JwnI}a?X~Qucq*5!TvN!_LCaMUC z(95JGlK$@V0=c>avdS9NY@gYXZ)1D8A-VZibKd6lJDy9ut}NwTyIA3D=8<8O^u>eL zEgxJvEoNRV@{jD_9dWm>(bdyYo4h&{jlJ6ycH*&1$)dzF7EWY8kJ8PYS5)-A`SOU? zcCV~+MP~1Q^xavSvW4DQp7*5fSxviWq4lH_CLHVCr;fu!P0i}t?_yg9HkNNz!2d0| z*SmT8piz`+q9~8#4~v zN$uL1`yB!oJFN@+VP}3A7uw{JTXS6Dz4*vds|D#~=6pt(oBW8S<7^$Px_Qr|+*+sT zipmM9?NzNCb}bOPR?qLVJe>T_|MJ;^sET~NGpJRPhOBx!u<2@PR@2|zL#qd7c)b0# zUsV4$f#PPXsg28unNR-mu$=3&t9h=9;9xKtZi7bGp$|xjC-rewS-@|r_f0^&A04J z9yu8kd!@Of(!ufTilUB=^l0io zsvfFu?5`wR(89F9$qO8tDWZAA<%>h?wFl=MraxwQ`F2VbwZbFciky)F7h}vC8 zzrERz4wqTx}>{x{b zoOifRF7wa)>21T{!#8o){IyqwmQ7oG9Pj<+WM*3DTcx=7!{yWWxhC&h>i67yy<&R( zv$;=Rou0PP)cka6PWS0Ky(Wd;^?kc2&iS(kj%N6q=zU6*S55dezP)?BYi^<;Zd^|S~qNnJ3?T1aJ%!_X7H|o+X-9%e3xtwHRLPZIea&V=bf=QHOf})qJ zzyu?axITInhHoUakeG;;DR|`Gx{G8;CgG7+FoiUsiciGIf|JxlL{dm3p0p81C1jt4 zmRvmt0LTd~2I=K-3JpikBO7r!;MpLik|Cpsb|a4*B@{t?rJ8^k6b6L`2kK=Bbn-$= zh^v-JIpG08!w}$&M~=~IRU9f+r_)h%o)o1znu?$(N~O`MbUF+yU`?Vzi|Jv7X0`!h z2qS>d;A)vlD^n^U112U`#%pyxX5!clmIW|#%Q2UU-$s0f8dmCLDPJv7?D z1OPI;pg;7`M1nz24JS0pcr{K0CJ+kk?6D9MeAHhRuZ}aOBf+Ue93cm$8W0uvB;+E2 zP&DdcpdeZ%R~fwk*`HWyWzvsieX=%##+c67g#h`9Yg0D_RhVm2FtC3Gf3jCn~tF}7q3M5tN@suGJEyD9^e1VAw{ z7Rr>M7>qG70LAe1f>82RJVPiNT9Y8H+s8j%8l!I(Id^Le-mFh^PGLA(wn1L`*7-L9rSj=RJ!JR=!Swm@zqHB~=tqxNYe$gOPkPRpyV>ZydVKUu~ zX^-0LVh96MG|=A&0wb(QgvnttICL7BI-D%k(95c|*k4e!IB83KaFgM1dh<8+PF^;ryjmhpIXjnnm641AXHcy;~X=(7CyxkD(x zKOi0Wm|0xt^BQ~znTwY!3Lp&{j)Uh*cLB*HRq#p;i8R^HaGH?z?so!03#~vHXz}x8 zn<*^&%BVF}Kx8Wj@QZY6$2T|?)C>1?`UqS|e45F|uDb7QftDl)3<;?4-;nk{X>9H9 diff --git a/src/main/resources/assets/spectrum/textures/particle/sludge_splash_3.png b/src/main/resources/assets/spectrum/textures/particle/sludge_splash_3.png deleted file mode 100644 index ee9007dcf3f9f21f2fbbfc5977ac170c7c1b601f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4721 zcmeHKdsGu=77tQI5wu4^K(NNJ1p&j%2256&T%Yf`(QE6{r4fa|;1)Ibx*#botzkly)H#DqQ?k`K_X~8PrL$ z{OAAs%o~@kse*`{tV54#AGka{RA3!N3XWEM#y&@OJgz$1;!Ew%)=Uf}ue>xX!E ztd~pM+Nb8!@3HK>?hixi7`}K#iAiqRycpyX14a71rQ#NS69FUryV4;8;P}$p=!WanB-4?^zvdcK3|h z-jMI>pN6dLc;K;XP<^JTaKVocn|(#Enod-8KFhdW)7c{0(LMisFS@NEF-p2HxWD#r zoY$hM(|tCt{u*~W_r&vMVo~}%i<_OP$=m7bxp~&e_cn{Gq~-pvW1ZQjcAYv|hO6gg zT|9S6Tj<#6aVa1}l4HEL|7vO!^qQ#-JVd&8?#o$T zFV6LcHRg%c*LIDkvW^O_xHd*5rMN{|_zRnjH`e8Kh9CFXQ_JoTp3<7WH79Wo`^4*r z)K8nLo1IEi0}@Q@qBqgRgRsc9Lq}Ff*5qEB$HOo2R_)#S1^YO*{^rHoIgt*bNB7>jo#AjS zGxsjhQIKm7m3LSlv@h{m9<{VG;l8B0s;AheGudmEDtKRUN%if2B*m6r-J`#`A=H>u zb7$bh^^jSIJEYh5)+O|nUr&p0W?X5_&$6A3ckG^-nfY8g$YcMr@~Qv&kgDA?i%Zsc z#;$eef1Bp$K5oPAPj<8lz747<;w~i%SIpZcEwh0Vnr|wnSvGZSO=!K;>riW@o>M;5 zk_Qp!fiK6`!fl&Gz04Y@^0)q9{vI^Rsw~MSChXwd7ihr1g|*%LZf);;qH(CVKRt51 z{=)8gL!fJQS&HrbB{DI6N^U}t zD1LADsvqojv`tpoC0`w~&48h z?8nc~=3jh^?3g$RxNEm ziraz~*Fzpv*-x7uZYmx4xvSwnl(J>$k(=yEl_mJ0dkC_7mA&P$U(Zq_?b2J83iH=q zY}9SKbM}XUx`~&cH4JqBE9#k>WisulOS^5ZA;X|(zryRAo)s+)&%V6X-Ddrc7x|A* z{G=((oibU##IW%GmN~NHH<}2mlLckdLZ@fhM;=U`^Y}z_Qtru>hmSAc_bRigzPjKM z|LWX((E;Pc**lhrob02sTaV_;XhGe`)S>MAp#@9aqMWw5Os)*beDI=a=N6T?_ekawPzx+^rM_}>la^pAGevfi)G`jaZub#1B+=S}1+{e{!eHJ_C zH$Ex!b}DckJiIx;!r*&QbHPGX+QF)`7MuvMER9djXQ78gmgBF#?;Urat$0*f8 zT3_868dZr2X;EwmEYXVaSY_}=0+((KiI8uMlk+f|?*eOqfe!#wIEhjXs(7`IZxGVV zxO{ML5<@hq*@TP}(xN3{RFQ_jsVr}nH%t#QC=(g91=dsnfhqXmfeS||;`OOjeX z1nKp9Z#~mnL&QJ`kH>>x2E<^{fdyTcq$W`VU9EF9K@4LA;yO8@)RIb#nrgyCWts$1 zNTUHg^=*DCtwiz;UacEp0q_ACP%VUb!;ne^jrP!yL5TolB%wd`&_#gX0Vo{TX%YxI z9+ZfyN!QU3nEai;Hi3vYmxIY6JRVm8Qyqwkd=PSxSQ7Tm!$d)hQl&L}0kS`^B$bNy zWPOmENnsm3TdYJd`u%(Vtn(h4CTNKnaqa{ zGhi8=g(zS;mm|aI2#)X=hzw?PFxe<5v06u>YB_F#0^r_CfP-)pGMvq1(-~Y8Krj(5 zohOG`bPUE|CKqS26ewpDL@1#IU5Unz&dLOZ0Vo{yL1BiEoQ}#c4xPp2$mu+Ur2xnn zkHKRxxiUG!428-03pIoa1ap)ok5RmYeWCc^ptVPYYT;SIl+gvFzz0yuyfP^vMF zUiV%Vp;X~g5;gIOa5!8J0<$Ov| zvj?b#FCuW1)DRIGO}vn1N{VXoG&eX^FuW|mN*%CBGWGmO*GusY!%xFQ5U(_=s8n;~ z@=^J45FMI`W9C4>Z&)RdMb$AlnDCL7dMj7{$#ThIADM#31j40>E!r1~wP4S3&PKs}a6T6#j*uk#+bBBLL{JARoo= z7+qs@eG~&9WjxkhV|0BK10Q8P)?NQMx~$*7?%- Date: Sat, 1 Aug 2026 16:58:55 +0200 Subject: [PATCH 099/477] quitoxic reeds grow in dragonrot --- .../dafuqs/spectrum/blocks/FluidLogging.java | 122 ++++++++++-------- .../blocks/boom/ThreatConfluxBlock.java | 9 +- .../conditional/MermaidsBrushBlock.java | 7 +- .../conditional/QuitoxicReedsBlock.java | 60 +++++---- .../blocks/fluid/DragonrotFluidBlock.java | 2 +- .../registries/SpectrumBlockTags.java | 1 + 6 files changed, 110 insertions(+), 91 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/FluidLogging.java b/src/main/java/de/dafuqs/spectrum/blocks/FluidLogging.java index d1c1417ff2..44925eedbc 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/FluidLogging.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/FluidLogging.java @@ -17,21 +17,25 @@ import org.jspecify.annotations.Nullable; import java.util.*; +import java.util.function.*; public class FluidLogging { public enum State implements StringRepresentable { - NOT_LOGGED("none", 0), - WATER("water", 0), - LIQUID_CRYSTAL("liquid_crystal", SpectrumFluids.LIQUID_CRYSTAL_LIGHT_LEVEL), - MIDNIGHT_SOLUTION("midnight_solution", SpectrumFluids.MIDNIGHT_SOLUTION_LIGHT_LEVEL), - DRAGONROT("dragonrot", SpectrumFluids.DRAGONROT_LIGHT_LEVEL); + NOT_LOGGED("none", () -> Fluids.EMPTY, 0), + WATER("water", () -> Fluids.WATER, 0), + LAVA("lava", () -> Fluids.LAVA, 15), + LIQUID_CRYSTAL("liquid_crystal", SpectrumFluids.LIQUID_CRYSTAL::get, SpectrumFluids.LIQUID_CRYSTAL_LIGHT_LEVEL), + MIDNIGHT_SOLUTION("midnight_solution", SpectrumFluids.MIDNIGHT_SOLUTION::get, SpectrumFluids.MIDNIGHT_SOLUTION_LIGHT_LEVEL), + DRAGONROT("dragonrot", SpectrumFluids.DRAGONROT::get, SpectrumFluids.DRAGONROT_LIGHT_LEVEL); private final String name; + private final Supplier fluid; private final int luminance; - State(String name, int luminance) { + State(String name, Supplier fluid, int luminance) { this.name = name; + this.fluid = fluid; this.luminance = luminance; } @@ -41,23 +45,7 @@ public String getSerializedName() { } public FluidState getFluidState() { - switch (this) { - case LIQUID_CRYSTAL -> { - return SpectrumFluids.LIQUID_CRYSTAL.get().getSource(false); - } - case MIDNIGHT_SOLUTION -> { - return SpectrumFluids.MIDNIGHT_SOLUTION.get().getSource(false); - } - case DRAGONROT -> { - return SpectrumFluids.MIDNIGHT_SOLUTION.get().getSource(false); - } - case WATER -> { - return Fluids.WATER.getSource(false); - } - default -> { - return Fluids.EMPTY.defaultFluidState(); - } - } + return this.fluid.get().defaultFluidState(); } public int getLuminance() { @@ -70,18 +58,39 @@ public String toString() { } public void onEntityCollision(BlockState state, Level world, BlockPos pos, Entity entity) { - if (this == State.LIQUID_CRYSTAL) { - SpectrumFluids.LIQUID_CRYSTAL.get().onEntityCollision(state, world, pos, entity); + if(this.fluid.get() instanceof SpectrumFluid spectrumFluid) { + spectrumFluid.onEntityCollision(state, world, pos, entity); } - if (this == State.MIDNIGHT_SOLUTION) { - SpectrumFluids.MIDNIGHT_SOLUTION.get().onEntityCollision(state, world, pos, entity); + } + + public void updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { + Fluid fluid = this.fluid.get(); + if(fluid == Fluids.EMPTY) { + return; + } + world.scheduleTick(pos, fluid, fluid.getTickDelay(world)); + } + + public FluidLogging.State getStateForPos(Level world, BlockPos blockPos) { + FluidState fluidState = world.getFluidState(blockPos); + if (fluidState.is(FluidTags.WATER) && fluidState.getAmount() == 8) { + return FluidLogging.State.WATER; + } else if (fluidState.getType().equals(Fluids.LAVA.getSource())) { + return FluidLogging.State.LAVA; + } else if (fluidState.getType().equals(SpectrumFluids.LIQUID_CRYSTAL.get().getSource())) { + return FluidLogging.State.LIQUID_CRYSTAL; + } else if (fluidState.getType().equals(SpectrumFluids.MIDNIGHT_SOLUTION.get().getSource())) { + return FluidLogging.State.MIDNIGHT_SOLUTION; + } else if (fluidState.getType().equals(SpectrumFluids.DRAGONROT.get().getSource())) { + return FluidLogging.State.DRAGONROT; } + return State.NOT_LOGGED; } } - public static final EnumProperty ANY_INCLUDING_NONE = EnumProperty.create("fluid_logged", State.class); - public static final EnumProperty ANY_EXCLUDING_NONE = EnumProperty.create("fluid_logged", State.class, State.WATER, State.LIQUID_CRYSTAL); - public static final EnumProperty NONE_AND_CRYSTAL = EnumProperty.create("fluid_logged", State.class, State.NOT_LOGGED, State.LIQUID_CRYSTAL); + // public static final EnumProperty ANY = EnumProperty.create("fluid_logged", State.class); + public static final EnumProperty AIR_WATER_LIQUID_CRYSTAL_DRAGONROT = EnumProperty.create("fluid_logged", State.class, State.NOT_LOGGED, State.WATER, State.LIQUID_CRYSTAL, State.DRAGONROT); + public static final EnumProperty WATER_LIQUID_CRYSTAL = EnumProperty.create("fluid_logged", State.class, State.WATER, State.LIQUID_CRYSTAL); public interface SpectrumFluidLoggable extends SpectrumFluidDrainable, SpectrumFluidFillable { @@ -89,23 +98,32 @@ public interface SpectrumFluidLoggable extends SpectrumFluidDrainable, SpectrumF public interface SpectrumFluidFillable extends LiquidBlockContainer { + EnumProperty getFillableFluids(); + @Override default boolean canPlaceLiquid(@Nullable Player player, BlockGetter world, BlockPos pos, BlockState state, Fluid fluid) { - return state.getValue(ANY_INCLUDING_NONE) == State.NOT_LOGGED && (fluid == Fluids.WATER || fluid == SpectrumFluids.LIQUID_CRYSTAL.get() || fluid == SpectrumFluids.MIDNIGHT_SOLUTION.get()); + return state.getValue(getFillableFluids()) == State.NOT_LOGGED + && (fluid == Fluids.WATER || fluid == Fluids.LAVA || fluid == SpectrumFluids.LIQUID_CRYSTAL.get() || fluid == SpectrumFluids.MIDNIGHT_SOLUTION.get() || fluid == SpectrumFluids.DRAGONROT.get()); } @Override default boolean placeLiquid(LevelAccessor world, BlockPos pos, BlockState state, FluidState fluidState) { - if (state.getValue(ANY_INCLUDING_NONE) == State.NOT_LOGGED) { + if (state.getValue(getFillableFluids()) == State.NOT_LOGGED) { if (!world.isClientSide()) { if (fluidState.getType() == Fluids.WATER) { - world.setBlock(pos, state.setValue(ANY_INCLUDING_NONE, State.WATER), Block.UPDATE_ALL); + world.setBlock(pos, state.setValue(getFillableFluids(), State.WATER), Block.UPDATE_ALL); + world.scheduleTick(pos, fluidState.getType(), fluidState.getType().getTickDelay(world)); + } else if (fluidState.getType() == Fluids.LAVA) { + world.setBlock(pos, state.setValue(getFillableFluids(), State.LAVA), Block.UPDATE_ALL); world.scheduleTick(pos, fluidState.getType(), fluidState.getType().getTickDelay(world)); } else if (fluidState.getType() == SpectrumFluids.LIQUID_CRYSTAL.get()) { - world.setBlock(pos, state.setValue(ANY_INCLUDING_NONE, State.LIQUID_CRYSTAL), Block.UPDATE_ALL); + world.setBlock(pos, state.setValue(getFillableFluids(), State.LIQUID_CRYSTAL), Block.UPDATE_ALL); world.scheduleTick(pos, fluidState.getType(), fluidState.getType().getTickDelay(world)); } else if (fluidState.getType() == SpectrumFluids.MIDNIGHT_SOLUTION.get()) { - world.setBlock(pos, state.setValue(ANY_INCLUDING_NONE, State.MIDNIGHT_SOLUTION), Block.UPDATE_ALL); + world.setBlock(pos, state.setValue(getFillableFluids(), State.MIDNIGHT_SOLUTION), Block.UPDATE_ALL); + world.scheduleTick(pos, fluidState.getType(), fluidState.getType().getTickDelay(world)); + } else if (fluidState.getType() == SpectrumFluids.DRAGONROT.get()) { + world.setBlock(pos, state.setValue(getFillableFluids(), State.DRAGONROT), Block.UPDATE_ALL); world.scheduleTick(pos, fluidState.getType(), fluidState.getType().getTickDelay(world)); } } @@ -120,31 +138,25 @@ default boolean placeLiquid(LevelAccessor world, BlockPos pos, BlockState state, public interface SpectrumFluidDrainable extends BucketPickup { + EnumProperty getDrainableFluids(); + @Override default ItemStack pickupBlock(@Nullable Player player, LevelAccessor world, BlockPos pos, BlockState state) { - State fluidLog = state.getValue(ANY_INCLUDING_NONE); + State fluidLog = state.getValue(getDrainableFluids()); - if (fluidLog == State.WATER) { - world.setBlock(pos, state.setValue(ANY_INCLUDING_NONE, State.NOT_LOGGED), Block.UPDATE_ALL); - if (!state.canSurvive(world, pos)) { - world.destroyBlock(pos, true); - } - return new ItemStack(Items.WATER_BUCKET); - } else if (fluidLog == State.LIQUID_CRYSTAL) { - world.setBlock(pos, state.setValue(ANY_INCLUDING_NONE, State.NOT_LOGGED), Block.UPDATE_ALL); - if (!state.canSurvive(world, pos)) { - world.destroyBlock(pos, true); - } - return new ItemStack(SpectrumItems.LIQUID_CRYSTAL_BUCKET.get()); - } else if (fluidLog == State.MIDNIGHT_SOLUTION) { - world.setBlock(pos, state.setValue(ANY_INCLUDING_NONE, State.NOT_LOGGED), Block.UPDATE_ALL); - if (!state.canSurvive(world, pos)) { - world.destroyBlock(pos, true); - } - return new ItemStack(SpectrumItems.MIDNIGHT_SOLUTION_BUCKET.get()); + Fluid fluid = fluidLog.fluid.get(); + if(fluid == Fluids.EMPTY) { + return ItemStack.EMPTY; + } + if(!getDrainableFluids().getPossibleValues().contains(State.NOT_LOGGED)) { + return ItemStack.EMPTY; } - return ItemStack.EMPTY; + world.setBlock(pos, state.setValue(getDrainableFluids(), State.NOT_LOGGED), Block.UPDATE_ALL); + if (!state.canSurvive(world, pos)) { + world.destroyBlock(pos, true); + } + return new ItemStack(fluid.getBucket()); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/boom/ThreatConfluxBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/boom/ThreatConfluxBlock.java index aff0df4c8b..d25dbe52ac 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/boom/ThreatConfluxBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/boom/ThreatConfluxBlock.java @@ -23,7 +23,7 @@ import org.jspecify.annotations.Nullable; @NullMarked -public class ThreatConfluxBlock extends PlacedItemBlock implements FluidLogging.SpectrumFluidLoggable { +public class ThreatConfluxBlock extends PlacedItemBlock { public static final MapCodec CODEC = simpleCodec(ThreatConfluxBlock::new); @@ -57,11 +57,10 @@ public boolean explodesWhenBroken() { public static final VoxelShape ARMED_SHAPE = Block.box(0, 0, 0, 16, 0.125, 16); public static final EnumProperty ARMED = EnumProperty.create("armed", ArmedState.class); - public static final EnumProperty LOGGED = FluidLogging.ANY_INCLUDING_NONE; public ThreatConfluxBlock(BlockBehaviour.Properties properties) { super(properties); - registerDefaultState(this.stateDefinition.any().setValue(ARMED, ArmedState.NOT_ARMED).setValue(LOGGED, FluidLogging.State.NOT_LOGGED)); + registerDefaultState(this.stateDefinition.any().setValue(ARMED, ArmedState.NOT_ARMED)); } @Override @@ -119,8 +118,6 @@ public void entityInside(BlockState state, Level level, BlockPos pos, Entity ent level.scheduleTick(pos, this, TICKS_TO_DETONATE); } - state.getValue(LOGGED).onEntityCollision(state, level, pos, entity); - super.entityInside(state, level, pos, entity); } @@ -145,7 +142,7 @@ public void tick(BlockState state, ServerLevel world, BlockPos pos, RandomSource @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { super.createBlockStateDefinition(builder); - builder.add(ARMED, LOGGED); + builder.add(ARMED); } protected void explode(ServerLevel level, BlockPos pos) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/MermaidsBrushBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/MermaidsBrushBlock.java index de5d763dcc..d057b460c5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/MermaidsBrushBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/MermaidsBrushBlock.java @@ -29,7 +29,7 @@ public class MermaidsBrushBlock extends BushBlock implements BonemealableBlock, public static final MapCodec CODEC = simpleCodec(MermaidsBrushBlock::new); private static final VoxelShape SHAPE = Block.box(1.0, 0.0, 1.0, 15.0, 16.0, 15.0); - public static final EnumProperty LOGGED = FluidLogging.ANY_EXCLUDING_NONE; + public static final EnumProperty LOGGED = FluidLogging.WATER_LIQUID_CRYSTAL; public static final IntegerProperty AGE = BlockStateProperties.AGE_7; public MermaidsBrushBlock(Properties settings) { @@ -38,6 +38,11 @@ public MermaidsBrushBlock(Properties settings) { RevelationAware.register(this); } + @Override + public EnumProperty getFillableFluids() { + return LOGGED; + } + @Override public MapCodec codec() { return CODEC; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java index 87ab964146..6a80881168 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java @@ -31,7 +31,7 @@ public class QuitoxicReedsBlock extends Block implements RevelationAware, FluidL public static final MapCodec CODEC = simpleCodec(QuitoxicReedsBlock::new); - public static final EnumProperty LOGGED = FluidLogging.ANY_INCLUDING_NONE; + public static final EnumProperty LOGGED = FluidLogging.AIR_WATER_LIQUID_CRYSTAL_DRAGONROT; public static final IntegerProperty AGE = BlockStateProperties.AGE_7; // 'always drop' has no cloak and therefore drops normally even when broken 'via the world' @@ -68,6 +68,7 @@ public Map getBlockStateCloaks() { map.put(this.defaultBlockState().setValue(LOGGED, FluidLogging.State.NOT_LOGGED).setValue(AGE, i), Blocks.AIR.defaultBlockState()); map.put(this.defaultBlockState().setValue(LOGGED, FluidLogging.State.WATER).setValue(AGE, i), Blocks.WATER.defaultBlockState()); map.put(this.defaultBlockState().setValue(LOGGED, FluidLogging.State.LIQUID_CRYSTAL).setValue(AGE, i), SpectrumBlocks.LIQUID_CRYSTAL.get().defaultBlockState()); + map.put(this.defaultBlockState().setValue(LOGGED, FluidLogging.State.DRAGONROT).setValue(AGE, i), SpectrumBlocks.DRAGONROT.get().defaultBlockState()); } return map; } @@ -86,22 +87,14 @@ public void tick(BlockState state, ServerLevel world, BlockPos pos, RandomSource @Override public @Nullable BlockState getStateForPlacement(BlockPlaceContext ctx) { - FluidState fluidState = ctx.getLevel().getFluidState(ctx.getClickedPos()); - if (fluidState.is(FluidTags.WATER) && fluidState.getAmount() == 8) { - return super.getStateForPlacement(ctx).setValue(LOGGED, FluidLogging.State.WATER); - } else if (fluidState.getType() == SpectrumFluids.LIQUID_CRYSTAL.get()) { - return super.getStateForPlacement(ctx).setValue(LOGGED, FluidLogging.State.LIQUID_CRYSTAL); - } else { - return super.getStateForPlacement(ctx).setValue(LOGGED, FluidLogging.State.NOT_LOGGED); - } + return getStateForPos(ctx.getLevel(), ctx.getClickedPos()); } @Override public void playerDestroy(Level level, Player player, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, ItemStack tool) { // since the quitoxic reeds are stacked and break from bottom to top - // bot the player that broke the other blocks is not propagated we - // have to apply a workaround here by counting the reeds above this - // and dropping that many times loot to account for it + // the player that broke the other blocks is not propagated + // we have to apply a workaround here by having a special "not cloaked" property for (int i = 1; i < MAX_GROWTH_HEIGHT_CRYSTAL; i++) { BlockPos offsetPos = pos.offset(0, i, 0); if (level.getBlockState(offsetPos).is(this)) { @@ -116,16 +109,12 @@ public void playerDestroy(Level level, Player player, BlockPos pos, BlockState s @Override public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { - FluidLogging.State fluidLog = state.getValue(LOGGED); - if (fluidLog == FluidLogging.State.WATER) { - world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); - } else if (fluidLog == FluidLogging.State.LIQUID_CRYSTAL) { - world.scheduleTick(pos, SpectrumFluids.LIQUID_CRYSTAL.get(), SpectrumFluids.LIQUID_CRYSTAL.get().getTickDelay(world)); - } + state.getValue(LOGGED).updateShape(state, direction, neighborState, world, pos, neighborPos); if (!state.canSurvive(world, pos)) { world.scheduleTick(pos, this, 1); } + return super.updateShape(state, direction, neighborState, world, pos, neighborPos); } @@ -155,7 +144,8 @@ public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random for (height = 1; world.getBlockState(pos.below(height)).is(this); ) height++; - boolean bottomLiquidCrystalLogged = world.getBlockState(pos.below(height - 1)).getValue(LOGGED) == FluidLogging.State.LIQUID_CRYSTAL; + FluidLogging.State loggingState = world.getBlockState(pos.below(height - 1)).getValue(LOGGED); + boolean bottomLiquidCrystalLogged = loggingState == FluidLogging.State.LIQUID_CRYSTAL; // grows taller on liquid crystal if (height < MAX_GROWTH_HEIGHT_WATER || (bottomLiquidCrystalLogged && height < MAX_GROWTH_HEIGHT_CRYSTAL)) { @@ -164,13 +154,18 @@ public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random // consume 1 block close to the reed when growing. // if the quitoxic reeds are growing in liquid crystal: 1/4 chance to consume // search for block it could be planted on. 1 block => 1 quitoxic reed - Optional posToConsumeBlock = searchConsumableBlock(world, pos.below(height), SpectrumBlockTags.QUITOXIC_REEDS_PLANTABLE, random); + Optional posToConsumeBlock = searchConsumableBlock(world, pos.below(height), SpectrumBlockTags.QUITOXIC_REEDS_CONSUMABLE, random); if (posToConsumeBlock.isEmpty()) { return; } if (!bottomLiquidCrystalLogged || random.nextInt(4) == 0) { - world.setBlockAndUpdate(posToConsumeBlock.get(), bottomLiquidCrystalLogged ? SpectrumBlocks.SLUSH.get().defaultBlockState() : Blocks.MUD.defaultBlockState()); + BlockState replacement = switch (loggingState) { + case FluidLogging.State.LIQUID_CRYSTAL -> SpectrumBlocks.SLUSH.get().defaultBlockState(); + case FluidLogging.State.DRAGONROT -> SpectrumBlocks.ROTTEN_GROUND.get().defaultBlockState(); + default -> Blocks.CLAY.defaultBlockState(); + }; + world.setBlockAndUpdate(posToConsumeBlock.get(), replacement); world.playSound(null, posToConsumeBlock.get(), SoundEvents.GRAVEL_BREAK, SoundSource.BLOCKS, 1.0F, 1.0F); } @@ -207,12 +202,11 @@ private Optional searchConsumableBlock(Level world, BlockPos origin, T } } + public BlockState getStateForPos(Level world, BlockPos blockPos) { - FluidState fluidState = world.getFluidState(blockPos); - if (fluidState.is(FluidTags.WATER) && fluidState.getAmount() == 8) { - return defaultBlockState().setValue(LOGGED, FluidLogging.State.WATER); - } else if (fluidState.getType().equals(SpectrumFluids.LIQUID_CRYSTAL.get().getSource())) { - return defaultBlockState().setValue(LOGGED, FluidLogging.State.LIQUID_CRYSTAL); + FluidLogging.State fluidState = defaultBlockState().getValue(LOGGED).getStateForPos(world, blockPos); + if(LOGGED.getPossibleValues().contains(fluidState)) { + return defaultBlockState().setValue(LOGGED, fluidState); } return defaultBlockState(); } @@ -264,7 +258,7 @@ private boolean isValidBlockForPlanting(LevelReader world, BlockPos pos) { } FluidState fluidState = world.getFluidState(pos); - return fluidState.getAmount() == 8 && (fluidState.is(FluidTags.WATER) || state.is(SpectrumBlocks.LIQUID_CRYSTAL)); + return fluidState.getAmount() == 8 && (fluidState.is(FluidTags.WATER) || state.is(SpectrumBlocks.LIQUID_CRYSTAL) || state.is(SpectrumBlocks.DRAGONROT)); } private boolean canGrow(LevelReader world, BlockPos pos) { @@ -273,7 +267,7 @@ private boolean canGrow(LevelReader world, BlockPos pos) { return true; } FluidState fluidState = world.getFluidState(pos); - return fluidState.getAmount() == 8 && (fluidState.is(FluidTags.WATER) || state.is(SpectrumBlocks.LIQUID_CRYSTAL)); + return fluidState.getAmount() == 8 && (fluidState.is(FluidTags.WATER) || state.is(SpectrumBlocks.LIQUID_CRYSTAL) || state.is(SpectrumBlocks.DRAGONROT)); } @Override @@ -281,4 +275,14 @@ public float getMaxHorizontalOffset() { return 0.15F; } + @Override + public EnumProperty getFillableFluids() { + return LOGGED; + } + + @Override + public EnumProperty getDrainableFluids() { + return LOGGED; + } + } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/DragonrotFluidBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/DragonrotFluidBlock.java index 07170e11d1..3610be49f3 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fluid/DragonrotFluidBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fluid/DragonrotFluidBlock.java @@ -58,7 +58,7 @@ public boolean isPathfindable(BlockState state, PathComputationType type) { } else if (otherState.is(SpectrumFluidTags.LIQUID_CRYSTAL)) { return Blocks.TUFF.defaultBlockState(); } else if (otherState.is(SpectrumFluidTags.MIDNIGHT_SOLUTION)) { - return SpectrumBlocks.ROTTEN_GROUND.get().defaultBlockState(); + return Blocks.MUD.defaultBlockState(); } return null; } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockTags.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockTags.java index 95bd859f9e..568cb18127 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockTags.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockTags.java @@ -13,6 +13,7 @@ public class SpectrumBlockTags { public static final TagKey AMARANTH_PLANTABLE = spectrum("amaranth_plantable"); public static final TagKey MERMAIDS_BRUSH_PLANTABLE = spectrum("mermaids_brush_plantable"); public static final TagKey QUITOXIC_REEDS_PLANTABLE = spectrum("quitoxic_reeds_plantable"); + public static final TagKey QUITOXIC_REEDS_CONSUMABLE = spectrum("quitoxic_reeds_consumable"); public static final TagKey SAWBLADE_HOLLY_PLANTABLE = spectrum("sawblade_holly_plantable"); public static final TagKey DOOMBLOOM_PLANTABLE = spectrum("doombloom_plantable"); public static final TagKey SNAPPING_IVY_PLANTABLE = spectrum("snapping_ivy_plantable"); From a011d32584961891d73ec73002d711d1248552d7 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 17:02:55 +0200 Subject: [PATCH 100/477] early cinderhearth via ash --- src/main/resources/assets/spectrum/lang/en_us.json | 3 ++- .../modonomicon/books/guidebook/entries/ink/cinderhearth.json | 4 ++-- .../data/spectrum/recipe/pedestal/tier3/cinderhearth_ash.json | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 78a761eed9..d0e0ec3412 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -2406,7 +2406,8 @@ "book.spectrum.guidebook.cheong.page1.text": "*It's a marmalade... It's a syrup... It's Cheong!*", "book.spectrum.guidebook.chrysocolla.page0.text": "My latest result of fermenting wine turned out a *bit* too strong.\\\nImmensely bitter and slightly acidic in taste.\\\nWhile it retains some of the properties it once resembled, it seems to me to be more useful for medicine than for drinking.", "book.spectrum.guidebook.cinderhearth.page0.text": "A state-of-my-art Blast Furnace that consumes [#](e16201)Orange Ink[#]() to smelt ores and the like.\\\n\\\nI can further enhance its abilities using [Upgrades](entry://magical_blocks/upgrades).", - "book.spectrum.guidebook.cinderhearth.knowledge_gem.text": "Putting in a [Knowledge Gem](entry://enchanting/knowledge_gem) will funnel experience gained from smelting XP into it.", + "book.spectrum.guidebook.cinderhearth.knowledge_gem.title": "Experience Handling", + "book.spectrum.guidebook.cinderhearth.knowledge_gem.text": "Putting in a [Knowledge Gem](entry://enchanting/knowledge_gem) will funnel all experience gained from smelting into the gem.", "book.spectrum.guidebook.cinderhearth.page2.text": "Upgrades must be placed on the two Chiseled Blocks.", "book.spectrum.guidebook.cinderhearth.page3.text": "- 1 Cinderhearth\n- 21 Polished Blocks\n- 6 Crest Blocks\n- 5 Glass-like Blocks\n- 2 Chiseled Blocks\n- 6 Buckets of Lava\n\n\\\n*Did it really need that [#](bb00bb)Lava[#]() underneath since I already have [#](e16201)Ink[#]()*?\\\nNo, not really. But it looks so. much. better.", "book.spectrum.guidebook.cinderhearth.page4.text": "[Upgrades](entry://magical_blocks/upgrades) placed on the [#](bb00bb)Chiseled Blocks[#]() require an additional type of [Ink](entry://ink/ink), depending on the type of Upgrade. The higher the upgrade's level, the higher the consumption.", diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/ink/cinderhearth.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/ink/cinderhearth.json index 5b6b6ecf1e..c92b47b571 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/ink/cinderhearth.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/ink/cinderhearth.json @@ -39,8 +39,8 @@ "recipe_id": "spectrum:pedestal/tier3/cinderhearth_ash" }, { - "type": "spectrum:pedestal_crafting", - "title": "container.spectrum.rei.pedestal_recipe", + "type": "modonomicon:text", + "title": "book.spectrum.guidebook.cinderhearth.knowledge_gem.title", "text": "book.spectrum.guidebook.cinderhearth.knowledge_gem.text" }, { diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/cinderhearth_ash.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/cinderhearth_ash.json index 44ecd58eab..d2ebbde2a1 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/cinderhearth_ash.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/cinderhearth_ash.json @@ -18,7 +18,7 @@ "key": { "C": "spectrum:polished_calcite", "B": "spectrum:polished_basalt", - "G": "spectrum:diamond", + "G": "minecraft:diamond", "F": "spectrum:ash" }, "result": { From e1a8baf9d075083a00396f0c94044e513e050ca6 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 17:12:56 +0200 Subject: [PATCH 101/477] bottomless bundle requires less rabbit hide --- .../spectrum/recipe/pedestal/tier2/bottomless_bundle.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier2/bottomless_bundle.json b/src/main/resources/data/spectrum/recipe/pedestal/tier2/bottomless_bundle.json index de7d9c6812..42f6f4f79a 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier2/bottomless_bundle.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier2/bottomless_bundle.json @@ -11,12 +11,13 @@ }, "experience": 2.0, "pattern": [ - "QRQ", - "RQR", - "RRR" + "Q Q", + "LQL", + "RLR" ], "key": { "Q": "spectrum:quitoxic_powder", + "L": "minecraft:leather", "R": "minecraft:rabbit_hide" }, "result": { From d8ffb6b2f511029c818fb06238268b103cc77b24 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 17:14:04 +0200 Subject: [PATCH 102/477] make indestructible mutually exclusive with sharpness --- .../spectrum/tags/enchantment/exclusive_set/indestructible.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/data/spectrum/tags/enchantment/exclusive_set/indestructible.json b/src/main/resources/data/spectrum/tags/enchantment/exclusive_set/indestructible.json index 1b8191c985..c466f47eb5 100644 --- a/src/main/resources/data/spectrum/tags/enchantment/exclusive_set/indestructible.json +++ b/src/main/resources/data/spectrum/tags/enchantment/exclusive_set/indestructible.json @@ -5,6 +5,7 @@ "minecraft:efficiency", "minecraft:mending", "minecraft:protection", + "minecraft:sharpness", "minecraft:binding_curse" ] } \ No newline at end of file From 0a9c260897afdf69bf1d6528b537b17207df7176 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 17:28:07 +0200 Subject: [PATCH 103/477] tweak inertia formula --- .../de/dafuqs/spectrum/registries/SpectrumEventListeners.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index 702594adcb..bc46adf6b5 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -986,8 +986,8 @@ private static void modifyBreakSpeed(PlayerEvent.BreakSpeed event) { inertiaLevel = Math.min(4, inertiaLevel); var inertia = handStack.getOrDefault(SpectrumDataComponentTypes.INERTIA, InertiaComponent.DEFAULT); if (state.is(inertia.lastMined())) { - var additionalSpeedPercent = 2.0 * Math.log(inertia.count()) / Math.log((6 - inertiaLevel) * (6 - inertiaLevel) + 1); - event.setNewSpeed(event.getNewSpeed() * 0.5F + (float) additionalSpeedPercent); + double additionalSpeedMultiplier = 0.5 + 2.0 * Math.log(inertia.count()) / Math.log((6 - inertiaLevel) * (6 - inertiaLevel) + 1); + event.setNewSpeed(event.getNewSpeed() * (float) additionalSpeedMultiplier); } else { event.setNewSpeed(event.getNewSpeed() / 4); } From 5514856690aafd3032715d397a843874d42bbd29 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 17:29:06 +0200 Subject: [PATCH 104/477] update pigment palette tooltip --- src/main/resources/assets/spectrum/lang/en_us.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index d0e0ec3412..0f82f10381 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -4868,7 +4868,7 @@ "item.spectrum.perturbed_eye.tooltip": "Socket into an End Portal Frame", "item.spectrum.phantom_frame": "Phantom Frame", "item.spectrum.pigment_palette": "Pigment Palette", - "item.spectrum.pigment_palette.tooltip.target": "Supplies your Tools and Trinkets with Ink", + "item.spectrum.pigment_palette.tooltip.target": "Supplies your equipment with Ink", "item.spectrum.pink_pigment": "Pink Pigment", "item.spectrum.pipe_bomb": "Pipe Bomb", "item.spectrum.pipe_bomb.tooltip": "Highly damaging to creatures – does not damage blocks", From 19cd2f8c2ce8646bd28effa564bd30cd6c61b58a Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 18:09:52 +0200 Subject: [PATCH 105/477] merge pastel branch into main --- .../colored_tree/ColoredLogBlock.java | 1 - .../colored_tree/ColoredWoodBlock.java | 2 +- .../blocks/crystallarieum/package-info.java | 8 - .../network/PastelTransmissionLogic.java | 1 + .../nodes/PastelNodeBlockEntity.java | 4 +- .../blocks/shooting_star/ShootingStar.java | 2 +- .../dafuqs/spectrum/compat/ae2/AE2Compat.java | 19 +- .../compat/botania/BotaniaCompat.java | 1 - .../spectrum/compat/create/CreateCompat.java | 12 +- .../spectrum/compat/gobber/GobberCompat.java | 27 +- .../items/tools/DraconicTwinswordItem.java | 1 + .../advancement/InkColorPredicate.java | 1 + .../spectrum/registries/SpectrumBlocks.java | 1520 +++++++++-------- .../registries/SpectrumItemGroups.java | 12 +- .../registries/SpectrumRegistryKeys.java | 1 - 15 files changed, 803 insertions(+), 809 deletions(-) delete mode 100644 src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/package-info.java diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLogBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLogBlock.java index 71212ef33f..e0891564bc 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLogBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLogBlock.java @@ -3,7 +3,6 @@ import com.mojang.serialization.*; import de.dafuqs.revelationary.api.revelations.*; import de.dafuqs.spectrum.api.ink.color.*; -import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.blocks.deeper_down.*; import de.dafuqs.spectrum.blocks.flammable.*; import it.unimi.dsi.fastutil.objects.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java index a40590479e..bcc4856dbf 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java @@ -20,7 +20,7 @@ import java.util.*; import java.util.function.*; -public class ColoredWoodBlock extends FlammableLogBlock implements RevelationAware, ColoredTree { +public class ColoredWoodBlock extends StrippingLootPillarBlock implements RevelationAware, ColoredTree { private static final Map WOOD = new Object2ObjectArrayMap<>(); protected final InkColor color; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/package-info.java deleted file mode 100644 index d33b9293b3..0000000000 --- a/src/main/java/de/dafuqs/spectrum/blocks/crystallarieum/package-info.java +++ /dev/null @@ -1,8 +0,0 @@ -@NullMarked -@MethodsReturnNonnullByDefault -@FieldsAreNonnullByDefault -package de.dafuqs.spectrum.blocks.crystallarieum; - -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index 17b633d1da..818e918ed2 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -13,6 +13,7 @@ import net.neoforged.neoforge.registries.*; import org.jetbrains.annotations.*; import org.jgrapht.*; +import org.jgrapht.Graph; import org.jgrapht.alg.interfaces.*; import org.jgrapht.alg.shortestpath.*; import org.jgrapht.graph.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java index 7965858597..6647c59304 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java @@ -516,8 +516,8 @@ public int getDrawnSlots() { } @Override - public void writeClientSideData(@NotNull AbstractContainerMenu menu, @NotNull RegistryFriendlyByteBuf buffer) { - FilterConfigurable.ExtendedDataWithPos.PACKET_CODEC.encode(buffer, new FilterConfigurable.ExtendedDataWithPos(this.getBlockPos(), this)); + public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { + ExtendedDataWithPos.STREAM_CODEC.encode(buffer, new FilterConfigurable.ExtendedDataWithPos(this.getBlockPos(), this)); } public boolean equals(Object obj) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStar.java b/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStar.java index fc0725b625..f160516728 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStar.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStar.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.blocks.shooting_star; import com.mojang.serialization.*; -import de.dafuqs.spectrum.api.energy.color.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; import io.netty.buffer.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java b/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java index 4a6b4cfb7d..0893511d51 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java @@ -1,10 +1,7 @@ package de.dafuqs.spectrum.compat.ae2; import de.dafuqs.fractal.api.*; -import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.api.item_group.*; -import de.dafuqs.spectrum.blocks.crystallarieum.*; -import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.gemstone.*; import de.dafuqs.spectrum.compat.*; import de.dafuqs.spectrum.compat.create.*; @@ -26,15 +23,15 @@ public class AE2Compat extends SpectrumIntegrationPacks.ModIntegrationPack { - public static DeferredBlock SMALL_CERTUS_QUARTZ_BUD = SpectrumBlocks.register(cluster(blockWithItem("small_certus_quartz_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).destroyTime(1.0f).mapColor(MapColor.TERRACOTTA_WHITE).requiresCorrectToolForDrops().noOcclusion(), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.YELLOW), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static DeferredBlock LARGE_CERTUS_QUARTZ_BUD = SpectrumBlocks.register(cluster(blockWithItem("large_certus_quartz_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_CERTUS_QUARTZ_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.YELLOW), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static DeferredBlock CERTUS_QUARTZ_CLUSTER = SpectrumBlocks.register(cluster(blockWithItem("certus_quartz_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_CERTUS_QUARTZ_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.YELLOW), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static DeferredBlock SMALL_FLUIX_BUD = SpectrumBlocks.register(cluster(blockWithItem("small_fluix_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).destroyTime(1.0f).mapColor(Blocks.PURPLE_CONCRETE.defaultMapColor()).requiresCorrectToolForDrops().noOcclusion(), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.YELLOW), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static DeferredBlock LARGE_FLUIX_BUD = SpectrumBlocks.register(cluster(blockWithItem("large_fluix_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_FLUIX_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.YELLOW), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static DeferredBlock FLUIX_CLUSTER = SpectrumBlocks.register(cluster(blockWithItem("fluix_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_FLUIX_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.YELLOW), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static DeferredBlock SMALL_CERTUS_QUARTZ_BUD = SpectrumBlocks.register(cluster(blockWithItem("small_certus_quartz_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).destroyTime(1.0f).mapColor(MapColor.TERRACOTTA_WHITE).requiresCorrectToolForDrops().noOcclusion(), SpectrumClusterBlock.GrowthStage.SMALL)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static DeferredBlock LARGE_CERTUS_QUARTZ_BUD = SpectrumBlocks.register(cluster(blockWithItem("large_certus_quartz_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_CERTUS_QUARTZ_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static DeferredBlock CERTUS_QUARTZ_CLUSTER = SpectrumBlocks.register(cluster(blockWithItem("certus_quartz_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_CERTUS_QUARTZ_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static DeferredBlock SMALL_FLUIX_BUD = SpectrumBlocks.register(cluster(blockWithItem("small_fluix_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).destroyTime(1.0f).mapColor(Blocks.PURPLE_CONCRETE.defaultMapColor()).requiresCorrectToolForDrops().noOcclusion(), SpectrumClusterBlock.GrowthStage.SMALL)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static DeferredBlock LARGE_FLUIX_BUD = SpectrumBlocks.register(cluster(blockWithItem("large_fluix_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_FLUIX_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static DeferredBlock FLUIX_CLUSTER = SpectrumBlocks.register(cluster(blockWithItem("fluix_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_FLUIX_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static DeferredBlock PURE_CERTUS_QUARTZ_BLOCK = SpectrumBlocks.register(simple(blockWithItem("pure_certus_quartz_block", () -> new Block(BlockBehaviour.Properties.of().mapColor(MapColor.SAND).strength(0.3F).sound(SoundType.GLASS)), InkColors.YELLOW))); - public static DeferredBlock PURE_FLUIX_BLOCK = SpectrumBlocks.register(simple(blockWithItem("pure_fluix_block", () -> new Block(BlockBehaviour.Properties.of().mapColor(MapColor.SAND).strength(0.3F).sound(SoundType.GLASS)), InkColors.YELLOW))); + public static DeferredBlock PURE_CERTUS_QUARTZ_BLOCK = SpectrumBlocks.register(simple(blockWithItem("pure_certus_quartz_block", () -> new Block(BlockBehaviour.Properties.of().mapColor(MapColor.SAND).strength(0.3F).sound(SoundType.GLASS))))); + public static DeferredBlock PURE_FLUIX_BLOCK = SpectrumBlocks.register(simple(blockWithItem("pure_fluix_block", () -> new Block(BlockBehaviour.Properties.of().mapColor(MapColor.SAND).strength(0.3F).sound(SoundType.GLASS))))); public static DeferredItem PURE_CERTUS_QUARTZ = SpectrumItems.register("pure_certus_quartz", () -> new Item(IS.of())); public static DeferredItem PURE_FLUIX = SpectrumItems.register("pure_fluix", () -> new Item(IS.of())); diff --git a/src/main/java/de/dafuqs/spectrum/compat/botania/BotaniaCompat.java b/src/main/java/de/dafuqs/spectrum/compat/botania/BotaniaCompat.java index a4b7e42c75..7dc0b1b707 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/botania/BotaniaCompat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/botania/BotaniaCompat.java @@ -3,7 +3,6 @@ import com.mojang.datafixers.util.*; import de.dafuqs.fractal.api.*; import de.dafuqs.spectrum.api.color.*; -import de.dafuqs.spectrum.api.energy.color.*; import de.dafuqs.spectrum.api.interaction.*; import de.dafuqs.spectrum.api.item_group.*; import de.dafuqs.spectrum.compat.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/create/CreateCompat.java b/src/main/java/de/dafuqs/spectrum/compat/create/CreateCompat.java index 30d34a4238..eda01dc18e 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/create/CreateCompat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/create/CreateCompat.java @@ -1,11 +1,11 @@ package de.dafuqs.spectrum.compat.create; import com.simibubi.create.api.event.*; -import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.fractal.api.*; +import de.dafuqs.spectrum.api.item_group.*; import de.dafuqs.spectrum.blocks.fluid.*; import de.dafuqs.spectrum.blocks.gemstone.*; import de.dafuqs.spectrum.compat.*; -import de.dafuqs.spectrum.compat.botania.*; import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.registries.client.*; import net.minecraft.client.renderer.*; @@ -29,10 +29,10 @@ public class CreateCompat extends SpectrumIntegrationPacks.ModIntegrationPack { public static DeferredItem PURE_ZINC = SpectrumItems.register("pure_zinc", () -> new Item(IS.of())); - public static DeferredBlock SMALL_ZINC_BUD = SpectrumBlocks.register(cluster(blockWithItem("small_zinc_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).destroyTime(1.0f).mapColor(Blocks.LIGHT_GRAY_CONCRETE.defaultMapColor()).requiresCorrectToolForDrops().noOcclusion(), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.BROWN), ModelTemplates.CROSS)); - public static DeferredBlock LARGE_ZINC_BUD = SpectrumBlocks.register(cluster(blockWithItem("large_zinc_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_ZINC_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static DeferredBlock ZINC_CLUSTER = SpectrumBlocks.register(cluster(blockWithItem("zinc_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_ZINC_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static DeferredBlock PURE_ZINC_BLOCK = SpectrumBlocks.register(simple(blockWithItem("pure_zinc_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BLOCK)), InkColors.BROWN))); + public static DeferredBlock SMALL_ZINC_BUD = SpectrumBlocks.register(cluster(blockWithItem("small_zinc_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).destroyTime(1.0f).mapColor(Blocks.LIGHT_GRAY_CONCRETE.defaultMapColor()).requiresCorrectToolForDrops().noOcclusion(), SpectrumClusterBlock.GrowthStage.SMALL)), ModelTemplates.CROSS)); + public static DeferredBlock LARGE_ZINC_BUD = SpectrumBlocks.register(cluster(blockWithItem("large_zinc_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_ZINC_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static DeferredBlock ZINC_CLUSTER = SpectrumBlocks.register(cluster(blockWithItem("zinc_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_ZINC_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static DeferredBlock PURE_ZINC_BLOCK = SpectrumBlocks.register(simple(blockWithItem("pure_zinc_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BLOCK))))); @Override public void register(IEventBus modBus) { diff --git a/src/main/java/de/dafuqs/spectrum/compat/gobber/GobberCompat.java b/src/main/java/de/dafuqs/spectrum/compat/gobber/GobberCompat.java index d975548484..64e959370d 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/gobber/GobberCompat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/gobber/GobberCompat.java @@ -1,6 +1,7 @@ package de.dafuqs.spectrum.compat.gobber; -import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.fractal.api.*; +import de.dafuqs.spectrum.api.item_group.*; import de.dafuqs.spectrum.blocks.gemstone.*; import de.dafuqs.spectrum.compat.*; import de.dafuqs.spectrum.registries.*; @@ -22,19 +23,19 @@ public class GobberCompat extends SpectrumIntegrationPacks.ModIntegrationPack { - public static DeferredBlock SMALL_GLOBETTE_BUD = SpectrumBlocks.register(cluster(blockWithItem("small_globette_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).destroyTime(1.0f).mapColor(Blocks.BLUE_CONCRETE.defaultMapColor()).requiresCorrectToolForDrops().noOcclusion(), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.BLUE), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static DeferredBlock LARGE_GLOBETTE_BUD = SpectrumBlocks.register(cluster(blockWithItem("large_globette_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GLOBETTE_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.BLUE), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static DeferredBlock GLOBETTE_CLUSTER = SpectrumBlocks.register(cluster(blockWithItem("globette_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GLOBETTE_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.BLUE), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static DeferredBlock SMALL_GLOBETTE_NETHER_BUD = SpectrumBlocks.register(cluster(blockWithItem("small_globette_nether_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).destroyTime(1.0f).mapColor(Blocks.RED_CONCRETE.defaultMapColor()).requiresCorrectToolForDrops().noOcclusion(), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.RED), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static DeferredBlock LARGE_GLOBETTE_NETHER_BUD = SpectrumBlocks.register(cluster(blockWithItem("large_globette_nether_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GLOBETTE_NETHER_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.RED), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static DeferredBlock GLOBETTE_NETHER_CLUSTER = SpectrumBlocks.register(cluster(blockWithItem("globette_nether_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GLOBETTE_NETHER_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.RED), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static DeferredBlock SMALL_GLOBETTE_END_BUD = SpectrumBlocks.register(cluster(blockWithItem("small_globette_end_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).destroyTime(1.0f).mapColor(Blocks.GREEN_CONCRETE.defaultMapColor()).requiresCorrectToolForDrops().noOcclusion(), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.GREEN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static DeferredBlock LARGE_GLOBETTE_END_BUD = SpectrumBlocks.register(cluster(blockWithItem("large_globette_end_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GLOBETTE_END_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.GREEN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static DeferredBlock GLOBETTE_END_CLUSTER = SpectrumBlocks.register(cluster(blockWithItem("globette_end_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GLOBETTE_END_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.GREEN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static DeferredBlock SMALL_GLOBETTE_BUD = SpectrumBlocks.register(cluster(blockWithItem("small_globette_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).destroyTime(1.0f).mapColor(Blocks.BLUE_CONCRETE.defaultMapColor()).requiresCorrectToolForDrops().noOcclusion(), SpectrumClusterBlock.GrowthStage.SMALL)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static DeferredBlock LARGE_GLOBETTE_BUD = SpectrumBlocks.register(cluster(blockWithItem("large_globette_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GLOBETTE_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static DeferredBlock GLOBETTE_CLUSTER = SpectrumBlocks.register(cluster(blockWithItem("globette_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GLOBETTE_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static DeferredBlock SMALL_GLOBETTE_NETHER_BUD = SpectrumBlocks.register(cluster(blockWithItem("small_globette_nether_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).destroyTime(1.0f).mapColor(Blocks.RED_CONCRETE.defaultMapColor()).requiresCorrectToolForDrops().noOcclusion(), SpectrumClusterBlock.GrowthStage.SMALL)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static DeferredBlock LARGE_GLOBETTE_NETHER_BUD = SpectrumBlocks.register(cluster(blockWithItem("large_globette_nether_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GLOBETTE_NETHER_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static DeferredBlock GLOBETTE_NETHER_CLUSTER = SpectrumBlocks.register(cluster(blockWithItem("globette_nether_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GLOBETTE_NETHER_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static DeferredBlock SMALL_GLOBETTE_END_BUD = SpectrumBlocks.register(cluster(blockWithItem("small_globette_end_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).destroyTime(1.0f).mapColor(Blocks.GREEN_CONCRETE.defaultMapColor()).requiresCorrectToolForDrops().noOcclusion(), SpectrumClusterBlock.GrowthStage.SMALL)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static DeferredBlock LARGE_GLOBETTE_END_BUD = SpectrumBlocks.register(cluster(blockWithItem("large_globette_end_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GLOBETTE_END_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static DeferredBlock GLOBETTE_END_CLUSTER = SpectrumBlocks.register(cluster(blockWithItem("globette_end_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GLOBETTE_END_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static DeferredBlock PURE_GLOBETTE_BLOCK = SpectrumBlocks.register(SpectrumBlocks.simple(blockWithItem("pure_globette_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.QUARTZ_BLOCK)), InkColors.BLUE))); - public static DeferredBlock PURE_GLOBETTE_NETHER_BLOCK = SpectrumBlocks.register(SpectrumBlocks.simple(blockWithItem("pure_globette_nether_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.QUARTZ_BLOCK)), InkColors.RED))); - public static DeferredBlock PURE_GLOBETTE_END_BLOCK = SpectrumBlocks.register(SpectrumBlocks.simple(blockWithItem("pure_globette_end_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.QUARTZ_BLOCK)), InkColors.GREEN))); + public static DeferredBlock PURE_GLOBETTE_BLOCK = SpectrumBlocks.register(SpectrumBlocks.simple(blockWithItem("pure_globette_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.QUARTZ_BLOCK))))); + public static DeferredBlock PURE_GLOBETTE_NETHER_BLOCK = SpectrumBlocks.register(SpectrumBlocks.simple(blockWithItem("pure_globette_nether_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.QUARTZ_BLOCK))))); + public static DeferredBlock PURE_GLOBETTE_END_BLOCK = SpectrumBlocks.register(SpectrumBlocks.simple(blockWithItem("pure_globette_end_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.QUARTZ_BLOCK))))); public static DeferredItem PURE_GLOBETTE = SpectrumItems.register("pure_globette", () -> new Item(IS.of())); public static DeferredItem PURE_GLOBETTE_NETHER = SpectrumItems.register("pure_globette_nether", () -> new Item(IS.of())); diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/DraconicTwinswordItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/DraconicTwinswordItem.java index ade0270d6e..d07a08622a 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/DraconicTwinswordItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/DraconicTwinswordItem.java @@ -1,5 +1,6 @@ package de.dafuqs.spectrum.items.tools; +import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.render.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/InkColorPredicate.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/InkColorPredicate.java index f2857184c7..9bf417585b 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/InkColorPredicate.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/InkColorPredicate.java @@ -4,6 +4,7 @@ import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.api.ink.color.*; +import javax.annotation.*; import java.util.*; public record InkColorPredicate(Optional color) { diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index 336b3886e5..a7e716ded8 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -30,6 +30,7 @@ import de.dafuqs.spectrum.blocks.idols.*; import de.dafuqs.spectrum.blocks.ink.gen.*; import de.dafuqs.spectrum.blocks.ink.sink.*; +import de.dafuqs.spectrum.blocks.ink.sink.CrystallarieumBlock; import de.dafuqs.spectrum.blocks.item_bowl.*; import de.dafuqs.spectrum.blocks.item_roundel.*; import de.dafuqs.spectrum.blocks.jade_vines.*; @@ -38,6 +39,7 @@ import de.dafuqs.spectrum.blocks.mob_head.*; import de.dafuqs.spectrum.blocks.particle_spawner.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; import de.dafuqs.spectrum.blocks.pedestal.*; import de.dafuqs.spectrum.blocks.potion_workshop.*; import de.dafuqs.spectrum.blocks.present.*; @@ -101,7 +103,6 @@ import static de.dafuqs.spectrum.SpectrumCommon.*; import static de.dafuqs.spectrum.data.SpectrumModelHelper.*; import static de.dafuqs.spectrum.registries.SpectrumItems.*; -import static me.shedaniel.rei.api.common.entry.comparison.EntryComparator.component; import static net.minecraft.world.level.block.Blocks.*; @SuppressWarnings({"unused"}) @@ -122,34 +123,34 @@ private static BlockBehaviour.Properties craftingBlock(MapColor mapColor, SoundT public static final DeferredRegister.Blocks REGISTRAR = DeferredRegister.createBlocks(MOD_ID); private static final DeferredWorkQueue CLIENT_QUEUE = new DeferredWorkQueue("spectrum_client"); - public static final DeferredBlock PEDESTAL_BASIC_TOPAZ = register(pedestal(blockWithItem("pedestal_basic_topaz", () -> new PedestalBlock(craftingBlock(MapColor.DIAMOND, SpectrumSoundTypes.TOPAZ_BLOCK), BuiltinPedestalVariant.BASIC_TOPAZ), block -> new PedestalBlockItem(block, IS.of(), BuiltinPedestalVariant.BASIC_TOPAZ, "item.spectrum.pedestal.tooltip.basic_topaz"), InkColors.WHITE))); - public static final DeferredBlock PEDESTAL_BASIC_AMETHYST = register(pedestal(blockWithItem("pedestal_basic_amethyst", () -> new PedestalBlock(craftingBlock(MapColor.COLOR_PURPLE, SoundType.AMETHYST), BuiltinPedestalVariant.BASIC_AMETHYST), block -> new PedestalBlockItem(block, IS.of(), BuiltinPedestalVariant.BASIC_AMETHYST, "item.spectrum.pedestal.tooltip.basic_amethyst"), InkColors.WHITE))); - public static final DeferredBlock PEDESTAL_BASIC_CITRINE = register(pedestal(blockWithItem("pedestal_basic_citrine", () -> new PedestalBlock(craftingBlock(MapColor.COLOR_YELLOW, SpectrumSoundTypes.CITRINE_BLOCK), BuiltinPedestalVariant.BASIC_CITRINE), block -> new PedestalBlockItem(block, IS.of(), BuiltinPedestalVariant.BASIC_CITRINE, "item.spectrum.pedestal.tooltip.basic_citrine"), InkColors.WHITE))); - public static final DeferredBlock PEDESTAL_ALL_BASIC = register(pedestal(blockWithItem("pedestal_all_basic", () -> new PedestalBlock(craftingBlock(MapColor.COLOR_PURPLE, SoundType.AMETHYST), BuiltinPedestalVariant.CMY), block -> new PedestalBlockItem(block, IS.of(), BuiltinPedestalVariant.CMY, "item.spectrum.pedestal.tooltip.all_basic"), InkColors.WHITE))); - public static final DeferredBlock PEDESTAL_ONYX = register(pedestal(blockWithItem("pedestal_onyx", () -> new PedestalBlock(craftingBlock(MapColor.COLOR_BLACK, SpectrumSoundTypes.ONYX_BLOCK), BuiltinPedestalVariant.ONYX), block -> new PedestalBlockItem(block, IS.of(), BuiltinPedestalVariant.ONYX, "item.spectrum.pedestal.tooltip.onyx"), InkColors.WHITE))); - public static final DeferredBlock PEDESTAL_MOONSTONE = register(pedestal(blockWithItem("pedestal_moonstone", () -> new PedestalBlock(craftingBlock(MapColor.SNOW, SpectrumSoundTypes.MOONSTONE_BLOCK), BuiltinPedestalVariant.MOONSTONE), block -> new PedestalBlockItem(block, IS.of(), BuiltinPedestalVariant.MOONSTONE, "item.spectrum.pedestal.tooltip.moonstone"), InkColors.WHITE))); + public static final DeferredBlock PEDESTAL_BASIC_TOPAZ = register(pedestal(blockWithItem("pedestal_basic_topaz", () -> new PedestalBlock(craftingBlock(MapColor.DIAMOND, SpectrumSoundTypes.TOPAZ_BLOCK), BuiltinPedestalVariant.BASIC_TOPAZ), block -> new PedestalBlockItem(block, IS.of(), BuiltinPedestalVariant.BASIC_TOPAZ, "item.spectrum.pedestal.tooltip.basic_topaz")))); + public static final DeferredBlock PEDESTAL_BASIC_AMETHYST = register(pedestal(blockWithItem("pedestal_basic_amethyst", () -> new PedestalBlock(craftingBlock(MapColor.COLOR_PURPLE, SoundType.AMETHYST), BuiltinPedestalVariant.BASIC_AMETHYST), block -> new PedestalBlockItem(block, IS.of(), BuiltinPedestalVariant.BASIC_AMETHYST, "item.spectrum.pedestal.tooltip.basic_amethyst")))); + public static final DeferredBlock PEDESTAL_BASIC_CITRINE = register(pedestal(blockWithItem("pedestal_basic_citrine", () -> new PedestalBlock(craftingBlock(MapColor.COLOR_YELLOW, SpectrumSoundTypes.CITRINE_BLOCK), BuiltinPedestalVariant.BASIC_CITRINE), block -> new PedestalBlockItem(block, IS.of(), BuiltinPedestalVariant.BASIC_CITRINE, "item.spectrum.pedestal.tooltip.basic_citrine")))); + public static final DeferredBlock PEDESTAL_ALL_BASIC = register(pedestal(blockWithItem("pedestal_all_basic", () -> new PedestalBlock(craftingBlock(MapColor.COLOR_PURPLE, SoundType.AMETHYST), BuiltinPedestalVariant.CMY), block -> new PedestalBlockItem(block, IS.of(), BuiltinPedestalVariant.CMY, "item.spectrum.pedestal.tooltip.all_basic")))); + public static final DeferredBlock PEDESTAL_ONYX = register(pedestal(blockWithItem("pedestal_onyx", () -> new PedestalBlock(craftingBlock(MapColor.COLOR_BLACK, SpectrumSoundTypes.ONYX_BLOCK), BuiltinPedestalVariant.ONYX), block -> new PedestalBlockItem(block, IS.of(), BuiltinPedestalVariant.ONYX, "item.spectrum.pedestal.tooltip.onyx")))); + public static final DeferredBlock PEDESTAL_MOONSTONE = register(pedestal(blockWithItem("pedestal_moonstone", () -> new PedestalBlock(craftingBlock(MapColor.SNOW, SpectrumSoundTypes.MOONSTONE_BLOCK), BuiltinPedestalVariant.MOONSTONE), block -> new PedestalBlockItem(block, IS.of(), BuiltinPedestalVariant.MOONSTONE, "item.spectrum.pedestal.tooltip.moonstone")))); - public static final DeferredBlock FUSION_SHRINE_BASALT = register(singleton(blockWithItem("fusion_shrine_basalt", () -> new FusionShrineBlock(craftingBlock(MapColor.COLOR_BLACK, SoundType.BASALT).lightLevel(value -> value.getValue(FusionShrineBlock.LIGHT_LEVEL))), () -> IS.of(), InkColors.GRAY), SpectrumTexturedModelProviders.FUSION_SHRINE)); - public static final DeferredBlock FUSION_SHRINE_CALCITE = register(singleton(blockWithItem("fusion_shrine_calcite", () -> new FusionShrineBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE).lightLevel(value -> value.getValue(FusionShrineBlock.LIGHT_LEVEL))), () -> IS.of(), InkColors.GRAY), SpectrumTexturedModelProviders.FUSION_SHRINE)); + public static final DeferredBlock FUSION_SHRINE_BASALT = register(singleton(blockWithItem("fusion_shrine_basalt", () -> new FusionShrineBlock(craftingBlock(MapColor.COLOR_BLACK, SoundType.BASALT).lightLevel(value -> value.getValue(FusionShrineBlock.LIGHT_LEVEL))), () -> IS.of()), SpectrumTexturedModelProviders.FUSION_SHRINE)); + public static final DeferredBlock FUSION_SHRINE_CALCITE = register(singleton(blockWithItem("fusion_shrine_calcite", () -> new FusionShrineBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE).lightLevel(value -> value.getValue(FusionShrineBlock.LIGHT_LEVEL))), () -> IS.of()), SpectrumTexturedModelProviders.FUSION_SHRINE)); - public static final DeferredBlock ENCHANTER = register(singletonWithSoup(blockWithItem("enchanter", () -> new EnchanterBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.PURPLE), ModelLocationUtils::getModelLocation)); - public static final DeferredBlock ITEM_BOWL_BASALT = register(singleton(blockWithItem("item_bowl_basalt", () -> new ItemBowlBlock(craftingBlock(MapColor.COLOR_BLACK, SoundType.BASALT)), () -> IS.of(), InkColors.PINK), TexturedModel.createDefault(b -> new TextureMapping().put(TextureSlot.TEXTURE, SpectrumCommon.locate("block/item_bowl_basalt")).put(TextureSlot.SIDE, SpectrumCommon.locate("block/polished_basalt_pillar_side")).put(SpectrumTextureSlots.BASE, SpectrumCommon.locate("block/polished_basalt")), SpectrumModelTemplates.BOWL))); - public static final DeferredBlock ITEM_BOWL_CALCITE = register(singleton(blockWithItem("item_bowl_calcite", () -> new ItemBowlBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.PINK), TexturedModel.createDefault(b -> new TextureMapping().put(TextureSlot.TEXTURE, SpectrumCommon.locate("block/item_bowl_calcite")).put(TextureSlot.SIDE, SpectrumCommon.locate("block/polished_calcite_pillar_side")).put(SpectrumTextureSlots.BASE, SpectrumCommon.locate("block/polished_calcite")), SpectrumModelTemplates.BOWL))); - public static final DeferredBlock ITEM_ROUNDEL = register(singleton(blockWithItem("item_roundel", () -> new ItemRoundelBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.PINK), SpectrumTexturedModelProviders.ROUNDEL)); - public static final DeferredBlock POTION_WORKSHOP = register(defaultNorthHorizontalFacing(blockWithItem("potion_workshop", () -> new PotionWorkshopBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.PURPLE), ModelLocationUtils::getModelLocation)); - public static final DeferredBlock CRYSTAL_APOTHECARY = register(singletonWithSoup(blockWithItem("crystal_apothecary", () -> new CrystalApothecaryBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock ENCHANTER = register(singletonWithSoup(blockWithItem("enchanter", () -> new EnchanterBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of()), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock ITEM_BOWL_BASALT = register(singleton(blockWithItem("item_bowl_basalt", () -> new ItemBowlBlock(craftingBlock(MapColor.COLOR_BLACK, SoundType.BASALT)), () -> IS.of()), TexturedModel.createDefault(b -> new TextureMapping().put(TextureSlot.TEXTURE, SpectrumCommon.locate("block/item_bowl_basalt")).put(TextureSlot.SIDE, SpectrumCommon.locate("block/polished_basalt_pillar_side")).put(SpectrumTextureSlots.BASE, SpectrumCommon.locate("block/polished_basalt")), SpectrumModelTemplates.BOWL))); + public static final DeferredBlock ITEM_BOWL_CALCITE = register(singleton(blockWithItem("item_bowl_calcite", () -> new ItemBowlBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of()), TexturedModel.createDefault(b -> new TextureMapping().put(TextureSlot.TEXTURE, SpectrumCommon.locate("block/item_bowl_calcite")).put(TextureSlot.SIDE, SpectrumCommon.locate("block/polished_calcite_pillar_side")).put(SpectrumTextureSlots.BASE, SpectrumCommon.locate("block/polished_calcite")), SpectrumModelTemplates.BOWL))); + public static final DeferredBlock ITEM_ROUNDEL = register(singleton(blockWithItem("item_roundel", () -> new ItemRoundelBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of()), SpectrumTexturedModelProviders.ROUNDEL)); + public static final DeferredBlock POTION_WORKSHOP = register(defaultNorthHorizontalFacing(blockWithItem("potion_workshop", () -> new PotionWorkshopBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of()), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock CRYSTAL_APOTHECARY = register(singletonWithSoup(blockWithItem("crystal_apothecary", () -> new CrystalApothecaryBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of()), ModelLocationUtils::getModelLocation)); // Ink Generators - public static final DeferredBlock COLOR_PICKER = register(defaultWestHorizontalFacing(blockWithItem("color_picker", () -> new ColorPickerBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); - public static final DeferredBlock TWILL = register(defaultWestHorizontalFacing(blockWithItem("twill", () -> new TwillBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); - public static final DeferredBlock VANTACLAST = register(defaultWestHorizontalFacing(blockWithItem("vantaclast", () -> new VantaclastBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); - public static final DeferredBlock DAWNBRUSH = register(defaultWestHorizontalFacing(blockWithItem("dawnbrush", () -> new DawnbrushBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock COLOR_PICKER = register(defaultWestHorizontalFacing(blockWithItem("color_picker", () -> new ColorPickerBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of()), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock TWILL = register(defaultWestHorizontalFacing(blockWithItem("twill", () -> new TwillBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of()), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock VANTACLAST = register(defaultWestHorizontalFacing(blockWithItem("vantaclast", () -> new VantaclastBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of()), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock DAWNBRUSH = register(defaultWestHorizontalFacing(blockWithItem("dawnbrush", () -> new DawnbrushBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of()), ModelLocationUtils::getModelLocation)); // Ink Sinks - public static final DeferredBlock TINTING_STATION = register(defaultWestHorizontalFacing(blockWithItem("tinting_station", () -> new TintingStationBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.GREEN), ModelLocationUtils::getModelLocation)); - public static final DeferredBlock SPIRIT_INSTILLER = register(singletonWithSoup(blockWithItem("spirit_instiller", () -> new SpiritInstillerBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.WHITE), ModelLocationUtils::getModelLocation).withPredefinedItemModel()); - public static final DeferredBlock CRYSTALLARIEUM = register(singletonWithSoup(blockWithItem("crystallarieum", () -> new CrystallarieumBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of(), InkColors.BROWN), ModelLocationUtils::getModelLocation).withPredefinedItemModel()); - public static final DeferredBlock CINDERHEARTH = register(defaultNorthHorizontalFacing(blockWithItem("cinderhearth", () -> new CinderhearthBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of().fireResistant(), InkColors.ORANGE), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock TINTING_STATION = register(defaultWestHorizontalFacing(blockWithItem("tinting_station", () -> new TintingStationBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of()), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock SPIRIT_INSTILLER = register(singletonWithSoup(blockWithItem("spirit_instiller", () -> new SpiritInstillerBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of()), ModelLocationUtils::getModelLocation).withPredefinedItemModel()); + public static final DeferredBlock CRYSTALLARIEUM = register(singletonWithSoup(blockWithItem("crystallarieum", () -> new CrystallarieumBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of()), ModelLocationUtils::getModelLocation).withPredefinedItemModel()); + public static final DeferredBlock CINDERHEARTH = register(defaultNorthHorizontalFacing(blockWithItem("cinderhearth", () -> new CinderhearthBlock(craftingBlock(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE)), () -> IS.of().fireResistant()), ModelLocationUtils::getModelLocation)); private static BlockBehaviour.Properties gemstone(MapColor mapColor, SoundType blockSoundGroup, int luminance) { @@ -172,48 +173,48 @@ public static BlockRegistrar cluster(BlockRe });*/ } - public static final DeferredBlock TOPAZ_CLUSTER = register(cluster(blockWithItem("topaz_cluster", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_CYAN, SpectrumSoundTypes.TOPAZ_CLUSTER, 8), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.CYAN), ModelTemplates.CROSS)); - public static final DeferredBlock LARGE_TOPAZ_BUD = register(cluster(blockWithItem("large_topaz_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_CYAN, SpectrumSoundTypes.LARGE_TOPAZ_BUD, 6), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.CYAN), ModelTemplates.CROSS)); - public static final DeferredBlock MEDIUM_TOPAZ_BUD = register(cluster(blockWithItem("medium_topaz_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_CYAN, SpectrumSoundTypes.MEDIUM_TOPAZ_BUD, 4), SpectrumClusterBlock.GrowthStage.MEDIUM), InkColors.CYAN), ModelTemplates.CROSS)); - public static final DeferredBlock SMALL_TOPAZ_BUD = register(cluster(blockWithItem("small_topaz_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_CYAN, SpectrumSoundTypes.SMALL_TOPAZ_BUD, 2), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.CYAN), ModelTemplates.CROSS)); - public static final DeferredBlock BUDDING_TOPAZ = register(simple(blockWithItem("budding_topaz", () -> new SpectrumBuddingBlock(gemstoneBlock(MapColor.COLOR_CYAN, SpectrumSoundTypes.TOPAZ_BLOCK).pushReaction(PushReaction.DESTROY).randomTicks(), SMALL_TOPAZ_BUD.get(), MEDIUM_TOPAZ_BUD.get(), LARGE_TOPAZ_BUD.get(), TOPAZ_CLUSTER.get(), SpectrumSoundEvents.BLOCK_TOPAZ_BLOCK_HIT, SpectrumSoundEvents.BLOCK_TOPAZ_BLOCK_CHIME), InkColors.CYAN))); - public static final DeferredBlock TOPAZ_BLOCK = register(simple(blockWithItem("topaz_block", () -> new SpectrumGemstoneBlock(gemstoneBlock(MapColor.COLOR_CYAN, SpectrumSoundTypes.TOPAZ_BLOCK), SpectrumSoundEvents.BLOCK_TOPAZ_BLOCK_HIT, SpectrumSoundEvents.BLOCK_TOPAZ_BLOCK_CHIME), InkColors.CYAN))); - - public static final DeferredBlock CITRINE_CLUSTER = register(cluster(blockWithItem("citrine_cluster", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_YELLOW, SpectrumSoundTypes.CITRINE_CLUSTER, 9), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.YELLOW), ModelTemplates.CROSS)); - public static final DeferredBlock LARGE_CITRINE_BUD = register(cluster(blockWithItem("large_citrine_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_YELLOW, SpectrumSoundTypes.LARGE_CITRINE_BUD, 7), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.YELLOW), ModelTemplates.CROSS)); - public static final DeferredBlock MEDIUM_CITRINE_BUD = register(cluster(blockWithItem("medium_citrine_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_YELLOW, SpectrumSoundTypes.MEDIUM_CITRINE_BUD, 5), SpectrumClusterBlock.GrowthStage.MEDIUM), InkColors.YELLOW), ModelTemplates.CROSS)); - public static final DeferredBlock SMALL_CITRINE_BUD = register(cluster(blockWithItem("small_citrine_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_YELLOW, SpectrumSoundTypes.SMALL_CITRINE_BUD, 3), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.YELLOW), ModelTemplates.CROSS)); - public static final DeferredBlock BUDDING_CITRINE = register(simple(blockWithItem("budding_citrine", () -> new SpectrumBuddingBlock(gemstoneBlock(MapColor.COLOR_YELLOW, SpectrumSoundTypes.CITRINE_BLOCK).pushReaction(PushReaction.DESTROY).randomTicks(), SMALL_CITRINE_BUD.get(), MEDIUM_CITRINE_BUD.get(), LARGE_CITRINE_BUD.get(), CITRINE_CLUSTER.get(), SpectrumSoundEvents.BLOCK_CITRINE_BLOCK_HIT, SpectrumSoundEvents.BLOCK_CITRINE_BLOCK_CHIME), InkColors.YELLOW))); - public static final DeferredBlock CITRINE_BLOCK = register(simple(blockWithItem("citrine_block", () -> new SpectrumGemstoneBlock(gemstoneBlock(MapColor.COLOR_YELLOW, SpectrumSoundTypes.CITRINE_BLOCK), SpectrumSoundEvents.BLOCK_CITRINE_BLOCK_HIT, SpectrumSoundEvents.BLOCK_CITRINE_BLOCK_CHIME), InkColors.YELLOW))); - - public static final DeferredBlock ONYX_CLUSTER = register(cluster(blockWithItem("onyx_cluster", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_BLACK, SpectrumSoundTypes.ONYX_CLUSTER, 6), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.BLACK), ModelTemplates.CROSS)); - public static final DeferredBlock LARGE_ONYX_BUD = register(cluster(blockWithItem("large_onyx_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_BLACK, SpectrumSoundTypes.LARGE_ONYX_BUD, 5), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.BLACK), ModelTemplates.CROSS)); - public static final DeferredBlock MEDIUM_ONYX_BUD = register(cluster(blockWithItem("medium_onyx_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_BLACK, SpectrumSoundTypes.MEDIUM_ONYX_BUD, 3), SpectrumClusterBlock.GrowthStage.MEDIUM), InkColors.BLACK), ModelTemplates.CROSS)); - public static final DeferredBlock SMALL_ONYX_BUD = register(cluster(blockWithItem("small_onyx_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_BLACK, SpectrumSoundTypes.SMALL_ONYX_BUD, 1), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.BLACK), ModelTemplates.CROSS)); - public static final DeferredBlock BUDDING_ONYX = register(simple(blockWithItem("budding_onyx", () -> new SpectrumBuddingBlock(gemstoneBlock(MapColor.COLOR_BLACK, SpectrumSoundTypes.ONYX_BLOCK).pushReaction(PushReaction.DESTROY).randomTicks(), SMALL_ONYX_BUD.get(), MEDIUM_ONYX_BUD.get(), LARGE_ONYX_BUD.get(), ONYX_CLUSTER.get(), SpectrumSoundEvents.BLOCK_ONYX_BLOCK_HIT, SpectrumSoundEvents.BLOCK_ONYX_BLOCK_CHIME), InkColors.BLACK))); - public static final DeferredBlock ONYX_BLOCK = register(simple(blockWithItem("onyx_block", () -> new SpectrumGemstoneBlock(gemstoneBlock(MapColor.COLOR_BLACK, SpectrumSoundTypes.ONYX_BLOCK), SpectrumSoundEvents.BLOCK_ONYX_BLOCK_HIT, SpectrumSoundEvents.BLOCK_ONYX_BLOCK_CHIME), InkColors.BLACK))); - - public static final DeferredBlock MOONSTONE_CLUSTER = register(cluster(blockWithItem("moonstone_cluster", () -> new SpectrumClusterBlock(gemstone(MapColor.SNOW, SpectrumSoundTypes.MOONSTONE_CLUSTER, 15), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.WHITE), ModelTemplates.CROSS)); - public static final DeferredBlock LARGE_MOONSTONE_BUD = register(cluster(blockWithItem("large_moonstone_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.SNOW, SpectrumSoundTypes.LARGE_MOONSTONE_BUD, 12), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.WHITE), ModelTemplates.CROSS)); - public static final DeferredBlock MEDIUM_MOONSTONE_BUD = register(cluster(blockWithItem("medium_moonstone_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.SNOW, SpectrumSoundTypes.MEDIUM_MOONSTONE_BUD, 9), SpectrumClusterBlock.GrowthStage.MEDIUM), InkColors.WHITE), ModelTemplates.CROSS)); - public static final DeferredBlock SMALL_MOONSTONE_BUD = register(cluster(blockWithItem("small_moonstone_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.SNOW, SpectrumSoundTypes.SMALL_MOONSTONE_BUD, 6), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.WHITE), ModelTemplates.CROSS)); - public static final DeferredBlock BUDDING_MOONSTONE = register(simple(blockWithItem("budding_moonstone", () -> new SpectrumBuddingBlock(gemstoneBlock(MapColor.SNOW, SpectrumSoundTypes.MOONSTONE_BLOCK).pushReaction(PushReaction.DESTROY).randomTicks(), SMALL_MOONSTONE_BUD.get(), MEDIUM_MOONSTONE_BUD.get(), LARGE_MOONSTONE_BUD.get(), MOONSTONE_CLUSTER.get(), SpectrumSoundEvents.BLOCK_MOONSTONE_BLOCK_HIT, SpectrumSoundEvents.BLOCK_MOONSTONE_BLOCK_CHIME), InkColors.WHITE))); - public static final DeferredBlock MOONSTONE_BLOCK = register(simple(blockWithItem("moonstone_block", () -> new SpectrumGemstoneBlock(gemstoneBlock(MapColor.SNOW, SpectrumSoundTypes.MOONSTONE_BLOCK), SpectrumSoundEvents.BLOCK_MOONSTONE_BLOCK_HIT, SpectrumSoundEvents.BLOCK_MOONSTONE_BLOCK_CHIME), InkColors.WHITE))); - - public static final DeferredBlock TOPAZ_POWDER_BLOCK = register(simple(blockWithItem("topaz_powder_block", () -> new ColoredFallingBlock(new ColorRGBA(DyeColor.CYAN.getFireworkColor()), BlockBehaviour.Properties.ofFullCopy(SAND).mapColor(MapColor.COLOR_CYAN)), InkColors.CYAN))); - public static final DeferredBlock AMETHYST_POWDER_BLOCK = register(simple(blockWithItem("amethyst_powder_block", () -> new ColoredFallingBlock(new ColorRGBA(DyeColor.MAGENTA.getFireworkColor()), BlockBehaviour.Properties.ofFullCopy(SAND).mapColor(MapColor.COLOR_MAGENTA)), InkColors.MAGENTA))); - public static final DeferredBlock CITRINE_POWDER_BLOCK = register(simple(blockWithItem("citrine_powder_block", () -> new ColoredFallingBlock(new ColorRGBA(DyeColor.YELLOW.getFireworkColor()), BlockBehaviour.Properties.ofFullCopy(SAND).mapColor(MapColor.COLOR_YELLOW)), InkColors.YELLOW))); - public static final DeferredBlock ONYX_POWDER_BLOCK = register(simple(blockWithItem("onyx_powder_block", () -> new ColoredFallingBlock(new ColorRGBA(DyeColor.BLACK.getFireworkColor()), BlockBehaviour.Properties.ofFullCopy(SAND).mapColor(MapColor.COLOR_BLACK)), InkColors.BLACK))); - public static final DeferredBlock MOONSTONE_POWDER_BLOCK = register(simple(blockWithItem("moonstone_powder_block", () -> new ColoredFallingBlock(new ColorRGBA(DyeColor.WHITE.getFireworkColor()), BlockBehaviour.Properties.ofFullCopy(SAND).mapColor(MapColor.SNOW)), InkColors.WHITE))); - - public static final DeferredBlock VEGETAL_BLOCK = register(singleton(blockWithItem("vegetal_block", () -> new FlammableBlock(settings(MapColor.GRASS, SoundType.FUNGUS, 2.0F).noOcclusion()), InkColors.GREEN), TexturedModel.createDefault(TextureMapping::defaultTexture, SpectrumModelTemplates.TRANSLUCENT_OUTER1))); - public static final DeferredBlock NEOLITH_BLOCK = register(simple(blockWithItem("neolith_block", () -> new Block(settings(MapColor.COLOR_PURPLE, SoundType.COPPER, 6.0F).requiresCorrectToolForDrops().instrument(NoteBlockInstrument.BASEDRUM).lightLevel(state -> 13).hasPostProcess(SpectrumBlocks::always).emissiveRendering(SpectrumBlocks::always)), InkColors.PINK))); - public static final DeferredBlock BEDROCK_DUST_BLOCK = register(simple(blockWithItem("bedrock_dust_block", () -> new BlockWithTooltip(settings(MapColor.STONE, SoundType.STONE, 100.0F, 3600.0F).pushReaction(PushReaction.BLOCK).requiresCorrectToolForDrops().instrument(NoteBlockInstrument.BASEDRUM), Component.translatable("spectrum.tooltip.dragon_and_wither_immune")), () -> IS.of(Rarity.UNCOMMON), InkColors.BLACK))); - - public static final DeferredBlock BISMUTH_CLUSTER = register(cluster(blockWithItem("bismuth_cluster", () -> new SpectrumClusterBlock(gemstone(MapColor.WARPED_STEM, SoundType.CHAIN, 8), SpectrumClusterBlock.GrowthStage.CLUSTER), () -> IS.of(Rarity.UNCOMMON), InkColors.CYAN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock LARGE_BISMUTH_BUD = register(cluster(blockWithItem("large_bismuth_bud", () -> new BismuthBudBlock(gemstone(MapColor.WARPED_STEM, SoundType.CHAIN, 6).randomTicks(), SpectrumClusterBlock.GrowthStage.LARGE, (SpectrumClusterBlock) BISMUTH_CLUSTER.get()), () -> IS.of(Rarity.UNCOMMON), InkColors.CYAN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock SMALL_BISMUTH_BUD = register(cluster(blockWithItem("small_bismuth_bud", () -> new BismuthBudBlock(gemstone(MapColor.WARPED_STEM, SoundType.CHAIN, 4).randomTicks(), SpectrumClusterBlock.GrowthStage.SMALL, (BismuthBudBlock) LARGE_BISMUTH_BUD.get()), () -> IS.of(Rarity.UNCOMMON), InkColors.CYAN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock BISMUTH_BLOCK = register(simple(blockWithItem("bismuth_block", () -> new Block(gemstoneBlock(MapColor.WARPED_STEM, SoundType.CHAIN)), InkColors.CYAN))); + public static final DeferredBlock TOPAZ_CLUSTER = register(cluster(blockWithItem("topaz_cluster", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_CYAN, SpectrumSoundTypes.TOPAZ_CLUSTER, 8), SpectrumClusterBlock.GrowthStage.CLUSTER)), ModelTemplates.CROSS)); + public static final DeferredBlock LARGE_TOPAZ_BUD = register(cluster(blockWithItem("large_topaz_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_CYAN, SpectrumSoundTypes.LARGE_TOPAZ_BUD, 6), SpectrumClusterBlock.GrowthStage.LARGE)), ModelTemplates.CROSS)); + public static final DeferredBlock MEDIUM_TOPAZ_BUD = register(cluster(blockWithItem("medium_topaz_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_CYAN, SpectrumSoundTypes.MEDIUM_TOPAZ_BUD, 4), SpectrumClusterBlock.GrowthStage.MEDIUM)), ModelTemplates.CROSS)); + public static final DeferredBlock SMALL_TOPAZ_BUD = register(cluster(blockWithItem("small_topaz_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_CYAN, SpectrumSoundTypes.SMALL_TOPAZ_BUD, 2), SpectrumClusterBlock.GrowthStage.SMALL)), ModelTemplates.CROSS)); + public static final DeferredBlock BUDDING_TOPAZ = register(simple(blockWithItem("budding_topaz", () -> new SpectrumBuddingBlock(gemstoneBlock(MapColor.COLOR_CYAN, SpectrumSoundTypes.TOPAZ_BLOCK).pushReaction(PushReaction.DESTROY).randomTicks(), SMALL_TOPAZ_BUD.get(), MEDIUM_TOPAZ_BUD.get(), LARGE_TOPAZ_BUD.get(), TOPAZ_CLUSTER.get(), SpectrumSoundEvents.BLOCK_TOPAZ_BLOCK_HIT, SpectrumSoundEvents.BLOCK_TOPAZ_BLOCK_CHIME)))); + public static final DeferredBlock TOPAZ_BLOCK = register(simple(blockWithItem("topaz_block", () -> new SpectrumGemstoneBlock(gemstoneBlock(MapColor.COLOR_CYAN, SpectrumSoundTypes.TOPAZ_BLOCK), SpectrumSoundEvents.BLOCK_TOPAZ_BLOCK_HIT, SpectrumSoundEvents.BLOCK_TOPAZ_BLOCK_CHIME)))); + + public static final DeferredBlock CITRINE_CLUSTER = register(cluster(blockWithItem("citrine_cluster", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_YELLOW, SpectrumSoundTypes.CITRINE_CLUSTER, 9), SpectrumClusterBlock.GrowthStage.CLUSTER)), ModelTemplates.CROSS)); + public static final DeferredBlock LARGE_CITRINE_BUD = register(cluster(blockWithItem("large_citrine_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_YELLOW, SpectrumSoundTypes.LARGE_CITRINE_BUD, 7), SpectrumClusterBlock.GrowthStage.LARGE)), ModelTemplates.CROSS)); + public static final DeferredBlock MEDIUM_CITRINE_BUD = register(cluster(blockWithItem("medium_citrine_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_YELLOW, SpectrumSoundTypes.MEDIUM_CITRINE_BUD, 5), SpectrumClusterBlock.GrowthStage.MEDIUM)), ModelTemplates.CROSS)); + public static final DeferredBlock SMALL_CITRINE_BUD = register(cluster(blockWithItem("small_citrine_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_YELLOW, SpectrumSoundTypes.SMALL_CITRINE_BUD, 3), SpectrumClusterBlock.GrowthStage.SMALL)), ModelTemplates.CROSS)); + public static final DeferredBlock BUDDING_CITRINE = register(simple(blockWithItem("budding_citrine", () -> new SpectrumBuddingBlock(gemstoneBlock(MapColor.COLOR_YELLOW, SpectrumSoundTypes.CITRINE_BLOCK).pushReaction(PushReaction.DESTROY).randomTicks(), SMALL_CITRINE_BUD.get(), MEDIUM_CITRINE_BUD.get(), LARGE_CITRINE_BUD.get(), CITRINE_CLUSTER.get(), SpectrumSoundEvents.BLOCK_CITRINE_BLOCK_HIT, SpectrumSoundEvents.BLOCK_CITRINE_BLOCK_CHIME)))); + public static final DeferredBlock CITRINE_BLOCK = register(simple(blockWithItem("citrine_block", () -> new SpectrumGemstoneBlock(gemstoneBlock(MapColor.COLOR_YELLOW, SpectrumSoundTypes.CITRINE_BLOCK), SpectrumSoundEvents.BLOCK_CITRINE_BLOCK_HIT, SpectrumSoundEvents.BLOCK_CITRINE_BLOCK_CHIME)))); + + public static final DeferredBlock ONYX_CLUSTER = register(cluster(blockWithItem("onyx_cluster", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_BLACK, SpectrumSoundTypes.ONYX_CLUSTER, 6), SpectrumClusterBlock.GrowthStage.CLUSTER)), ModelTemplates.CROSS)); + public static final DeferredBlock LARGE_ONYX_BUD = register(cluster(blockWithItem("large_onyx_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_BLACK, SpectrumSoundTypes.LARGE_ONYX_BUD, 5), SpectrumClusterBlock.GrowthStage.LARGE)), ModelTemplates.CROSS)); + public static final DeferredBlock MEDIUM_ONYX_BUD = register(cluster(blockWithItem("medium_onyx_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_BLACK, SpectrumSoundTypes.MEDIUM_ONYX_BUD, 3), SpectrumClusterBlock.GrowthStage.MEDIUM)), ModelTemplates.CROSS)); + public static final DeferredBlock SMALL_ONYX_BUD = register(cluster(blockWithItem("small_onyx_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_BLACK, SpectrumSoundTypes.SMALL_ONYX_BUD, 1), SpectrumClusterBlock.GrowthStage.SMALL)), ModelTemplates.CROSS)); + public static final DeferredBlock BUDDING_ONYX = register(simple(blockWithItem("budding_onyx", () -> new SpectrumBuddingBlock(gemstoneBlock(MapColor.COLOR_BLACK, SpectrumSoundTypes.ONYX_BLOCK).pushReaction(PushReaction.DESTROY).randomTicks(), SMALL_ONYX_BUD.get(), MEDIUM_ONYX_BUD.get(), LARGE_ONYX_BUD.get(), ONYX_CLUSTER.get(), SpectrumSoundEvents.BLOCK_ONYX_BLOCK_HIT, SpectrumSoundEvents.BLOCK_ONYX_BLOCK_CHIME)))); + public static final DeferredBlock ONYX_BLOCK = register(simple(blockWithItem("onyx_block", () -> new SpectrumGemstoneBlock(gemstoneBlock(MapColor.COLOR_BLACK, SpectrumSoundTypes.ONYX_BLOCK), SpectrumSoundEvents.BLOCK_ONYX_BLOCK_HIT, SpectrumSoundEvents.BLOCK_ONYX_BLOCK_CHIME)))); + + public static final DeferredBlock MOONSTONE_CLUSTER = register(cluster(blockWithItem("moonstone_cluster", () -> new SpectrumClusterBlock(gemstone(MapColor.SNOW, SpectrumSoundTypes.MOONSTONE_CLUSTER, 15), SpectrumClusterBlock.GrowthStage.CLUSTER)), ModelTemplates.CROSS)); + public static final DeferredBlock LARGE_MOONSTONE_BUD = register(cluster(blockWithItem("large_moonstone_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.SNOW, SpectrumSoundTypes.LARGE_MOONSTONE_BUD, 12), SpectrumClusterBlock.GrowthStage.LARGE)), ModelTemplates.CROSS)); + public static final DeferredBlock MEDIUM_MOONSTONE_BUD = register(cluster(blockWithItem("medium_moonstone_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.SNOW, SpectrumSoundTypes.MEDIUM_MOONSTONE_BUD, 9), SpectrumClusterBlock.GrowthStage.MEDIUM)), ModelTemplates.CROSS)); + public static final DeferredBlock SMALL_MOONSTONE_BUD = register(cluster(blockWithItem("small_moonstone_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.SNOW, SpectrumSoundTypes.SMALL_MOONSTONE_BUD, 6), SpectrumClusterBlock.GrowthStage.SMALL)), ModelTemplates.CROSS)); + public static final DeferredBlock BUDDING_MOONSTONE = register(simple(blockWithItem("budding_moonstone", () -> new SpectrumBuddingBlock(gemstoneBlock(MapColor.SNOW, SpectrumSoundTypes.MOONSTONE_BLOCK).pushReaction(PushReaction.DESTROY).randomTicks(), SMALL_MOONSTONE_BUD.get(), MEDIUM_MOONSTONE_BUD.get(), LARGE_MOONSTONE_BUD.get(), MOONSTONE_CLUSTER.get(), SpectrumSoundEvents.BLOCK_MOONSTONE_BLOCK_HIT, SpectrumSoundEvents.BLOCK_MOONSTONE_BLOCK_CHIME)))); + public static final DeferredBlock MOONSTONE_BLOCK = register(simple(blockWithItem("moonstone_block", () -> new SpectrumGemstoneBlock(gemstoneBlock(MapColor.SNOW, SpectrumSoundTypes.MOONSTONE_BLOCK), SpectrumSoundEvents.BLOCK_MOONSTONE_BLOCK_HIT, SpectrumSoundEvents.BLOCK_MOONSTONE_BLOCK_CHIME)))); + + public static final DeferredBlock TOPAZ_POWDER_BLOCK = register(simple(blockWithItem("topaz_powder_block", () -> new ColoredFallingBlock(new ColorRGBA(DyeColor.CYAN.getFireworkColor()), BlockBehaviour.Properties.ofFullCopy(SAND).mapColor(MapColor.COLOR_CYAN))))); + public static final DeferredBlock AMETHYST_POWDER_BLOCK = register(simple(blockWithItem("amethyst_powder_block", () -> new ColoredFallingBlock(new ColorRGBA(DyeColor.MAGENTA.getFireworkColor()), BlockBehaviour.Properties.ofFullCopy(SAND).mapColor(MapColor.COLOR_MAGENTA))))); + public static final DeferredBlock CITRINE_POWDER_BLOCK = register(simple(blockWithItem("citrine_powder_block", () -> new ColoredFallingBlock(new ColorRGBA(DyeColor.YELLOW.getFireworkColor()), BlockBehaviour.Properties.ofFullCopy(SAND).mapColor(MapColor.COLOR_YELLOW))))); + public static final DeferredBlock ONYX_POWDER_BLOCK = register(simple(blockWithItem("onyx_powder_block", () -> new ColoredFallingBlock(new ColorRGBA(DyeColor.BLACK.getFireworkColor()), BlockBehaviour.Properties.ofFullCopy(SAND).mapColor(MapColor.COLOR_BLACK))))); + public static final DeferredBlock MOONSTONE_POWDER_BLOCK = register(simple(blockWithItem("moonstone_powder_block", () -> new ColoredFallingBlock(new ColorRGBA(DyeColor.WHITE.getFireworkColor()), BlockBehaviour.Properties.ofFullCopy(SAND).mapColor(MapColor.SNOW))))); + + public static final DeferredBlock VEGETAL_BLOCK = register(singleton(blockWithItem("vegetal_block", () -> new FlammableBlock(settings(MapColor.GRASS, SoundType.FUNGUS, 2.0F).noOcclusion())), TexturedModel.createDefault(TextureMapping::defaultTexture, SpectrumModelTemplates.TRANSLUCENT_OUTER1))); + public static final DeferredBlock NEOLITH_BLOCK = register(simple(blockWithItem("neolith_block", () -> new Block(settings(MapColor.COLOR_PURPLE, SoundType.COPPER, 6.0F).requiresCorrectToolForDrops().instrument(NoteBlockInstrument.BASEDRUM).lightLevel(state -> 13).hasPostProcess(SpectrumBlocks::always).emissiveRendering(SpectrumBlocks::always))))); + public static final DeferredBlock BEDROCK_DUST_BLOCK = register(simple(blockWithItem("bedrock_dust_block", () -> new BlockWithTooltip(settings(MapColor.STONE, SoundType.STONE, 100.0F, 3600.0F).pushReaction(PushReaction.BLOCK).requiresCorrectToolForDrops().instrument(NoteBlockInstrument.BASEDRUM), Component.translatable("spectrum.tooltip.dragon_and_wither_immune")), () -> IS.of(Rarity.UNCOMMON)))); + + public static final DeferredBlock BISMUTH_CLUSTER = register(cluster(blockWithItem("bismuth_cluster", () -> new SpectrumClusterBlock(gemstone(MapColor.WARPED_STEM, SoundType.CHAIN, 8), SpectrumClusterBlock.GrowthStage.CLUSTER), () -> IS.of(Rarity.UNCOMMON)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock LARGE_BISMUTH_BUD = register(cluster(blockWithItem("large_bismuth_bud", () -> new BismuthBudBlock(gemstone(MapColor.WARPED_STEM, SoundType.CHAIN, 6).randomTicks(), SpectrumClusterBlock.GrowthStage.LARGE, (SpectrumClusterBlock) BISMUTH_CLUSTER.get()), () -> IS.of(Rarity.UNCOMMON)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock SMALL_BISMUTH_BUD = register(cluster(blockWithItem("small_bismuth_bud", () -> new BismuthBudBlock(gemstone(MapColor.WARPED_STEM, SoundType.CHAIN, 4).randomTicks(), SpectrumClusterBlock.GrowthStage.SMALL, (BismuthBudBlock) LARGE_BISMUTH_BUD.get()), () -> IS.of(Rarity.UNCOMMON)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock BISMUTH_BLOCK = register(simple(blockWithItem("bismuth_block", () -> new Block(gemstoneBlock(MapColor.WARPED_STEM, SoundType.CHAIN))))); // DD BLOCKS private static final float BLACKSLAG_HARDNESS = 5.0F; @@ -223,95 +224,95 @@ private static BlockBehaviour.Properties blackslag(SoundType blockSoundGroup) { return settings(MapColor.COLOR_GRAY, blockSoundGroup, BLACKSLAG_HARDNESS, BLACKSLAG_RESISTANCE).instrument(NoteBlockInstrument.BASEDRUM).requiresCorrectToolForDrops(); } - public static final DeferredBlock BLACKSLAG = register(blockWithItem("blackslag", () -> new BlackslagBlock(blackslag(SoundType.DEEPSLATE)), InkColors.BLACK).withBlockModel((ctx, block) -> SpectrumModelHelper.createMirroredVariantsSupplier(block, TexturedModel.COLUMN_ALT, SpectrumTexturedModelProviders.CUBE_COLUMN_MIRRORED, ctx.modelOutput).with(SpectrumModelHelper.createAxisRotatedVariantMap()))); - public static final DeferredBlock BLACKSLAG_STAIRS = register(blockWithItem("blackslag_stairs", () -> new StairBlock(BLACKSLAG.get().defaultBlockState(), blackslag(SoundType.DEEPSLATE)), InkColors.BLACK)); - public static final DeferredBlock BLACKSLAG_SLAB = register(blockWithItem("blackslag_slab", () -> new SlabBlock(blackslag(SoundType.DEEPSLATE)), InkColors.BLACK)); - public static final DeferredBlock BLACKSLAG_WALL = register(blockWithItem("blackslag_wall", () -> new WallBlock(blackslag(SoundType.DEEPSLATE)), InkColors.BLACK)); - - public static final DeferredBlock INFESTED_BLACKSLAG = register(parented(blockWithItem("infested_blackslag", () -> new InfestedBlock(BLACKSLAG.get(), blackslag(SoundType.DEEPSLATE)), InkColors.BLACK), b -> BLACKSLAG.get())); - - public static final DeferredBlock COBBLED_BLACKSLAG = register(blockWithItem("cobbled_blackslag", () -> new Block(blackslag(SoundType.DEEPSLATE)), InkColors.BLACK)); - public static final DeferredBlock COBBLED_BLACKSLAG_STAIRS = register(blockWithItem("cobbled_blackslag_stairs", () -> new StairBlock(COBBLED_BLACKSLAG.get().defaultBlockState(), blackslag(SoundType.DEEPSLATE)), InkColors.BLACK)); - public static final DeferredBlock COBBLED_BLACKSLAG_SLAB = register(blockWithItem("cobbled_blackslag_slab", () -> new SlabBlock(blackslag(SoundType.DEEPSLATE)), InkColors.BLACK)); - public static final DeferredBlock COBBLED_BLACKSLAG_WALL = register(blockWithItem("cobbled_blackslag_wall", () -> new WallBlock(blackslag(SoundType.DEEPSLATE)), InkColors.BLACK)); - - public static final DeferredBlock BLACKSLAG_TILES = register(blockWithItem("blackslag_tiles", () -> new Block(blackslag(SoundType.DEEPSLATE_TILES)), InkColors.BLACK)); - public static final DeferredBlock BLACKSLAG_TILE_STAIRS = register(blockWithItem("blackslag_tile_stairs", () -> new StairBlock(BLACKSLAG_TILES.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BLACKSLAG_TILES.get())), InkColors.BLACK)); - public static final DeferredBlock BLACKSLAG_TILE_SLAB = register(blockWithItem("blackslag_tile_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(BLACKSLAG_TILES.get())), InkColors.BLACK)); - public static final DeferredBlock BLACKSLAG_TILE_WALL = register(blockWithItem("blackslag_tile_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(BLACKSLAG_TILES.get())), InkColors.BLACK)); - public static final DeferredBlock CRACKED_BLACKSLAG_TILES = register(blockWithItem("cracked_blackslag_tiles", () -> new Block(BlockBehaviour.Properties.ofFullCopy(BLACKSLAG_TILES.get())), InkColors.BLACK)); - - public static final DeferredBlock BLACKSLAG_BRICKS = register(blockWithItem("blackslag_bricks", () -> new Block(blackslag(SoundType.DEEPSLATE_BRICKS)), InkColors.BLACK)); - public static final DeferredBlock BLACKSLAG_BRICK_STAIRS = register(blockWithItem("blackslag_brick_stairs", () -> new StairBlock(BLACKSLAG_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BLACKSLAG_BRICKS.get())), InkColors.BLACK)); - public static final DeferredBlock BLACKSLAG_BRICK_SLAB = register(blockWithItem("blackslag_brick_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(BLACKSLAG_BRICKS.get())), InkColors.BLACK)); - public static final DeferredBlock BLACKSLAG_BRICK_WALL = register(blockWithItem("blackslag_brick_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(BLACKSLAG_BRICKS.get())), InkColors.BLACK)); - public static final DeferredBlock CRACKED_BLACKSLAG_BRICKS = register(blockWithItem("cracked_blackslag_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(BLACKSLAG_BRICKS.get())), InkColors.BLACK)); - - public static final DeferredBlock POLISHED_BLACKSLAG = register(blockWithItem("polished_blackslag", () -> new Block(blackslag(SoundType.POLISHED_DEEPSLATE)), InkColors.BLACK)); - public static final DeferredBlock POLISHED_BLACKSLAG_STAIRS = register(blockWithItem("polished_blackslag_stairs", () -> new StairBlock(POLISHED_BLACKSLAG.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(POLISHED_BLACKSLAG.get())), InkColors.BLACK)); - public static final DeferredBlock POLISHED_BLACKSLAG_SLAB = register(blockWithItem("polished_blackslag_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BLACKSLAG.get())), InkColors.BLACK)); - public static final DeferredBlock POLISHED_BLACKSLAG_WALL = register(blockWithItem("polished_blackslag_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BLACKSLAG.get())), InkColors.BLACK)); - public static final DeferredBlock POLISHED_BLACKSLAG_BUTTON = register(blockWithItem("polished_blackslag_button", () -> new ButtonBlock(SpectrumBlockSetTypes.POLISHED_BLACKSLAG, 5, BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).noCollission().strength(0.5F)), InkColors.BLACK)); - public static final DeferredBlock POLISHED_BLACKSLAG_PRESSURE_PLATE = register(blockWithItem("polished_blackslag_pressure_plate", () -> new PressurePlateBlock(SpectrumBlockSetTypes.POLISHED_BLACKSLAG, BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_BLACK).requiresCorrectToolForDrops().noCollission().strength(0.5F)), InkColors.BLACK)); - public static final DeferredBlock CHISELED_POLISHED_BLACKSLAG = register(blockWithItem("chiseled_polished_blackslag", () -> new Block(blackslag(SoundType.DEEPSLATE_BRICKS)), InkColors.BLACK)); - - public static final DeferredBlock POLISHED_BLACKSLAG_PILLAR = register(axisRotated(blockWithItem("polished_blackslag_pillar", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(BLACKSLAG_BRICKS.get())), InkColors.BLACK), TexturedModel.createDefault(b -> SpectrumTextureMaps.sideEnd(b, "", CHISELED_POLISHED_BLACKSLAG.get(), ""), ModelTemplates.CUBE_COLUMN))); - public static final DeferredBlock ANCIENT_CHISELED_POLISHED_BLACKSLAG = register(simple(blockWithItem("ancient_chiseled_polished_blackslag", () -> new Block(blackslag(SoundType.DEEPSLATE_BRICKS)), InkColors.BLACK))); - - public static final DeferredBlock SHALE_CLAY = register(singleton(blockWithItem("shale_clay", () -> new ShaleClayBlock(Weathering.WeatheringLevel.UNAFFECTED, blackslag(SoundType.MUD_BRICKS)), InkColors.BROWN), TexturedModel.COLUMN)); - public static final DeferredBlock TILLED_SHALE_CLAY = register(singleton(blockWithItem("tilled_shale_clay", () -> new ImmutableFarmlandBlock(BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get()), SHALE_CLAY.get().defaultBlockState()), InkColors.BROWN), SpectrumTexturedModelProviders.farmland(b -> SHALE_CLAY.get(), "_side", b -> b, ""))); - - public static final DeferredBlock POLISHED_SHALE_CLAY = register(blockWithItem("polished_shale_clay", () -> new ShaleClayBlock(Weathering.WeatheringLevel.UNAFFECTED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - public static final DeferredBlock POLISHED_SHALE_CLAY_STAIRS = register(blockWithItem("polished_shale_clay_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.UNAFFECTED, POLISHED_SHALE_CLAY.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - public static final DeferredBlock POLISHED_SHALE_CLAY_SLAB = register(blockWithItem("polished_shale_clay_slab", () -> new WeatheringSlabBlock(Weathering.WeatheringLevel.UNAFFECTED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - - public static final DeferredBlock EXPOSED_POLISHED_SHALE_CLAY = register(blockWithItem("exposed_polished_shale_clay", () -> new ShaleClayBlock(Weathering.WeatheringLevel.EXPOSED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - public static final DeferredBlock EXPOSED_POLISHED_SHALE_CLAY_STAIRS = register(blockWithItem("exposed_polished_shale_clay_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.EXPOSED, EXPOSED_POLISHED_SHALE_CLAY.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - public static final DeferredBlock EXPOSED_POLISHED_SHALE_CLAY_SLAB = register(blockWithItem("exposed_polished_shale_clay_slab", () -> new WeatheringSlabBlock(Weathering.WeatheringLevel.EXPOSED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - - public static final DeferredBlock WEATHERED_POLISHED_SHALE_CLAY = register(blockWithItem("weathered_polished_shale_clay", () -> new ShaleClayBlock(Weathering.WeatheringLevel.WEATHERED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - public static final DeferredBlock WEATHERED_POLISHED_SHALE_CLAY_STAIRS = register(blockWithItem("weathered_polished_shale_clay_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.WEATHERED, WEATHERED_POLISHED_SHALE_CLAY.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - public static final DeferredBlock WEATHERED_POLISHED_SHALE_CLAY_SLAB = register(blockWithItem("weathered_polished_shale_clay_slab", () -> new WeatheringSlabBlock(Weathering.WeatheringLevel.WEATHERED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - - public static final DeferredBlock SHALE_CLAY_BRICKS = register(blockWithItem("shale_clay_bricks", () -> new ShaleClayBlock(Weathering.WeatheringLevel.UNAFFECTED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - public static final DeferredBlock SHALE_CLAY_BRICK_STAIRS = register(blockWithItem("shale_clay_brick_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.UNAFFECTED, SHALE_CLAY_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - public static final DeferredBlock SHALE_CLAY_BRICK_SLAB = register(blockWithItem("shale_clay_brick_slab", () -> new WeatheringSlabBlock(Weathering.WeatheringLevel.UNAFFECTED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - - public static final DeferredBlock EXPOSED_SHALE_CLAY_BRICKS = register(blockWithItem("exposed_shale_clay_bricks", () -> new ShaleClayBlock(Weathering.WeatheringLevel.EXPOSED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - public static final DeferredBlock EXPOSED_SHALE_CLAY_BRICK_STAIRS = register(blockWithItem("exposed_shale_clay_brick_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.EXPOSED, EXPOSED_SHALE_CLAY_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - public static final DeferredBlock EXPOSED_SHALE_CLAY_BRICK_SLAB = register(blockWithItem("exposed_shale_clay_brick_slab", () -> new WeatheringSlabBlock(Weathering.WeatheringLevel.EXPOSED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - - public static final DeferredBlock WEATHERED_SHALE_CLAY_BRICKS = register(blockWithItem("weathered_shale_clay_bricks", () -> new ShaleClayBlock(Weathering.WeatheringLevel.WEATHERED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - public static final DeferredBlock WEATHERED_SHALE_CLAY_BRICK_STAIRS = register(blockWithItem("weathered_shale_clay_brick_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.WEATHERED, WEATHERED_SHALE_CLAY_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - public static final DeferredBlock WEATHERED_SHALE_CLAY_BRICK_SLAB = register(blockWithItem("weathered_shale_clay_brick_slab", () -> new WeatheringSlabBlock(Weathering.WeatheringLevel.WEATHERED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - - public static final DeferredBlock SHALE_CLAY_TILES = register(blockWithItem("shale_clay_tiles", () -> new ShaleClayBlock(Weathering.WeatheringLevel.UNAFFECTED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - public static final DeferredBlock SHALE_CLAY_TILE_STAIRS = register(blockWithItem("shale_clay_tile_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.UNAFFECTED, SHALE_CLAY_TILES.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - public static final DeferredBlock SHALE_CLAY_TILE_SLAB = register(blockWithItem("shale_clay_tile_slab", () -> new WeatheringSlabBlock(Weathering.WeatheringLevel.UNAFFECTED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - - public static final DeferredBlock EXPOSED_SHALE_CLAY_TILES = register(blockWithItem("exposed_shale_clay_tiles", () -> new ShaleClayBlock(Weathering.WeatheringLevel.EXPOSED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - public static final DeferredBlock EXPOSED_SHALE_CLAY_TILE_STAIRS = register(blockWithItem("exposed_shale_clay_tile_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.EXPOSED, EXPOSED_SHALE_CLAY_TILES.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - public static final DeferredBlock EXPOSED_SHALE_CLAY_TILE_SLAB = register(blockWithItem("exposed_shale_clay_tile_slab", () -> new WeatheringSlabBlock(Weathering.WeatheringLevel.EXPOSED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - - public static final DeferredBlock WEATHERED_SHALE_CLAY_TILES = register(blockWithItem("weathered_shale_clay_tiles", () -> new ShaleClayBlock(Weathering.WeatheringLevel.WEATHERED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - public static final DeferredBlock WEATHERED_SHALE_CLAY_TILE_STAIRS = register(blockWithItem("weathered_shale_clay_tile_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.WEATHERED, WEATHERED_SHALE_CLAY_TILES.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - public static final DeferredBlock WEATHERED_SHALE_CLAY_TILE_SLAB = register(blockWithItem("weathered_shale_clay_tile_slab", () -> new WeatheringSlabBlock(Weathering.WeatheringLevel.WEATHERED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN)); - - public static final DeferredBlock ROCK_CRYSTAL = register(simple(blockWithItem("rock_crystal", () -> new Block(settings(MapColor.QUARTZ, SoundType.NETHER_BRICKS, 200F).requiresCorrectToolForDrops()), InkColors.BROWN))); - - public static final DeferredBlock PYRITE = register(axisRotated(blockWithItem("pyrite", () -> new RotatedPillarBlock(settings(MapColor.TERRACOTTA_YELLOW, SoundType.CHAIN, 50.0F).requiresCorrectToolForDrops()), InkColors.BROWN), TexturedModel.COLUMN)); - public static final DeferredBlock PYRITE_SLAB = register(blockWithItem("pyrite_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(PYRITE.get())), InkColors.BROWN)); - public static final DeferredBlock PYRITE_STAIRS = register(blockWithItem("pyrite_stairs", () -> new StairBlock(PYRITE.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(PYRITE.get())), InkColors.BROWN)); - public static final DeferredBlock PYRITE_WALL = register(blockWithItem("pyrite_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(PYRITE.get())), InkColors.BROWN)); - - public static final DeferredBlock PYRITE_PILE = register(axisRotated(blockWithItem("pyrite_pile", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(PYRITE.get())), InkColors.BROWN), TexturedModel.COLUMN)); - public static final DeferredBlock PYRITE_PLATING = register(simple(blockWithItem("pyrite_plating", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PYRITE.get())), InkColors.BROWN))); - public static final DeferredBlock PYRITE_TUBING = register(axisRotated(blockWithItem("pyrite_tubing", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(PYRITE.get())), InkColors.BROWN), TexturedModel.COLUMN)); - public static final DeferredBlock PYRITE_RELIEF = register(axisRotated(blockWithItem("pyrite_relief", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(PYRITE.get())), InkColors.BROWN), SpectrumTexturedModelProviders.cubeColumn(b -> b, "_side", b -> PYRITE_TUBING.get(), "_top"))); - public static final DeferredBlock PYRITE_STACK = register(simple(blockWithItem("pyrite_stack", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PYRITE.get())), InkColors.BROWN))); - public static final DeferredBlock PYRITE_PANELING = register(singleton(blockWithItem("pyrite_paneling", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PYRITE.get())), InkColors.BROWN), SpectrumTexturedModelProviders.cubeColumn(b -> b, "", b -> PYRITE_PLATING.get(), ""))); - public static final DeferredBlock PYRITE_VENT = register(singleton(blockWithItem("pyrite_vent", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PYRITE.get())), InkColors.BROWN), SpectrumTexturedModelProviders.cubeColumn(b -> b, "", b -> PYRITE_PLATING.get(), ""))); - public static final DeferredBlock PYRITE_RIPPER = register(blockWithItem("pyrite_ripper", () -> new PyriteRipperBlock(BlockBehaviour.Properties.ofFullCopy(PYRITE.get()).noOcclusion().isValidSpawn(SpectrumBlocks::never).isViewBlocking(SpectrumBlocks::never)), InkColors.BROWN).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.properties(BlockStateProperties.FACING, PyriteRipperBlock.MIRRORED) + public static final DeferredBlock BLACKSLAG = register(blockWithItem("blackslag", () -> new BlackslagBlock(blackslag(SoundType.DEEPSLATE))).withBlockModel((ctx, block) -> SpectrumModelHelper.createMirroredVariantsSupplier(block, TexturedModel.COLUMN_ALT, SpectrumTexturedModelProviders.CUBE_COLUMN_MIRRORED, ctx.modelOutput).with(SpectrumModelHelper.createAxisRotatedVariantMap()))); + public static final DeferredBlock BLACKSLAG_STAIRS = register(blockWithItem("blackslag_stairs", () -> new StairBlock(BLACKSLAG.get().defaultBlockState(), blackslag(SoundType.DEEPSLATE)))); + public static final DeferredBlock BLACKSLAG_SLAB = register(blockWithItem("blackslag_slab", () -> new SlabBlock(blackslag(SoundType.DEEPSLATE)))); + public static final DeferredBlock BLACKSLAG_WALL = register(blockWithItem("blackslag_wall", () -> new WallBlock(blackslag(SoundType.DEEPSLATE)))); + + public static final DeferredBlock INFESTED_BLACKSLAG = register(parented(blockWithItem("infested_blackslag", () -> new InfestedBlock(BLACKSLAG.get(), blackslag(SoundType.DEEPSLATE))), b -> BLACKSLAG.get())); + + public static final DeferredBlock COBBLED_BLACKSLAG = register(blockWithItem("cobbled_blackslag", () -> new Block(blackslag(SoundType.DEEPSLATE)))); + public static final DeferredBlock COBBLED_BLACKSLAG_STAIRS = register(blockWithItem("cobbled_blackslag_stairs", () -> new StairBlock(COBBLED_BLACKSLAG.get().defaultBlockState(), blackslag(SoundType.DEEPSLATE)))); + public static final DeferredBlock COBBLED_BLACKSLAG_SLAB = register(blockWithItem("cobbled_blackslag_slab", () -> new SlabBlock(blackslag(SoundType.DEEPSLATE)))); + public static final DeferredBlock COBBLED_BLACKSLAG_WALL = register(blockWithItem("cobbled_blackslag_wall", () -> new WallBlock(blackslag(SoundType.DEEPSLATE)))); + + public static final DeferredBlock BLACKSLAG_TILES = register(blockWithItem("blackslag_tiles", () -> new Block(blackslag(SoundType.DEEPSLATE_TILES)))); + public static final DeferredBlock BLACKSLAG_TILE_STAIRS = register(blockWithItem("blackslag_tile_stairs", () -> new StairBlock(BLACKSLAG_TILES.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BLACKSLAG_TILES.get())))); + public static final DeferredBlock BLACKSLAG_TILE_SLAB = register(blockWithItem("blackslag_tile_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(BLACKSLAG_TILES.get())))); + public static final DeferredBlock BLACKSLAG_TILE_WALL = register(blockWithItem("blackslag_tile_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(BLACKSLAG_TILES.get())))); + public static final DeferredBlock CRACKED_BLACKSLAG_TILES = register(blockWithItem("cracked_blackslag_tiles", () -> new Block(BlockBehaviour.Properties.ofFullCopy(BLACKSLAG_TILES.get())))); + + public static final DeferredBlock BLACKSLAG_BRICKS = register(blockWithItem("blackslag_bricks", () -> new Block(blackslag(SoundType.DEEPSLATE_BRICKS)))); + public static final DeferredBlock BLACKSLAG_BRICK_STAIRS = register(blockWithItem("blackslag_brick_stairs", () -> new StairBlock(BLACKSLAG_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BLACKSLAG_BRICKS.get())))); + public static final DeferredBlock BLACKSLAG_BRICK_SLAB = register(blockWithItem("blackslag_brick_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(BLACKSLAG_BRICKS.get())))); + public static final DeferredBlock BLACKSLAG_BRICK_WALL = register(blockWithItem("blackslag_brick_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(BLACKSLAG_BRICKS.get())))); + public static final DeferredBlock CRACKED_BLACKSLAG_BRICKS = register(blockWithItem("cracked_blackslag_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(BLACKSLAG_BRICKS.get())))); + + public static final DeferredBlock POLISHED_BLACKSLAG = register(blockWithItem("polished_blackslag", () -> new Block(blackslag(SoundType.POLISHED_DEEPSLATE)))); + public static final DeferredBlock POLISHED_BLACKSLAG_STAIRS = register(blockWithItem("polished_blackslag_stairs", () -> new StairBlock(POLISHED_BLACKSLAG.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(POLISHED_BLACKSLAG.get())))); + public static final DeferredBlock POLISHED_BLACKSLAG_SLAB = register(blockWithItem("polished_blackslag_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BLACKSLAG.get())))); + public static final DeferredBlock POLISHED_BLACKSLAG_WALL = register(blockWithItem("polished_blackslag_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BLACKSLAG.get())))); + public static final DeferredBlock POLISHED_BLACKSLAG_BUTTON = register(blockWithItem("polished_blackslag_button", () -> new ButtonBlock(SpectrumBlockSetTypes.POLISHED_BLACKSLAG, 5, BlockBehaviour.Properties.of().pushReaction(PushReaction.DESTROY).noCollission().strength(0.5F)))); + public static final DeferredBlock POLISHED_BLACKSLAG_PRESSURE_PLATE = register(blockWithItem("polished_blackslag_pressure_plate", () -> new PressurePlateBlock(SpectrumBlockSetTypes.POLISHED_BLACKSLAG, BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_BLACK).requiresCorrectToolForDrops().noCollission().strength(0.5F)))); + public static final DeferredBlock CHISELED_POLISHED_BLACKSLAG = register(blockWithItem("chiseled_polished_blackslag", () -> new Block(blackslag(SoundType.DEEPSLATE_BRICKS)))); + + public static final DeferredBlock POLISHED_BLACKSLAG_PILLAR = register(axisRotated(blockWithItem("polished_blackslag_pillar", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(BLACKSLAG_BRICKS.get()))), TexturedModel.createDefault(b -> SpectrumTextureMaps.sideEnd(b, "", CHISELED_POLISHED_BLACKSLAG.get(), ""), ModelTemplates.CUBE_COLUMN))); + public static final DeferredBlock ANCIENT_CHISELED_POLISHED_BLACKSLAG = register(simple(blockWithItem("ancient_chiseled_polished_blackslag", () -> new Block(blackslag(SoundType.DEEPSLATE_BRICKS))))); + + public static final DeferredBlock SHALE_CLAY = register(singleton(blockWithItem("shale_clay", () -> new ShaleClayBlock(Weathering.WeatheringLevel.UNAFFECTED, blackslag(SoundType.MUD_BRICKS))), TexturedModel.COLUMN)); + public static final DeferredBlock TILLED_SHALE_CLAY = register(singleton(blockWithItem("tilled_shale_clay", () -> new ImmutableFarmlandBlock(BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get()), SHALE_CLAY.get().defaultBlockState())), SpectrumTexturedModelProviders.farmland(b -> SHALE_CLAY.get(), "_side", b -> b, ""))); + + public static final DeferredBlock POLISHED_SHALE_CLAY = register(blockWithItem("polished_shale_clay", () -> new ShaleClayBlock(Weathering.WeatheringLevel.UNAFFECTED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + public static final DeferredBlock POLISHED_SHALE_CLAY_STAIRS = register(blockWithItem("polished_shale_clay_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.UNAFFECTED, POLISHED_SHALE_CLAY.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + public static final DeferredBlock POLISHED_SHALE_CLAY_SLAB = register(blockWithItem("polished_shale_clay_slab", () -> new WeatheringSlabBlock(Weathering.WeatheringLevel.UNAFFECTED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + + public static final DeferredBlock EXPOSED_POLISHED_SHALE_CLAY = register(blockWithItem("exposed_polished_shale_clay", () -> new ShaleClayBlock(Weathering.WeatheringLevel.EXPOSED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + public static final DeferredBlock EXPOSED_POLISHED_SHALE_CLAY_STAIRS = register(blockWithItem("exposed_polished_shale_clay_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.EXPOSED, EXPOSED_POLISHED_SHALE_CLAY.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + public static final DeferredBlock EXPOSED_POLISHED_SHALE_CLAY_SLAB = register(blockWithItem("exposed_polished_shale_clay_slab", () -> new WeatheringSlabBlock(Weathering.WeatheringLevel.EXPOSED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + + public static final DeferredBlock WEATHERED_POLISHED_SHALE_CLAY = register(blockWithItem("weathered_polished_shale_clay", () -> new ShaleClayBlock(Weathering.WeatheringLevel.WEATHERED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + public static final DeferredBlock WEATHERED_POLISHED_SHALE_CLAY_STAIRS = register(blockWithItem("weathered_polished_shale_clay_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.WEATHERED, WEATHERED_POLISHED_SHALE_CLAY.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + public static final DeferredBlock WEATHERED_POLISHED_SHALE_CLAY_SLAB = register(blockWithItem("weathered_polished_shale_clay_slab", () -> new WeatheringSlabBlock(Weathering.WeatheringLevel.WEATHERED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + + public static final DeferredBlock SHALE_CLAY_BRICKS = register(blockWithItem("shale_clay_bricks", () -> new ShaleClayBlock(Weathering.WeatheringLevel.UNAFFECTED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + public static final DeferredBlock SHALE_CLAY_BRICK_STAIRS = register(blockWithItem("shale_clay_brick_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.UNAFFECTED, SHALE_CLAY_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + public static final DeferredBlock SHALE_CLAY_BRICK_SLAB = register(blockWithItem("shale_clay_brick_slab", () -> new WeatheringSlabBlock(Weathering.WeatheringLevel.UNAFFECTED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + + public static final DeferredBlock EXPOSED_SHALE_CLAY_BRICKS = register(blockWithItem("exposed_shale_clay_bricks", () -> new ShaleClayBlock(Weathering.WeatheringLevel.EXPOSED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + public static final DeferredBlock EXPOSED_SHALE_CLAY_BRICK_STAIRS = register(blockWithItem("exposed_shale_clay_brick_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.EXPOSED, EXPOSED_SHALE_CLAY_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + public static final DeferredBlock EXPOSED_SHALE_CLAY_BRICK_SLAB = register(blockWithItem("exposed_shale_clay_brick_slab", () -> new WeatheringSlabBlock(Weathering.WeatheringLevel.EXPOSED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + + public static final DeferredBlock WEATHERED_SHALE_CLAY_BRICKS = register(blockWithItem("weathered_shale_clay_bricks", () -> new ShaleClayBlock(Weathering.WeatheringLevel.WEATHERED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + public static final DeferredBlock WEATHERED_SHALE_CLAY_BRICK_STAIRS = register(blockWithItem("weathered_shale_clay_brick_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.WEATHERED, WEATHERED_SHALE_CLAY_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + public static final DeferredBlock WEATHERED_SHALE_CLAY_BRICK_SLAB = register(blockWithItem("weathered_shale_clay_brick_slab", () -> new WeatheringSlabBlock(Weathering.WeatheringLevel.WEATHERED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + + public static final DeferredBlock SHALE_CLAY_TILES = register(blockWithItem("shale_clay_tiles", () -> new ShaleClayBlock(Weathering.WeatheringLevel.UNAFFECTED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + public static final DeferredBlock SHALE_CLAY_TILE_STAIRS = register(blockWithItem("shale_clay_tile_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.UNAFFECTED, SHALE_CLAY_TILES.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + public static final DeferredBlock SHALE_CLAY_TILE_SLAB = register(blockWithItem("shale_clay_tile_slab", () -> new WeatheringSlabBlock(Weathering.WeatheringLevel.UNAFFECTED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + + public static final DeferredBlock EXPOSED_SHALE_CLAY_TILES = register(blockWithItem("exposed_shale_clay_tiles", () -> new ShaleClayBlock(Weathering.WeatheringLevel.EXPOSED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + public static final DeferredBlock EXPOSED_SHALE_CLAY_TILE_STAIRS = register(blockWithItem("exposed_shale_clay_tile_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.EXPOSED, EXPOSED_SHALE_CLAY_TILES.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + public static final DeferredBlock EXPOSED_SHALE_CLAY_TILE_SLAB = register(blockWithItem("exposed_shale_clay_tile_slab", () -> new WeatheringSlabBlock(Weathering.WeatheringLevel.EXPOSED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + + public static final DeferredBlock WEATHERED_SHALE_CLAY_TILES = register(blockWithItem("weathered_shale_clay_tiles", () -> new ShaleClayBlock(Weathering.WeatheringLevel.WEATHERED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + public static final DeferredBlock WEATHERED_SHALE_CLAY_TILE_STAIRS = register(blockWithItem("weathered_shale_clay_tile_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.WEATHERED, WEATHERED_SHALE_CLAY_TILES.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + public static final DeferredBlock WEATHERED_SHALE_CLAY_TILE_SLAB = register(blockWithItem("weathered_shale_clay_tile_slab", () -> new WeatheringSlabBlock(Weathering.WeatheringLevel.WEATHERED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); + + public static final DeferredBlock ROCK_CRYSTAL = register(simple(blockWithItem("rock_crystal", () -> new Block(settings(MapColor.QUARTZ, SoundType.NETHER_BRICKS, 200F).requiresCorrectToolForDrops())))); + + public static final DeferredBlock PYRITE = register(axisRotated(blockWithItem("pyrite", () -> new RotatedPillarBlock(settings(MapColor.TERRACOTTA_YELLOW, SoundType.CHAIN, 50.0F).requiresCorrectToolForDrops())), TexturedModel.COLUMN)); + public static final DeferredBlock PYRITE_SLAB = register(blockWithItem("pyrite_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(PYRITE.get())))); + public static final DeferredBlock PYRITE_STAIRS = register(blockWithItem("pyrite_stairs", () -> new StairBlock(PYRITE.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(PYRITE.get())))); + public static final DeferredBlock PYRITE_WALL = register(blockWithItem("pyrite_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(PYRITE.get())))); + + public static final DeferredBlock PYRITE_PILE = register(axisRotated(blockWithItem("pyrite_pile", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(PYRITE.get()))), TexturedModel.COLUMN)); + public static final DeferredBlock PYRITE_PLATING = register(simple(blockWithItem("pyrite_plating", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PYRITE.get()))))); + public static final DeferredBlock PYRITE_TUBING = register(axisRotated(blockWithItem("pyrite_tubing", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(PYRITE.get()))), TexturedModel.COLUMN)); + public static final DeferredBlock PYRITE_RELIEF = register(axisRotated(blockWithItem("pyrite_relief", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(PYRITE.get()))), SpectrumTexturedModelProviders.cubeColumn(b -> b, "_side", b -> PYRITE_TUBING.get(), "_top"))); + public static final DeferredBlock PYRITE_STACK = register(simple(blockWithItem("pyrite_stack", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PYRITE.get()))))); + public static final DeferredBlock PYRITE_PANELING = register(singleton(blockWithItem("pyrite_paneling", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PYRITE.get()))), SpectrumTexturedModelProviders.cubeColumn(b -> b, "", b -> PYRITE_PLATING.get(), ""))); + public static final DeferredBlock PYRITE_VENT = register(singleton(blockWithItem("pyrite_vent", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PYRITE.get()))), SpectrumTexturedModelProviders.cubeColumn(b -> b, "", b -> PYRITE_PLATING.get(), ""))); + public static final DeferredBlock PYRITE_RIPPER = register(blockWithItem("pyrite_ripper", () -> new PyriteRipperBlock(BlockBehaviour.Properties.ofFullCopy(PYRITE.get()).noOcclusion().isValidSpawn(SpectrumBlocks::never).isViewBlocking(SpectrumBlocks::never))).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.properties(BlockStateProperties.FACING, PyriteRipperBlock.MIRRORED) .select(Direction.EAST, false, SpectrumModelHelper.createModelVariant(block, "").with(VariantProperties.X_ROT, VariantProperties.Rotation.R90).with(VariantProperties.Y_ROT, VariantProperties.Rotation.R90)) .select(Direction.NORTH, false, SpectrumModelHelper.createModelVariant(block, "").with(VariantProperties.X_ROT, VariantProperties.Rotation.R90)) .select(Direction.SOUTH, false, SpectrumModelHelper.createModelVariant(block, "").with(VariantProperties.X_ROT, VariantProperties.Rotation.R270)) @@ -324,43 +325,43 @@ private static BlockBehaviour.Properties blackslag(SoundType blockSoundGroup) { .select(Direction.WEST, true, SpectrumModelHelper.createModelVariant(block, "_mirrored")) .select(Direction.UP, true, SpectrumModelHelper.createModelVariant(block, "").with(VariantProperties.Y_ROT, VariantProperties.Rotation.R90)) .select(Direction.DOWN, true, SpectrumModelHelper.createModelVariant(block, "").with(VariantProperties.X_ROT, VariantProperties.Rotation.R180).with(VariantProperties.Y_ROT, VariantProperties.Rotation.R90))))); - public static final DeferredBlock PYRITE_PROJECTOR = register(singletonWithSoup(blockWithItem("pyrite_projector", () -> new ProjectorBlock(BlockBehaviour.Properties.ofFullCopy(PYRITE.get()), "pyrite_projector_projection", 16, 14, 1.375F, 1F, 16F), InkColors.BROWN), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock PYRITE_PROJECTOR = register(singletonWithSoup(blockWithItem("pyrite_projector", () -> new ProjectorBlock(BlockBehaviour.Properties.ofFullCopy(PYRITE.get()), "pyrite_projector_projection", 16, 14, 1.375F, 1F, 16F)), ModelLocationUtils::getModelLocation)); - public static final DeferredBlock PYRITE_TILES = register(simple(blockWithItem("pyrite_tiles", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PYRITE.get())), InkColors.BROWN))); - public static final DeferredBlock PYRITE_TILE_SLAB = register(blockWithItem("pyrite_tile_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(PYRITE_TILES.get())), InkColors.BROWN)); - public static final DeferredBlock PYRITE_TILE_STAIRS = register(blockWithItem("pyrite_tile_stairs", () -> new StairBlock(PYRITE_TILES.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(PYRITE_TILES.get())), InkColors.BROWN)); - public static final DeferredBlock PYRITE_TILE_WALL = register(blockWithItem("pyrite_tile_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(PYRITE_TILES.get())), InkColors.BROWN)); + public static final DeferredBlock PYRITE_TILES = register(simple(blockWithItem("pyrite_tiles", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PYRITE.get()))))); + public static final DeferredBlock PYRITE_TILE_SLAB = register(blockWithItem("pyrite_tile_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(PYRITE_TILES.get())))); + public static final DeferredBlock PYRITE_TILE_STAIRS = register(blockWithItem("pyrite_tile_stairs", () -> new StairBlock(PYRITE_TILES.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(PYRITE_TILES.get())))); + public static final DeferredBlock PYRITE_TILE_WALL = register(blockWithItem("pyrite_tile_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(PYRITE_TILES.get())))); - public static final DeferredBlock SPLINTERSPAWN_INFESTED_PYRITE = register(parented(blockWithItem("splinterspawn_infested_pyrite", () -> new RotatedPillarSplinterspawnInfestedBlock(PYRITE.get(), BlockBehaviour.Properties.ofFullCopy(PYRITE.get())), InkColors.BROWN), b -> PYRITE.get())); - public static final DeferredBlock SPLINTERSPAWN_INFESTED_SHALE_CLAY = register(parented(blockWithItem("splinterspawn_infested_shale_clay", () -> new SplinterspawnInfestedBlock(SHALE_CLAY.get(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())), InkColors.BROWN), b -> SHALE_CLAY.get())); + public static final DeferredBlock SPLINTERSPAWN_INFESTED_PYRITE = register(parented(blockWithItem("splinterspawn_infested_pyrite", () -> new RotatedPillarSplinterspawnInfestedBlock(PYRITE.get(), BlockBehaviour.Properties.ofFullCopy(PYRITE.get()))), b -> PYRITE.get())); + public static final DeferredBlock SPLINTERSPAWN_INFESTED_SHALE_CLAY = register(parented(blockWithItem("splinterspawn_infested_shale_clay", () -> new SplinterspawnInfestedBlock(SHALE_CLAY.get(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get()))), b -> SHALE_CLAY.get())); - public static final DeferredBlock DRAGONBONE = register(axisRotated(blockWithItem("dragonbone", () -> new DragonboneBlock(BlockBehaviour.Properties.ofFullCopy(BONE_BLOCK).strength(-1.0F, 22.0F).pushReaction(PushReaction.BLOCK)), InkColors.GREEN), TexturedModel.COLUMN)); - public static final DeferredBlock CRACKED_DRAGONBONE = register(axisRotated(blockWithItem("cracked_dragonbone", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(BONE_BLOCK).strength(100.0F, 1200.0F).pushReaction(PushReaction.BLOCK)), () -> IS.of().component(SpectrumDataComponentTypes.DAMAGE_IMMUNE, List.of(DamageTypeTags.IS_EXPLOSION)), InkColors.GREEN), TexturedModel.COLUMN)); + public static final DeferredBlock DRAGONBONE = register(axisRotated(blockWithItem("dragonbone", () -> new DragonboneBlock(BlockBehaviour.Properties.ofFullCopy(BONE_BLOCK).strength(-1.0F, 22.0F).pushReaction(PushReaction.BLOCK))), TexturedModel.COLUMN)); + public static final DeferredBlock CRACKED_DRAGONBONE = register(axisRotated(blockWithItem("cracked_dragonbone", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(BONE_BLOCK).strength(100.0F, 1200.0F).pushReaction(PushReaction.BLOCK)), () -> IS.of().component(SpectrumDataComponentTypes.DAMAGE_IMMUNE, List.of(DamageTypeTags.IS_EXPLOSION))), TexturedModel.COLUMN)); - public static final DeferredBlock POLISHED_BONE_ASH = register(blockWithItem("polished_bone_ash", () -> new Block(BlockBehaviour.Properties.ofFullCopy(CRACKED_DRAGONBONE.get()).destroyTime(1500.0F).mapColor(MapColor.SNOW)), InkColors.CYAN)); - public static final DeferredBlock POLISHED_BONE_ASH_STAIRS = register(blockWithItem("polished_bone_ash_stairs", () -> new StairBlock(POLISHED_BONE_ASH.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(POLISHED_BONE_ASH.get())), InkColors.CYAN)); - public static final DeferredBlock POLISHED_BONE_ASH_SLAB = register(blockWithItem("polished_bone_ash_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BONE_ASH.get())), InkColors.CYAN)); - public static final DeferredBlock POLISHED_BONE_ASH_WALL = register(blockWithItem("polished_bone_ash_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BONE_ASH.get())), InkColors.CYAN)); - - public static final DeferredBlock POLISHED_BONE_ASH_PILLAR = register(axisRotated(blockWithItem("polished_bone_ash_pillar", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BONE_ASH.get())), InkColors.CYAN), TexturedModel.COLUMN)); - public static final DeferredBlock BONE_ASH_SHINGLES = register(blockWithItem("bone_ash_shingles", () -> new ShinglesBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BONE_ASH.get()).noOcclusion()), InkColors.CYAN).withBlockModel((ctx, block) -> SpectrumModelHelper.createVariantsSupplier(block, ModelLocationUtils.getModelLocation(block)).with(SpectrumModelHelper.createEastDefaultHorizontalFacingVariantMap()))); - - public static final DeferredBlock BONE_ASH_BRICKS = register(blockWithItem("bone_ash_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_BONE_ASH.get())), InkColors.CYAN)); - public static final DeferredBlock BONE_ASH_BRICK_STAIRS = register(blockWithItem("bone_ash_brick_stairs", () -> new StairBlock(BONE_ASH_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BONE_ASH_BRICKS.get())), InkColors.CYAN)); - public static final DeferredBlock BONE_ASH_BRICK_SLAB = register(blockWithItem("bone_ash_brick_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(BONE_ASH_BRICKS.get())), InkColors.CYAN)); - public static final DeferredBlock BONE_ASH_BRICK_WALL = register(blockWithItem("bone_ash_brick_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(BONE_ASH_BRICKS.get())), InkColors.CYAN)); - - public static final DeferredBlock BONE_ASH_TILES = register(blockWithItem("bone_ash_tiles", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_BONE_ASH.get())), InkColors.CYAN)); - public static final DeferredBlock BONE_ASH_TILE_STAIRS = register(blockWithItem("bone_ash_tile_stairs", () -> new StairBlock(BONE_ASH_TILES.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BONE_ASH_TILES.get())), InkColors.CYAN)); - public static final DeferredBlock BONE_ASH_TILE_SLAB = register(blockWithItem("bone_ash_tile_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(BONE_ASH_TILES.get())), InkColors.CYAN)); - public static final DeferredBlock BONE_ASH_TILE_WALL = register(blockWithItem("bone_ash_tile_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(BONE_ASH_TILES.get())), InkColors.CYAN)); - - public static final DeferredBlock SLUSH = register(simple(blockWithItem("slush", () -> new SlushBlock(blackslag(SoundType.MUDDY_MANGROVE_ROOTS)), InkColors.BROWN))); - public static final DeferredBlock OVERGROWN_SLUSH = register(snowy(blockWithItem("overgrown_slush", () -> new OvergrownSlushBlock(blackslag(SoundType.MUDDY_MANGROVE_ROOTS)), InkColors.BROWN), SpectrumTexturedModelProviders.cubeBottomTopParticle(b -> b, "_side", b -> b, "_top", b -> SLUSH.get(), "", b -> b, "_top"), SpectrumTexturedModelProviders.cubeBottomTopParticle(b -> b, "_snow_side", b -> b, "_snow_top", b -> SLUSH.get(), "", b -> b, "_snow_top"))); - public static final DeferredBlock TILLED_SLUSH = register(singleton(blockWithItem("tilled_slush", () -> new TilledSlushBlock(BlockBehaviour.Properties.ofFullCopy(SLUSH.get()), SLUSH.get().defaultBlockState()), InkColors.BROWN), SpectrumTexturedModelProviders.farmland(b -> SLUSH.get(), "", b -> b, ""))); - - public static final DeferredBlock BLACK_MATERIA = register(simple(blockWithItem("black_materia", () -> new BlackMateriaBlock(settings(MapColor.TERRACOTTA_BLACK, SoundType.SAND, 0.0F).instrument(NoteBlockInstrument.SNARE).randomTicks()), InkColors.GRAY))); - public static final DeferredBlock BLACK_SLUDGE = register(simple(blockWithItem("black_sludge", () -> new Block(settings(MapColor.TERRACOTTA_BLACK, SoundType.SAND, 0.5F).instrument(NoteBlockInstrument.SNARE)), InkColors.GRAY))); + public static final DeferredBlock POLISHED_BONE_ASH = register(blockWithItem("polished_bone_ash", () -> new Block(BlockBehaviour.Properties.ofFullCopy(CRACKED_DRAGONBONE.get()).destroyTime(1500.0F).mapColor(MapColor.SNOW)))); + public static final DeferredBlock POLISHED_BONE_ASH_STAIRS = register(blockWithItem("polished_bone_ash_stairs", () -> new StairBlock(POLISHED_BONE_ASH.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(POLISHED_BONE_ASH.get())))); + public static final DeferredBlock POLISHED_BONE_ASH_SLAB = register(blockWithItem("polished_bone_ash_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BONE_ASH.get())))); + public static final DeferredBlock POLISHED_BONE_ASH_WALL = register(blockWithItem("polished_bone_ash_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BONE_ASH.get())))); + + public static final DeferredBlock POLISHED_BONE_ASH_PILLAR = register(axisRotated(blockWithItem("polished_bone_ash_pillar", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BONE_ASH.get()))), TexturedModel.COLUMN)); + public static final DeferredBlock BONE_ASH_SHINGLES = register(blockWithItem("bone_ash_shingles", () -> new ShinglesBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BONE_ASH.get()).noOcclusion())).withBlockModel((ctx, block) -> SpectrumModelHelper.createVariantsSupplier(block, ModelLocationUtils.getModelLocation(block)).with(SpectrumModelHelper.createEastDefaultHorizontalFacingVariantMap()))); + + public static final DeferredBlock BONE_ASH_BRICKS = register(blockWithItem("bone_ash_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_BONE_ASH.get())))); + public static final DeferredBlock BONE_ASH_BRICK_STAIRS = register(blockWithItem("bone_ash_brick_stairs", () -> new StairBlock(BONE_ASH_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BONE_ASH_BRICKS.get())))); + public static final DeferredBlock BONE_ASH_BRICK_SLAB = register(blockWithItem("bone_ash_brick_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(BONE_ASH_BRICKS.get())))); + public static final DeferredBlock BONE_ASH_BRICK_WALL = register(blockWithItem("bone_ash_brick_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(BONE_ASH_BRICKS.get())))); + + public static final DeferredBlock BONE_ASH_TILES = register(blockWithItem("bone_ash_tiles", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_BONE_ASH.get())))); + public static final DeferredBlock BONE_ASH_TILE_STAIRS = register(blockWithItem("bone_ash_tile_stairs", () -> new StairBlock(BONE_ASH_TILES.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BONE_ASH_TILES.get())))); + public static final DeferredBlock BONE_ASH_TILE_SLAB = register(blockWithItem("bone_ash_tile_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(BONE_ASH_TILES.get())))); + public static final DeferredBlock BONE_ASH_TILE_WALL = register(blockWithItem("bone_ash_tile_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(BONE_ASH_TILES.get())))); + + public static final DeferredBlock SLUSH = register(simple(blockWithItem("slush", () -> new SlushBlock(blackslag(SoundType.MUDDY_MANGROVE_ROOTS))))); + public static final DeferredBlock OVERGROWN_SLUSH = register(snowy(blockWithItem("overgrown_slush", () -> new OvergrownSlushBlock(blackslag(SoundType.MUDDY_MANGROVE_ROOTS))), SpectrumTexturedModelProviders.cubeBottomTopParticle(b -> b, "_side", b -> b, "_top", b -> SLUSH.get(), "", b -> b, "_top"), SpectrumTexturedModelProviders.cubeBottomTopParticle(b -> b, "_snow_side", b -> b, "_snow_top", b -> SLUSH.get(), "", b -> b, "_snow_top"))); + public static final DeferredBlock TILLED_SLUSH = register(singleton(blockWithItem("tilled_slush", () -> new TilledSlushBlock(BlockBehaviour.Properties.ofFullCopy(SLUSH.get()), SLUSH.get().defaultBlockState())), SpectrumTexturedModelProviders.farmland(b -> SLUSH.get(), "", b -> b, ""))); + + public static final DeferredBlock BLACK_MATERIA = register(simple(blockWithItem("black_materia", () -> new BlackMateriaBlock(settings(MapColor.TERRACOTTA_BLACK, SoundType.SAND, 0.0F).instrument(NoteBlockInstrument.SNARE).randomTicks())))); + public static final DeferredBlock BLACK_SLUDGE = register(simple(blockWithItem("black_sludge", () -> new Block(settings(MapColor.TERRACOTTA_BLACK, SoundType.SAND, 0.5F).instrument(NoteBlockInstrument.SNARE))))); public static final DeferredBlock SAG_LEAF = register(cross(block("sag_leaf", () -> new BlackSludgePlantBlock(BlockBehaviour.Properties.ofFullCopy(SHORT_GRASS).mapColor(MapColor.TERRACOTTA_BLACK))))); public static final DeferredBlock SAG_BUBBLE = register(cross(block("sag_bubble", () -> new BlackSludgePlantBlock(BlockBehaviour.Properties.ofFullCopy(SHORT_GRASS).mapColor(MapColor.TERRACOTTA_BLACK))))); public static final DeferredBlock SMALL_SAG_BUBBLE = register(cross(block("small_sag_bubble", () -> new BlackSludgePlantBlock(BlockBehaviour.Properties.ofFullCopy(SHORT_GRASS).mapColor(MapColor.TERRACOTTA_BLACK))))); @@ -382,7 +383,7 @@ private static BlockBehaviour.Properties blackslag(SoundType blockSoundGroup) { .with(Condition.or(noSides, Condition.condition().term(PrimordialFireBlock.EAST, true)), createModelVariant(side0).with(VariantProperties.Y_ROT, VariantProperties.Rotation.R90), createModelVariant(side1).with(VariantProperties.Y_ROT, VariantProperties.Rotation.R90), createModelVariant(sideAlt0).with(VariantProperties.Y_ROT, VariantProperties.Rotation.R90), createModelVariant(sideAlt1).with(VariantProperties.Y_ROT, VariantProperties.Rotation.R90)); })); public static final DeferredBlock PRIMORDIAL_WALL_TORCH = register(defaultEastHorizontalFacing(block("primordial_wall_torch", () -> new WallTorchBlock(SpectrumParticleTypes.PRIMORDIAL_FLAME, BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_WALL_TORCH).lightLevel(s -> 13))), ModelLocationUtils::getModelLocation)); - public static final DeferredBlock PRIMORDIAL_TORCH = register(singletonWithSoup(blockWithItem("primordial_torch", () -> new TorchBlock(SpectrumParticleTypes.PRIMORDIAL_FLAME, BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_TORCH).lightLevel(s -> 13)), block -> new StandingAndWallBlockItem(block, PRIMORDIAL_WALL_TORCH.get(), IS.of(), Direction.DOWN), InkColors.ORANGE), ModelLocationUtils::getModelLocation).withItemModel(SpectrumModelHelper::registerItemModel)); + public static final DeferredBlock PRIMORDIAL_TORCH = register(singletonWithSoup(blockWithItem("primordial_torch", () -> new TorchBlock(SpectrumParticleTypes.PRIMORDIAL_FLAME, BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_TORCH).lightLevel(s -> 13)), block -> new StandingAndWallBlockItem(block, PRIMORDIAL_WALL_TORCH.get(), IS.of(), Direction.DOWN)), ModelLocationUtils::getModelLocation).withItemModel(SpectrumModelHelper::registerItemModel)); public static BlockRegistrar moonstoneChiseled(BlockRegistrar registrar, ResourceLocation capTexture) { return registrar.withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerParentedItemModel(ctx, block, block, "_down")).withBlockModel((ctx, block) -> { @@ -393,80 +394,80 @@ public static BlockRegistrar moonstoneChiseled(BlockRegistr }); } - public static final DeferredBlock SMOOTH_BASALT_STAIRS = register(blockWithItem("smooth_basalt_stairs", () -> new StairBlock(BASALT.defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BASALT)), InkColors.BROWN)); - public static final DeferredBlock SMOOTH_BASALT_SLAB = register(blockWithItem("smooth_basalt_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(BASALT)), InkColors.BROWN)); - public static final DeferredBlock SMOOTH_BASALT_WALL = register(blockWithItem("smooth_basalt_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(BASALT)), InkColors.BROWN)); - - public static final DeferredBlock POLISHED_BASALT = register(blockWithItem("polished_basalt", () -> new Block(settings(MapColor.COLOR_BLACK, SoundType.BASALT, 2.0F, 5.0F).instrument(NoteBlockInstrument.BASEDRUM).requiresCorrectToolForDrops()), InkColors.BROWN)); - public static final DeferredBlock POLISHED_BASALT_STAIRS = register(blockWithItem("polished_basalt_stairs", () -> new StairBlock(POLISHED_BASALT.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get())), InkColors.BROWN)); - public static final DeferredBlock POLISHED_BASALT_SLAB = register(blockWithItem("polished_basalt_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get())), InkColors.BROWN)); - public static final DeferredBlock POLISHED_BASALT_WALL = register(blockWithItem("polished_basalt_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get())), InkColors.BROWN)); - public static final DeferredBlock POLISHED_BASALT_BUTTON = register(blockWithItem("polished_basalt_button", () -> new ButtonBlock(SpectrumBlockSetTypes.POLISHED_BASALT, 5, BlockBehaviour.Properties.of().noCollission().strength(0.5F).pushReaction(PushReaction.DESTROY)), InkColors.BROWN)); - public static final DeferredBlock POLISHED_BASALT_PRESSURE_PLATE = register(blockWithItem("polished_basalt_pressure_plate", () -> new PressurePlateBlock(SpectrumBlockSetTypes.POLISHED_BASALT, BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_BLACK).forceSolidOn().instrument(NoteBlockInstrument.BASEDRUM).requiresCorrectToolForDrops().noCollission().strength(0.5F).pushReaction(PushReaction.DESTROY)), InkColors.BROWN)); - public static final DeferredBlock CHISELED_POLISHED_BASALT = register(blockWithItem("chiseled_polished_basalt", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get())), InkColors.BROWN)); - - public static final DeferredBlock POLISHED_BASALT_PILLAR = register(axisRotated(blockWithItem("polished_basalt_pillar", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get())), InkColors.BROWN), TexturedModel.COLUMN)); - public static final DeferredBlock POLISHED_BASALT_CREST = register(blockWithItem("polished_basalt_crest", () -> new CardinalFacingBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get())), InkColors.BROWN).withBlockModel((ctx, block) -> SpectrumModelHelper.createVariantsSupplier(ctx, block, TexturedModel.COLUMN).with(SpectrumModelHelper.createCardinalFacingVariantMap()))); - public static final DeferredBlock NOTCHED_POLISHED_BASALT = register(singleton(blockWithItem("notched_polished_basalt", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get())), InkColors.BROWN), TexturedModel.COLUMN)); - - public static final DeferredBlock BASALT_BRICKS = register(blockWithItem("basalt_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get())), InkColors.BROWN)); - public static final DeferredBlock BASALT_BRICK_STAIRS = register(blockWithItem("basalt_brick_stairs", () -> new StairBlock(BASALT_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BASALT_BRICKS.get())), InkColors.BROWN)); - public static final DeferredBlock BASALT_BRICK_SLAB = register(blockWithItem("basalt_brick_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(BASALT_BRICKS.get())), InkColors.BROWN)); - public static final DeferredBlock BASALT_BRICK_WALL = register(blockWithItem("basalt_brick_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(BASALT_BRICKS.get())), InkColors.BROWN)); - public static final DeferredBlock CRACKED_BASALT_BRICKS = register(blockWithItem("cracked_basalt_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(BASALT_BRICKS.get())), InkColors.BROWN)); - - public static final DeferredBlock BASALT_TILES = register(blockWithItem("basalt_tiles", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get())), InkColors.BROWN)); - public static final DeferredBlock BASALT_TILE_STAIRS = register(blockWithItem("basalt_tile_stairs", () -> new StairBlock(BASALT_TILES.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BASALT_TILES.get())), InkColors.BROWN)); - public static final DeferredBlock BASALT_TILE_SLAB = register(blockWithItem("basalt_tile_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(BASALT_TILES.get())), InkColors.BROWN)); - public static final DeferredBlock BASALT_TILE_WALL = register(blockWithItem("basalt_tile_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(BASALT_TILES.get())), InkColors.BROWN)); - public static final DeferredBlock CRACKED_BASALT_TILES = register(blockWithItem("cracked_basalt_tiles", () -> new Block(BlockBehaviour.Properties.ofFullCopy(BASALT_TILES.get())), InkColors.BROWN)); - - public static final DeferredBlock TOPAZ_CHISELED_BASALT = register(simple(blockWithItem("topaz_chiseled_basalt", () -> new Block(BlockBehaviour.Properties.ofFullCopy(BASALT_BRICKS.get()).lightLevel(s -> 6)), InkColors.CYAN))); - public static final DeferredBlock AMETHYST_CHISELED_BASALT = register(simple(blockWithItem("amethyst_chiseled_basalt", () -> new Block(BlockBehaviour.Properties.ofFullCopy(BASALT_BRICKS.get()).lightLevel(s -> 5)), InkColors.MAGENTA))); - public static final DeferredBlock CITRINE_CHISELED_BASALT = register(simple(blockWithItem("citrine_chiseled_basalt", () -> new Block(BlockBehaviour.Properties.ofFullCopy(BASALT_BRICKS.get()).lightLevel(s -> 7)), InkColors.YELLOW))); - public static final DeferredBlock ONYX_CHISELED_BASALT = register(simple(blockWithItem("onyx_chiseled_basalt", () -> new Block(BlockBehaviour.Properties.ofFullCopy(BASALT_BRICKS.get()).lightLevel(s -> 3)), InkColors.BLACK))); - public static final DeferredBlock MOONSTONE_CHISELED_BASALT = register(moonstoneChiseled(blockWithItem("moonstone_chiseled_basalt", () -> new SpectrumLineFacingBlock(BlockBehaviour.Properties.ofFullCopy(BASALT_BRICKS.get()).lightLevel(s -> 12)), InkColors.WHITE), SpectrumTextures.BASALT_CAP)); - - public static final DeferredBlock CALCITE_STAIRS = register(blockWithItem("calcite_stairs", () -> new StairBlock(CALCITE.defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(CALCITE)), InkColors.BROWN)); - public static final DeferredBlock CALCITE_SLAB = register(blockWithItem("calcite_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(CALCITE)), InkColors.BROWN)); - public static final DeferredBlock CALCITE_WALL = register(blockWithItem("calcite_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(CALCITE)), InkColors.BROWN)); - - public static final DeferredBlock POLISHED_CALCITE = register(blockWithItem("polished_calcite", () -> new Block(settings(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE, 2.0F, 5.0F).instrument(NoteBlockInstrument.BASEDRUM).requiresCorrectToolForDrops()), InkColors.BROWN)); - public static final DeferredBlock POLISHED_CALCITE_STAIRS = register(blockWithItem("polished_calcite_stairs", () -> new StairBlock(POLISHED_CALCITE.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(POLISHED_CALCITE.get())), InkColors.BROWN)); - public static final DeferredBlock POLISHED_CALCITE_SLAB = register(blockWithItem("polished_calcite_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_CALCITE.get())), InkColors.BROWN)); - public static final DeferredBlock POLISHED_CALCITE_WALL = register(blockWithItem("polished_calcite_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_CALCITE.get())), InkColors.BROWN)); - public static final DeferredBlock POLISHED_CALCITE_BUTTON = register(blockWithItem("polished_calcite_button", () -> new ButtonBlock(SpectrumBlockSetTypes.POLISHED_CALCITE, 5, BlockBehaviour.Properties.of().noCollission().strength(0.5F).pushReaction(PushReaction.DESTROY)), InkColors.BROWN)); - public static final DeferredBlock POLISHED_CALCITE_PRESSURE_PLATE = register(blockWithItem("polished_calcite_pressure_plate", () -> new PressurePlateBlock(SpectrumBlockSetTypes.POLISHED_CALCITE, BlockBehaviour.Properties.of().mapColor(MapColor.TERRACOTTA_WHITE).forceSolidOn().instrument(NoteBlockInstrument.BASEDRUM).requiresCorrectToolForDrops().noCollission().strength(0.5F).pushReaction(PushReaction.DESTROY)), InkColors.BROWN)); - public static final DeferredBlock CHISELED_POLISHED_CALCITE = register(blockWithItem("chiseled_polished_calcite", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_CALCITE.get())), InkColors.BROWN)); - - public static final DeferredBlock POLISHED_CALCITE_PILLAR = register(axisRotated(blockWithItem("polished_calcite_pillar", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_CALCITE.get())), InkColors.BROWN), TexturedModel.COLUMN)); - public static final DeferredBlock POLISHED_CALCITE_CREST = register(blockWithItem("polished_calcite_crest", () -> new CardinalFacingBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_CALCITE.get())), InkColors.BROWN).withBlockModel((ctx, block) -> SpectrumModelHelper.createVariantsSupplier(ctx, block, TexturedModel.COLUMN).with(SpectrumModelHelper.createCardinalFacingVariantMap()))); - public static final DeferredBlock NOTCHED_POLISHED_CALCITE = register(singleton(blockWithItem("notched_polished_calcite", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_CALCITE.get())), InkColors.BROWN), TexturedModel.COLUMN)); - - public static final DeferredBlock CALCITE_BRICKS = register(blockWithItem("calcite_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_CALCITE.get())), InkColors.BROWN)); - public static final DeferredBlock CALCITE_BRICK_STAIRS = register(blockWithItem("calcite_brick_stairs", () -> new StairBlock(CALCITE_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(CALCITE_BRICKS.get())), InkColors.BROWN)); - public static final DeferredBlock CALCITE_BRICK_SLAB = register(blockWithItem("calcite_brick_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(CALCITE_BRICKS.get())), InkColors.BROWN)); - public static final DeferredBlock CALCITE_BRICK_WALL = register(blockWithItem("calcite_brick_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(CALCITE_BRICKS.get())), InkColors.BROWN)); - public static final DeferredBlock CRACKED_CALCITE_BRICKS = register(blockWithItem("cracked_calcite_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(CALCITE_BRICKS.get())), InkColors.BROWN)); - - public static final DeferredBlock CALCITE_TILES = register(blockWithItem("calcite_tiles", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_CALCITE.get())), InkColors.BROWN)); - public static final DeferredBlock CALCITE_TILE_STAIRS = register(blockWithItem("calcite_tile_stairs", () -> new StairBlock(CALCITE_TILES.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(CALCITE_TILES.get())), InkColors.BROWN)); - public static final DeferredBlock CALCITE_TILE_SLAB = register(blockWithItem("calcite_tile_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(CALCITE_TILES.get())), InkColors.BROWN)); - public static final DeferredBlock CALCITE_TILE_WALL = register(blockWithItem("calcite_tile_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(CALCITE_TILES.get())), InkColors.BROWN)); - public static final DeferredBlock CRACKED_CALCITE_TILES = register(blockWithItem("cracked_calcite_tiles", () -> new Block(BlockBehaviour.Properties.ofFullCopy(CALCITE_TILES.get())), InkColors.BROWN)); - - public static final DeferredBlock TOPAZ_CHISELED_CALCITE = register(simple(blockWithItem("topaz_chiseled_calcite", () -> new Block(BlockBehaviour.Properties.ofFullCopy(CALCITE_BRICKS.get()).lightLevel(s -> 6)), InkColors.CYAN))); - public static final DeferredBlock AMETHYST_CHISELED_CALCITE = register(simple(blockWithItem("amethyst_chiseled_calcite", () -> new Block(BlockBehaviour.Properties.ofFullCopy(CALCITE_BRICKS.get()).lightLevel(s -> 5)), InkColors.MAGENTA))); - public static final DeferredBlock CITRINE_CHISELED_CALCITE = register(simple(blockWithItem("citrine_chiseled_calcite", () -> new Block(BlockBehaviour.Properties.ofFullCopy(CALCITE_BRICKS.get()).lightLevel(s -> 7)), InkColors.YELLOW))); - public static final DeferredBlock ONYX_CHISELED_CALCITE = register(simple(blockWithItem("onyx_chiseled_calcite", () -> new Block(BlockBehaviour.Properties.ofFullCopy(CALCITE_BRICKS.get()).lightLevel(s -> 3)), InkColors.BLACK))); - public static final DeferredBlock MOONSTONE_CHISELED_CALCITE = register(moonstoneChiseled(blockWithItem("moonstone_chiseled_calcite", () -> new SpectrumLineFacingBlock(BlockBehaviour.Properties.ofFullCopy(CALCITE_BRICKS.get()).lightLevel(s -> 12)), InkColors.WHITE), SpectrumTextures.CALCITE_CAP)); + public static final DeferredBlock SMOOTH_BASALT_STAIRS = register(blockWithItem("smooth_basalt_stairs", () -> new StairBlock(BASALT.defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BASALT)))); + public static final DeferredBlock SMOOTH_BASALT_SLAB = register(blockWithItem("smooth_basalt_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(BASALT)))); + public static final DeferredBlock SMOOTH_BASALT_WALL = register(blockWithItem("smooth_basalt_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(BASALT)))); + + public static final DeferredBlock POLISHED_BASALT = register(blockWithItem("polished_basalt", () -> new Block(settings(MapColor.COLOR_BLACK, SoundType.BASALT, 2.0F, 5.0F).instrument(NoteBlockInstrument.BASEDRUM).requiresCorrectToolForDrops()))); + public static final DeferredBlock POLISHED_BASALT_STAIRS = register(blockWithItem("polished_basalt_stairs", () -> new StairBlock(POLISHED_BASALT.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get())))); + public static final DeferredBlock POLISHED_BASALT_SLAB = register(blockWithItem("polished_basalt_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get())))); + public static final DeferredBlock POLISHED_BASALT_WALL = register(blockWithItem("polished_basalt_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get())))); + public static final DeferredBlock POLISHED_BASALT_BUTTON = register(blockWithItem("polished_basalt_button", () -> new ButtonBlock(SpectrumBlockSetTypes.POLISHED_BASALT, 5, BlockBehaviour.Properties.of().noCollission().strength(0.5F).pushReaction(PushReaction.DESTROY)))); + public static final DeferredBlock POLISHED_BASALT_PRESSURE_PLATE = register(blockWithItem("polished_basalt_pressure_plate", () -> new PressurePlateBlock(SpectrumBlockSetTypes.POLISHED_BASALT, BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_BLACK).forceSolidOn().instrument(NoteBlockInstrument.BASEDRUM).requiresCorrectToolForDrops().noCollission().strength(0.5F).pushReaction(PushReaction.DESTROY)))); + public static final DeferredBlock CHISELED_POLISHED_BASALT = register(blockWithItem("chiseled_polished_basalt", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get())))); + + public static final DeferredBlock POLISHED_BASALT_PILLAR = register(axisRotated(blockWithItem("polished_basalt_pillar", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get()))), TexturedModel.COLUMN)); + public static final DeferredBlock POLISHED_BASALT_CREST = register(blockWithItem("polished_basalt_crest", () -> new CardinalFacingBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get()))).withBlockModel((ctx, block) -> SpectrumModelHelper.createVariantsSupplier(ctx, block, TexturedModel.COLUMN).with(SpectrumModelHelper.createCardinalFacingVariantMap()))); + public static final DeferredBlock NOTCHED_POLISHED_BASALT = register(singleton(blockWithItem("notched_polished_basalt", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get()))), TexturedModel.COLUMN)); + + public static final DeferredBlock BASALT_BRICKS = register(blockWithItem("basalt_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get())))); + public static final DeferredBlock BASALT_BRICK_STAIRS = register(blockWithItem("basalt_brick_stairs", () -> new StairBlock(BASALT_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BASALT_BRICKS.get())))); + public static final DeferredBlock BASALT_BRICK_SLAB = register(blockWithItem("basalt_brick_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(BASALT_BRICKS.get())))); + public static final DeferredBlock BASALT_BRICK_WALL = register(blockWithItem("basalt_brick_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(BASALT_BRICKS.get())))); + public static final DeferredBlock CRACKED_BASALT_BRICKS = register(blockWithItem("cracked_basalt_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(BASALT_BRICKS.get())))); + + public static final DeferredBlock BASALT_TILES = register(blockWithItem("basalt_tiles", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get())))); + public static final DeferredBlock BASALT_TILE_STAIRS = register(blockWithItem("basalt_tile_stairs", () -> new StairBlock(BASALT_TILES.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BASALT_TILES.get())))); + public static final DeferredBlock BASALT_TILE_SLAB = register(blockWithItem("basalt_tile_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(BASALT_TILES.get())))); + public static final DeferredBlock BASALT_TILE_WALL = register(blockWithItem("basalt_tile_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(BASALT_TILES.get())))); + public static final DeferredBlock CRACKED_BASALT_TILES = register(blockWithItem("cracked_basalt_tiles", () -> new Block(BlockBehaviour.Properties.ofFullCopy(BASALT_TILES.get())))); + + public static final DeferredBlock TOPAZ_CHISELED_BASALT = register(simple(blockWithItem("topaz_chiseled_basalt", () -> new Block(BlockBehaviour.Properties.ofFullCopy(BASALT_BRICKS.get()).lightLevel(s -> 6))))); + public static final DeferredBlock AMETHYST_CHISELED_BASALT = register(simple(blockWithItem("amethyst_chiseled_basalt", () -> new Block(BlockBehaviour.Properties.ofFullCopy(BASALT_BRICKS.get()).lightLevel(s -> 5))))); + public static final DeferredBlock CITRINE_CHISELED_BASALT = register(simple(blockWithItem("citrine_chiseled_basalt", () -> new Block(BlockBehaviour.Properties.ofFullCopy(BASALT_BRICKS.get()).lightLevel(s -> 7))))); + public static final DeferredBlock ONYX_CHISELED_BASALT = register(simple(blockWithItem("onyx_chiseled_basalt", () -> new Block(BlockBehaviour.Properties.ofFullCopy(BASALT_BRICKS.get()).lightLevel(s -> 3))))); + public static final DeferredBlock MOONSTONE_CHISELED_BASALT = register(moonstoneChiseled(blockWithItem("moonstone_chiseled_basalt", () -> new SpectrumLineFacingBlock(BlockBehaviour.Properties.ofFullCopy(BASALT_BRICKS.get()).lightLevel(s -> 12))), SpectrumTextures.BASALT_CAP)); + + public static final DeferredBlock CALCITE_STAIRS = register(blockWithItem("calcite_stairs", () -> new StairBlock(CALCITE.defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(CALCITE)))); + public static final DeferredBlock CALCITE_SLAB = register(blockWithItem("calcite_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(CALCITE)))); + public static final DeferredBlock CALCITE_WALL = register(blockWithItem("calcite_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(CALCITE)))); + + public static final DeferredBlock POLISHED_CALCITE = register(blockWithItem("polished_calcite", () -> new Block(settings(MapColor.TERRACOTTA_WHITE, SoundType.CALCITE, 2.0F, 5.0F).instrument(NoteBlockInstrument.BASEDRUM).requiresCorrectToolForDrops()))); + public static final DeferredBlock POLISHED_CALCITE_STAIRS = register(blockWithItem("polished_calcite_stairs", () -> new StairBlock(POLISHED_CALCITE.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(POLISHED_CALCITE.get())))); + public static final DeferredBlock POLISHED_CALCITE_SLAB = register(blockWithItem("polished_calcite_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_CALCITE.get())))); + public static final DeferredBlock POLISHED_CALCITE_WALL = register(blockWithItem("polished_calcite_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_CALCITE.get())))); + public static final DeferredBlock POLISHED_CALCITE_BUTTON = register(blockWithItem("polished_calcite_button", () -> new ButtonBlock(SpectrumBlockSetTypes.POLISHED_CALCITE, 5, BlockBehaviour.Properties.of().noCollission().strength(0.5F).pushReaction(PushReaction.DESTROY)))); + public static final DeferredBlock POLISHED_CALCITE_PRESSURE_PLATE = register(blockWithItem("polished_calcite_pressure_plate", () -> new PressurePlateBlock(SpectrumBlockSetTypes.POLISHED_CALCITE, BlockBehaviour.Properties.of().mapColor(MapColor.TERRACOTTA_WHITE).forceSolidOn().instrument(NoteBlockInstrument.BASEDRUM).requiresCorrectToolForDrops().noCollission().strength(0.5F).pushReaction(PushReaction.DESTROY)))); + public static final DeferredBlock CHISELED_POLISHED_CALCITE = register(blockWithItem("chiseled_polished_calcite", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_CALCITE.get())))); + + public static final DeferredBlock POLISHED_CALCITE_PILLAR = register(axisRotated(blockWithItem("polished_calcite_pillar", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_CALCITE.get()))), TexturedModel.COLUMN)); + public static final DeferredBlock POLISHED_CALCITE_CREST = register(blockWithItem("polished_calcite_crest", () -> new CardinalFacingBlock(BlockBehaviour.Properties.ofFullCopy(POLISHED_CALCITE.get()))).withBlockModel((ctx, block) -> SpectrumModelHelper.createVariantsSupplier(ctx, block, TexturedModel.COLUMN).with(SpectrumModelHelper.createCardinalFacingVariantMap()))); + public static final DeferredBlock NOTCHED_POLISHED_CALCITE = register(singleton(blockWithItem("notched_polished_calcite", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_CALCITE.get()))), TexturedModel.COLUMN)); + + public static final DeferredBlock CALCITE_BRICKS = register(blockWithItem("calcite_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_CALCITE.get())))); + public static final DeferredBlock CALCITE_BRICK_STAIRS = register(blockWithItem("calcite_brick_stairs", () -> new StairBlock(CALCITE_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(CALCITE_BRICKS.get())))); + public static final DeferredBlock CALCITE_BRICK_SLAB = register(blockWithItem("calcite_brick_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(CALCITE_BRICKS.get())))); + public static final DeferredBlock CALCITE_BRICK_WALL = register(blockWithItem("calcite_brick_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(CALCITE_BRICKS.get())))); + public static final DeferredBlock CRACKED_CALCITE_BRICKS = register(blockWithItem("cracked_calcite_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(CALCITE_BRICKS.get())))); + + public static final DeferredBlock CALCITE_TILES = register(blockWithItem("calcite_tiles", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_CALCITE.get())))); + public static final DeferredBlock CALCITE_TILE_STAIRS = register(blockWithItem("calcite_tile_stairs", () -> new StairBlock(CALCITE_TILES.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(CALCITE_TILES.get())))); + public static final DeferredBlock CALCITE_TILE_SLAB = register(blockWithItem("calcite_tile_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(CALCITE_TILES.get())))); + public static final DeferredBlock CALCITE_TILE_WALL = register(blockWithItem("calcite_tile_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(CALCITE_TILES.get())))); + public static final DeferredBlock CRACKED_CALCITE_TILES = register(blockWithItem("cracked_calcite_tiles", () -> new Block(BlockBehaviour.Properties.ofFullCopy(CALCITE_TILES.get())))); + + public static final DeferredBlock TOPAZ_CHISELED_CALCITE = register(simple(blockWithItem("topaz_chiseled_calcite", () -> new Block(BlockBehaviour.Properties.ofFullCopy(CALCITE_BRICKS.get()).lightLevel(s -> 6))))); + public static final DeferredBlock AMETHYST_CHISELED_CALCITE = register(simple(blockWithItem("amethyst_chiseled_calcite", () -> new Block(BlockBehaviour.Properties.ofFullCopy(CALCITE_BRICKS.get()).lightLevel(s -> 5))))); + public static final DeferredBlock CITRINE_CHISELED_CALCITE = register(simple(blockWithItem("citrine_chiseled_calcite", () -> new Block(BlockBehaviour.Properties.ofFullCopy(CALCITE_BRICKS.get()).lightLevel(s -> 7))))); + public static final DeferredBlock ONYX_CHISELED_CALCITE = register(simple(blockWithItem("onyx_chiseled_calcite", () -> new Block(BlockBehaviour.Properties.ofFullCopy(CALCITE_BRICKS.get()).lightLevel(s -> 3))))); + public static final DeferredBlock MOONSTONE_CHISELED_CALCITE = register(moonstoneChiseled(blockWithItem("moonstone_chiseled_calcite", () -> new SpectrumLineFacingBlock(BlockBehaviour.Properties.ofFullCopy(CALCITE_BRICKS.get()).lightLevel(s -> 12))), SpectrumTextures.CALCITE_CAP)); public static DeferredBlock registerGemstoneLight(String name, DeferredBlock gemBlock, DeferredBlock baseBlock, ResourceLocation capTexture, InkColor color) { - return register(axisRotated(blockWithItem(name, () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(baseBlock.get()).lightLevel(s -> 15).noOcclusion().forceSolidOn()), color), TexturedModel.createDefault(block -> SpectrumTextureMaps.sideTopInside(TextureMapping.getBlockTexture(block), capTexture, TextureMapping.getBlockTexture(gemBlock.get())), SpectrumModelTemplates.MULTILAYER_LIGHT))); + return register(axisRotated(blockWithItem(name, () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(baseBlock.get()).lightLevel(s -> 15).noOcclusion().forceSolidOn())), TexturedModel.createDefault(block -> SpectrumTextureMaps.sideTopInside(TextureMapping.getBlockTexture(block), capTexture, TextureMapping.getBlockTexture(gemBlock.get())), SpectrumModelTemplates.MULTILAYER_LIGHT))); } public static DeferredBlock registerGemstoneLight(String name, Block gemBlock, DeferredBlock baseBlock, ResourceLocation capTexture, InkColor color) { - return register(axisRotated(blockWithItem(name, () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(baseBlock.get()).lightLevel(s -> 15).noOcclusion().forceSolidOn()), color), TexturedModel.createDefault(block -> SpectrumTextureMaps.sideTopInside(TextureMapping.getBlockTexture(block), capTexture, TextureMapping.getBlockTexture(gemBlock)), SpectrumModelTemplates.MULTILAYER_LIGHT))); + return register(axisRotated(blockWithItem(name, () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(baseBlock.get()).lightLevel(s -> 15).noOcclusion().forceSolidOn())), TexturedModel.createDefault(block -> SpectrumTextureMaps.sideTopInside(TextureMapping.getBlockTexture(block), capTexture, TextureMapping.getBlockTexture(gemBlock)), SpectrumModelTemplates.MULTILAYER_LIGHT))); } public static final DeferredBlock TOPAZ_BASALT_LIGHT = registerGemstoneLight("topaz_basalt_light", TOPAZ_BLOCK, POLISHED_BASALT, SpectrumTextures.BASALT_CAP, InkColors.CYAN); @@ -485,51 +486,51 @@ private static BlockBehaviour.Properties gemstoneGlass(SoundType soundGroup, Map return BlockBehaviour.Properties.ofFullCopy(GLASS).sound(soundGroup).mapColor(mapColor); } - public static final DeferredBlock TOPAZ_GLASS = register(simple(blockWithItem("topaz_glass", () -> new GemstoneGlassBlock(gemstoneGlass(SpectrumSoundTypes.TOPAZ_CLUSTER, MapColor.COLOR_CYAN), BuiltinGemstoneColor.CYAN), InkColors.CYAN))); - public static final DeferredBlock AMETHYST_GLASS = register(simple(blockWithItem("amethyst_glass", () -> new GemstoneGlassBlock(gemstoneGlass(SoundType.AMETHYST_CLUSTER, MapColor.COLOR_MAGENTA), BuiltinGemstoneColor.MAGENTA), InkColors.MAGENTA))); - public static final DeferredBlock CITRINE_GLASS = register(simple(blockWithItem("citrine_glass", () -> new GemstoneGlassBlock(gemstoneGlass(SpectrumSoundTypes.CITRINE_CLUSTER, MapColor.COLOR_YELLOW), BuiltinGemstoneColor.YELLOW), InkColors.YELLOW))); - public static final DeferredBlock ONYX_GLASS = register(simple(blockWithItem("onyx_glass", () -> new GemstoneGlassBlock(gemstoneGlass(SpectrumSoundTypes.ONYX_CLUSTER, MapColor.COLOR_BLACK), BuiltinGemstoneColor.BLACK), InkColors.BLACK))); - public static final DeferredBlock MOONSTONE_GLASS = register(simple(blockWithItem("moonstone_glass", () -> new GemstoneGlassBlock(gemstoneGlass(SpectrumSoundTypes.MOONSTONE_CLUSTER, MapColor.SNOW), BuiltinGemstoneColor.WHITE), InkColors.WHITE))); - public static final DeferredBlock RADIANT_GLASS = register(simple(blockWithItem("radiant_glass", () -> new RadiantGlassBlock(gemstoneGlass(SoundType.GLASS, MapColor.SAND).lightLevel(value -> 12)), InkColors.WHITE))); + public static final DeferredBlock TOPAZ_GLASS = register(simple(blockWithItem("topaz_glass", () -> new GemstoneGlassBlock(gemstoneGlass(SpectrumSoundTypes.TOPAZ_CLUSTER, MapColor.COLOR_CYAN), BuiltinGemstoneColor.CYAN)))); + public static final DeferredBlock AMETHYST_GLASS = register(simple(blockWithItem("amethyst_glass", () -> new GemstoneGlassBlock(gemstoneGlass(SoundType.AMETHYST_CLUSTER, MapColor.COLOR_MAGENTA), BuiltinGemstoneColor.MAGENTA)))); + public static final DeferredBlock CITRINE_GLASS = register(simple(blockWithItem("citrine_glass", () -> new GemstoneGlassBlock(gemstoneGlass(SpectrumSoundTypes.CITRINE_CLUSTER, MapColor.COLOR_YELLOW), BuiltinGemstoneColor.YELLOW)))); + public static final DeferredBlock ONYX_GLASS = register(simple(blockWithItem("onyx_glass", () -> new GemstoneGlassBlock(gemstoneGlass(SpectrumSoundTypes.ONYX_CLUSTER, MapColor.COLOR_BLACK), BuiltinGemstoneColor.BLACK)))); + public static final DeferredBlock MOONSTONE_GLASS = register(simple(blockWithItem("moonstone_glass", () -> new GemstoneGlassBlock(gemstoneGlass(SpectrumSoundTypes.MOONSTONE_CLUSTER, MapColor.SNOW), BuiltinGemstoneColor.WHITE)))); + public static final DeferredBlock RADIANT_GLASS = register(simple(blockWithItem("radiant_glass", () -> new RadiantGlassBlock(gemstoneGlass(SoundType.GLASS, MapColor.SAND).lightLevel(value -> 12))))); - public static final DeferredBlock TOPAZ_GLASS_PANE = register(blockWithItem("topaz_glass_pane", () -> new IronBarsBlock(gemstoneGlass(SpectrumSoundTypes.TOPAZ_CLUSTER, MapColor.COLOR_CYAN)), InkColors.CYAN)); - public static final DeferredBlock AMETHYST_GLASS_PANE = register(blockWithItem("amethyst_glass_pane", () -> new IronBarsBlock(gemstoneGlass(SoundType.AMETHYST_CLUSTER, MapColor.COLOR_MAGENTA)), InkColors.MAGENTA)); - public static final DeferredBlock CITRINE_GLASS_PANE = register(blockWithItem("citrine_glass_pane", () -> new IronBarsBlock(gemstoneGlass(SpectrumSoundTypes.CITRINE_CLUSTER, MapColor.COLOR_YELLOW)), InkColors.YELLOW)); - public static final DeferredBlock ONYX_GLASS_PANE = register(blockWithItem("onyx_glass_pane", () -> new IronBarsBlock(gemstoneGlass(SpectrumSoundTypes.ONYX_CLUSTER, MapColor.COLOR_BLACK)), InkColors.BLACK)); - public static final DeferredBlock MOONSTONE_GLASS_PANE = register(blockWithItem("moonstone_glass_pane", () -> new IronBarsBlock(gemstoneGlass(SpectrumSoundTypes.MOONSTONE_CLUSTER, MapColor.SNOW)), InkColors.WHITE)); - public static final DeferredBlock RADIANT_GLASS_PANE = register(blockWithItem("radiant_glass_pane", () -> new IronBarsBlock(gemstoneGlass(SoundType.GLASS, MapColor.SAND).lightLevel(value -> 12)), InkColors.WHITE)); + public static final DeferredBlock TOPAZ_GLASS_PANE = register(blockWithItem("topaz_glass_pane", () -> new IronBarsBlock(gemstoneGlass(SpectrumSoundTypes.TOPAZ_CLUSTER, MapColor.COLOR_CYAN)))); + public static final DeferredBlock AMETHYST_GLASS_PANE = register(blockWithItem("amethyst_glass_pane", () -> new IronBarsBlock(gemstoneGlass(SoundType.AMETHYST_CLUSTER, MapColor.COLOR_MAGENTA)))); + public static final DeferredBlock CITRINE_GLASS_PANE = register(blockWithItem("citrine_glass_pane", () -> new IronBarsBlock(gemstoneGlass(SpectrumSoundTypes.CITRINE_CLUSTER, MapColor.COLOR_YELLOW)))); + public static final DeferredBlock ONYX_GLASS_PANE = register(blockWithItem("onyx_glass_pane", () -> new IronBarsBlock(gemstoneGlass(SpectrumSoundTypes.ONYX_CLUSTER, MapColor.COLOR_BLACK)))); + public static final DeferredBlock MOONSTONE_GLASS_PANE = register(blockWithItem("moonstone_glass_pane", () -> new IronBarsBlock(gemstoneGlass(SpectrumSoundTypes.MOONSTONE_CLUSTER, MapColor.SNOW)))); + public static final DeferredBlock RADIANT_GLASS_PANE = register(blockWithItem("radiant_glass_pane", () -> new IronBarsBlock(gemstoneGlass(SoundType.GLASS, MapColor.SAND).lightLevel(value -> 12)))); - public static final DeferredBlock ETHEREAL_PLATFORM = register(simple(blockWithItem("ethereal_platform", () -> new EtherealPlatformBlock(gemstoneGlass(SoundType.AMETHYST, MapColor.NONE).pushReaction(PushReaction.NORMAL)), InkColors.LIGHT_GRAY))); - public static final DeferredBlock UNIVERSE_SPYHOLE = register(simple(blockWithItem("universe_spyhole", () -> new TransparentBlock(settings(MapColor.NONE, SpectrumSoundTypes.CITRINE_BLOCK, 1.5F).requiresCorrectToolForDrops().isViewBlocking(SpectrumBlocks::never)), InkColors.LIGHT_GRAY))); + public static final DeferredBlock ETHEREAL_PLATFORM = register(simple(blockWithItem("ethereal_platform", () -> new EtherealPlatformBlock(gemstoneGlass(SoundType.AMETHYST, MapColor.NONE).pushReaction(PushReaction.NORMAL))))); + public static final DeferredBlock UNIVERSE_SPYHOLE = register(simple(blockWithItem("universe_spyhole", () -> new TransparentBlock(settings(MapColor.NONE, SpectrumSoundTypes.CITRINE_BLOCK, 1.5F).requiresCorrectToolForDrops().isViewBlocking(SpectrumBlocks::never))))); private static BlockBehaviour.Properties chime(BlockBehaviour block) { return BlockBehaviour.Properties.ofFullCopy(block).pushReaction(PushReaction.DESTROY).destroyTime(1.0F).noOcclusion(); } - public static final DeferredBlock TOPAZ_CHIME = register(singleton(blockWithItem("topaz_chime", () -> new GemstoneChimeBlock(chime(TOPAZ_CLUSTER.get()), SpectrumSoundEvents.BLOCK_TOPAZ_BLOCK_CHIME, ColoredSparkleRisingParticleEffect.CYAN), InkColors.CYAN), SpectrumTexturedModelProviders.CHIME)); - public static final DeferredBlock AMETHYST_CHIME = register(singleton(blockWithItem("amethyst_chime", () -> new GemstoneChimeBlock(chime(Blocks.AMETHYST_CLUSTER), SoundEvents.AMETHYST_BLOCK_CHIME, ColoredSparkleRisingParticleEffect.MAGENTA), InkColors.MAGENTA), SpectrumTexturedModelProviders.CHIME)); - public static final DeferredBlock CITRINE_CHIME = register(singleton(blockWithItem("citrine_chime", () -> new GemstoneChimeBlock(chime(CITRINE_CLUSTER.get()), SpectrumSoundEvents.BLOCK_CITRINE_BLOCK_CHIME, ColoredSparkleRisingParticleEffect.YELLOW), InkColors.YELLOW), SpectrumTexturedModelProviders.CHIME)); - public static final DeferredBlock ONYX_CHIME = register(singleton(blockWithItem("onyx_chime", () -> new GemstoneChimeBlock(chime(ONYX_CLUSTER.get()), SpectrumSoundEvents.BLOCK_ONYX_BLOCK_CHIME, ColoredSparkleRisingParticleEffect.BLACK), InkColors.BLACK), SpectrumTexturedModelProviders.CHIME)); - public static final DeferredBlock MOONSTONE_CHIME = register(singleton(blockWithItem("moonstone_chime", () -> new GemstoneChimeBlock(chime(MOONSTONE_CLUSTER.get()), SpectrumSoundEvents.BLOCK_MOONSTONE_BLOCK_CHIME, ColoredSparkleRisingParticleEffect.WHITE), InkColors.WHITE), SpectrumTexturedModelProviders.CHIME)); + public static final DeferredBlock TOPAZ_CHIME = register(singleton(blockWithItem("topaz_chime", () -> new GemstoneChimeBlock(chime(TOPAZ_CLUSTER.get()), SpectrumSoundEvents.BLOCK_TOPAZ_BLOCK_CHIME, ColoredSparkleRisingParticleEffect.CYAN)), SpectrumTexturedModelProviders.CHIME)); + public static final DeferredBlock AMETHYST_CHIME = register(singleton(blockWithItem("amethyst_chime", () -> new GemstoneChimeBlock(chime(Blocks.AMETHYST_CLUSTER), SoundEvents.AMETHYST_BLOCK_CHIME, ColoredSparkleRisingParticleEffect.MAGENTA)), SpectrumTexturedModelProviders.CHIME)); + public static final DeferredBlock CITRINE_CHIME = register(singleton(blockWithItem("citrine_chime", () -> new GemstoneChimeBlock(chime(CITRINE_CLUSTER.get()), SpectrumSoundEvents.BLOCK_CITRINE_BLOCK_CHIME, ColoredSparkleRisingParticleEffect.YELLOW)), SpectrumTexturedModelProviders.CHIME)); + public static final DeferredBlock ONYX_CHIME = register(singleton(blockWithItem("onyx_chime", () -> new GemstoneChimeBlock(chime(ONYX_CLUSTER.get()), SpectrumSoundEvents.BLOCK_ONYX_BLOCK_CHIME, ColoredSparkleRisingParticleEffect.BLACK)), SpectrumTexturedModelProviders.CHIME)); + public static final DeferredBlock MOONSTONE_CHIME = register(singleton(blockWithItem("moonstone_chime", () -> new GemstoneChimeBlock(chime(MOONSTONE_CLUSTER.get()), SpectrumSoundEvents.BLOCK_MOONSTONE_BLOCK_CHIME, ColoredSparkleRisingParticleEffect.WHITE)), SpectrumTexturedModelProviders.CHIME)); private static BlockBehaviour.Properties pylon(BlockBehaviour block) { return BlockBehaviour.Properties.ofFullCopy(block).noOcclusion(); } - public static final DeferredBlock TOPAZ_PYLON = register(pylon(blockWithItem("topaz_pylon", () -> new PylonBlock(pylon(TOPAZ_BLOCK.get())), InkColors.CYAN))); - public static final DeferredBlock AMETHYST_PYLON = register(pylon(blockWithItem("amethyst_pylon", () -> new PylonBlock(pylon(AMETHYST_BLOCK)), InkColors.MAGENTA))); - public static final DeferredBlock CITRINE_PYLON = register(pylon(blockWithItem("citrine_pylon", () -> new PylonBlock(pylon(CITRINE_BLOCK.get())), InkColors.YELLOW))); - public static final DeferredBlock ONYX_PYLON = register(pylon(blockWithItem("onyx_pylon", () -> new PylonBlock(pylon(ONYX_BLOCK.get())), InkColors.BLACK))); - public static final DeferredBlock MOONSTONE_PYLON = register(pylon(blockWithItem("moonstone_pylon", () -> new PylonBlock(pylon(MOONSTONE_BLOCK.get())), InkColors.WHITE))); + public static final DeferredBlock TOPAZ_PYLON = register(pylon(blockWithItem("topaz_pylon", () -> new PylonBlock(pylon(TOPAZ_BLOCK.get()))))); + public static final DeferredBlock AMETHYST_PYLON = register(pylon(blockWithItem("amethyst_pylon", () -> new PylonBlock(pylon(AMETHYST_BLOCK))))); + public static final DeferredBlock CITRINE_PYLON = register(pylon(blockWithItem("citrine_pylon", () -> new PylonBlock(pylon(CITRINE_BLOCK.get()))))); + public static final DeferredBlock ONYX_PYLON = register(pylon(blockWithItem("onyx_pylon", () -> new PylonBlock(pylon(ONYX_BLOCK.get()))))); + public static final DeferredBlock MOONSTONE_PYLON = register(pylon(blockWithItem("moonstone_pylon", () -> new PylonBlock(pylon(MOONSTONE_BLOCK.get()))))); - public static final DeferredBlock SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("semi_permeable_glass", () -> new SemiPermeableGlassBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLASS), Blocks.GLASS, false), InkColors.WHITE), b -> Blocks.GLASS)); - public static final DeferredBlock TINTED_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("tinted_semi_permeable_glass", () -> new SemiPermeableGlassBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TINTED_GLASS), Blocks.TINTED_GLASS, true), InkColors.BLACK), b -> Blocks.TINTED_GLASS)); - public static final DeferredBlock RADIANT_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("radiant_semi_permeable_glass", () -> new SemiPermeableGlassBlock(BlockBehaviour.Properties.ofFullCopy(RADIANT_GLASS.get()), RADIANT_GLASS.get(), false), InkColors.YELLOW), b -> RADIANT_GLASS.get())); - public static final DeferredBlock TOPAZ_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("topaz_semi_permeable_glass", () -> new SemiPermeableGemstoneGlassBlock(BlockBehaviour.Properties.ofFullCopy(TOPAZ_GLASS.get()), BuiltinGemstoneColor.CYAN), InkColors.CYAN), b -> TOPAZ_GLASS.get())); - public static final DeferredBlock AMETHYST_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("amethyst_semi_permeable_glass", () -> new SemiPermeableGemstoneGlassBlock(BlockBehaviour.Properties.ofFullCopy(AMETHYST_GLASS.get()), BuiltinGemstoneColor.MAGENTA), InkColors.MAGENTA), b -> AMETHYST_GLASS.get())); - public static final DeferredBlock CITRINE_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("citrine_semi_permeable_glass", () -> new SemiPermeableGemstoneGlassBlock(BlockBehaviour.Properties.ofFullCopy(CITRINE_GLASS.get()), BuiltinGemstoneColor.YELLOW), InkColors.YELLOW), b -> CITRINE_GLASS.get())); - public static final DeferredBlock ONYX_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("onyx_semi_permeable_glass", () -> new SemiPermeableGemstoneGlassBlock(BlockBehaviour.Properties.ofFullCopy(ONYX_GLASS.get()), BuiltinGemstoneColor.BLACK), InkColors.BLACK), b -> ONYX_GLASS.get())); - public static final DeferredBlock MOONSTONE_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("moonstone_semi_permeable_glass", () -> new SemiPermeableGemstoneGlassBlock(BlockBehaviour.Properties.ofFullCopy(MOONSTONE_GLASS.get()), BuiltinGemstoneColor.WHITE), InkColors.WHITE), b -> MOONSTONE_GLASS.get())); + public static final DeferredBlock SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("semi_permeable_glass", () -> new SemiPermeableGlassBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLASS), Blocks.GLASS, false)), b -> Blocks.GLASS)); + public static final DeferredBlock TINTED_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("tinted_semi_permeable_glass", () -> new SemiPermeableGlassBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TINTED_GLASS), Blocks.TINTED_GLASS, true)), b -> Blocks.TINTED_GLASS)); + public static final DeferredBlock RADIANT_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("radiant_semi_permeable_glass", () -> new SemiPermeableGlassBlock(BlockBehaviour.Properties.ofFullCopy(RADIANT_GLASS.get()), RADIANT_GLASS.get(), false)), b -> RADIANT_GLASS.get())); + public static final DeferredBlock TOPAZ_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("topaz_semi_permeable_glass", () -> new SemiPermeableGemstoneGlassBlock(BlockBehaviour.Properties.ofFullCopy(TOPAZ_GLASS.get()), BuiltinGemstoneColor.CYAN)), b -> TOPAZ_GLASS.get())); + public static final DeferredBlock AMETHYST_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("amethyst_semi_permeable_glass", () -> new SemiPermeableGemstoneGlassBlock(BlockBehaviour.Properties.ofFullCopy(AMETHYST_GLASS.get()), BuiltinGemstoneColor.MAGENTA)), b -> AMETHYST_GLASS.get())); + public static final DeferredBlock CITRINE_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("citrine_semi_permeable_glass", () -> new SemiPermeableGemstoneGlassBlock(BlockBehaviour.Properties.ofFullCopy(CITRINE_GLASS.get()), BuiltinGemstoneColor.YELLOW)), b -> CITRINE_GLASS.get())); + public static final DeferredBlock ONYX_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("onyx_semi_permeable_glass", () -> new SemiPermeableGemstoneGlassBlock(BlockBehaviour.Properties.ofFullCopy(ONYX_GLASS.get()), BuiltinGemstoneColor.BLACK)), b -> ONYX_GLASS.get())); + public static final DeferredBlock MOONSTONE_SEMI_PERMEABLE_GLASS = register(parented(blockWithItem("moonstone_semi_permeable_glass", () -> new SemiPermeableGemstoneGlassBlock(BlockBehaviour.Properties.ofFullCopy(MOONSTONE_GLASS.get()), BuiltinGemstoneColor.WHITE)), b -> MOONSTONE_GLASS.get())); public static final DeferredBlock GLISTERING_MELON = register(singleton(new BlockRegistrar<>("glistering_melon").withBlock(() -> new Block(BlockBehaviour.Properties.ofFullCopy(MELON))).withItem(block -> new BlockItem(block, IS.of())), TexturedModel.COLUMN)); public static final DeferredBlock ATTACHED_GLISTERING_MELON_STEM = register(new BlockRegistrar<>("attached_glistering_melon_stem").withBlock(() -> new AttachedStemBlock(ResourceKey.create(Registries.BLOCK, SpectrumCommon.locate("glistering_melon_stem")), GLISTERING_MELON.getKey(), SpectrumItems.GLISTERING_MELON_SEEDS.getKey(), BlockBehaviour.Properties.ofFullCopy(Blocks.ATTACHED_MELON_STEM)))); @@ -540,14 +541,14 @@ private static BlockBehaviour.Properties pylon(BlockBehaviour block) { return SpectrumModelHelper.createVariantsSupplier(attached, ModelTemplates.ATTACHED_STEM.create(attached, TextureMapping.attachedStem(block, attached), ctx.modelOutput)).with(SpectrumModelHelper.createWestDefaultHorizontalFacingVariantMap()); })); - public static final DeferredBlock PRESENT = register(blockWithItem("present", () -> new PresentBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WHITE_WOOL)), block1 -> new PresentBlockItem(block1, IS.of().component(DataComponents.BUNDLE_CONTENTS, BundleContents.EMPTY)), InkColors.LIGHT_GRAY).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(PresentBlock.VARIANT).generate(variant -> SpectrumModelHelper.createModelVariant(SpectrumModelTemplates.PRESENT.createWithSuffix(block, "_" + variant.getSerializedName(), new TextureMapping().put(TextureSlot.TEXTURE, TextureMapping.getBlockTexture(block, "_" + variant.getSerializedName())).put(TextureSlot.PARTICLE, TextureMapping.getBlockTexture(variant.woolBase)), ctx.modelOutput))))).withPredefinedItemModel()); - public static final DeferredBlock TITRATION_BARREL = register(blockWithItem("titration_barrel", () -> new TitrationBarrelBlock(BlockBehaviour.Properties.ofFullCopy(OAK_PLANKS).mapColor(MapColor.COLOR_RED)), InkColors.MAGENTA).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(SpectrumModelHelper.createUpDefaultHorizontalFacingVariantMap()).with(PropertyDispatch.property(TitrationBarrelBlock.BARREL_STATE).generate(state -> SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cubeBottomTop(b -> b, "_side", b -> b, "_top_" + state.getSerializedName(), b -> b, "_bottom").createWithSuffix(block, state == TitrationBarrelBlock.BarrelState.EMPTY ? "" : "_" + state.getSerializedName(), ctx.modelOutput)))))); + public static final DeferredBlock PRESENT = register(blockWithItem("present", () -> new PresentBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WHITE_WOOL)), block1 -> new PresentBlockItem(block1, IS.of().component(DataComponents.BUNDLE_CONTENTS, BundleContents.EMPTY))).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(PresentBlock.VARIANT).generate(variant -> SpectrumModelHelper.createModelVariant(SpectrumModelTemplates.PRESENT.createWithSuffix(block, "_" + variant.getSerializedName(), new TextureMapping().put(TextureSlot.TEXTURE, TextureMapping.getBlockTexture(block, "_" + variant.getSerializedName())).put(TextureSlot.PARTICLE, TextureMapping.getBlockTexture(variant.woolBase)), ctx.modelOutput))))).withPredefinedItemModel()); + public static final DeferredBlock TITRATION_BARREL = register(blockWithItem("titration_barrel", () -> new TitrationBarrelBlock(BlockBehaviour.Properties.ofFullCopy(OAK_PLANKS).mapColor(MapColor.COLOR_RED))).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(SpectrumModelHelper.createUpDefaultHorizontalFacingVariantMap()).with(PropertyDispatch.property(TitrationBarrelBlock.BARREL_STATE).generate(state -> SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cubeBottomTop(b -> b, "_side", b -> b, "_top_" + state.getSerializedName(), b -> b, "_bottom").createWithSuffix(block, state == TitrationBarrelBlock.BarrelState.EMPTY ? "" : "_" + state.getSerializedName(), ctx.modelOutput)))))); - public static final DeferredBlock PARAMETRIC_MINING_DEVICE = register(blockWithItem("parametric_mining_device", () -> new ParametricMiningDeviceBlock(BlockBehaviour.Properties.ofFullCopy(BLACKSLAG.get()).noOcclusion().instabreak()), block -> new ParametricMiningDeviceItem(block, IS.of(16).component(SpectrumDataComponentTypes.DAMAGE_IMMUNE, List.of(DamageTypeTags.IS_EXPLOSION))), InkColors.RED)); - public static final DeferredBlock THREAT_CONFLUX = register(blockWithItem("threat_conflux", () -> new ThreatConfluxBlock(BlockBehaviour.Properties.ofFullCopy(BLACKSLAG.get()).noOcclusion().instabreak()), block -> new ThreatConfluxItem(block, IS.of(16).component(SpectrumDataComponentTypes.DAMAGE_IMMUNE, List.of(DamageTypeTags.IS_EXPLOSION))), InkColors.RED).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(ThreatConfluxBlock.ARMED).generate(armed -> SpectrumModelHelper.createModelVariant(block, armed == ThreatConfluxBlock.ArmedState.NOT_ARMED ? "" : "_armed"))))); + public static final DeferredBlock PARAMETRIC_MINING_DEVICE = register(blockWithItem("parametric_mining_device", () -> new ParametricMiningDeviceBlock(BlockBehaviour.Properties.ofFullCopy(BLACKSLAG.get()).noOcclusion().instabreak()), block -> new ParametricMiningDeviceItem(block, IS.of(16).component(SpectrumDataComponentTypes.DAMAGE_IMMUNE, List.of(DamageTypeTags.IS_EXPLOSION))))); + public static final DeferredBlock THREAT_CONFLUX = register(blockWithItem("threat_conflux", () -> new ThreatConfluxBlock(BlockBehaviour.Properties.ofFullCopy(BLACKSLAG.get()).noOcclusion().instabreak()), block -> new ThreatConfluxItem(block, IS.of(16).component(SpectrumDataComponentTypes.DAMAGE_IMMUNE, List.of(DamageTypeTags.IS_EXPLOSION)))).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(ThreatConfluxBlock.ARMED).generate(armed -> SpectrumModelHelper.createModelVariant(block, armed == ThreatConfluxBlock.ArmedState.NOT_ARMED ? "" : "_armed"))))); public static final DeferredBlock BLOCK_FLOODER = register(simple(block("block_flooder", () -> new BlockFlooderBlock(settings(MapColor.CLAY, SoundType.ROOTED_DIRT, 0.0F))))); - public static final DeferredBlock BOTTOMLESS_BUNDLE = register(blockWithItem("bottomless_bundle", () -> new BottomlessBundleBlock(settings(MapColor.ICE, SoundType.WOOL, 1.0F).noOcclusion().pushReaction(PushReaction.DESTROY)), block1 -> new BottomlessBundleItem(block1, IS.of(1)), InkColors.LIGHT_GRAY) + public static final DeferredBlock BOTTOMLESS_BUNDLE = register(blockWithItem("bottomless_bundle", () -> new BottomlessBundleBlock(settings(MapColor.ICE, SoundType.WOOL, 1.0F).noOcclusion().pushReaction(PushReaction.DESTROY)), block1 -> new BottomlessBundleItem(block1, IS.of(1))) .withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(SpectrumModelHelper.createBooleanModelMap(BottomlessBundleBlock.LOCKED, ModelLocationUtils.getModelLocation(block, "_locked"), ModelLocationUtils.getModelLocation(block, "_unlocked")))) .withPredefinedItemModel()); @@ -577,54 +578,55 @@ private static BlockBehaviour.Properties pastelNode(SoundType soundGroup) { return settings(MapColor.NONE, soundGroup, 1.0F).pushReaction(PushReaction.DESTROY).noOcclusion(); } - public static final DeferredBlock CONNECTION_NODE = register(blockWithItem("connection_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.CONNECTION, Set.of(), List.of(Component.translatable("block.spectrum.connection_node.tooltip"))), () -> IS.of(), InkColors.LIGHT_GRAY).withPredefinedItemModel()); + public static final DeferredBlock CONNECTION_NODE = register(blockWithItem("connection_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.CONNECTION, Set.of(), List.of(Component.translatable("block.spectrum.connection_node.tooltip"))), () -> IS.of()).withPredefinedItemModel()); - public static final DeferredBlock INK_NODE = register(blockWithItem("ink_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.ink_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); + public static final DeferredBlock INK_NODE = register(blockWithItem("ink_node", + () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.ink_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); // TODO: rename ids to "item_*" with next major update - public static final DeferredBlock ITEM_PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.provider_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); - public static final DeferredBlock ITEM_STORAGE_NODE = register(blockWithItem("storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.storage_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); - public static final DeferredBlock ITEM_SENDER_NODE = register(blockWithItem("sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.sender_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); - public static final DeferredBlock ITEM_GATHER_NODE = register(blockWithItem("gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.gather_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); + public static final DeferredBlock ITEM_PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.provider_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock ITEM_STORAGE_NODE = register(blockWithItem("storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.storage_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock ITEM_SENDER_NODE = register(blockWithItem("sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.sender_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock ITEM_GATHER_NODE = register(blockWithItem("gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.gather_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); - public static final DeferredBlock FLUID_PROVIDER_NODE = register(blockWithItem("fluid_provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_provider_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); - public static final DeferredBlock FLUID_STORAGE_NODE = register(blockWithItem("fluid_storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_storage_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); - public static final DeferredBlock FLUID_SENDER_NODE = register(blockWithItem("fluid_sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_sender_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); - public static final DeferredBlock FLUID_GATHER_NODE = register(blockWithItem("fluid_gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_gather_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); + public static final DeferredBlock FLUID_PROVIDER_NODE = register(blockWithItem("fluid_provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_provider_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock FLUID_STORAGE_NODE = register(blockWithItem("fluid_storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_storage_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock FLUID_SENDER_NODE = register(blockWithItem("fluid_sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_sender_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock FLUID_GATHER_NODE = register(blockWithItem("fluid_gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_gather_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); - public static final DeferredBlock OMNI_PROVIDER_NODE = register(blockWithItem("omni_provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_provider_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.MAGENTA).withPredefinedItemModel()); - public static final DeferredBlock OMNI_STORAGE_NODE = register(blockWithItem("omni_storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_storage_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.CYAN).withPredefinedItemModel()); - public static final DeferredBlock OMNI_SENDER_NODE = register(blockWithItem("omni_sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_sender_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.YELLOW).withPredefinedItemModel()); - public static final DeferredBlock OMNI_GATHER_NODE = register(blockWithItem("omni_gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_gather_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of(), InkColors.BLACK).withPredefinedItemModel()); + public static final DeferredBlock OMNI_PROVIDER_NODE = register(blockWithItem("omni_provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_provider_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock OMNI_STORAGE_NODE = register(blockWithItem("omni_storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_storage_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock OMNI_SENDER_NODE = register(blockWithItem("omni_sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_sender_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock OMNI_GATHER_NODE = register(blockWithItem("omni_gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_gather_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); // COLORED BLOCK FAMILIES public static DeferredBlock registerColoredPlanks(String name, InkColor color) { - return register(blockWithItem(name, () -> new ColoredPlankBlock(copyWithMapColor(OAK_PLANKS, color.getDyeColor().orElse(DyeColor.LIME).getMapColor()), color), color)); + return register(blockWithItem(name, () -> new ColoredPlankBlock(copyWithMapColor(OAK_PLANKS, color.getDyeColor().orElse(DyeColor.LIME).getMapColor()), color))); } public static DeferredBlock registerColoredStairs(String name, DeferredBlock baseBlock, InkColor color) { - return register(blockWithItem(name, () -> new ColoredStairBlock(baseBlock.get().defaultBlockState(), copyWithMapColor(OAK_STAIRS, baseBlock.get().defaultMapColor()), color), color)); + return register(blockWithItem(name, () -> new ColoredStairBlock(baseBlock.get().defaultBlockState(), copyWithMapColor(OAK_STAIRS, baseBlock.get().defaultMapColor()), color))); } public static DeferredBlock registerColoredPressurePlate(String name, DeferredBlock baseBlock, InkColor color) { - return register(blockWithItem(name, () -> new ColoredPressurePlateBlock(copyWithMapColor(OAK_PRESSURE_PLATE, baseBlock.get().defaultMapColor()), color), color)); + return register(blockWithItem(name, () -> new ColoredPressurePlateBlock(copyWithMapColor(OAK_PRESSURE_PLATE, baseBlock.get().defaultMapColor()), color))); } public static DeferredBlock registerColoredFence(String name, DeferredBlock baseBlock, InkColor color) { - return register(blockWithItem(name, () -> new ColoredFenceBlock(copyWithMapColor(OAK_FENCE, baseBlock.get().defaultMapColor()), color), color)); + return register(blockWithItem(name, () -> new ColoredFenceBlock(copyWithMapColor(OAK_FENCE, baseBlock.get().defaultMapColor()), color))); } public static DeferredBlock registerColoredFenceGate(String name, DeferredBlock baseBlock, InkColor color) { - return register(blockWithItem(name, () -> new ColoredFenceGateBlock(copyWithMapColor(OAK_FENCE_GATE, baseBlock.get().defaultMapColor()), color), color)); + return register(blockWithItem(name, () -> new ColoredFenceGateBlock(copyWithMapColor(OAK_FENCE_GATE, baseBlock.get().defaultMapColor()), color))); } public static DeferredBlock registerColoredButton(String name, DeferredBlock baseBlock, InkColor color) { - return register(blockWithItem(name, () -> new ColoredWoodenButtonBlock(copyWithMapColor(OAK_BUTTON, baseBlock.get().defaultMapColor()), color), color)); + return register(blockWithItem(name, () -> new ColoredWoodenButtonBlock(copyWithMapColor(OAK_BUTTON, baseBlock.get().defaultMapColor()), color))); } public static DeferredBlock registerColoredSlab(String name, DeferredBlock baseBlock, InkColor color) { - return register(blockWithItem(name, () -> new ColoredSlabBlock(copyWithMapColor(baseBlock.get(), baseBlock.get().defaultMapColor()), color), color)); + return register(blockWithItem(name, () -> new ColoredSlabBlock(copyWithMapColor(baseBlock.get(), baseBlock.get().defaultMapColor()), color))); } public static final DeferredBlock BLACK_PLANKS = registerColoredPlanks("black_planks", InkColors.BLACK); @@ -760,10 +762,10 @@ public static BlockBehaviour.Properties overgrownBlackslag(MapColor color, Sound return settings(color, soundGroup, BLACKSLAG_HARDNESS, BLACKSLAG_RESISTANCE).randomTicks(); } - public static final DeferredBlock SAWBLADE_GRASS = register(snowy(blockWithItem("sawblade_grass", () -> new BlackslagVegetationBlock(overgrownBlackslag(MapColor.SAND, SoundType.AZALEA_LEAVES)), InkColors.LIME), SpectrumTexturedModelProviders.cubeBottomTopParticle(b -> b, "_side", b -> b, "_top", b -> BLACKSLAG.get(), "_top", b -> b, "_top"), SpectrumTexturedModelProviders.cubeBottomTopParticle(b -> b, "_snow_side", b -> b, "_snow_top", b -> BLACKSLAG.get(), "_top", b -> b, "_snow_top"))); - public static final DeferredBlock SHIMMEL = register(snowy(blockWithItem("shimmel", () -> new BlackslagVegetationBlock(overgrownBlackslag(MapColor.TERRACOTTA_GRAY, SoundType.WART_BLOCK)), InkColors.LIME), SpectrumTexturedModelProviders.cubeBottomTopParticle(b -> b, "_side", b -> b, "_top", b -> BLACKSLAG.get(), "_top", b -> BLACKSLAG.get(), "_top"), SpectrumTexturedModelProviders.cubeBottomTopParticle(b -> b, "_snow_side", b -> b, "_snow_top", b -> BLACKSLAG.get(), "_top", b -> BLACKSLAG.get(), "_top"))); - public static final DeferredBlock OVERGROWN_BLACKSLAG = register(snowy(blockWithItem("overgrown_blackslag", () -> new BlackslagVegetationBlock(overgrownBlackslag(MapColor.PLANT, SoundType.VINE).speedFactor(0.925F)), InkColors.LIME), SpectrumTexturedModelProviders.overgrown(b -> b, "_side", b -> b, "_top", b -> BLACKSLAG.get(), "_top", b -> b, "_fronds"), SpectrumTexturedModelProviders.overgrown(b -> b, "_snow_side", b -> b, "_snow_top", b -> BLACKSLAG.get(), "_top", b -> b, "_snow_fronds"))); - public static final DeferredBlock ROTTEN_GROUND = register(blockWithItem("rotten_ground", () -> new RottenGroundBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MUD).mapColor(MapColor.STONE).sound(SoundType.HONEY_BLOCK).jumpFactor(0.9F).strength(5F, 15F).isValidSpawn((blockState, blockGetter, blockPos, entityType) -> true)), InkColors.GRAY).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block, SpectrumModelHelper.createModelVariant(TexturedModel.CUBE.create(block, ctx.modelOutput)).with(VariantProperties.WEIGHT, 4), SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cubeAll(b -> b, "_bony").createWithSuffix(block, "_bony", ctx.modelOutput)), SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cubeAll(b -> b, "_boil").createWithSuffix(block, "_boil", ctx.modelOutput))))); + public static final DeferredBlock SAWBLADE_GRASS = register(snowy(blockWithItem("sawblade_grass", () -> new BlackslagVegetationBlock(overgrownBlackslag(MapColor.SAND, SoundType.AZALEA_LEAVES))), SpectrumTexturedModelProviders.cubeBottomTopParticle(b -> b, "_side", b -> b, "_top", b -> BLACKSLAG.get(), "_top", b -> b, "_top"), SpectrumTexturedModelProviders.cubeBottomTopParticle(b -> b, "_snow_side", b -> b, "_snow_top", b -> BLACKSLAG.get(), "_top", b -> b, "_snow_top"))); + public static final DeferredBlock SHIMMEL = register(snowy(blockWithItem("shimmel", () -> new BlackslagVegetationBlock(overgrownBlackslag(MapColor.TERRACOTTA_GRAY, SoundType.WART_BLOCK))), SpectrumTexturedModelProviders.cubeBottomTopParticle(b -> b, "_side", b -> b, "_top", b -> BLACKSLAG.get(), "_top", b -> BLACKSLAG.get(), "_top"), SpectrumTexturedModelProviders.cubeBottomTopParticle(b -> b, "_snow_side", b -> b, "_snow_top", b -> BLACKSLAG.get(), "_top", b -> BLACKSLAG.get(), "_top"))); + public static final DeferredBlock OVERGROWN_BLACKSLAG = register(snowy(blockWithItem("overgrown_blackslag", () -> new BlackslagVegetationBlock(overgrownBlackslag(MapColor.PLANT, SoundType.VINE).speedFactor(0.925F))), SpectrumTexturedModelProviders.overgrown(b -> b, "_side", b -> b, "_top", b -> BLACKSLAG.get(), "_top", b -> b, "_fronds"), SpectrumTexturedModelProviders.overgrown(b -> b, "_snow_side", b -> b, "_snow_top", b -> BLACKSLAG.get(), "_top", b -> b, "_snow_fronds"))); + public static final DeferredBlock ROTTEN_GROUND = register(blockWithItem("rotten_ground", () -> new RottenGroundBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MUD).mapColor(MapColor.STONE).sound(SoundType.HONEY_BLOCK).jumpFactor(0.9F).strength(5F, 15F).isValidSpawn((blockState, blockGetter, blockPos, entityType) -> true))).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block, SpectrumModelHelper.createModelVariant(TexturedModel.CUBE.create(block, ctx.modelOutput)).with(VariantProperties.WEIGHT, 4), SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cubeAll(b -> b, "_bony").createWithSuffix(block, "_bony", ctx.modelOutput)), SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cubeAll(b -> b, "_boil").createWithSuffix(block, "_boil", ctx.modelOutput))))); public static final float ASH_STRENGTH = 2F; @@ -771,9 +773,9 @@ public static BlockBehaviour.Properties ash(SoundType soundGroup) { return settings(MapColor.QUARTZ, soundGroup, ASH_STRENGTH); } - public static final DeferredBlock ASHEN_BLACKSLAG = register(singleton(blockWithItem("ashen_blackslag", () -> new RotatedPillarBlock(blackslag(SoundType.DEEPSLATE).mapColor(MapColor.QUARTZ)), InkColors.LIGHT_GRAY), SpectrumTexturedModelProviders.cubeBottomTopParticle(b -> b, "_side", b -> b, "_top", b -> BLACKSLAG.get(), "_top", b -> b, "_top"))); - public static final DeferredBlock ASH = register(blockWithItem("ash", () -> new AshBlock(ash(SoundType.POWDER_SNOW)), InkColors.GRAY).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block, SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cubeAll(b -> b, "").createWithSuffix(block, "", ctx.modelOutput)), SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cubeAll(b -> b, "2").createWithSuffix(block, "2", ctx.modelOutput)), SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cubeAll(b -> b, "3").createWithSuffix(block, "3", ctx.modelOutput)), SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cubeAll(b -> b, "4").createWithSuffix(block, "4", ctx.modelOutput))))); - public static final DeferredBlock ASH_PILE = register(blockWithItem("ash_pile", () -> new AshPileBlock(ash(SoundType.POWDER_SNOW).replaceable().isViewBlocking((state, world, pos) -> state.getValue(SnowLayerBlock.LAYERS) >= 8).pushReaction(PushReaction.DESTROY)), InkColors.LIGHT_GRAY).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerParentedItemModel(ctx, block, block, "_height2")).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(BlockStateProperties.LAYERS).generateList(height -> { + public static final DeferredBlock ASHEN_BLACKSLAG = register(singleton(blockWithItem("ashen_blackslag", () -> new RotatedPillarBlock(blackslag(SoundType.DEEPSLATE).mapColor(MapColor.QUARTZ))), SpectrumTexturedModelProviders.cubeBottomTopParticle(b -> b, "_side", b -> b, "_top", b -> BLACKSLAG.get(), "_top", b -> b, "_top"))); + public static final DeferredBlock ASH = register(blockWithItem("ash", () -> new AshBlock(ash(SoundType.POWDER_SNOW))).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block, SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cubeAll(b -> b, "").createWithSuffix(block, "", ctx.modelOutput)), SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cubeAll(b -> b, "2").createWithSuffix(block, "2", ctx.modelOutput)), SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cubeAll(b -> b, "3").createWithSuffix(block, "3", ctx.modelOutput)), SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cubeAll(b -> b, "4").createWithSuffix(block, "4", ctx.modelOutput))))); + public static final DeferredBlock ASH_PILE = register(blockWithItem("ash_pile", () -> new AshPileBlock(ash(SoundType.POWDER_SNOW).replaceable().isViewBlocking((state, world, pos) -> state.getValue(SnowLayerBlock.LAYERS) >= 8).pushReaction(PushReaction.DESTROY))).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerParentedItemModel(ctx, block, block, "_height2")).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(BlockStateProperties.LAYERS).generateList(height -> { ResourceLocation ash = TextureMapping.getBlockTexture(ASH.get()); ResourceLocation ash2 = TextureMapping.getBlockTexture(ASH.get(), "2"); ResourceLocation ash3 = TextureMapping.getBlockTexture(ASH.get(), "3"); @@ -788,7 +790,7 @@ public static BlockBehaviour.Properties ash(SoundType soundGroup) { ); })))); - public static final DeferredBlock VARIA_SPROUT = register(blockWithItem("varia_sprout", () -> new AshFloraBlock(settings(MapColor.SNOW, SoundType.STEM, 0F).instabreak().lightLevel(state -> 11).offsetType(BlockBehaviour.OffsetType.XZ).dynamicShape().noCollission().hasPostProcess(SpectrumBlocks::always).emissiveRendering(SpectrumBlocks::always)), InkColors.WHITE).withBlockItemModel(SpectrumModelHelper::registerBlockTexturedItemModel).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block, + public static final DeferredBlock VARIA_SPROUT = register(blockWithItem("varia_sprout", () -> new AshFloraBlock(settings(MapColor.SNOW, SoundType.STEM, 0F).instabreak().lightLevel(state -> 11).offsetType(BlockBehaviour.OffsetType.XZ).dynamicShape().noCollission().hasPostProcess(SpectrumBlocks::always).emissiveRendering(SpectrumBlocks::always))).withBlockItemModel(SpectrumModelHelper::registerBlockTexturedItemModel).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block, SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, "").createWithSuffix(block, "", ctx.modelOutput)), SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, "_2").createWithSuffix(block, "_2", ctx.modelOutput)), SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, "_3").createWithSuffix(block, "_3", ctx.modelOutput)), @@ -799,7 +801,7 @@ public static BlockBehaviour.Properties ash(SoundType soundGroup) { public static final ToIntFunction LANTERN_LIGHT_PROVIDER = (state -> state.getValue(RedstoneLampBlock.LIT) ? 15 : 0); public static DeferredBlock registerNoxshroom(String name, ResourceKey> feature, MapColor mapColor) { - return register(blockWithItem(name, () -> new FungusBlock(feature, SHIMMEL.get(), settings(mapColor, SoundType.FUNGUS, 0.0F).noCollission()), InkColors.LIME) + return register(blockWithItem(name, () -> new FungusBlock(feature, SHIMMEL.get(), settings(mapColor, SoundType.FUNGUS, 0.0F).noCollission())) .withBlockItemModel((ctx, block) -> ModelTemplates.FLAT_ITEM.create(ModelLocationUtils.getModelLocation(block.asItem()), SpectrumTextureMaps.layer0(block, "_type_1"), ctx.output)).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block, createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, "_type_1").createWithSuffix(block, "_type_1", ctx.modelOutput)), createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, "_type_2").createWithSuffix(block, "_type_2", ctx.modelOutput)), @@ -821,11 +823,11 @@ public static BlockBehaviour.Properties noxcap(MapColor color) { } public static DeferredBlock registerNoxwoodLightBlock(String name, DeferredBlock gillsBlock, MapColor color) { - return register(axisRotated(blockWithItem(name, () -> new FlammableRotatedPillarBlock(noxcap(color).lightLevel(state -> 15)), InkColors.LIME), TexturedModel.createDefault(b -> SpectrumTextureMaps.sideTopInside(b, "", b, "_top", gillsBlock.get(), ""), SpectrumModelTemplates.MULTILAYER_LIGHT))); + return register(axisRotated(blockWithItem(name, () -> new FlammableRotatedPillarBlock(noxcap(color).lightLevel(state -> 15))), TexturedModel.createDefault(b -> SpectrumTextureMaps.sideTopInside(b, "", b, "_top", gillsBlock.get(), ""), SpectrumModelTemplates.MULTILAYER_LIGHT))); } public static DeferredBlock registerNoxwoodLantern(String name, Supplier flexLanternBlock, InkColor color) { - return register(blockWithItem(name, flexLanternBlock, color) + return register(blockWithItem(name, flexLanternBlock) .withItemModel((ctx, item) -> SpectrumModelHelper.registerItemModel(ctx, item, "_item")) .withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.properties(BlockStateProperties.HANGING, DiagonalBlock.DIAGONAL, FlexLanternBlock.TALL) .generate((hanging, diagonal, tall) -> { String suffix = (hanging ? "_hanging" : "") + (diagonal ? "_diagonal" : "") + (tall ? "_tall" : "_small"); @@ -835,110 +837,110 @@ public static DeferredBlock registerNoxwoodLanter private static final int NOXCAP_BUTTON_BLOCK_PRESS_TIME_TICKS = 30; - public static final DeferredBlock STRIPPED_SLATE_NOXCAP_STEM = register(axisRotated(blockWithItem("stripped_slate_noxcap_stem", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.COLOR_GRAY)), InkColors.LIME), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock STRIPPED_SLATE_NOXCAP_HYPHAE = register(axisRotated(blockWithItem("stripped_slate_noxcap_hyphae", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.COLOR_GRAY)), InkColors.LIME), SpectrumTexturedModelProviders.cubeColumn(b -> SpectrumBlocks.STRIPPED_SLATE_NOXCAP_STEM.get(), "", b -> STRIPPED_SLATE_NOXCAP_STEM.get(), ""))); - public static final DeferredBlock SLATE_NOXCAP_STEM = register(axisRotated(blockWithItem("slate_noxcap_stem", () -> new StrippingLootPillarBlock(noxcap(MapColor.COLOR_GRAY), STRIPPED_SLATE_NOXCAP_STEM, SpectrumLootTableKeys.SLATE_NOXCAP_STRIPPING), InkColors.LIME), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock SLATE_NOXCAP_HYPHAE = register(axisRotated(blockWithItem("slate_noxcap_hyphae", () -> new StrippingLootPillarBlock(noxcap(MapColor.COLOR_GRAY), STRIPPED_SLATE_NOXCAP_HYPHAE, SpectrumLootTableKeys.SLATE_NOXCAP_STRIPPING), InkColors.LIME), SpectrumTexturedModelProviders.cubeColumn(b -> SLATE_NOXCAP_STEM.get(), "", b -> SLATE_NOXCAP_STEM.get(), ""))); - public static final DeferredBlock SLATE_NOXCAP_BLOCK = register(singleton(blockWithItem("slate_noxcap_block", () -> new FlammablePlankBlock(noxcap(MapColor.COLOR_GRAY)), InkColors.LIME), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock SLATE_NOXCAP_GILLS = register(axisRotated(blockWithItem("slate_noxcap_gills", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.DIAMOND).lightLevel(state -> 9).emissiveRendering(SpectrumBlocks::always).hasPostProcess(SpectrumBlocks::always)), InkColors.LIME), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock STRIPPED_SLATE_NOXCAP_STEM = register(axisRotated(blockWithItem("stripped_slate_noxcap_stem", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.COLOR_GRAY))), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock STRIPPED_SLATE_NOXCAP_HYPHAE = register(axisRotated(blockWithItem("stripped_slate_noxcap_hyphae", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.COLOR_GRAY))), SpectrumTexturedModelProviders.cubeColumn(b -> SpectrumBlocks.STRIPPED_SLATE_NOXCAP_STEM.get(), "", b -> STRIPPED_SLATE_NOXCAP_STEM.get(), ""))); + public static final DeferredBlock SLATE_NOXCAP_STEM = register(axisRotated(blockWithItem("slate_noxcap_stem", () -> new StrippingLootPillarBlock(noxcap(MapColor.COLOR_GRAY), STRIPPED_SLATE_NOXCAP_STEM, SpectrumLootTableKeys.SLATE_NOXCAP_STRIPPING)), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock SLATE_NOXCAP_HYPHAE = register(axisRotated(blockWithItem("slate_noxcap_hyphae", () -> new StrippingLootPillarBlock(noxcap(MapColor.COLOR_GRAY), STRIPPED_SLATE_NOXCAP_HYPHAE, SpectrumLootTableKeys.SLATE_NOXCAP_STRIPPING)), SpectrumTexturedModelProviders.cubeColumn(b -> SLATE_NOXCAP_STEM.get(), "", b -> SLATE_NOXCAP_STEM.get(), ""))); + public static final DeferredBlock SLATE_NOXCAP_BLOCK = register(singleton(blockWithItem("slate_noxcap_block", () -> new FlammablePlankBlock(noxcap(MapColor.COLOR_GRAY))), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock SLATE_NOXCAP_GILLS = register(axisRotated(blockWithItem("slate_noxcap_gills", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.DIAMOND).lightLevel(state -> 9).emissiveRendering(SpectrumBlocks::always).hasPostProcess(SpectrumBlocks::always))), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock SLATE_NOXWOOD_PILLAR = register(axisRotated(blockWithItem("slate_noxwood_pillar", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.COLOR_GRAY)), InkColors.LIME), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock SLATE_NOXWOOD_LAMP = register(redstoneLamp(blockWithItem("slate_noxwood_lamp", () -> new FlammableRedstoneLampBlock(noxcap(MapColor.COLOR_GRAY).lightLevel(LANTERN_LIGHT_PROVIDER)), InkColors.LIME))); + public static final DeferredBlock SLATE_NOXWOOD_PILLAR = register(axisRotated(blockWithItem("slate_noxwood_pillar", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.COLOR_GRAY))), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock SLATE_NOXWOOD_LAMP = register(redstoneLamp(blockWithItem("slate_noxwood_lamp", () -> new FlammableRedstoneLampBlock(noxcap(MapColor.COLOR_GRAY).lightLevel(LANTERN_LIGHT_PROVIDER))))); public static final DeferredBlock SLATE_NOXWOOD_LIGHT = registerNoxwoodLightBlock("slate_noxwood_light", SLATE_NOXCAP_GILLS, MapColor.COLOR_GRAY); - public static final DeferredBlock SLATE_NOXWOOD_AMPHORA = register(barrellike(blockWithItem("slate_noxwood_amphora", () -> new AmphoraBlock(noxcap(MapColor.COLOR_GRAY)), InkColors.LIME), b -> SLATE_NOXWOOD_LIGHT.get(), "_top")); + public static final DeferredBlock SLATE_NOXWOOD_AMPHORA = register(barrellike(blockWithItem("slate_noxwood_amphora", () -> new AmphoraBlock(noxcap(MapColor.COLOR_GRAY))), b -> SLATE_NOXWOOD_LIGHT.get(), "_top")); public static final DeferredBlock SLATE_NOXWOOD_LANTERN = registerNoxwoodLantern("slate_noxwood_lantern", () -> new FlexLanternBlock(BlockBehaviour.Properties.ofFullCopy(LANTERN).lightLevel(s -> 13).pushReaction(PushReaction.DESTROY)), InkColors.LIME); - public static final DeferredBlock SLATE_NOXWOOD_PLANKS = register(blockWithItem("slate_noxwood_planks", () -> new FlammablePlankBlock(noxcap(MapColor.COLOR_GRAY)), InkColors.LIME)); - public static final DeferredBlock SLATE_NOXWOOD_STAIRS = register(blockWithItem("slate_noxwood_stairs", () -> new FlammableStairBlock(SLATE_NOXWOOD_PLANKS.get().defaultBlockState(), noxcap(MapColor.COLOR_GRAY)), InkColors.LIME)); - public static final DeferredBlock SLATE_NOXWOOD_SLAB = register(blockWithItem("slate_noxwood_slab", () -> new FlammableSlabBlock(noxcap(MapColor.COLOR_GRAY)), InkColors.LIME)); - public static final DeferredBlock SLATE_NOXWOOD_FENCE = register(blockWithItem("slate_noxwood_fence", () -> new FlammableFenceBlock(noxcap(MapColor.COLOR_GRAY)), InkColors.LIME)); - public static final DeferredBlock SLATE_NOXWOOD_FENCE_GATE = register(blockWithItem("slate_noxwood_fence_gate", () -> new FlammableFenceGateBlock(SpectrumWoodTypes.SLATE_NOXWOOD, noxcap(MapColor.COLOR_GRAY)), InkColors.LIME)); - public static final DeferredBlock SLATE_NOXWOOD_DOOR = register(blockWithItem("slate_noxwood_door", () -> new DoorBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.COLOR_GRAY)), InkColors.LIME)); - public static final DeferredBlock SLATE_NOXWOOD_TRAPDOOR = register(blockWithItem("slate_noxwood_trapdoor", () -> new TrapDoorBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.COLOR_GRAY)), InkColors.LIME)); - public static final DeferredBlock SLATE_NOXWOOD_BUTTON = register(blockWithItem("slate_noxwood_button", () -> new ButtonBlock(SpectrumBlockSetTypes.NOXWOOD, NOXCAP_BUTTON_BLOCK_PRESS_TIME_TICKS, noxcap(MapColor.COLOR_GRAY).pushReaction(PushReaction.DESTROY)), InkColors.LIME)); - public static final DeferredBlock SLATE_NOXWOOD_PRESSURE_PLATE = register(blockWithItem("slate_noxwood_pressure_plate", () -> new PressurePlateBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.COLOR_GRAY)), InkColors.LIME)); - - public static final DeferredBlock STRIPPED_EBONY_NOXCAP_STEM = register(axisRotated(blockWithItem("stripped_ebony_noxcap_stem", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.TERRACOTTA_BLACK)), InkColors.LIME), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock STRIPPED_EBONY_NOXCAP_HYPHAE = register(axisRotated(blockWithItem("stripped_ebony_noxcap_hyphae", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.TERRACOTTA_BLACK)), InkColors.LIME), SpectrumTexturedModelProviders.cubeColumn(b -> STRIPPED_EBONY_NOXCAP_STEM.get(), "", b -> STRIPPED_EBONY_NOXCAP_STEM.get(), ""))); - public static final DeferredBlock EBONY_NOXCAP_STEM = register(axisRotated(blockWithItem("ebony_noxcap_stem", () -> new StrippingLootPillarBlock(noxcap(MapColor.TERRACOTTA_BLACK), STRIPPED_EBONY_NOXCAP_STEM, SpectrumLootTableKeys.EBONY_NOXCAP_STRIPPING), InkColors.LIME), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock EBONY_NOXCAP_HYPHAE = register(axisRotated(blockWithItem("ebony_noxcap_hyphae", () -> new StrippingLootPillarBlock(noxcap(MapColor.TERRACOTTA_BLACK), STRIPPED_EBONY_NOXCAP_HYPHAE, SpectrumLootTableKeys.EBONY_NOXCAP_STRIPPING), InkColors.LIME), SpectrumTexturedModelProviders.cubeColumn(b -> EBONY_NOXCAP_STEM.get(), "", b -> EBONY_NOXCAP_STEM.get(), ""))); - public static final DeferredBlock EBONY_NOXCAP_BLOCK = register(singleton(blockWithItem("ebony_noxcap_block", () -> new FlammablePlankBlock(noxcap(MapColor.TERRACOTTA_BLACK)), InkColors.LIME), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock EBONY_NOXCAP_GILLS = register(axisRotated(blockWithItem("ebony_noxcap_gills", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.DIAMOND).lightLevel(state -> 9).emissiveRendering(SpectrumBlocks::always).hasPostProcess(SpectrumBlocks::always)), InkColors.LIME), TexturedModel.COLUMN_ALT)); - - public static final DeferredBlock EBONY_NOXWOOD_PILLAR = register(axisRotated(blockWithItem("ebony_noxwood_pillar", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.TERRACOTTA_BLACK)), InkColors.LIME), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock EBONY_NOXWOOD_LAMP = register(redstoneLamp(blockWithItem("ebony_noxwood_lamp", () -> new FlammableRedstoneLampBlock(noxcap(MapColor.TERRACOTTA_BLACK).lightLevel(LANTERN_LIGHT_PROVIDER)), InkColors.LIME))); + public static final DeferredBlock SLATE_NOXWOOD_PLANKS = register(blockWithItem("slate_noxwood_planks", () -> new FlammablePlankBlock(noxcap(MapColor.COLOR_GRAY)))); + public static final DeferredBlock SLATE_NOXWOOD_STAIRS = register(blockWithItem("slate_noxwood_stairs", () -> new FlammableStairBlock(SLATE_NOXWOOD_PLANKS.get().defaultBlockState(), noxcap(MapColor.COLOR_GRAY)))); + public static final DeferredBlock SLATE_NOXWOOD_SLAB = register(blockWithItem("slate_noxwood_slab", () -> new FlammableSlabBlock(noxcap(MapColor.COLOR_GRAY)))); + public static final DeferredBlock SLATE_NOXWOOD_FENCE = register(blockWithItem("slate_noxwood_fence", () -> new FlammableFenceBlock(noxcap(MapColor.COLOR_GRAY)))); + public static final DeferredBlock SLATE_NOXWOOD_FENCE_GATE = register(blockWithItem("slate_noxwood_fence_gate", () -> new FlammableFenceGateBlock(SpectrumWoodTypes.SLATE_NOXWOOD, noxcap(MapColor.COLOR_GRAY)))); + public static final DeferredBlock SLATE_NOXWOOD_DOOR = register(blockWithItem("slate_noxwood_door", () -> new DoorBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.COLOR_GRAY)))); + public static final DeferredBlock SLATE_NOXWOOD_TRAPDOOR = register(blockWithItem("slate_noxwood_trapdoor", () -> new TrapDoorBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.COLOR_GRAY)))); + public static final DeferredBlock SLATE_NOXWOOD_BUTTON = register(blockWithItem("slate_noxwood_button", () -> new ButtonBlock(SpectrumBlockSetTypes.NOXWOOD, NOXCAP_BUTTON_BLOCK_PRESS_TIME_TICKS, noxcap(MapColor.COLOR_GRAY).pushReaction(PushReaction.DESTROY)))); + public static final DeferredBlock SLATE_NOXWOOD_PRESSURE_PLATE = register(blockWithItem("slate_noxwood_pressure_plate", () -> new PressurePlateBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.COLOR_GRAY)))); + + public static final DeferredBlock STRIPPED_EBONY_NOXCAP_STEM = register(axisRotated(blockWithItem("stripped_ebony_noxcap_stem", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.TERRACOTTA_BLACK))), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock STRIPPED_EBONY_NOXCAP_HYPHAE = register(axisRotated(blockWithItem("stripped_ebony_noxcap_hyphae", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.TERRACOTTA_BLACK))), SpectrumTexturedModelProviders.cubeColumn(b -> STRIPPED_EBONY_NOXCAP_STEM.get(), "", b -> STRIPPED_EBONY_NOXCAP_STEM.get(), ""))); + public static final DeferredBlock EBONY_NOXCAP_STEM = register(axisRotated(blockWithItem("ebony_noxcap_stem", () -> new StrippingLootPillarBlock(noxcap(MapColor.TERRACOTTA_BLACK), STRIPPED_EBONY_NOXCAP_STEM, SpectrumLootTableKeys.EBONY_NOXCAP_STRIPPING)), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock EBONY_NOXCAP_HYPHAE = register(axisRotated(blockWithItem("ebony_noxcap_hyphae", () -> new StrippingLootPillarBlock(noxcap(MapColor.TERRACOTTA_BLACK), STRIPPED_EBONY_NOXCAP_HYPHAE, SpectrumLootTableKeys.EBONY_NOXCAP_STRIPPING)), SpectrumTexturedModelProviders.cubeColumn(b -> EBONY_NOXCAP_STEM.get(), "", b -> EBONY_NOXCAP_STEM.get(), ""))); + public static final DeferredBlock EBONY_NOXCAP_BLOCK = register(singleton(blockWithItem("ebony_noxcap_block", () -> new FlammablePlankBlock(noxcap(MapColor.TERRACOTTA_BLACK))), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock EBONY_NOXCAP_GILLS = register(axisRotated(blockWithItem("ebony_noxcap_gills", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.DIAMOND).lightLevel(state -> 9).emissiveRendering(SpectrumBlocks::always).hasPostProcess(SpectrumBlocks::always))), TexturedModel.COLUMN_ALT)); + + public static final DeferredBlock EBONY_NOXWOOD_PILLAR = register(axisRotated(blockWithItem("ebony_noxwood_pillar", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.TERRACOTTA_BLACK))), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock EBONY_NOXWOOD_LAMP = register(redstoneLamp(blockWithItem("ebony_noxwood_lamp", () -> new FlammableRedstoneLampBlock(noxcap(MapColor.TERRACOTTA_BLACK).lightLevel(LANTERN_LIGHT_PROVIDER))))); public static final DeferredBlock EBONY_NOXWOOD_LIGHT = registerNoxwoodLightBlock("ebony_noxwood_light", EBONY_NOXCAP_GILLS, MapColor.TERRACOTTA_BLACK); - public static final DeferredBlock EBONY_NOXWOOD_AMPHORA = register(barrellike(blockWithItem("ebony_noxwood_amphora", () -> new AmphoraBlock(noxcap(MapColor.TERRACOTTA_BLACK)), InkColors.LIME), b -> EBONY_NOXWOOD_LIGHT.get(), "_top")); + public static final DeferredBlock EBONY_NOXWOOD_AMPHORA = register(barrellike(blockWithItem("ebony_noxwood_amphora", () -> new AmphoraBlock(noxcap(MapColor.TERRACOTTA_BLACK))), b -> EBONY_NOXWOOD_LIGHT.get(), "_top")); public static final DeferredBlock EBONY_NOXWOOD_LANTERN = registerNoxwoodLantern("ebony_noxwood_lantern", () -> new FlexLanternBlock(BlockBehaviour.Properties.ofFullCopy(LANTERN).lightLevel(s -> 13).pushReaction(PushReaction.DESTROY)), InkColors.LIME); - public static final DeferredBlock EBONY_NOXWOOD_PLANKS = register(blockWithItem("ebony_noxwood_planks", () -> new FlammablePlankBlock(noxcap(MapColor.TERRACOTTA_BLACK)), InkColors.LIME)); - public static final DeferredBlock EBONY_NOXWOOD_STAIRS = register(blockWithItem("ebony_noxwood_stairs", () -> new FlammableStairBlock(EBONY_NOXWOOD_PLANKS.get().defaultBlockState(), noxcap(MapColor.TERRACOTTA_BLACK)), InkColors.LIME)); - public static final DeferredBlock EBONY_NOXWOOD_SLAB = register(blockWithItem("ebony_noxwood_slab", () -> new FlammableSlabBlock(noxcap(MapColor.TERRACOTTA_BLACK)), InkColors.LIME)); - public static final DeferredBlock EBONY_NOXWOOD_FENCE = register(blockWithItem("ebony_noxwood_fence", () -> new FlammableFenceBlock(noxcap(MapColor.TERRACOTTA_BLACK)), InkColors.LIME)); - public static final DeferredBlock EBONY_NOXWOOD_FENCE_GATE = register(blockWithItem("ebony_noxwood_fence_gate", () -> new FlammableFenceGateBlock(SpectrumWoodTypes.EBONY_NOXWOOD, noxcap(MapColor.TERRACOTTA_BLACK)), InkColors.LIME)); - public static final DeferredBlock EBONY_NOXWOOD_DOOR = register(blockWithItem("ebony_noxwood_door", () -> new DoorBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.TERRACOTTA_BLACK)), InkColors.LIME)); - public static final DeferredBlock EBONY_NOXWOOD_TRAPDOOR = register(blockWithItem("ebony_noxwood_trapdoor", () -> new TrapDoorBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.TERRACOTTA_BLACK)), InkColors.LIME)); - public static final DeferredBlock EBONY_NOXWOOD_BUTTON = register(blockWithItem("ebony_noxwood_button", () -> new ButtonBlock(SpectrumBlockSetTypes.NOXWOOD, NOXCAP_BUTTON_BLOCK_PRESS_TIME_TICKS, noxcap(MapColor.TERRACOTTA_BLACK).pushReaction(PushReaction.DESTROY)), InkColors.LIME)); - public static final DeferredBlock EBONY_NOXWOOD_PRESSURE_PLATE = register(blockWithItem("ebony_noxwood_pressure_plate", () -> new PressurePlateBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.TERRACOTTA_BLACK)), InkColors.LIME)); - - public static final DeferredBlock STRIPPED_IVORY_NOXCAP_STEM = register(axisRotated(blockWithItem("stripped_ivory_noxcap_stem", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.QUARTZ)), InkColors.LIME), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock STRIPPED_IVORY_NOXCAP_HYPHAE = register(axisRotated(blockWithItem("stripped_ivory_noxcap_hyphae", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.QUARTZ)), InkColors.LIME), SpectrumTexturedModelProviders.cubeColumn(b -> STRIPPED_IVORY_NOXCAP_STEM.get(), "", b -> STRIPPED_IVORY_NOXCAP_STEM.get(), ""))); - public static final DeferredBlock IVORY_NOXCAP_STEM = register(axisRotated(blockWithItem("ivory_noxcap_stem", () -> new StrippingLootPillarBlock(noxcap(MapColor.QUARTZ), STRIPPED_IVORY_NOXCAP_STEM, SpectrumLootTableKeys.IVORY_NOXCAP_STRIPPING), InkColors.LIME), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock IVORY_NOXCAP_HYPHAE = register(axisRotated(blockWithItem("ivory_noxcap_hyphae", () -> new StrippingLootPillarBlock(noxcap(MapColor.QUARTZ), STRIPPED_IVORY_NOXCAP_HYPHAE, SpectrumLootTableKeys.IVORY_NOXCAP_STRIPPING), InkColors.LIME), SpectrumTexturedModelProviders.cubeColumn(b -> IVORY_NOXCAP_STEM.get(), "", b -> IVORY_NOXCAP_STEM.get(), ""))); - public static final DeferredBlock IVORY_NOXCAP_BLOCK = register(singleton(blockWithItem("ivory_noxcap_block", () -> new FlammablePlankBlock(noxcap(MapColor.QUARTZ)), InkColors.LIME), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock IVORY_NOXCAP_GILLS = register(axisRotated(blockWithItem("ivory_noxcap_gills", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.DIAMOND).lightLevel(state -> 9).emissiveRendering(SpectrumBlocks::always).hasPostProcess(SpectrumBlocks::always)), InkColors.LIME), TexturedModel.COLUMN_ALT)); - - public static final DeferredBlock IVORY_NOXWOOD_PILLAR = register(axisRotated(blockWithItem("ivory_noxwood_pillar", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.QUARTZ)), InkColors.LIME), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock IVORY_NOXWOOD_LAMP = register(redstoneLamp(blockWithItem("ivory_noxwood_lamp", () -> new FlammableRedstoneLampBlock(noxcap(MapColor.QUARTZ).lightLevel(LANTERN_LIGHT_PROVIDER)), InkColors.LIME))); + public static final DeferredBlock EBONY_NOXWOOD_PLANKS = register(blockWithItem("ebony_noxwood_planks", () -> new FlammablePlankBlock(noxcap(MapColor.TERRACOTTA_BLACK)))); + public static final DeferredBlock EBONY_NOXWOOD_STAIRS = register(blockWithItem("ebony_noxwood_stairs", () -> new FlammableStairBlock(EBONY_NOXWOOD_PLANKS.get().defaultBlockState(), noxcap(MapColor.TERRACOTTA_BLACK)))); + public static final DeferredBlock EBONY_NOXWOOD_SLAB = register(blockWithItem("ebony_noxwood_slab", () -> new FlammableSlabBlock(noxcap(MapColor.TERRACOTTA_BLACK)))); + public static final DeferredBlock EBONY_NOXWOOD_FENCE = register(blockWithItem("ebony_noxwood_fence", () -> new FlammableFenceBlock(noxcap(MapColor.TERRACOTTA_BLACK)))); + public static final DeferredBlock EBONY_NOXWOOD_FENCE_GATE = register(blockWithItem("ebony_noxwood_fence_gate", () -> new FlammableFenceGateBlock(SpectrumWoodTypes.EBONY_NOXWOOD, noxcap(MapColor.TERRACOTTA_BLACK)))); + public static final DeferredBlock EBONY_NOXWOOD_DOOR = register(blockWithItem("ebony_noxwood_door", () -> new DoorBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.TERRACOTTA_BLACK)))); + public static final DeferredBlock EBONY_NOXWOOD_TRAPDOOR = register(blockWithItem("ebony_noxwood_trapdoor", () -> new TrapDoorBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.TERRACOTTA_BLACK)))); + public static final DeferredBlock EBONY_NOXWOOD_BUTTON = register(blockWithItem("ebony_noxwood_button", () -> new ButtonBlock(SpectrumBlockSetTypes.NOXWOOD, NOXCAP_BUTTON_BLOCK_PRESS_TIME_TICKS, noxcap(MapColor.TERRACOTTA_BLACK).pushReaction(PushReaction.DESTROY)))); + public static final DeferredBlock EBONY_NOXWOOD_PRESSURE_PLATE = register(blockWithItem("ebony_noxwood_pressure_plate", () -> new PressurePlateBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.TERRACOTTA_BLACK)))); + + public static final DeferredBlock STRIPPED_IVORY_NOXCAP_STEM = register(axisRotated(blockWithItem("stripped_ivory_noxcap_stem", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.QUARTZ))), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock STRIPPED_IVORY_NOXCAP_HYPHAE = register(axisRotated(blockWithItem("stripped_ivory_noxcap_hyphae", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.QUARTZ))), SpectrumTexturedModelProviders.cubeColumn(b -> STRIPPED_IVORY_NOXCAP_STEM.get(), "", b -> STRIPPED_IVORY_NOXCAP_STEM.get(), ""))); + public static final DeferredBlock IVORY_NOXCAP_STEM = register(axisRotated(blockWithItem("ivory_noxcap_stem", () -> new StrippingLootPillarBlock(noxcap(MapColor.QUARTZ), STRIPPED_IVORY_NOXCAP_STEM, SpectrumLootTableKeys.IVORY_NOXCAP_STRIPPING)), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock IVORY_NOXCAP_HYPHAE = register(axisRotated(blockWithItem("ivory_noxcap_hyphae", () -> new StrippingLootPillarBlock(noxcap(MapColor.QUARTZ), STRIPPED_IVORY_NOXCAP_HYPHAE, SpectrumLootTableKeys.IVORY_NOXCAP_STRIPPING)), SpectrumTexturedModelProviders.cubeColumn(b -> IVORY_NOXCAP_STEM.get(), "", b -> IVORY_NOXCAP_STEM.get(), ""))); + public static final DeferredBlock IVORY_NOXCAP_BLOCK = register(singleton(blockWithItem("ivory_noxcap_block", () -> new FlammablePlankBlock(noxcap(MapColor.QUARTZ))), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock IVORY_NOXCAP_GILLS = register(axisRotated(blockWithItem("ivory_noxcap_gills", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.DIAMOND).lightLevel(state -> 9).emissiveRendering(SpectrumBlocks::always).hasPostProcess(SpectrumBlocks::always))), TexturedModel.COLUMN_ALT)); + + public static final DeferredBlock IVORY_NOXWOOD_PILLAR = register(axisRotated(blockWithItem("ivory_noxwood_pillar", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.QUARTZ))), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock IVORY_NOXWOOD_LAMP = register(redstoneLamp(blockWithItem("ivory_noxwood_lamp", () -> new FlammableRedstoneLampBlock(noxcap(MapColor.QUARTZ).lightLevel(LANTERN_LIGHT_PROVIDER))))); public static final DeferredBlock IVORY_NOXWOOD_LIGHT = registerNoxwoodLightBlock("ivory_noxwood_light", IVORY_NOXCAP_GILLS, MapColor.QUARTZ); - public static final DeferredBlock IVORY_NOXWOOD_AMPHORA = register(barrellike(blockWithItem("ivory_noxwood_amphora", () -> new AmphoraBlock(noxcap(MapColor.QUARTZ)), InkColors.LIME), b -> IVORY_NOXWOOD_LIGHT.get(), "_top")); + public static final DeferredBlock IVORY_NOXWOOD_AMPHORA = register(barrellike(blockWithItem("ivory_noxwood_amphora", () -> new AmphoraBlock(noxcap(MapColor.QUARTZ))), b -> IVORY_NOXWOOD_LIGHT.get(), "_top")); public static final DeferredBlock IVORY_NOXWOOD_LANTERN = registerNoxwoodLantern("ivory_noxwood_lantern", () -> new FlexLanternBlock(BlockBehaviour.Properties.ofFullCopy(LANTERN).lightLevel(s -> 13).pushReaction(PushReaction.DESTROY)), InkColors.LIME); - public static final DeferredBlock IVORY_NOXWOOD_PLANKS = register(blockWithItem("ivory_noxwood_planks", () -> new FlammablePlankBlock(noxcap(MapColor.QUARTZ)), InkColors.LIME)); - public static final DeferredBlock IVORY_NOXWOOD_STAIRS = register(blockWithItem("ivory_noxwood_stairs", () -> new FlammableStairBlock(IVORY_NOXWOOD_PLANKS.get().defaultBlockState(), noxcap(MapColor.QUARTZ)), InkColors.LIME)); - public static final DeferredBlock IVORY_NOXWOOD_SLAB = register(blockWithItem("ivory_noxwood_slab", () -> new FlammableSlabBlock(noxcap(MapColor.QUARTZ)), InkColors.LIME)); - public static final DeferredBlock IVORY_NOXWOOD_FENCE = register(blockWithItem("ivory_noxwood_fence", () -> new FlammableFenceBlock(noxcap(MapColor.QUARTZ)), InkColors.LIME)); - public static final DeferredBlock IVORY_NOXWOOD_FENCE_GATE = register(blockWithItem("ivory_noxwood_fence_gate", () -> new FlammableFenceGateBlock(SpectrumWoodTypes.CHESTNUT_NOXWOOD, noxcap(MapColor.QUARTZ)), InkColors.LIME)); - public static final DeferredBlock IVORY_NOXWOOD_DOOR = register(blockWithItem("ivory_noxwood_door", () -> new DoorBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.QUARTZ)), InkColors.LIME)); - public static final DeferredBlock IVORY_NOXWOOD_TRAPDOOR = register(blockWithItem("ivory_noxwood_trapdoor", () -> new TrapDoorBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.QUARTZ)), InkColors.LIME)); - public static final DeferredBlock IVORY_NOXWOOD_BUTTON = register(blockWithItem("ivory_noxwood_button", () -> new ButtonBlock(SpectrumBlockSetTypes.NOXWOOD, NOXCAP_BUTTON_BLOCK_PRESS_TIME_TICKS, noxcap(MapColor.QUARTZ).pushReaction(PushReaction.DESTROY)), InkColors.LIME)); - public static final DeferredBlock IVORY_NOXWOOD_PRESSURE_PLATE = register(blockWithItem("ivory_noxwood_pressure_plate", () -> new PressurePlateBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.QUARTZ)), InkColors.LIME)); - - public static final DeferredBlock STRIPPED_CHESTNUT_NOXCAP_STEM = register(axisRotated(blockWithItem("stripped_chestnut_noxcap_stem", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.CRIMSON_NYLIUM)), InkColors.LIME), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock STRIPPED_CHESTNUT_NOXCAP_HYPHAE = register(axisRotated(blockWithItem("stripped_chestnut_noxcap_hyphae", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.QUARTZ)), InkColors.LIME), SpectrumTexturedModelProviders.cubeColumn(b -> STRIPPED_CHESTNUT_NOXCAP_STEM.get(), "", b -> STRIPPED_CHESTNUT_NOXCAP_STEM.get(), ""))); - public static final DeferredBlock CHESTNUT_NOXCAP_STEM = register(axisRotated(blockWithItem("chestnut_noxcap_stem", () -> new StrippingLootPillarBlock(noxcap(MapColor.CRIMSON_NYLIUM), STRIPPED_CHESTNUT_NOXCAP_STEM, SpectrumLootTableKeys.CHESTNUT_NOXCAP_STRIPPING), InkColors.LIME), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock CHESTNUT_NOXCAP_HYPHAE = register(axisRotated(blockWithItem("chestnut_noxcap_hyphae", () -> new StrippingLootPillarBlock(noxcap(MapColor.QUARTZ), STRIPPED_CHESTNUT_NOXCAP_HYPHAE, SpectrumLootTableKeys.CHESTNUT_NOXCAP_STRIPPING), InkColors.LIME), SpectrumTexturedModelProviders.cubeColumn(b -> CHESTNUT_NOXCAP_STEM.get(), "", b -> CHESTNUT_NOXCAP_STEM.get(), ""))); - public static final DeferredBlock CHESTNUT_NOXCAP_BLOCK = register(singleton(blockWithItem("chestnut_noxcap_block", () -> new FlammablePlankBlock(noxcap(MapColor.CRIMSON_NYLIUM)), InkColors.LIME), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock CHESTNUT_NOXCAP_GILLS = register(axisRotated(blockWithItem("chestnut_noxcap_gills", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.DIAMOND).lightLevel(state -> 9).emissiveRendering(SpectrumBlocks::always).hasPostProcess(SpectrumBlocks::always)), InkColors.LIME), TexturedModel.COLUMN_ALT)); - - public static final DeferredBlock CHESTNUT_NOXWOOD_PILLAR = register(axisRotated(blockWithItem("chestnut_noxwood_pillar", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.CRIMSON_NYLIUM)), InkColors.LIME), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock CHESTNUT_NOXWOOD_LAMP = register(redstoneLamp(blockWithItem("chestnut_noxwood_lamp", () -> new FlammableRedstoneLampBlock(noxcap(MapColor.CRIMSON_NYLIUM).lightLevel(LANTERN_LIGHT_PROVIDER)), InkColors.LIME))); + public static final DeferredBlock IVORY_NOXWOOD_PLANKS = register(blockWithItem("ivory_noxwood_planks", () -> new FlammablePlankBlock(noxcap(MapColor.QUARTZ)))); + public static final DeferredBlock IVORY_NOXWOOD_STAIRS = register(blockWithItem("ivory_noxwood_stairs", () -> new FlammableStairBlock(IVORY_NOXWOOD_PLANKS.get().defaultBlockState(), noxcap(MapColor.QUARTZ)))); + public static final DeferredBlock IVORY_NOXWOOD_SLAB = register(blockWithItem("ivory_noxwood_slab", () -> new FlammableSlabBlock(noxcap(MapColor.QUARTZ)))); + public static final DeferredBlock IVORY_NOXWOOD_FENCE = register(blockWithItem("ivory_noxwood_fence", () -> new FlammableFenceBlock(noxcap(MapColor.QUARTZ)))); + public static final DeferredBlock IVORY_NOXWOOD_FENCE_GATE = register(blockWithItem("ivory_noxwood_fence_gate", () -> new FlammableFenceGateBlock(SpectrumWoodTypes.CHESTNUT_NOXWOOD, noxcap(MapColor.QUARTZ)))); + public static final DeferredBlock IVORY_NOXWOOD_DOOR = register(blockWithItem("ivory_noxwood_door", () -> new DoorBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.QUARTZ)))); + public static final DeferredBlock IVORY_NOXWOOD_TRAPDOOR = register(blockWithItem("ivory_noxwood_trapdoor", () -> new TrapDoorBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.QUARTZ)))); + public static final DeferredBlock IVORY_NOXWOOD_BUTTON = register(blockWithItem("ivory_noxwood_button", () -> new ButtonBlock(SpectrumBlockSetTypes.NOXWOOD, NOXCAP_BUTTON_BLOCK_PRESS_TIME_TICKS, noxcap(MapColor.QUARTZ).pushReaction(PushReaction.DESTROY)))); + public static final DeferredBlock IVORY_NOXWOOD_PRESSURE_PLATE = register(blockWithItem("ivory_noxwood_pressure_plate", () -> new PressurePlateBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.QUARTZ)))); + + public static final DeferredBlock STRIPPED_CHESTNUT_NOXCAP_STEM = register(axisRotated(blockWithItem("stripped_chestnut_noxcap_stem", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.CRIMSON_NYLIUM))), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock STRIPPED_CHESTNUT_NOXCAP_HYPHAE = register(axisRotated(blockWithItem("stripped_chestnut_noxcap_hyphae", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.QUARTZ))), SpectrumTexturedModelProviders.cubeColumn(b -> STRIPPED_CHESTNUT_NOXCAP_STEM.get(), "", b -> STRIPPED_CHESTNUT_NOXCAP_STEM.get(), ""))); + public static final DeferredBlock CHESTNUT_NOXCAP_STEM = register(axisRotated(blockWithItem("chestnut_noxcap_stem", () -> new StrippingLootPillarBlock(noxcap(MapColor.CRIMSON_NYLIUM), STRIPPED_CHESTNUT_NOXCAP_STEM, SpectrumLootTableKeys.CHESTNUT_NOXCAP_STRIPPING)), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock CHESTNUT_NOXCAP_HYPHAE = register(axisRotated(blockWithItem("chestnut_noxcap_hyphae", () -> new StrippingLootPillarBlock(noxcap(MapColor.QUARTZ), STRIPPED_CHESTNUT_NOXCAP_HYPHAE, SpectrumLootTableKeys.CHESTNUT_NOXCAP_STRIPPING)), SpectrumTexturedModelProviders.cubeColumn(b -> CHESTNUT_NOXCAP_STEM.get(), "", b -> CHESTNUT_NOXCAP_STEM.get(), ""))); + public static final DeferredBlock CHESTNUT_NOXCAP_BLOCK = register(singleton(blockWithItem("chestnut_noxcap_block", () -> new FlammablePlankBlock(noxcap(MapColor.CRIMSON_NYLIUM))), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock CHESTNUT_NOXCAP_GILLS = register(axisRotated(blockWithItem("chestnut_noxcap_gills", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.DIAMOND).lightLevel(state -> 9).emissiveRendering(SpectrumBlocks::always).hasPostProcess(SpectrumBlocks::always))), TexturedModel.COLUMN_ALT)); + + public static final DeferredBlock CHESTNUT_NOXWOOD_PILLAR = register(axisRotated(blockWithItem("chestnut_noxwood_pillar", () -> new FlammableRotatedPillarBlock(noxcap(MapColor.CRIMSON_NYLIUM))), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock CHESTNUT_NOXWOOD_LAMP = register(redstoneLamp(blockWithItem("chestnut_noxwood_lamp", () -> new FlammableRedstoneLampBlock(noxcap(MapColor.CRIMSON_NYLIUM).lightLevel(LANTERN_LIGHT_PROVIDER))))); public static final DeferredBlock CHESTNUT_NOXWOOD_LIGHT = registerNoxwoodLightBlock("chestnut_noxwood_light", CHESTNUT_NOXCAP_GILLS, MapColor.CRIMSON_NYLIUM); - public static final DeferredBlock CHESTNUT_NOXWOOD_AMPHORA = register(barrellike(blockWithItem("chestnut_noxwood_amphora", () -> new AmphoraBlock(noxcap(MapColor.CRIMSON_NYLIUM)), InkColors.LIME), b -> CHESTNUT_NOXWOOD_LIGHT.get(), "_top")); + public static final DeferredBlock CHESTNUT_NOXWOOD_AMPHORA = register(barrellike(blockWithItem("chestnut_noxwood_amphora", () -> new AmphoraBlock(noxcap(MapColor.CRIMSON_NYLIUM))), b -> CHESTNUT_NOXWOOD_LIGHT.get(), "_top")); public static final DeferredBlock CHESTNUT_NOXWOOD_LANTERN = registerNoxwoodLantern("chestnut_noxwood_lantern", () -> new FlexLanternBlock(BlockBehaviour.Properties.ofFullCopy(LANTERN).lightLevel(s -> 13).pushReaction(PushReaction.DESTROY)), InkColors.LIME); - public static final DeferredBlock CHESTNUT_NOXWOOD_PLANKS = register(blockWithItem("chestnut_noxwood_planks", () -> new FlammablePlankBlock(noxcap(MapColor.CRIMSON_NYLIUM)), InkColors.LIME)); - public static final DeferredBlock CHESTNUT_NOXWOOD_STAIRS = register(blockWithItem("chestnut_noxwood_stairs", () -> new FlammableStairBlock(CHESTNUT_NOXWOOD_PLANKS.get().defaultBlockState(), noxcap(MapColor.CRIMSON_NYLIUM)), InkColors.LIME)); - public static final DeferredBlock CHESTNUT_NOXWOOD_SLAB = register(blockWithItem("chestnut_noxwood_slab", () -> new FlammableSlabBlock(noxcap(MapColor.CRIMSON_NYLIUM)), InkColors.LIME)); - public static final DeferredBlock CHESTNUT_NOXWOOD_FENCE = register(blockWithItem("chestnut_noxwood_fence", () -> new FlammableFenceBlock(noxcap(MapColor.CRIMSON_NYLIUM)), InkColors.LIME)); - public static final DeferredBlock CHESTNUT_NOXWOOD_FENCE_GATE = register(blockWithItem("chestnut_noxwood_fence_gate", () -> new FlammableFenceGateBlock(SpectrumWoodTypes.IVORY_NOXWOOD, noxcap(MapColor.CRIMSON_NYLIUM)), InkColors.LIME)); - public static final DeferredBlock CHESTNUT_NOXWOOD_DOOR = register(blockWithItem("chestnut_noxwood_door", () -> new DoorBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.CRIMSON_NYLIUM)), InkColors.LIME)); - public static final DeferredBlock CHESTNUT_NOXWOOD_TRAPDOOR = register(blockWithItem("chestnut_noxwood_trapdoor", () -> new TrapDoorBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.CRIMSON_NYLIUM)), InkColors.LIME)); - public static final DeferredBlock CHESTNUT_NOXWOOD_BUTTON = register(blockWithItem("chestnut_noxwood_button", () -> new ButtonBlock(SpectrumBlockSetTypes.NOXWOOD, NOXCAP_BUTTON_BLOCK_PRESS_TIME_TICKS, noxcap(MapColor.CRIMSON_NYLIUM).pushReaction(PushReaction.DESTROY)), InkColors.LIME)); - public static final DeferredBlock CHESTNUT_NOXWOOD_PRESSURE_PLATE = register(blockWithItem("chestnut_noxwood_pressure_plate", () -> new PressurePlateBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.CRIMSON_NYLIUM)), InkColors.LIME)); + public static final DeferredBlock CHESTNUT_NOXWOOD_PLANKS = register(blockWithItem("chestnut_noxwood_planks", () -> new FlammablePlankBlock(noxcap(MapColor.CRIMSON_NYLIUM)))); + public static final DeferredBlock CHESTNUT_NOXWOOD_STAIRS = register(blockWithItem("chestnut_noxwood_stairs", () -> new FlammableStairBlock(CHESTNUT_NOXWOOD_PLANKS.get().defaultBlockState(), noxcap(MapColor.CRIMSON_NYLIUM)))); + public static final DeferredBlock CHESTNUT_NOXWOOD_SLAB = register(blockWithItem("chestnut_noxwood_slab", () -> new FlammableSlabBlock(noxcap(MapColor.CRIMSON_NYLIUM)))); + public static final DeferredBlock CHESTNUT_NOXWOOD_FENCE = register(blockWithItem("chestnut_noxwood_fence", () -> new FlammableFenceBlock(noxcap(MapColor.CRIMSON_NYLIUM)))); + public static final DeferredBlock CHESTNUT_NOXWOOD_FENCE_GATE = register(blockWithItem("chestnut_noxwood_fence_gate", () -> new FlammableFenceGateBlock(SpectrumWoodTypes.IVORY_NOXWOOD, noxcap(MapColor.CRIMSON_NYLIUM)))); + public static final DeferredBlock CHESTNUT_NOXWOOD_DOOR = register(blockWithItem("chestnut_noxwood_door", () -> new DoorBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.CRIMSON_NYLIUM)))); + public static final DeferredBlock CHESTNUT_NOXWOOD_TRAPDOOR = register(blockWithItem("chestnut_noxwood_trapdoor", () -> new TrapDoorBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.CRIMSON_NYLIUM)))); + public static final DeferredBlock CHESTNUT_NOXWOOD_BUTTON = register(blockWithItem("chestnut_noxwood_button", () -> new ButtonBlock(SpectrumBlockSetTypes.NOXWOOD, NOXCAP_BUTTON_BLOCK_PRESS_TIME_TICKS, noxcap(MapColor.CRIMSON_NYLIUM).pushReaction(PushReaction.DESTROY)))); + public static final DeferredBlock CHESTNUT_NOXWOOD_PRESSURE_PLATE = register(blockWithItem("chestnut_noxwood_pressure_plate", () -> new PressurePlateBlock(SpectrumBlockSetTypes.NOXWOOD, noxcap(MapColor.CRIMSON_NYLIUM)))); public static BlockBehaviour.Properties galaWood(MapColor color) { return settings(color, SoundType.CHERRY_WOOD, 30.0F).instrument(NoteBlockInstrument.BASS).ignitedByLava(); } - public static final DeferredBlock WEEPING_GALA_SPRIG = register(cross(blockWithItem("weeping_gala_sprig", () -> new WeepingGalaSprigBlock(copyWithMapColor(OAK_SAPLING, MapColor.WARPED_WART_BLOCK)), InkColors.LIME)).withItemModel(SpectrumModelHelper::registerItemModel)); + public static final DeferredBlock WEEPING_GALA_SPRIG = register(cross(blockWithItem("weeping_gala_sprig", () -> new WeepingGalaSprigBlock(copyWithMapColor(OAK_SAPLING, MapColor.WARPED_WART_BLOCK)))).withItemModel(SpectrumModelHelper::registerItemModel)); public static final DeferredBlock POTTED_WEEPING_GALA_SPRIG = register(pottedPlant(block("potted_weeping_gala_sprig", () -> new FlowerPotBlock(() -> (FlowerPotBlock) FLOWER_POT, () -> WEEPING_GALA_SPRIG.get(), pottedPlant())), false)); - public static final DeferredBlock WEEPING_GALA_LEAVES = register(singleton(blockWithItem("weeping_gala_leaves", () -> new FlammableLeavesBlock(copyWithMapColor(OAK_LEAVES, MapColor.WARPED_WART_BLOCK)), InkColors.LIME), TexturedModel.LEAVES)); - public static final DeferredBlock STRIPPED_WEEPING_GALA_LOG = register(log(blockWithItem("stripped_weeping_gala_log", () -> new FlammableRotatedPillarBlock(galaWood(MapColor.COLOR_BROWN)), InkColors.LIME))); - public static final DeferredBlock STRIPPED_WEEPING_GALA_WOOD = register(blockWithItem("stripped_weeping_gala_wood", () -> new FlammableRotatedPillarBlock(galaWood(MapColor.COLOR_BROWN)), InkColors.LIME)); - public static final DeferredBlock WEEPING_GALA_LOG = register(log(blockWithItem("weeping_gala_log", () -> new FlammableLogBlock(galaWood(MapColor.COLOR_BROWN), STRIPPED_WEEPING_GALA_WOOD), InkColors.LIME))); - public static final DeferredBlock WEEPING_GALA_WOOD = register(blockWithItem("weeping_gala_wood", () -> new FlammableLogBlock(galaWood(MapColor.COLOR_BROWN), STRIPPED_WEEPING_GALA_LOG), InkColors.LIME)); + public static final DeferredBlock WEEPING_GALA_LEAVES = register(singleton(blockWithItem("weeping_gala_leaves", () -> new FlammableLeavesBlock(copyWithMapColor(OAK_LEAVES, MapColor.WARPED_WART_BLOCK))), TexturedModel.LEAVES)); + public static final DeferredBlock STRIPPED_WEEPING_GALA_LOG = register(log(blockWithItem("stripped_weeping_gala_log", () -> new FlammableRotatedPillarBlock(galaWood(MapColor.COLOR_BROWN))))); + public static final DeferredBlock STRIPPED_WEEPING_GALA_WOOD = register(blockWithItem("stripped_weeping_gala_wood", () -> new FlammableRotatedPillarBlock(galaWood(MapColor.COLOR_BROWN)))); + public static final DeferredBlock WEEPING_GALA_LOG = register(log(blockWithItem("weeping_gala_log", () -> new FlammableLogBlock(galaWood(MapColor.COLOR_BROWN), STRIPPED_WEEPING_GALA_WOOD)))); + public static final DeferredBlock WEEPING_GALA_WOOD = register(blockWithItem("weeping_gala_wood", () -> new FlammableLogBlock(galaWood(MapColor.COLOR_BROWN), STRIPPED_WEEPING_GALA_LOG))); public static final DeferredBlock WEEPING_GALA_FRONDS = register(cross(block("weeping_gala_fronds", () -> new WeepingGalaFrondsBlock(BlockBehaviour.Properties.ofFullCopy(WEEPING_GALA_LEAVES.get()).noCollission())))); public static final DeferredBlock WEEPING_GALA_FRONDS_PLANT = register(block("weeping_gala_fronds_plant", () -> new WeepingGalaFrondsTipBlock(BlockBehaviour.Properties.ofFullCopy(WEEPING_GALA_LEAVES.get()).noCollission().lightLevel(s -> s.getValue(WeepingGalaFrondsTipBlock.FORM).getLuminance()))).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(WeepingGalaFrondsTipBlock.FORM) @@ -949,53 +951,53 @@ public static BlockBehaviour.Properties galaWood(MapColor color) { public static final BlockSetType GALA_BLOCK_SET_TYPE = new BlockSetType("spectrum_gala"); public static final WoodType GALA_WOOD_TYPE = new WoodType("spectrum_gala", GALA_BLOCK_SET_TYPE); - public static final DeferredBlock WEEPING_GALA_PLANKS = register(blockWithItem("weeping_gala_planks", () -> new FlammablePlankBlock(galaWood(MapColor.COLOR_BROWN)), InkColors.LIME)); - public static final DeferredBlock WEEPING_GALA_STAIRS = register(blockWithItem("weeping_gala_stairs", () -> new FlammableStairBlock(WEEPING_GALA_PLANKS.get().defaultBlockState(), galaWood(MapColor.COLOR_BROWN)), InkColors.LIME)); - public static final DeferredBlock WEEPING_GALA_SLAB = register(blockWithItem("weeping_gala_slab", () -> new FlammableSlabBlock(galaWood(MapColor.COLOR_BROWN)), InkColors.LIME)); - public static final DeferredBlock WEEPING_GALA_FENCE = register(blockWithItem("weeping_gala_fence", () -> new FlammableFenceBlock(galaWood(MapColor.COLOR_BROWN)), InkColors.LIME)); - public static final DeferredBlock WEEPING_GALA_FENCE_GATE = register(blockWithItem("weeping_gala_fence_gate", () -> new FlammableFenceGateBlock(GALA_WOOD_TYPE, galaWood(MapColor.COLOR_BROWN)), InkColors.LIME)); - public static final DeferredBlock WEEPING_GALA_DOOR = register(blockWithItem("weeping_gala_door", () -> new DoorBlock(GALA_BLOCK_SET_TYPE, galaWood(MapColor.COLOR_BROWN)), InkColors.LIME)); - public static final DeferredBlock WEEPING_GALA_TRAPDOOR = register(blockWithItem("weeping_gala_trapdoor", () -> new TrapDoorBlock(GALA_BLOCK_SET_TYPE, galaWood(MapColor.COLOR_BROWN)), InkColors.LIME)); - public static final DeferredBlock WEEPING_GALA_BUTTON = register(blockWithItem("weeping_gala_button", () -> woodenButton(GALA_BLOCK_SET_TYPE), InkColors.LIME)); - public static final DeferredBlock WEEPING_GALA_PRESSURE_PLATE = register(blockWithItem("weeping_gala_pressure_plate", () -> new PressurePlateBlock(GALA_BLOCK_SET_TYPE, galaWood(MapColor.COLOR_BROWN)), InkColors.LIME)); - - public static final DeferredBlock WEEPING_GALA_PILLAR = register(axisRotated(blockWithItem("weeping_gala_pillar", () -> new FlammableRotatedPillarBlock(galaWood(MapColor.COLOR_BROWN)), InkColors.LIME), TexturedModel.COLUMN)); - public static final DeferredBlock WEEPING_GALA_BARREL = register(barrellike(blockWithItem("weeping_gala_barrel", () -> new BarrelBlock(galaWood(MapColor.COLOR_BROWN)), InkColors.LIME), b -> b, "_bottom")); - public static final DeferredBlock WEEPING_GALA_AMPHORA = register(barrellike(blockWithItem("weeping_gala_amphora", () -> new AmphoraBlock(galaWood(MapColor.COLOR_BROWN)), InkColors.LIME), b -> b, "_bottom")); - public static final DeferredBlock WEEPING_GALA_LANTERN = register(blockWithItem("weeping_gala_lantern", () -> new WeepingGalaLanternBlock(galaWood(MapColor.COLOR_BROWN).lightLevel(state -> 13).noOcclusion().pushReaction(PushReaction.DESTROY)), InkColors.LIME).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(BlockStateProperties.HANGING).select(false, Variant.variant()).select(true, Variant.variant().with(VariantProperties.X_ROT, VariantProperties.Rotation.R180))).with(PropertyDispatch.properties(DiagonalBlock.DIAGONAL, FlexLanternBlock.TALL).generate((diagonal, tall) -> SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.baseTransLantern(diagonal, tall).createWithSuffix(block, (diagonal ? "_diagonal" : "") + (tall ? "_tall" : "_small"), ctx.modelOutput))))).withItemModel((ctx, item) -> SpectrumModelHelper.registerItemModel(ctx, item, "_item"))); - public static final DeferredBlock WEEPING_GALA_LAMP = register(redstoneLamp(blockWithItem("weeping_gala_lamp", () -> new FlammableRedstoneLampBlock(galaWood(MapColor.COLOR_BROWN).lightLevel(LANTERN_LIGHT_PROVIDER)), InkColors.LIME))); - public static final DeferredBlock WEEPING_GALA_LIGHT = register(axisRotated(blockWithItem("weeping_gala_light", () -> new FlammableRotatedPillarBlock(galaWood(MapColor.COLOR_BROWN).lightLevel(state -> 15).noOcclusion()), InkColors.LIME), SpectrumTexturedModelProviders.BASE_TRANS_LIGHT_CORE)); + public static final DeferredBlock WEEPING_GALA_PLANKS = register(blockWithItem("weeping_gala_planks", () -> new FlammablePlankBlock(galaWood(MapColor.COLOR_BROWN)))); + public static final DeferredBlock WEEPING_GALA_STAIRS = register(blockWithItem("weeping_gala_stairs", () -> new FlammableStairBlock(WEEPING_GALA_PLANKS.get().defaultBlockState(), galaWood(MapColor.COLOR_BROWN)))); + public static final DeferredBlock WEEPING_GALA_SLAB = register(blockWithItem("weeping_gala_slab", () -> new FlammableSlabBlock(galaWood(MapColor.COLOR_BROWN)))); + public static final DeferredBlock WEEPING_GALA_FENCE = register(blockWithItem("weeping_gala_fence", () -> new FlammableFenceBlock(galaWood(MapColor.COLOR_BROWN)))); + public static final DeferredBlock WEEPING_GALA_FENCE_GATE = register(blockWithItem("weeping_gala_fence_gate", () -> new FlammableFenceGateBlock(GALA_WOOD_TYPE, galaWood(MapColor.COLOR_BROWN)))); + public static final DeferredBlock WEEPING_GALA_DOOR = register(blockWithItem("weeping_gala_door", () -> new DoorBlock(GALA_BLOCK_SET_TYPE, galaWood(MapColor.COLOR_BROWN)))); + public static final DeferredBlock WEEPING_GALA_TRAPDOOR = register(blockWithItem("weeping_gala_trapdoor", () -> new TrapDoorBlock(GALA_BLOCK_SET_TYPE, galaWood(MapColor.COLOR_BROWN)))); + public static final DeferredBlock WEEPING_GALA_BUTTON = register(blockWithItem("weeping_gala_button", () -> woodenButton(GALA_BLOCK_SET_TYPE))); + public static final DeferredBlock WEEPING_GALA_PRESSURE_PLATE = register(blockWithItem("weeping_gala_pressure_plate", () -> new PressurePlateBlock(GALA_BLOCK_SET_TYPE, galaWood(MapColor.COLOR_BROWN)))); + + public static final DeferredBlock WEEPING_GALA_PILLAR = register(axisRotated(blockWithItem("weeping_gala_pillar", () -> new FlammableRotatedPillarBlock(galaWood(MapColor.COLOR_BROWN))), TexturedModel.COLUMN)); + public static final DeferredBlock WEEPING_GALA_BARREL = register(barrellike(blockWithItem("weeping_gala_barrel", () -> new BarrelBlock(galaWood(MapColor.COLOR_BROWN))), b -> b, "_bottom")); + public static final DeferredBlock WEEPING_GALA_AMPHORA = register(barrellike(blockWithItem("weeping_gala_amphora", () -> new AmphoraBlock(galaWood(MapColor.COLOR_BROWN))), b -> b, "_bottom")); + public static final DeferredBlock WEEPING_GALA_LANTERN = register(blockWithItem("weeping_gala_lantern", () -> new WeepingGalaLanternBlock(galaWood(MapColor.COLOR_BROWN).lightLevel(state -> 13).noOcclusion().pushReaction(PushReaction.DESTROY))).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(BlockStateProperties.HANGING).select(false, Variant.variant()).select(true, Variant.variant().with(VariantProperties.X_ROT, VariantProperties.Rotation.R180))).with(PropertyDispatch.properties(DiagonalBlock.DIAGONAL, FlexLanternBlock.TALL).generate((diagonal, tall) -> SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.baseTransLantern(diagonal, tall).createWithSuffix(block, (diagonal ? "_diagonal" : "") + (tall ? "_tall" : "_small"), ctx.modelOutput))))).withItemModel((ctx, item) -> SpectrumModelHelper.registerItemModel(ctx, item, "_item"))); + public static final DeferredBlock WEEPING_GALA_LAMP = register(redstoneLamp(blockWithItem("weeping_gala_lamp", () -> new FlammableRedstoneLampBlock(galaWood(MapColor.COLOR_BROWN).lightLevel(LANTERN_LIGHT_PROVIDER))))); + public static final DeferredBlock WEEPING_GALA_LIGHT = register(axisRotated(blockWithItem("weeping_gala_light", () -> new FlammableRotatedPillarBlock(galaWood(MapColor.COLOR_BROWN).lightLevel(state -> 15).noOcclusion())), SpectrumTexturedModelProviders.BASE_TRANS_LIGHT_CORE)); public static BlockBehaviour.Properties basalMarble() { return settings(MapColor.COLOR_GRAY, SoundType.DRIPSTONE_BLOCK, 8.0F).instrument(NoteBlockInstrument.BASEDRUM).requiresCorrectToolForDrops(); } - public static final DeferredBlock BASAL_MARBLE = register(axisRotated(blockWithItem("basal_marble", () -> new RotatedPillarBlock(basalMarble()), InkColors.BROWN), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock BASAL_MARBLE_STAIRS = register(blockWithItem("basal_marble_stairs", () -> new StairBlock(BASAL_MARBLE.get().defaultBlockState(), basalMarble()), InkColors.BROWN)); - public static final DeferredBlock BASAL_MARBLE_SLAB = register(blockWithItem("basal_marble_slab", () -> new SlabBlock(basalMarble()), InkColors.BROWN)); - public static final DeferredBlock BASAL_MARBLE_WALL = register(blockWithItem("basal_marble_wall", () -> new WallBlock(basalMarble()), InkColors.BROWN)); + public static final DeferredBlock BASAL_MARBLE = register(axisRotated(blockWithItem("basal_marble", () -> new RotatedPillarBlock(basalMarble())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock BASAL_MARBLE_STAIRS = register(blockWithItem("basal_marble_stairs", () -> new StairBlock(BASAL_MARBLE.get().defaultBlockState(), basalMarble()))); + public static final DeferredBlock BASAL_MARBLE_SLAB = register(blockWithItem("basal_marble_slab", () -> new SlabBlock(basalMarble()))); + public static final DeferredBlock BASAL_MARBLE_WALL = register(blockWithItem("basal_marble_wall", () -> new WallBlock(basalMarble()))); - public static final DeferredBlock BASAL_MARBLE_PILLAR = register(axisRotated(blockWithItem("basal_marble_pillar", () -> new RotatedPillarBlock(basalMarble()), InkColors.BROWN), TexturedModel.COLUMN)); + public static final DeferredBlock BASAL_MARBLE_PILLAR = register(axisRotated(blockWithItem("basal_marble_pillar", () -> new RotatedPillarBlock(basalMarble())), TexturedModel.COLUMN)); - public static final DeferredBlock POLISHED_BASAL_MARBLE = register(defaultUpFacing(blockWithItem("polished_basal_marble", () -> new SpectrumFacingBlock(basalMarble()), InkColors.BROWN), TexturedModel.CUBE_TOP_BOTTOM)); - public static final DeferredBlock POLISHED_BASAL_MARBLE_STAIRS = register(blockWithItem("polished_basal_marble_stairs", () -> new StairBlock(POLISHED_BASAL_MARBLE.get().defaultBlockState(), basalMarble()), InkColors.BROWN)); - public static final DeferredBlock POLISHED_BASAL_MARBLE_SLAB = register(blockWithItem("polished_basal_marble_slab", () -> new SlabBlock(basalMarble()), InkColors.BROWN)); - public static final DeferredBlock POLISHED_BASAL_MARBLE_WALL = register(blockWithItem("polished_basal_marble_wall", () -> new WallBlock(basalMarble()), InkColors.BROWN)); + public static final DeferredBlock POLISHED_BASAL_MARBLE = register(defaultUpFacing(blockWithItem("polished_basal_marble", () -> new SpectrumFacingBlock(basalMarble())), TexturedModel.CUBE_TOP_BOTTOM)); + public static final DeferredBlock POLISHED_BASAL_MARBLE_STAIRS = register(blockWithItem("polished_basal_marble_stairs", () -> new StairBlock(POLISHED_BASAL_MARBLE.get().defaultBlockState(), basalMarble()))); + public static final DeferredBlock POLISHED_BASAL_MARBLE_SLAB = register(blockWithItem("polished_basal_marble_slab", () -> new SlabBlock(basalMarble()))); + public static final DeferredBlock POLISHED_BASAL_MARBLE_WALL = register(blockWithItem("polished_basal_marble_wall", () -> new WallBlock(basalMarble()))); - public static final DeferredBlock BASAL_MARBLE_TILES = register(blockWithItem("basal_marble_tiles", () -> new Block(basalMarble()), InkColors.BROWN)); - public static final DeferredBlock BASAL_MARBLE_TILE_STAIRS = register(blockWithItem("basal_marble_tile_stairs", () -> new StairBlock(BASAL_MARBLE_TILES.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BASAL_MARBLE_TILES.get())), InkColors.BROWN)); - public static final DeferredBlock BASAL_MARBLE_TILE_SLAB = register(blockWithItem("basal_marble_tile_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(BASAL_MARBLE_TILES.get())), InkColors.BROWN)); - public static final DeferredBlock BASAL_MARBLE_TILE_WALL = register(blockWithItem("basal_marble_tile_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(BASAL_MARBLE_TILES.get())), InkColors.BROWN)); + public static final DeferredBlock BASAL_MARBLE_TILES = register(blockWithItem("basal_marble_tiles", () -> new Block(basalMarble()))); + public static final DeferredBlock BASAL_MARBLE_TILE_STAIRS = register(blockWithItem("basal_marble_tile_stairs", () -> new StairBlock(BASAL_MARBLE_TILES.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BASAL_MARBLE_TILES.get())))); + public static final DeferredBlock BASAL_MARBLE_TILE_SLAB = register(blockWithItem("basal_marble_tile_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(BASAL_MARBLE_TILES.get())))); + public static final DeferredBlock BASAL_MARBLE_TILE_WALL = register(blockWithItem("basal_marble_tile_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(BASAL_MARBLE_TILES.get())))); - public static final DeferredBlock BASAL_MARBLE_BRICKS = register(blockWithItem("basal_marble_bricks", () -> new Block(basalMarble()), InkColors.BROWN)); - public static final DeferredBlock BASAL_MARBLE_BRICK_STAIRS = register(blockWithItem("basal_marble_brick_stairs", () -> new StairBlock(BASAL_MARBLE_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BASAL_MARBLE_BRICKS.get())), InkColors.BROWN)); - public static final DeferredBlock BASAL_MARBLE_BRICK_SLAB = register(blockWithItem("basal_marble_brick_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(BASAL_MARBLE_BRICKS.get())), InkColors.BROWN)); - public static final DeferredBlock BASAL_MARBLE_BRICK_WALL = register(blockWithItem("basal_marble_brick_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(BASAL_MARBLE_BRICKS.get())), InkColors.BROWN)); + public static final DeferredBlock BASAL_MARBLE_BRICKS = register(blockWithItem("basal_marble_bricks", () -> new Block(basalMarble()))); + public static final DeferredBlock BASAL_MARBLE_BRICK_STAIRS = register(blockWithItem("basal_marble_brick_stairs", () -> new StairBlock(BASAL_MARBLE_BRICKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(BASAL_MARBLE_BRICKS.get())))); + public static final DeferredBlock BASAL_MARBLE_BRICK_SLAB = register(blockWithItem("basal_marble_brick_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(BASAL_MARBLE_BRICKS.get())))); + public static final DeferredBlock BASAL_MARBLE_BRICK_WALL = register(blockWithItem("basal_marble_brick_wall", () -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(BASAL_MARBLE_BRICKS.get())))); - public static final DeferredBlock LONGING_CHIMERA = register(defaultNorthHorizontalFacing(blockWithItem("longing_chimera", () -> new GrotesqueBlock(basalMarble().noOcclusion(), 12, 15, "block.spectrum.longing_chimera.tooltip"), InkColors.BROWN), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock LONGING_CHIMERA = register(defaultNorthHorizontalFacing(blockWithItem("longing_chimera", () -> new GrotesqueBlock(basalMarble().noOcclusion(), 12, 15, "block.spectrum.longing_chimera.tooltip")), ModelLocationUtils::getModelLocation)); public static DeferredBlock registerSmallDragonjagBlock(String name, Dragonjag.Variant variant) { - return register(singleton(blockWithItem(name, () -> new SmallDragonjagBlock(settings(variant.getMapColor(), SoundType.GRASS, 1.0F), variant), InkColors.LIME), SpectrumTexturedModelProviders.doubleCross(b -> b, "")).withBlockItemModel(SpectrumModelHelper::registerBlockTexturedItemModel)); + return register(singleton(blockWithItem(name, () -> new SmallDragonjagBlock(settings(variant.getMapColor(), SoundType.GRASS, 1.0F), variant)), SpectrumTexturedModelProviders.doubleCross(b -> b, "")).withBlockItemModel(SpectrumModelHelper::registerBlockTexturedItemModel)); } public static final DeferredBlock SMALL_RED_DRAGONJAG = registerSmallDragonjagBlock("small_red_dragonjag", Dragonjag.Variant.RED); @@ -1027,9 +1029,9 @@ public static DeferredBlock registerTallDragonjagBlock(Strin .select(4, SpectrumModelHelper.createModelVariant(block, "_stage2")).select(5, SpectrumModelHelper.createModelVariant(block, "_stage2")) .select(6, SpectrumModelHelper.createModelVariant(block, "_stage2")) .select(7, SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, "3").createWithSuffix(block, "_stage3", ctx.modelOutput)))))); - public static final DeferredBlock BRISTLE_SPROUTS = register(blockWithItem("bristle_sprouts", () -> new BristleSproutsBlock(settings(MapColor.GRASS, SoundType.GRASS, 0.0F).noCollission().noOcclusion().offsetType(BlockBehaviour.OffsetType.XZ).replaceable()), InkColors.LIME).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerBlockTexturedItemModel(ctx, block, "_1")).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block, SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, "_1").createWithSuffix(block, "_1", ctx.modelOutput)), SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, "_2").createWithSuffix(block, "_2", ctx.modelOutput)), SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, "_3").createWithSuffix(block, "_3", ctx.modelOutput)), SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, "_4").createWithSuffix(block, "_4", ctx.modelOutput))))); + public static final DeferredBlock BRISTLE_SPROUTS = register(blockWithItem("bristle_sprouts", () -> new BristleSproutsBlock(settings(MapColor.GRASS, SoundType.GRASS, 0.0F).noCollission().noOcclusion().offsetType(BlockBehaviour.OffsetType.XZ).replaceable())).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerBlockTexturedItemModel(ctx, block, "_1")).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block, SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, "_1").createWithSuffix(block, "_1", ctx.modelOutput)), SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, "_2").createWithSuffix(block, "_2", ctx.modelOutput)), SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, "_3").createWithSuffix(block, "_3", ctx.modelOutput)), SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, "_4").createWithSuffix(block, "_4", ctx.modelOutput))))); public static final DeferredBlock DOOMBLOOM = register(block("doombloom", () -> new DoomBloomBlock(SpectrumMobEffects.STIFFNESS, 8, settings(MapColor.GRASS, SoundType.GRASS, 0.0F).randomTicks().noCollission().lightLevel((state) -> state.getValue(DoomBloomBlock.AGE) * 2).noOcclusion())).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(BlockStateProperties.AGE_4).generate(age -> SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, age.toString()).createWithSuffix(block, age.toString(), ctx.modelOutput)))))); - public static final DeferredBlock SNAPPING_IVY = register(blockWithItem("snapping_ivy", () -> new SnappingIvyBlock(settings(MapColor.GRASS, SoundType.GRASS, 3.0F).noCollission().noOcclusion()), InkColors.RED).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(SpectrumModelHelper.createBooleanModelMap(SnappingIvyBlock.SNAPPED, ModelLocationUtils.getModelLocation(block, "_snapped"), ModelLocationUtils.getModelLocation(block))).with(PropertyDispatch.property(BlockStateProperties.HORIZONTAL_AXIS).select(Direction.Axis.X, Variant.variant()).select(Direction.Axis.Z, Variant.variant().with(VariantProperties.Y_ROT, VariantProperties.Rotation.R90))))); + public static final DeferredBlock SNAPPING_IVY = register(blockWithItem("snapping_ivy", () -> new SnappingIvyBlock(settings(MapColor.GRASS, SoundType.GRASS, 3.0F).noCollission().noOcclusion())).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(SpectrumModelHelper.createBooleanModelMap(SnappingIvyBlock.SNAPPED, ModelLocationUtils.getModelLocation(block, "_snapped"), ModelLocationUtils.getModelLocation(block))).with(PropertyDispatch.property(BlockStateProperties.HORIZONTAL_AXIS).select(Direction.Axis.X, Variant.variant()).select(Direction.Axis.Z, Variant.variant().with(VariantProperties.Y_ROT, VariantProperties.Rotation.R90))))); public static final DeferredBlock ABYSSAL_VINES = register(block("abyssal_vines", () -> new AbyssalVineBlock(settings(MapColor.PLANT, SoundType.CAVE_VINES, 2.0F).noCollission().offsetType(BlockBehaviour.OffsetType.XYZ).randomTicks().noOcclusion().lightLevel(state -> state.getValue(BlockStateProperties.BERRIES) ? 13 : 0))) .withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.properties(TriStateVineBlock.LIFE_STAGE, AbyssalVineBlock.BERRIES).generate((stage, berries) -> { @@ -1042,26 +1044,26 @@ public static DeferredBlock registerTallDragonjagBlock(Strin if (stage == TriStateVineBlock.LifeStage.MATURE) return createModelVariant(block, suffix); return createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, suffix).createWithSuffix(block, suffix, ctx.modelOutput)); })))); - public static final DeferredBlock SWEET_PEA = register(simplePlant(blockWithItem("sweet_pea", () -> new FlammableFlowerBlock(MobEffects.NIGHT_VISION, 5, settings(MapColor.COLOR_MAGENTA, SoundType.GRASS, 0.0F).offsetType(BlockBehaviour.OffsetType.XZ).noCollission().noOcclusion().lightLevel(s -> 11).hasPostProcess(SpectrumBlocks::always).emissiveRendering(SpectrumBlocks::always)), InkColors.YELLOW))); - public static final DeferredBlock APRICOTTI = register(simplePlant(blockWithItem("apricotti", () -> new FlammableFlowerBlock(MobEffects.GLOWING, 5, settings(MapColor.COLOR_ORANGE, SoundType.GRASS, 0.0F).offsetType(BlockBehaviour.OffsetType.XZ).noCollission().noOcclusion().lightLevel(s -> 11).hasPostProcess(SpectrumBlocks::always).emissiveRendering(SpectrumBlocks::always)), InkColors.YELLOW))); - public static final DeferredBlock HUMMING_BELL = register(simplePlant(blockWithItem("humming_bell", () -> new FlammableFlowerBlock(SpectrumMobEffects.LIGHTWEIGHT, 5, settings(MapColor.COLOR_LIGHT_BLUE, SoundType.GRASS, 0.0F).offsetType(BlockBehaviour.OffsetType.XZ).noCollission().noOcclusion().lightLevel(s -> 9).hasPostProcess(SpectrumBlocks::always).emissiveRendering(SpectrumBlocks::always)), InkColors.LIME))); + public static final DeferredBlock SWEET_PEA = register(simplePlant(blockWithItem("sweet_pea", () -> new FlammableFlowerBlock(MobEffects.NIGHT_VISION, 5, settings(MapColor.COLOR_MAGENTA, SoundType.GRASS, 0.0F).offsetType(BlockBehaviour.OffsetType.XZ).noCollission().noOcclusion().lightLevel(s -> 11).hasPostProcess(SpectrumBlocks::always).emissiveRendering(SpectrumBlocks::always))))); + public static final DeferredBlock APRICOTTI = register(simplePlant(blockWithItem("apricotti", () -> new FlammableFlowerBlock(MobEffects.GLOWING, 5, settings(MapColor.COLOR_ORANGE, SoundType.GRASS, 0.0F).offsetType(BlockBehaviour.OffsetType.XZ).noCollission().noOcclusion().lightLevel(s -> 11).hasPostProcess(SpectrumBlocks::always).emissiveRendering(SpectrumBlocks::always))))); + public static final DeferredBlock HUMMING_BELL = register(simplePlant(blockWithItem("humming_bell", () -> new FlammableFlowerBlock(SpectrumMobEffects.LIGHTWEIGHT, 5, settings(MapColor.COLOR_LIGHT_BLUE, SoundType.GRASS, 0.0F).offsetType(BlockBehaviour.OffsetType.XZ).noCollission().noOcclusion().lightLevel(s -> 9).hasPostProcess(SpectrumBlocks::always).emissiveRendering(SpectrumBlocks::always))))); - public static final DeferredBlock HUMMINGSTONE_GLASS = register(simple(blockWithItem("hummingstone_glass", () -> new TransparentBlock(settings(MapColor.SAND, SoundType.GLASS, 5.0F, 100.0F).noOcclusion().requiresCorrectToolForDrops()), InkColors.LIGHT_BLUE))); - public static final DeferredBlock HUMMINGSTONE_GLASS_PANE = register(blockWithItem("hummingstone_glass_pane", () -> new IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(HUMMINGSTONE_GLASS.get())), InkColors.LIGHT_BLUE)); - public static final DeferredBlock HUMMINGSTONE = register(blockWithItem("hummingstone", () -> new HummingstoneBlock(BlockBehaviour.Properties.ofFullCopy(HUMMINGSTONE_GLASS.get()).lightLevel((state) -> 14)), InkColors.LIGHT_BLUE).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(SpectrumModelHelper.createBooleanModelMap(HummingstoneBlock.HUMMING, SpectrumTexturedModelProviders.cubeAll(b -> b, "_humming").createWithSuffix(block, "_humming", ctx.modelOutput), TexturedModel.CUBE.create(block, ctx.modelOutput))))); - public static final DeferredBlock WAXED_HUMMINGSTONE = register(parented(blockWithItem("waxed_hummingstone", () -> new TransparentBlock(BlockBehaviour.Properties.ofFullCopy(HUMMINGSTONE.get())), InkColors.LIGHT_BLUE), b -> HUMMINGSTONE.get())); + public static final DeferredBlock HUMMINGSTONE_GLASS = register(simple(blockWithItem("hummingstone_glass", () -> new TransparentBlock(settings(MapColor.SAND, SoundType.GLASS, 5.0F, 100.0F).noOcclusion().requiresCorrectToolForDrops())))); + public static final DeferredBlock HUMMINGSTONE_GLASS_PANE = register(blockWithItem("hummingstone_glass_pane", () -> new IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(HUMMINGSTONE_GLASS.get())))); + public static final DeferredBlock HUMMINGSTONE = register(blockWithItem("hummingstone", () -> new HummingstoneBlock(BlockBehaviour.Properties.ofFullCopy(HUMMINGSTONE_GLASS.get()).lightLevel((state) -> 14))).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(SpectrumModelHelper.createBooleanModelMap(HummingstoneBlock.HUMMING, SpectrumTexturedModelProviders.cubeAll(b -> b, "_humming").createWithSuffix(block, "_humming", ctx.modelOutput), TexturedModel.CUBE.create(block, ctx.modelOutput))))); + public static final DeferredBlock WAXED_HUMMINGSTONE = register(parented(blockWithItem("waxed_hummingstone", () -> new TransparentBlock(BlockBehaviour.Properties.ofFullCopy(HUMMINGSTONE.get()))), b -> HUMMINGSTONE.get())); - public static final DeferredBlock MOSS_BALL = register(blockWithItem("moss_ball", () -> new MossBallBlock(settings(MapColor.PLANT, SoundType.WET_GRASS, 1F).noCollission().noOcclusion().offsetType(BlockBehaviour.OffsetType.XYZ)), InkColors.GREEN).withBlockModel((ctx, block) -> { + public static final DeferredBlock MOSS_BALL = register(blockWithItem("moss_ball", () -> new MossBallBlock(settings(MapColor.PLANT, SoundType.WET_GRASS, 1F).noCollission().noOcclusion().offsetType(BlockBehaviour.OffsetType.XYZ))).withBlockModel((ctx, block) -> { List variants = new ArrayList<>(SpectrumModelHelper.createHorizontalRotationVariantList(ModelLocationUtils.getModelLocation(block, "_tuft"))); variants.add(createModelVariant(block, "").with(VariantProperties.WEIGHT, 4)); return MultiVariantGenerator.multiVariant(block, variants.toArray(Variant[]::new)); })); - public static final DeferredBlock GIANT_MOSS_BALL = register(blockWithItem("giant_moss_ball", () -> new GiantMossBallBlock(settings(MapColor.PLANT, SoundType.WET_GRASS, 10F).noCollission().noOcclusion().offsetType(BlockBehaviour.OffsetType.XYZ)), InkColors.GREEN).withBlockModel((ctx, block) -> SpectrumModelHelper.createVariantsSupplier(block, ModelLocationUtils.getModelLocation(block)))); + public static final DeferredBlock GIANT_MOSS_BALL = register(blockWithItem("giant_moss_ball", () -> new GiantMossBallBlock(settings(MapColor.PLANT, SoundType.WET_GRASS, 10F).noCollission().noOcclusion().offsetType(BlockBehaviour.OffsetType.XYZ))).withBlockModel((ctx, block) -> SpectrumModelHelper.createVariantsSupplier(block, ModelLocationUtils.getModelLocation(block)))); - public static final DeferredBlock RESPLENDENT_BLOCK = register(defaultUpFacing(blockWithItem("resplendent_block", () -> new CushionedFacingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.RED_WOOL)), () -> IS.of(Rarity.UNCOMMON), InkColors.YELLOW), TexturedModel.CUBE_TOP_BOTTOM)); - public static final DeferredBlock RESPLENDENT_CUSHION = register(singleton(blockWithItem("resplendent_cushion", () -> new CushionBlock(BlockBehaviour.Properties.ofFullCopy(RESPLENDENT_BLOCK.get()).noOcclusion().isValidSpawn(SpectrumBlocks::never)), () -> IS.of(Rarity.UNCOMMON), InkColors.YELLOW), SpectrumTexturedModelProviders.CUSHION)); - public static final DeferredBlock RESPLENDENT_CARPET = register(singleton(blockWithItem("resplendent_carpet", () -> new CushionedCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.RED_CARPET)), () -> IS.of(Rarity.UNCOMMON), InkColors.YELLOW), TexturedModel.CARPET)); - public static final DeferredBlock RESPLENDENT_BED = register(blockWithItem("resplendent_bed", () -> new SpectrumBedBlock(DyeColor.RED, BlockBehaviour.Properties.ofFullCopy(Blocks.RED_BED)), () -> IS.of(1, Rarity.UNCOMMON), InkColors.YELLOW).withPredefinedItemModel().withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(SpectrumModelHelper.createSouthDefaultHorizontalFacingVariantMap()).with(PropertyDispatch.property(BedBlock.PART).select(BedPart.HEAD, SpectrumModelHelper.createModelVariant(block, "_head")).select(BedPart.FOOT, SpectrumModelHelper.createModelVariant(block, "_foot"))))); + public static final DeferredBlock RESPLENDENT_BLOCK = register(defaultUpFacing(blockWithItem("resplendent_block", () -> new CushionedFacingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.RED_WOOL)), () -> IS.of(Rarity.UNCOMMON)), TexturedModel.CUBE_TOP_BOTTOM)); + public static final DeferredBlock RESPLENDENT_CUSHION = register(singleton(blockWithItem("resplendent_cushion", () -> new CushionBlock(BlockBehaviour.Properties.ofFullCopy(RESPLENDENT_BLOCK.get()).noOcclusion().isValidSpawn(SpectrumBlocks::never)), () -> IS.of(Rarity.UNCOMMON)), SpectrumTexturedModelProviders.CUSHION)); + public static final DeferredBlock RESPLENDENT_CARPET = register(singleton(blockWithItem("resplendent_carpet", () -> new CushionedCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.RED_CARPET)), () -> IS.of(Rarity.UNCOMMON)), TexturedModel.CARPET)); + public static final DeferredBlock RESPLENDENT_BED = register(blockWithItem("resplendent_bed", () -> new SpectrumBedBlock(DyeColor.RED, BlockBehaviour.Properties.ofFullCopy(Blocks.RED_BED)), () -> IS.of(1, Rarity.UNCOMMON)).withPredefinedItemModel().withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(SpectrumModelHelper.createSouthDefaultHorizontalFacingVariantMap()).with(PropertyDispatch.property(BedBlock.PART).select(BedPart.HEAD, SpectrumModelHelper.createModelVariant(block, "_head")).select(BedPart.FOOT, SpectrumModelHelper.createModelVariant(block, "_foot"))))); // JADE VINES public static BlockBehaviour.Properties jadeVine() { @@ -1079,10 +1081,10 @@ public static BlockBehaviour.Properties jadeVine() { if (age == 7) return createModelVariant(model.createWithSuffix(block, suffix, SpectrumTextureMaps.flowerParticle(SpectrumTextures.JADE_VINE_PLANT_BLOOMING, SpectrumTextures.JADE_VINE_PLANT_BREAKING), ctx.modelOutput)); return createModelVariant(block, suffix); })))); - public static final DeferredBlock JADE_VINE_PETAL_BLOCK = register(simple(blockWithItem("jade_vine_petal_block", () -> new JadeVinePetalBlock(jadeVine().lightLevel(state -> 3)), InkColors.LIME))); - public static final DeferredBlock JADE_VINE_PETAL_CARPET = register(singleton(blockWithItem("jade_vine_petal_carpet", () -> new FlammableCarpetBlock(jadeVine().lightLevel(state -> 3)), InkColors.LIME), SpectrumTexturedModelProviders.carpet(b -> JADE_VINE_PETAL_BLOCK.get(), ""))); + public static final DeferredBlock JADE_VINE_PETAL_BLOCK = register(simple(blockWithItem("jade_vine_petal_block", () -> new JadeVinePetalBlock(jadeVine().lightLevel(state -> 3))))); + public static final DeferredBlock JADE_VINE_PETAL_CARPET = register(singleton(blockWithItem("jade_vine_petal_carpet", () -> new FlammableCarpetBlock(jadeVine().lightLevel(state -> 3))), SpectrumTexturedModelProviders.carpet(b -> JADE_VINE_PETAL_BLOCK.get(), ""))); - public static final DeferredBlock NEPHRITE_BLOSSOM_STEM = register(blockWithItem("nephrite_blossom_stem", () -> new NephriteBlossomStemBlock(settings(MapColor.COLOR_PINK, SoundType.WOOL, 2.0F).noOcclusion().noCollission()), InkColors.PINK).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerBlockTexturedItemModel(ctx, block, "_bottom")).withBlockModel((ctx, block) -> { + public static final DeferredBlock NEPHRITE_BLOSSOM_STEM = register(blockWithItem("nephrite_blossom_stem", () -> new NephriteBlossomStemBlock(settings(MapColor.COLOR_PINK, SoundType.WOOL, 2.0F).noOcclusion().noCollission())).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerBlockTexturedItemModel(ctx, block, "_bottom")).withBlockModel((ctx, block) -> { ResourceLocation bottom = SpectrumTexturedModelProviders.cross(b -> b, "_bottom").createWithSuffix(block, "_bottom", ctx.modelOutput); ResourceLocation top = SpectrumTexturedModelProviders.cross(b -> b, "_top").createWithSuffix(block, "_top", ctx.modelOutput); ResourceLocation fronds = ModelLocationUtils.getModelLocation(block, "_base"); @@ -1092,26 +1094,26 @@ public static BlockBehaviour.Properties jadeVine() { .with(Condition.condition().term(NephriteBlossomStemBlock.STEM_PART, StemComponent.BASE), createModelVariant(fronds)) .with(Condition.condition().term(NephriteBlossomStemBlock.STEM_PART, StemComponent.BASE), createModelVariant(bottom)); })); - public static final DeferredBlock NEPHRITE_BLOSSOM_LEAVES = register(blockWithItem("nephrite_blossom_leaves", () -> new NephriteBlossomLeavesBlock(settings(MapColor.COLOR_PINK, SoundType.GRASS, 0.2F).noOcclusion().randomTicks().lightLevel(state -> 13)), InkColors.PINK).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(BlockStateProperties.AGE_2).generate(age -> { + public static final DeferredBlock NEPHRITE_BLOSSOM_LEAVES = register(blockWithItem("nephrite_blossom_leaves", () -> new NephriteBlossomLeavesBlock(settings(MapColor.COLOR_PINK, SoundType.GRASS, 0.2F).noOcclusion().randomTicks().lightLevel(state -> 13))).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(BlockStateProperties.AGE_2).generate(age -> { String suffix = age == 0 ? "" : age == 1 ? "_flowering" : "_fruiting"; return createModelVariant(SpectrumTexturedModelProviders.leaves(b -> b, suffix).createWithSuffix(block, suffix, ctx.modelOutput)); })))); - public static final DeferredBlock NEPHRITE_BLOSSOM_BULB = register(cross(blockWithItem("nephrite_blossom_bulb", () -> new NephriteBlossomBulbBlock(BlockBehaviour.Properties.ofFullCopy(NEPHRITE_BLOSSOM_STEM.get())), InkColors.PINK)).withItemModel(SpectrumModelHelper::registerItemModel)); + public static final DeferredBlock NEPHRITE_BLOSSOM_BULB = register(cross(blockWithItem("nephrite_blossom_bulb", () -> new NephriteBlossomBulbBlock(BlockBehaviour.Properties.ofFullCopy(NEPHRITE_BLOSSOM_STEM.get())))).withItemModel(SpectrumModelHelper::registerItemModel)); public static BlockBehaviour.Properties jadeite() { return settings(MapColor.WOOL, SoundType.WOOL, 0.1F).noCollission().noOcclusion().lightLevel(state -> 12).hasPostProcess(SpectrumBlocks::always).emissiveRendering(SpectrumBlocks::always); } - public static final DeferredBlock JADEITE_LOTUS_STEM = register(blockWithItem("jadeite_lotus_stem", () -> new JadeiteLotusStemBlock(settings(MapColor.COLOR_BLACK, SoundType.WOOL, 2.0F).noOcclusion().noCollission()), InkColors.LIME).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerBlockTexturedItemModel(ctx, block, "_top")).withBlockModel((ctx, block) -> { + public static final DeferredBlock JADEITE_LOTUS_STEM = register(blockWithItem("jadeite_lotus_stem", () -> new JadeiteLotusStemBlock(settings(MapColor.COLOR_BLACK, SoundType.WOOL, 2.0F).noOcclusion().noCollission())).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerBlockTexturedItemModel(ctx, block, "_top")).withBlockModel((ctx, block) -> { ResourceLocation bottom = SpectrumTexturedModelProviders.cross(b -> b, "_bottom").createWithSuffix(block, "_bottom", ctx.modelOutput); ResourceLocation top = SpectrumTexturedModelProviders.cross(b -> b, "_top").createWithSuffix(block, "_top", ctx.modelOutput); ResourceLocation base = ModelLocationUtils.getModelLocation(block, "_base"); return MultiPartGenerator.multiPart(block).with(Condition.condition().term(JadeiteLotusStemBlock.STEM_PART, StemComponent.STEM), createModelVariant(bottom)).with(Condition.condition().term(JadeiteLotusStemBlock.STEM_PART, StemComponent.STEMALT), createModelVariant(top)).with(Condition.condition().term(JadeiteLotusStemBlock.STEM_PART, StemComponent.BASE), createModelVariant(bottom)).with(Condition.condition().term(JadeiteLotusStemBlock.STEM_PART, StemComponent.BASE).term(BlockStateProperties.INVERTED, false), createModelVariant(base)).with(Condition.condition().term(JadeiteLotusStemBlock.STEM_PART, StemComponent.BASE).term(BlockStateProperties.INVERTED, true), createModelVariant(base).with(VariantProperties.X_ROT, VariantProperties.Rotation.R180)); })); - public static final DeferredBlock JADEITE_LOTUS_FLOWER = register(defaultUpFacingGetter(blockWithItem("jadeite_lotus_flower", () -> new JadeiteLotusFlowerBlock(settings(MapColor.SNOW, SoundType.WOOL, 2.0F).lightLevel(state -> 14).hasPostProcess(SpectrumBlocks::always).emissiveRendering(SpectrumBlocks::always)), InkColors.LIME), ModelLocationUtils::getModelLocation)); - public static final DeferredBlock JADEITE_LOTUS_BULB = register(cross(blockWithItem("jadeite_lotus_bulb", () -> new JadeiteLotusBulbBlock(BlockBehaviour.Properties.ofFullCopy(JADEITE_LOTUS_STEM.get()).noOcclusion()), InkColors.LIME)).withItemModel(SpectrumModelHelper::registerItemModel)); - public static final DeferredBlock JADEITE_PETAL_BLOCK = register(simple(blockWithItem("jadeite_petal_block", () -> new JadeVinePetalBlock(jadeite()), InkColors.LIME))); - public static final DeferredBlock JADEITE_PETAL_CARPET = register(singleton(blockWithItem("jadeite_petal_carpet", () -> new FlammableCarpetBlock(jadeite()), InkColors.LIME), SpectrumTexturedModelProviders.carpet(b -> JADEITE_PETAL_BLOCK.get(), ""))); + public static final DeferredBlock JADEITE_LOTUS_FLOWER = register(defaultUpFacingGetter(blockWithItem("jadeite_lotus_flower", () -> new JadeiteLotusFlowerBlock(settings(MapColor.SNOW, SoundType.WOOL, 2.0F).lightLevel(state -> 14).hasPostProcess(SpectrumBlocks::always).emissiveRendering(SpectrumBlocks::always))), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock JADEITE_LOTUS_BULB = register(cross(blockWithItem("jadeite_lotus_bulb", () -> new JadeiteLotusBulbBlock(BlockBehaviour.Properties.ofFullCopy(JADEITE_LOTUS_STEM.get()).noOcclusion()))).withItemModel(SpectrumModelHelper::registerItemModel)); + public static final DeferredBlock JADEITE_PETAL_BLOCK = register(simple(blockWithItem("jadeite_petal_block", () -> new JadeVinePetalBlock(jadeite())))); + public static final DeferredBlock JADEITE_PETAL_CARPET = register(singleton(blockWithItem("jadeite_petal_carpet", () -> new FlammableCarpetBlock(jadeite())), SpectrumTexturedModelProviders.carpet(b -> JADEITE_PETAL_BLOCK.get(), ""))); private static BlockBehaviour.Properties ore() { return BlockBehaviour.Properties.ofFullCopy(IRON_ORE); @@ -1133,77 +1135,77 @@ private static BlockBehaviour.Properties endstoneOre() { return BlockBehaviour.Properties.ofFullCopy(END_STONE).strength(3.0F, 3.0F).requiresCorrectToolForDrops(); } - public static final DeferredBlock SHIMMERSTONE_ORE = register(simple(blockWithItem("shimmerstone_ore", () -> new ShimmerstoneOreBlock(UniformInt.of(2, 4), ore().randomTicks(), SpectrumAdvancements.REVEAL_SHIMMERSTONE, STONE.defaultBlockState()), InkColors.YELLOW))); - public static final DeferredBlock DEEPSLATE_SHIMMERSTONE_ORE = register(simple(blockWithItem("deepslate_shimmerstone_ore", () -> new ShimmerstoneOreBlock(UniformInt.of(2, 4), deepslateOre().randomTicks(), SpectrumAdvancements.REVEAL_SHIMMERSTONE, DEEPSLATE.defaultBlockState()), InkColors.YELLOW))); - public static final DeferredBlock BLACKSLAG_SHIMMERSTONE_ORE = register(singleton(blockWithItem("blackslag_shimmerstone_ore", () -> new ShimmerstoneOreBlock(UniformInt.of(2, 4), blackslagOre().randomTicks(), SpectrumAdvancements.REVEAL_SHIMMERSTONE, BLACKSLAG.get().defaultBlockState()), InkColors.YELLOW), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock SHIMMERSTONE_BLOCK = register(simple(blockWithItem("shimmerstone_block", () -> new ShimmerstoneBlock(settings(MapColor.COLOR_YELLOW, SoundType.GLASS, 2.0F).lightLevel((state) -> 15)), InkColors.YELLOW))); - - public static final DeferredBlock AZURITE_ORE = register(simpleMirrored(blockWithItem("azurite_ore", () -> new AzuriteOreBlock(UniformInt.of(4, 7), ore().randomTicks(), SpectrumAdvancements.REVEAL_AZURITE, Blocks.STONE.defaultBlockState()), InkColors.BLUE))); - public static final DeferredBlock RAW_AZURITE_BLOCK = register(simple(blockWithItem("raw_azurite_block", () -> new AzuriteBlock(ore().mapColor(MapColor.COLOR_BLUE)), InkColors.BLUE))); - public static final DeferredBlock DEEPSLATE_AZURITE_ORE = register(simpleMirrored(blockWithItem("deepslate_azurite_ore", () -> new AzuriteOreBlock(UniformInt.of(4, 7), deepslateOre().randomTicks(), SpectrumAdvancements.REVEAL_AZURITE, Blocks.DEEPSLATE.defaultBlockState()), InkColors.BLUE))); - public static final DeferredBlock BLACKSLAG_AZURITE_ORE = register(simpleMirrored(blockWithItem("blackslag_azurite_ore", () -> new AzuriteOreBlock(UniformInt.of(4, 7), blackslagOre().randomTicks(), SpectrumAdvancements.REVEAL_AZURITE, BLACKSLAG.get().defaultBlockState()), InkColors.BLUE))); - public static final DeferredBlock PURE_AZURITE_BLOCK = register(defaultUpFacing(blockWithItem("pure_azurite_block", () -> new SpectrumFacingBlock(BlockBehaviour.Properties.ofFullCopy(LAPIS_BLOCK).mapColor(MapColor.COLOR_BLUE)), InkColors.BLUE), TexturedModel.CUBE_TOP_BOTTOM)); - public static final DeferredBlock AZURITE_CLUSTER = register(cluster(blockWithItem("azurite_cluster", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_BLUE, SpectrumSoundTypes.SMALL_ONYX_BUD, 2), SpectrumClusterBlock.GrowthStage.CLUSTER), () -> IS.of(Rarity.UNCOMMON), InkColors.BLUE), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock LARGE_AZURITE_BUD = register(cluster(blockWithItem("large_azurite_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_BLUE, SpectrumSoundTypes.LARGE_ONYX_BUD, 3), SpectrumClusterBlock.GrowthStage.LARGE), () -> IS.of(Rarity.UNCOMMON), InkColors.BLUE), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock SMALL_AZURITE_BUD = register(cluster(blockWithItem("small_azurite_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_BLUE, SpectrumSoundTypes.ONYX_CLUSTER, 5), SpectrumClusterBlock.GrowthStage.SMALL), () -> IS.of(Rarity.UNCOMMON), InkColors.BLUE), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - - public static final DeferredBlock MALACHITE_ORE = register(simple(blockWithItem("malachite_ore", () -> new CloakedOreBlock(UniformInt.of(7, 11), ore(), SpectrumAdvancements.REVEAL_MALACHITE, STONE.defaultBlockState()), () -> IS.of(Rarity.UNCOMMON), InkColors.GREEN))); - public static final DeferredBlock RAW_MALACHITE_BLOCK = register(simple(blockWithItem("raw_malachite_block", () -> new Block(ore().mapColor(MapColor.EMERALD)), InkColors.GREEN))); - public static final DeferredBlock DEEPSLATE_MALACHITE_ORE = register(simple(blockWithItem("deepslate_malachite_ore", () -> new CloakedOreBlock(UniformInt.of(7, 11), deepslateOre(), SpectrumAdvancements.REVEAL_MALACHITE, Blocks.DEEPSLATE.defaultBlockState()), () -> IS.of(Rarity.UNCOMMON), InkColors.GREEN))); - public static final DeferredBlock BLACKSLAG_MALACHITE_ORE = register(singleton(blockWithItem("blackslag_malachite_ore", () -> new CloakedOreBlock(UniformInt.of(7, 11), blackslagOre(), SpectrumAdvancements.REVEAL_MALACHITE, BLACKSLAG.get().defaultBlockState()), () -> IS.of(Rarity.UNCOMMON), InkColors.GREEN), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock PURE_MALACHITE_BLOCK = register(defaultUpFacing(blockWithItem("pure_malachite_block", () -> new SpectrumFacingBlock(gemstoneBlock(MapColor.EMERALD, SoundType.CHAIN)), () -> IS.of(Rarity.UNCOMMON), InkColors.GREEN), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock MALACHITE_CLUSTER = register(cluster(blockWithItem("malachite_cluster", () -> new SpectrumClusterBlock(gemstone(MapColor.EMERALD, SoundType.CHAIN, 9), SpectrumClusterBlock.GrowthStage.CLUSTER), () -> IS.of(Rarity.UNCOMMON), InkColors.GREEN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock LARGE_MALACHITE_BUD = register(cluster(blockWithItem("large_malachite_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.EMERALD, SoundType.CHAIN, 7), SpectrumClusterBlock.GrowthStage.LARGE), () -> IS.of(Rarity.UNCOMMON), InkColors.GREEN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock SMALL_MALACHITE_BUD = register(cluster(blockWithItem("small_malachite_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.EMERALD, SoundType.CHAIN, 5), SpectrumClusterBlock.GrowthStage.SMALL), () -> IS.of(Rarity.UNCOMMON), InkColors.GREEN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - - public static final DeferredBlock RAW_BLOODSTONE_BLOCK = register(simple(blockWithItem("raw_bloodstone_block", () -> new Block(ore().mapColor(MapColor.COLOR_RED).sound(SpectrumSoundTypes.ONYX_CLUSTER)), InkColors.RED))); - public static final DeferredBlock PURE_BLOODSTONE_BLOCK = register(defaultUpFacing(blockWithItem("pure_bloodstone_block", () -> new SpectrumFacingBlock(gemstoneBlock(MapColor.COLOR_RED, SpectrumSoundTypes.ONYX_CLUSTER)), () -> IS.of(Rarity.UNCOMMON), InkColors.RED), TexturedModel.COLUMN)); - public static final DeferredBlock BLOODSTONE_CLUSTER = register(cluster(blockWithItem("bloodstone_cluster", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_RED, SpectrumSoundTypes.SMALL_ONYX_BUD, 6), SpectrumClusterBlock.GrowthStage.CLUSTER), () -> IS.of(Rarity.UNCOMMON), InkColors.RED), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock LARGE_BLOODSTONE_BUD = register(cluster(blockWithItem("large_bloodstone_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_RED, SpectrumSoundTypes.SMALL_ONYX_BUD, 4), SpectrumClusterBlock.GrowthStage.LARGE), () -> IS.of(Rarity.UNCOMMON), InkColors.RED), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock SMALL_BLOODSTONE_BUD = register(cluster(blockWithItem("small_bloodstone_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_RED, SpectrumSoundTypes.ONYX_CLUSTER, 3), SpectrumClusterBlock.GrowthStage.SMALL), () -> IS.of(Rarity.UNCOMMON), InkColors.RED), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - - public static final DeferredBlock STRATINE_ORE = register(simple(blockWithItem("stratine_ore", () -> new CloakedOreBlock(UniformInt.of(3, 5), netherrackOre(), SpectrumAdvancements.REVEAL_STRATINE, NETHERRACK.defaultBlockState()), () -> IS.of().fireResistant().component(SpectrumDataComponentTypes.GRAVITABLE, -0.01F), InkColors.RED))); - public static final DeferredBlock PALTAERIA_ORE = register(simple(blockWithItem("paltaeria_ore", () -> new CloakedOreBlock(UniformInt.of(2, 4), endstoneOre(), SpectrumAdvancements.REVEAL_PALTAERIA, END_STONE.defaultBlockState()), () -> IS.of().component(SpectrumDataComponentTypes.GRAVITABLE, 0.01F), InkColors.CYAN))); + public static final DeferredBlock SHIMMERSTONE_ORE = register(simple(blockWithItem("shimmerstone_ore", () -> new ShimmerstoneOreBlock(UniformInt.of(2, 4), ore().randomTicks(), SpectrumAdvancements.REVEAL_SHIMMERSTONE, STONE.defaultBlockState())))); + public static final DeferredBlock DEEPSLATE_SHIMMERSTONE_ORE = register(simple(blockWithItem("deepslate_shimmerstone_ore", () -> new ShimmerstoneOreBlock(UniformInt.of(2, 4), deepslateOre().randomTicks(), SpectrumAdvancements.REVEAL_SHIMMERSTONE, DEEPSLATE.defaultBlockState())))); + public static final DeferredBlock BLACKSLAG_SHIMMERSTONE_ORE = register(singleton(blockWithItem("blackslag_shimmerstone_ore", () -> new ShimmerstoneOreBlock(UniformInt.of(2, 4), blackslagOre().randomTicks(), SpectrumAdvancements.REVEAL_SHIMMERSTONE, BLACKSLAG.get().defaultBlockState())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock SHIMMERSTONE_BLOCK = register(simple(blockWithItem("shimmerstone_block", () -> new ShimmerstoneBlock(settings(MapColor.COLOR_YELLOW, SoundType.GLASS, 2.0F).lightLevel((state) -> 15))))); + + public static final DeferredBlock AZURITE_ORE = register(simpleMirrored(blockWithItem("azurite_ore", () -> new AzuriteOreBlock(UniformInt.of(4, 7), ore().randomTicks(), SpectrumAdvancements.REVEAL_AZURITE, Blocks.STONE.defaultBlockState())))); + public static final DeferredBlock RAW_AZURITE_BLOCK = register(simple(blockWithItem("raw_azurite_block", () -> new AzuriteBlock(ore().mapColor(MapColor.COLOR_BLUE))))); + public static final DeferredBlock DEEPSLATE_AZURITE_ORE = register(simpleMirrored(blockWithItem("deepslate_azurite_ore", () -> new AzuriteOreBlock(UniformInt.of(4, 7), deepslateOre().randomTicks(), SpectrumAdvancements.REVEAL_AZURITE, Blocks.DEEPSLATE.defaultBlockState())))); + public static final DeferredBlock BLACKSLAG_AZURITE_ORE = register(simpleMirrored(blockWithItem("blackslag_azurite_ore", () -> new AzuriteOreBlock(UniformInt.of(4, 7), blackslagOre().randomTicks(), SpectrumAdvancements.REVEAL_AZURITE, BLACKSLAG.get().defaultBlockState())))); + public static final DeferredBlock PURE_AZURITE_BLOCK = register(defaultUpFacing(blockWithItem("pure_azurite_block", () -> new SpectrumFacingBlock(BlockBehaviour.Properties.ofFullCopy(LAPIS_BLOCK).mapColor(MapColor.COLOR_BLUE))), TexturedModel.CUBE_TOP_BOTTOM)); + public static final DeferredBlock AZURITE_CLUSTER = register(cluster(blockWithItem("azurite_cluster", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_BLUE, SpectrumSoundTypes.SMALL_ONYX_BUD, 2), SpectrumClusterBlock.GrowthStage.CLUSTER), () -> IS.of(Rarity.UNCOMMON)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock LARGE_AZURITE_BUD = register(cluster(blockWithItem("large_azurite_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_BLUE, SpectrumSoundTypes.LARGE_ONYX_BUD, 3), SpectrumClusterBlock.GrowthStage.LARGE), () -> IS.of(Rarity.UNCOMMON)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock SMALL_AZURITE_BUD = register(cluster(blockWithItem("small_azurite_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_BLUE, SpectrumSoundTypes.ONYX_CLUSTER, 5), SpectrumClusterBlock.GrowthStage.SMALL), () -> IS.of(Rarity.UNCOMMON)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + + public static final DeferredBlock MALACHITE_ORE = register(simple(blockWithItem("malachite_ore", () -> new CloakedOreBlock(UniformInt.of(7, 11), ore(), SpectrumAdvancements.REVEAL_MALACHITE, STONE.defaultBlockState()), () -> IS.of(Rarity.UNCOMMON)))); + public static final DeferredBlock RAW_MALACHITE_BLOCK = register(simple(blockWithItem("raw_malachite_block", () -> new Block(ore().mapColor(MapColor.EMERALD))))); + public static final DeferredBlock DEEPSLATE_MALACHITE_ORE = register(simple(blockWithItem("deepslate_malachite_ore", () -> new CloakedOreBlock(UniformInt.of(7, 11), deepslateOre(), SpectrumAdvancements.REVEAL_MALACHITE, Blocks.DEEPSLATE.defaultBlockState()), () -> IS.of(Rarity.UNCOMMON)))); + public static final DeferredBlock BLACKSLAG_MALACHITE_ORE = register(singleton(blockWithItem("blackslag_malachite_ore", () -> new CloakedOreBlock(UniformInt.of(7, 11), blackslagOre(), SpectrumAdvancements.REVEAL_MALACHITE, BLACKSLAG.get().defaultBlockState()), () -> IS.of(Rarity.UNCOMMON)), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock PURE_MALACHITE_BLOCK = register(defaultUpFacing(blockWithItem("pure_malachite_block", () -> new SpectrumFacingBlock(gemstoneBlock(MapColor.EMERALD, SoundType.CHAIN)), () -> IS.of(Rarity.UNCOMMON)), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock MALACHITE_CLUSTER = register(cluster(blockWithItem("malachite_cluster", () -> new SpectrumClusterBlock(gemstone(MapColor.EMERALD, SoundType.CHAIN, 9), SpectrumClusterBlock.GrowthStage.CLUSTER), () -> IS.of(Rarity.UNCOMMON)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock LARGE_MALACHITE_BUD = register(cluster(blockWithItem("large_malachite_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.EMERALD, SoundType.CHAIN, 7), SpectrumClusterBlock.GrowthStage.LARGE), () -> IS.of(Rarity.UNCOMMON)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock SMALL_MALACHITE_BUD = register(cluster(blockWithItem("small_malachite_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.EMERALD, SoundType.CHAIN, 5), SpectrumClusterBlock.GrowthStage.SMALL), () -> IS.of(Rarity.UNCOMMON)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + + public static final DeferredBlock RAW_BLOODSTONE_BLOCK = register(simple(blockWithItem("raw_bloodstone_block", () -> new Block(ore().mapColor(MapColor.COLOR_RED).sound(SpectrumSoundTypes.ONYX_CLUSTER))))); + public static final DeferredBlock PURE_BLOODSTONE_BLOCK = register(defaultUpFacing(blockWithItem("pure_bloodstone_block", () -> new SpectrumFacingBlock(gemstoneBlock(MapColor.COLOR_RED, SpectrumSoundTypes.ONYX_CLUSTER)), () -> IS.of(Rarity.UNCOMMON)), TexturedModel.COLUMN)); + public static final DeferredBlock BLOODSTONE_CLUSTER = register(cluster(blockWithItem("bloodstone_cluster", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_RED, SpectrumSoundTypes.SMALL_ONYX_BUD, 6), SpectrumClusterBlock.GrowthStage.CLUSTER), () -> IS.of(Rarity.UNCOMMON)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock LARGE_BLOODSTONE_BUD = register(cluster(blockWithItem("large_bloodstone_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_RED, SpectrumSoundTypes.SMALL_ONYX_BUD, 4), SpectrumClusterBlock.GrowthStage.LARGE), () -> IS.of(Rarity.UNCOMMON)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock SMALL_BLOODSTONE_BUD = register(cluster(blockWithItem("small_bloodstone_bud", () -> new SpectrumClusterBlock(gemstone(MapColor.COLOR_RED, SpectrumSoundTypes.ONYX_CLUSTER, 3), SpectrumClusterBlock.GrowthStage.SMALL), () -> IS.of(Rarity.UNCOMMON)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + + public static final DeferredBlock STRATINE_ORE = register(simple(blockWithItem("stratine_ore", () -> new CloakedOreBlock(UniformInt.of(3, 5), netherrackOre(), SpectrumAdvancements.REVEAL_STRATINE, NETHERRACK.defaultBlockState()), () -> IS.of().fireResistant().component(SpectrumDataComponentTypes.GRAVITABLE, -0.01F)))); + public static final DeferredBlock PALTAERIA_ORE = register(simple(blockWithItem("paltaeria_ore", () -> new CloakedOreBlock(UniformInt.of(2, 4), endstoneOre(), SpectrumAdvancements.REVEAL_PALTAERIA, END_STONE.defaultBlockState()), () -> IS.of().component(SpectrumDataComponentTypes.GRAVITABLE, 0.01F)))); private static BlockBehaviour.Properties gravityBlock(MapColor mapColor) { return settings(mapColor, SoundType.METAL, 4.0F, 6.0F).instrument(NoteBlockInstrument.BASEDRUM).requiresCorrectToolForDrops(); } - public static final DeferredBlock STRATINE_FLOATBLOCK = register(singleton(blockWithItem("stratine_floatblock", () -> new FloatBlock(gravityBlock(MapColor.NETHER), -0.2F), () -> IS.of().fireResistant().component(SpectrumDataComponentTypes.GRAVITABLE, -0.02F), InkColors.CYAN), SpectrumTexturedModelProviders.cubeBottomTop(b -> b, "", b -> b, "_top", b -> b, "_bottom"))); - public static final DeferredBlock PALTAERIA_FLOATBLOCK = register(singleton(blockWithItem("paltaeria_floatblock", () -> new FloatBlock(gravityBlock(MapColor.COLOR_LIGHT_BLUE), 0.2F), () -> IS.of().component(SpectrumDataComponentTypes.GRAVITABLE, 0.02F), InkColors.RED), SpectrumTexturedModelProviders.cubeBottomTop(b -> b, "", b -> b, "_top", b -> b, "_bottom"))); - public static final DeferredBlock HOVER_BLOCK = register(singleton(blockWithItem("hover_block", () -> new FloatBlock(gravityBlock(MapColor.DIAMOND), 0.0F), () -> IS.of().component(SpectrumDataComponentTypes.GRAVITABLE, 0.0F), InkColors.GREEN), TexturedModel.COLUMN)); + public static final DeferredBlock STRATINE_FLOATBLOCK = register(singleton(blockWithItem("stratine_floatblock", () -> new FloatBlock(gravityBlock(MapColor.NETHER), -0.2F), () -> IS.of().fireResistant().component(SpectrumDataComponentTypes.GRAVITABLE, -0.02F)), SpectrumTexturedModelProviders.cubeBottomTop(b -> b, "", b -> b, "_top", b -> b, "_bottom"))); + public static final DeferredBlock PALTAERIA_FLOATBLOCK = register(singleton(blockWithItem("paltaeria_floatblock", () -> new FloatBlock(gravityBlock(MapColor.COLOR_LIGHT_BLUE), 0.2F), () -> IS.of().component(SpectrumDataComponentTypes.GRAVITABLE, 0.02F)), SpectrumTexturedModelProviders.cubeBottomTop(b -> b, "", b -> b, "_top", b -> b, "_bottom"))); + public static final DeferredBlock HOVER_BLOCK = register(singleton(blockWithItem("hover_block", () -> new FloatBlock(gravityBlock(MapColor.DIAMOND), 0.0F), () -> IS.of().component(SpectrumDataComponentTypes.GRAVITABLE, 0.0F)), TexturedModel.COLUMN)); - public static final DeferredBlock BLACKSLAG_COAL_ORE = register(singleton(blockWithItem("blackslag_coal_ore", () -> new DropExperienceBlock(UniformInt.of(0, 2), blackslagOre()), InkColors.BLACK), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock BLACKSLAG_COPPER_ORE = register(singleton(blockWithItem("blackslag_copper_ore", () -> new DropExperienceBlock(ConstantInt.of(0), blackslagOre()), InkColors.BLACK), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock BLACKSLAG_IRON_ORE = register(singleton(blockWithItem("blackslag_iron_ore", () -> new DropExperienceBlock(ConstantInt.of(0), blackslagOre()), InkColors.BROWN), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock BLACKSLAG_GOLD_ORE = register(singleton(blockWithItem("blackslag_gold_ore", () -> new DropExperienceBlock(ConstantInt.of(0), blackslagOre()), InkColors.YELLOW), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock BLACKSLAG_LAPIS_ORE = register(singleton(blockWithItem("blackslag_lapis_ore", () -> new DropExperienceBlock(UniformInt.of(2, 5), blackslagOre()), InkColors.BLUE), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock BLACKSLAG_DIAMOND_ORE = register(singleton(blockWithItem("blackslag_diamond_ore", () -> new DropExperienceBlock(UniformInt.of(3, 7), blackslagOre()), InkColors.LIGHT_BLUE), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock BLACKSLAG_REDSTONE_ORE = register(singleton(blockWithItem("blackslag_redstone_ore", () -> new RedStoneOreBlock(blackslagOre().randomTicks().lightLevel(state -> state.getValue(BlockStateProperties.LIT) ? 9 : 0)), InkColors.RED), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock BLACKSLAG_EMERALD_ORE = register(singleton(blockWithItem("blackslag_emerald_ore", () -> new DropExperienceBlock(UniformInt.of(3, 7), blackslagOre()), InkColors.LIME), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock BLACKSLAG_COAL_ORE = register(singleton(blockWithItem("blackslag_coal_ore", () -> new DropExperienceBlock(UniformInt.of(0, 2), blackslagOre())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock BLACKSLAG_COPPER_ORE = register(singleton(blockWithItem("blackslag_copper_ore", () -> new DropExperienceBlock(ConstantInt.of(0), blackslagOre())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock BLACKSLAG_IRON_ORE = register(singleton(blockWithItem("blackslag_iron_ore", () -> new DropExperienceBlock(ConstantInt.of(0), blackslagOre())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock BLACKSLAG_GOLD_ORE = register(singleton(blockWithItem("blackslag_gold_ore", () -> new DropExperienceBlock(ConstantInt.of(0), blackslagOre())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock BLACKSLAG_LAPIS_ORE = register(singleton(blockWithItem("blackslag_lapis_ore", () -> new DropExperienceBlock(UniformInt.of(2, 5), blackslagOre())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock BLACKSLAG_DIAMOND_ORE = register(singleton(blockWithItem("blackslag_diamond_ore", () -> new DropExperienceBlock(UniformInt.of(3, 7), blackslagOre())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock BLACKSLAG_REDSTONE_ORE = register(singleton(blockWithItem("blackslag_redstone_ore", () -> new RedStoneOreBlock(blackslagOre().randomTicks().lightLevel(state -> state.getValue(BlockStateProperties.LIT) ? 9 : 0))), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock BLACKSLAG_EMERALD_ORE = register(singleton(blockWithItem("blackslag_emerald_ore", () -> new DropExperienceBlock(UniformInt.of(3, 7), blackslagOre())), TexturedModel.COLUMN_ALT)); // FUNCTIONAL BLOCKS - public static final DeferredBlock HEARTBOUND_CHEST = register(defaultNorthHorizontalFacing(blockWithItem("heartbound_chest", () -> new HeartboundChestBlock(settings(MapColor.TERRACOTTA_WHITE, SoundType.STONE, -1.0F, 3600000.0F).requiresCorrectToolForDrops().noOcclusion()), InkColors.BLUE), ModelLocationUtils::getModelLocation)); - public static final DeferredBlock COMPACTING_CHEST = register(defaultNorthHorizontalFacing(blockWithItem("compacting_chest", () -> new CompactingChestBlock(settings(MapColor.TERRACOTTA_WHITE, SoundType.STONE, 4.0F, 4.0F).requiresCorrectToolForDrops().noOcclusion()), InkColors.YELLOW), ModelLocationUtils::getModelLocation)); - public static final DeferredBlock FABRICATION_CHEST = register(defaultNorthHorizontalFacing(blockWithItem("fabrication_chest", () -> new FabricationChestBlock(settings(MapColor.COLOR_ORANGE, SoundType.STONE, 4.0F, 4.0F).requiresCorrectToolForDrops().noOcclusion()), InkColors.YELLOW), ModelLocationUtils::getModelLocation).withPredefinedItemModel()); - public static final DeferredBlock BLACK_HOLE_CHEST = register(defaultNorthHorizontalFacing(blockWithItem("black_hole_chest", () -> new BlackHoleChestBlock(settings(MapColor.COLOR_BLACK, SoundType.STONE, 4.0F, 4.0F).requiresCorrectToolForDrops().noOcclusion()), InkColors.LIGHT_GRAY), ModelLocationUtils::getModelLocation)); - public static final DeferredBlock PARTICLE_SPAWNER = register(blockWithItem("particle_spawner", () -> new ParticleSpawnerBlock(settings(MapColor.TERRACOTTA_WHITE, SoundType.AMETHYST, 5.0F, 6.0F).requiresCorrectToolForDrops().noOcclusion()), InkColors.PINK).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerParentedItemModel(ctx, block, block, "_off")).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(SpectrumModelHelper.createBooleanModelMap(BlockStateProperties.POWERED, SpectrumModelTemplates.PARTICLE_SPAWNER.create(block, SpectrumTextureMaps.top(block, "_top"), ctx.modelOutput), SpectrumModelTemplates.PARTICLE_SPAWNER.createWithSuffix(block, "_off", SpectrumTextureMaps.top(block, "_top_off"), ctx.modelOutput))))); - public static final DeferredBlock CREATIVE_PARTICLE_SPAWNER = register(singletonWithSoup(blockWithItem("creative_particle_spawner", () -> new CreativeParticleSpawnerBlock(BlockBehaviour.Properties.ofFullCopy(PARTICLE_SPAWNER.get()).strength(-1.0F, 3600000.8F).noLootTable()), block1 -> new BlockItem(block1, IS.of(Rarity.EPIC)), InkColors.PINK), (Function) b -> ModelLocationUtils.getModelLocation(PARTICLE_SPAWNER.get())).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerParentedItemModel(ctx, block, PARTICLE_SPAWNER.get(), "_off"))); - public static final DeferredBlock BEDROCK_ANVIL = register(defaultSouthHorizontalFacing(blockWithItem("bedrock_anvil", () -> new BedrockAnvilBlock(BlockBehaviour.Properties.ofFullCopy(ANVIL).requiresCorrectToolForDrops().strength(8.0F, 8.0F).sound(SoundType.METAL)), InkColors.BLACK), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock HEARTBOUND_CHEST = register(defaultNorthHorizontalFacing(blockWithItem("heartbound_chest", () -> new HeartboundChestBlock(settings(MapColor.TERRACOTTA_WHITE, SoundType.STONE, -1.0F, 3600000.0F).requiresCorrectToolForDrops().noOcclusion())), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock COMPACTING_CHEST = register(defaultNorthHorizontalFacing(blockWithItem("compacting_chest", () -> new CompactingChestBlock(settings(MapColor.TERRACOTTA_WHITE, SoundType.STONE, 4.0F, 4.0F).requiresCorrectToolForDrops().noOcclusion())), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock FABRICATION_CHEST = register(defaultNorthHorizontalFacing(blockWithItem("fabrication_chest", () -> new FabricationChestBlock(settings(MapColor.COLOR_ORANGE, SoundType.STONE, 4.0F, 4.0F).requiresCorrectToolForDrops().noOcclusion())), ModelLocationUtils::getModelLocation).withPredefinedItemModel()); + public static final DeferredBlock BLACK_HOLE_CHEST = register(defaultNorthHorizontalFacing(blockWithItem("black_hole_chest", () -> new BlackHoleChestBlock(settings(MapColor.COLOR_BLACK, SoundType.STONE, 4.0F, 4.0F).requiresCorrectToolForDrops().noOcclusion())), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock PARTICLE_SPAWNER = register(blockWithItem("particle_spawner", () -> new ParticleSpawnerBlock(settings(MapColor.TERRACOTTA_WHITE, SoundType.AMETHYST, 5.0F, 6.0F).requiresCorrectToolForDrops().noOcclusion())).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerParentedItemModel(ctx, block, block, "_off")).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(SpectrumModelHelper.createBooleanModelMap(BlockStateProperties.POWERED, SpectrumModelTemplates.PARTICLE_SPAWNER.create(block, SpectrumTextureMaps.top(block, "_top"), ctx.modelOutput), SpectrumModelTemplates.PARTICLE_SPAWNER.createWithSuffix(block, "_off", SpectrumTextureMaps.top(block, "_top_off"), ctx.modelOutput))))); + public static final DeferredBlock CREATIVE_PARTICLE_SPAWNER = register(singletonWithSoup(blockWithItem("creative_particle_spawner", () -> new CreativeParticleSpawnerBlock(BlockBehaviour.Properties.ofFullCopy(PARTICLE_SPAWNER.get()).strength(-1.0F, 3600000.8F).noLootTable()), block1 -> new BlockItem(block1, IS.of(Rarity.EPIC))), (Function) b -> ModelLocationUtils.getModelLocation(PARTICLE_SPAWNER.get())).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerParentedItemModel(ctx, block, PARTICLE_SPAWNER.get(), "_off"))); + public static final DeferredBlock BEDROCK_ANVIL = register(defaultSouthHorizontalFacing(blockWithItem("bedrock_anvil", () -> new BedrockAnvilBlock(BlockBehaviour.Properties.ofFullCopy(ANVIL).requiresCorrectToolForDrops().strength(8.0F, 8.0F).sound(SoundType.METAL))), ModelLocationUtils::getModelLocation)); // SOLID LIQUID CRYSTAL - public static final DeferredBlock FROSTBITE_CRYSTAL = register(simple(blockWithItem("frostbite_crystal", () -> new CloakedBlock(BlockBehaviour.Properties.ofFullCopy(GLOWSTONE).mapColor(MapColor.CLAY), SpectrumAdvancements.REVEAL_FROSTBITE_RESOURCES, Blocks.BLUE_ICE.defaultBlockState()), InkColors.LIGHT_BLUE))); + public static final DeferredBlock FROSTBITE_CRYSTAL = register(simple(blockWithItem("frostbite_crystal", () -> new CloakedBlock(BlockBehaviour.Properties.ofFullCopy(GLOWSTONE).mapColor(MapColor.CLAY), SpectrumAdvancements.REVEAL_FROSTBITE_RESOURCES, Blocks.BLUE_ICE.defaultBlockState())))); // TODO: rename to incandescent crystal (including advancements) - public static final DeferredBlock BLAZING_CRYSTAL = register(simple(blockWithItem("blazing_crystal", () -> new CloakedBlock(BlockBehaviour.Properties.ofFullCopy(GLOWSTONE).mapColor(MapColor.COLOR_ORANGE), SpectrumAdvancements.REVEAL_INCANDESCENT_RESOURCES, MAGMA_BLOCK.defaultBlockState()), () -> IS.of().fireResistant(), InkColors.ORANGE))); + public static final DeferredBlock BLAZING_CRYSTAL = register(simple(blockWithItem("blazing_crystal", () -> new CloakedBlock(BlockBehaviour.Properties.ofFullCopy(GLOWSTONE).mapColor(MapColor.COLOR_ORANGE), SpectrumAdvancements.REVEAL_INCANDESCENT_RESOURCES, MAGMA_BLOCK.defaultBlockState()), () -> IS.of().fireResistant()))); - public static final DeferredBlock QUITOXIC_REEDS = register(cross(blockWithItem("quitoxic_reeds", () -> new QuitoxicReedsBlock(settings(MapColor.NONE, SoundType.GRASS, 0.0F).noCollission().offsetType(BlockBehaviour.OffsetType.XYZ).randomTicks().lightLevel(state -> state.getValue(QuitoxicReedsBlock.LOGGED).getLuminance())), InkColors.PURPLE)).withItemModel(SpectrumModelHelper::registerItemModel)); + public static final DeferredBlock QUITOXIC_REEDS = register(cross(blockWithItem("quitoxic_reeds", () -> new QuitoxicReedsBlock(settings(MapColor.NONE, SoundType.GRASS, 0.0F).noCollission().offsetType(BlockBehaviour.OffsetType.XYZ).randomTicks().lightLevel(state -> state.getValue(QuitoxicReedsBlock.LOGGED).getLuminance())))).withItemModel(SpectrumModelHelper::registerItemModel)); public static final DeferredBlock MERMAIDS_BRUSH = register(block("mermaids_brush", () -> new MermaidsBrushBlock(settings(MapColor.NONE, SoundType.WET_GRASS, 0.0F).noCollission().randomTicks().lightLevel(state -> state.getValue(MermaidsBrushBlock.LOGGED).getLuminance()))).withBlockModel((ctx, block) -> { ResourceLocation none = SpectrumTexturedModelProviders.cross(b -> b, "_none").createWithSuffix(block, "_none", ctx.modelOutput); ResourceLocation some = SpectrumTexturedModelProviders.cross(b -> b, "_some").createWithSuffix(block, "_some", ctx.modelOutput); ResourceLocation full = SpectrumTexturedModelProviders.cross(b -> b, "_full").createWithSuffix(block, "_full", ctx.modelOutput); return MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(BlockStateProperties.AGE_7).generate(age -> createModelVariant(age < 3 ? none : age < 6 ? some : full))); })); - public static final DeferredBlock RADIATING_ENDER = register(blockWithItem("radiating_ender", () -> new RadiatingEnderBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.EMERALD_BLOCK).mapColor(MapColor.COLOR_PURPLE)), InkColors.PURPLE).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block, SpectrumModelHelper.createModelVariant(TexturedModel.CUBE_TOP_BOTTOM.create(block, ctx.modelOutput))).with(SpectrumModelHelper.createUpDefaultFacingVariantMap()))); + public static final DeferredBlock RADIATING_ENDER = register(blockWithItem("radiating_ender", () -> new RadiatingEnderBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.EMERALD_BLOCK).mapColor(MapColor.COLOR_PURPLE))).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block, SpectrumModelHelper.createModelVariant(TexturedModel.CUBE_TOP_BOTTOM.create(block, ctx.modelOutput))).with(SpectrumModelHelper.createUpDefaultFacingVariantMap()))); public static final DeferredBlock AMARANTH = register(block("amaranth", () -> new AmaranthCropBlock(settings(MapColor.NONE, SoundType.CROP, 0.0F).noCollission().randomTicks())).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.properties(BlockStateProperties.AGE_7, TallCropBlock.HALF).generate((age, half) -> { String suffix; if (half == DoubleBlockHalf.LOWER) { @@ -1216,17 +1218,17 @@ private static BlockBehaviour.Properties gravityBlock(MapColor mapColor) { return createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, suffix).createWithSuffix(block, suffix, ctx.modelOutput)); })))); - public static final DeferredBlock MEMORY = register(singletonWithSoup(blockWithItem("memory", () -> new MemoryBlock(settings(MapColor.NONE, SoundType.AMETHYST, 0.0F).isViewBlocking(SpectrumBlocks::never).noOcclusion().randomTicks()), block -> new MemoryItem(block, IS.of(1, Rarity.UNCOMMON)), InkColors.LIGHT_GRAY), ModelLocationUtils::getModelLocation).withItemModel((ctx, item) -> SpectrumModelHelper.registerLayeredItemModel(ctx, item, ModelTemplates.THREE_LAYERED_ITEM, "_base", "_overlay", "_brighten"))); - public static final DeferredBlock CRACKED_END_PORTAL_FRAME = register(blockWithItem("cracked_end_portal_frame", () -> new CrackedEndPortalFrameBlock(settings(MapColor.ICE, SoundType.GLASS, -1.0F, 3600000.0F).instrument(NoteBlockInstrument.BASEDRUM).lightLevel((state) -> 1)), () -> IS.of().fireResistant().component(SpectrumDataComponentTypes.DAMAGE_IMMUNE, List.of(DamageTypeTags.IS_FIRE, DamageTypeTags.IS_EXPLOSION)), InkColors.PURPLE).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerParentedItemModel(ctx, block, block, "_none")).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(CrackedEndPortalFrameBlock.FACING_VERTICAL).select(false, Variant.variant()).select(true, Variant.variant().with(VariantProperties.Y_ROT, VariantProperties.Rotation.R90))).with(PropertyDispatch.property(CrackedEndPortalFrameBlock.EYE_TYPE).generate(type -> SpectrumModelHelper.createModelVariant(ModelLocationUtils.getModelLocation(block, "_" + type.getSerializedName())))))); - public static final DeferredBlock LAVA_SPONGE = register(simple(blockWithItem("lava_sponge", () -> new LavaSpongeBlock(BlockBehaviour.Properties.ofFullCopy(SPONGE).mapColor(MapColor.COLOR_ORANGE)), () -> IS.of().fireResistant(), InkColors.ORANGE))); - public static final DeferredBlock WET_LAVA_SPONGE = register(simple(blockWithItem("wet_lava_sponge", () -> new WetLavaSpongeBlock(BlockBehaviour.Properties.ofFullCopy(WET_SPONGE).mapColor(MapColor.COLOR_ORANGE).lightLevel(s -> 9).emissiveRendering(SpectrumBlocks::always).hasPostProcess(SpectrumBlocks::always)), block -> new WetLavaSpongeItem(block, IS.of(1).fireResistant().craftRemainder(LAVA_SPONGE.asItem())), InkColors.ORANGE))); - - public static final DeferredBlock LIGHT_LEVEL_DETECTOR = register(detector(blockWithItem("light_level_detector", () -> new BlockLightDetectorBlock(BlockBehaviour.Properties.ofFullCopy(DAYLIGHT_DETECTOR)), InkColors.RED))); - public static final DeferredBlock WEATHER_DETECTOR = register(detector(blockWithItem("weather_detector", () -> new WeatherDetectorBlock(BlockBehaviour.Properties.ofFullCopy(DAYLIGHT_DETECTOR)), InkColors.RED))); - public static final DeferredBlock ITEM_DETECTOR = register(detector(blockWithItem("item_detector", () -> new ItemDetectorBlock(BlockBehaviour.Properties.ofFullCopy(DAYLIGHT_DETECTOR)), InkColors.RED))); - public static final DeferredBlock PLAYER_DETECTOR = register(detector(blockWithItem("player_detector", () -> new PlayerDetectorBlock(BlockBehaviour.Properties.ofFullCopy(DAYLIGHT_DETECTOR)), InkColors.RED))); - public static final DeferredBlock CREATURE_DETECTOR = register(detector(blockWithItem("creature_detector", () -> new EntityDetectorBlock(BlockBehaviour.Properties.ofFullCopy(DAYLIGHT_DETECTOR)), InkColors.RED))); - public static final DeferredBlock REDSTONE_TIMER = register(blockWithItem("redstone_timer", () -> new RedstoneTimerBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.REPEATER)), InkColors.RED).withPredefinedItemModel().withBlockModel((ctx, block) -> { + public static final DeferredBlock MEMORY = register(singletonWithSoup(blockWithItem("memory", () -> new MemoryBlock(settings(MapColor.NONE, SoundType.AMETHYST, 0.0F).isViewBlocking(SpectrumBlocks::never).noOcclusion().randomTicks()), block -> new MemoryItem(block, IS.of(1, Rarity.UNCOMMON))), ModelLocationUtils::getModelLocation).withItemModel((ctx, item) -> SpectrumModelHelper.registerLayeredItemModel(ctx, item, ModelTemplates.THREE_LAYERED_ITEM, "_base", "_overlay", "_brighten"))); + public static final DeferredBlock CRACKED_END_PORTAL_FRAME = register(blockWithItem("cracked_end_portal_frame", () -> new CrackedEndPortalFrameBlock(settings(MapColor.ICE, SoundType.GLASS, -1.0F, 3600000.0F).instrument(NoteBlockInstrument.BASEDRUM).lightLevel((state) -> 1)), () -> IS.of().fireResistant().component(SpectrumDataComponentTypes.DAMAGE_IMMUNE, List.of(DamageTypeTags.IS_FIRE, DamageTypeTags.IS_EXPLOSION))).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerParentedItemModel(ctx, block, block, "_none")).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(CrackedEndPortalFrameBlock.FACING_VERTICAL).select(false, Variant.variant()).select(true, Variant.variant().with(VariantProperties.Y_ROT, VariantProperties.Rotation.R90))).with(PropertyDispatch.property(CrackedEndPortalFrameBlock.EYE_TYPE).generate(type -> SpectrumModelHelper.createModelVariant(ModelLocationUtils.getModelLocation(block, "_" + type.getSerializedName())))))); + public static final DeferredBlock LAVA_SPONGE = register(simple(blockWithItem("lava_sponge", () -> new LavaSpongeBlock(BlockBehaviour.Properties.ofFullCopy(SPONGE).mapColor(MapColor.COLOR_ORANGE)), () -> IS.of().fireResistant()))); + public static final DeferredBlock WET_LAVA_SPONGE = register(simple(blockWithItem("wet_lava_sponge", () -> new WetLavaSpongeBlock(BlockBehaviour.Properties.ofFullCopy(WET_SPONGE).mapColor(MapColor.COLOR_ORANGE).lightLevel(s -> 9).emissiveRendering(SpectrumBlocks::always).hasPostProcess(SpectrumBlocks::always)), block -> new WetLavaSpongeItem(block, IS.of(1).fireResistant().craftRemainder(LAVA_SPONGE.asItem()))))); + + public static final DeferredBlock LIGHT_LEVEL_DETECTOR = register(detector(blockWithItem("light_level_detector", () -> new BlockLightDetectorBlock(BlockBehaviour.Properties.ofFullCopy(DAYLIGHT_DETECTOR))))); + public static final DeferredBlock WEATHER_DETECTOR = register(detector(blockWithItem("weather_detector", () -> new WeatherDetectorBlock(BlockBehaviour.Properties.ofFullCopy(DAYLIGHT_DETECTOR))))); + public static final DeferredBlock ITEM_DETECTOR = register(detector(blockWithItem("item_detector", () -> new ItemDetectorBlock(BlockBehaviour.Properties.ofFullCopy(DAYLIGHT_DETECTOR))))); + public static final DeferredBlock PLAYER_DETECTOR = register(detector(blockWithItem("player_detector", () -> new PlayerDetectorBlock(BlockBehaviour.Properties.ofFullCopy(DAYLIGHT_DETECTOR))))); + public static final DeferredBlock CREATURE_DETECTOR = register(detector(blockWithItem("creature_detector", () -> new EntityDetectorBlock(BlockBehaviour.Properties.ofFullCopy(DAYLIGHT_DETECTOR))))); + public static final DeferredBlock REDSTONE_TIMER = register(blockWithItem("redstone_timer", () -> new RedstoneTimerBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.REPEATER))).withPredefinedItemModel().withBlockModel((ctx, block) -> { MultiPartGenerator multipart = MultiPartGenerator.multiPart(block); ResourceLocation on = SpectrumModelTemplates.REDSTONE_TIMER.create(block, new TextureMapping().put(SpectrumTextureSlots.LIGHT, TextureMapping.getBlockTexture(REDSTONE_TORCH)), ctx.modelOutput); ResourceLocation off = SpectrumModelTemplates.REDSTONE_TIMER.createWithSuffix(block, "_off", new TextureMapping().put(SpectrumTextureSlots.LIGHT, TextureMapping.getBlockTexture(REDSTONE_TORCH, "_off")), ctx.modelOutput); @@ -1241,7 +1243,7 @@ private static BlockBehaviour.Properties gravityBlock(MapColor mapColor) { } return multipart; })); - public static final DeferredBlock REDSTONE_CALCULATOR = register(blockWithItem("redstone_calculator", () -> new RedstoneCalculatorBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.REPEATER)), InkColors.RED).withPredefinedItemModel().withBlockModel((ctx, block) -> { + public static final DeferredBlock REDSTONE_CALCULATOR = register(blockWithItem("redstone_calculator", () -> new RedstoneCalculatorBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.REPEATER))).withPredefinedItemModel().withBlockModel((ctx, block) -> { MultiPartGenerator multipart = MultiPartGenerator.multiPart(block); for (Direction direction : Direction.Plane.HORIZONTAL) { VariantProperties.Rotation rotation = SpectrumModelHelper.getSouthDefaultRotation(direction); @@ -1253,7 +1255,7 @@ private static BlockBehaviour.Properties gravityBlock(MapColor mapColor) { } return multipart; })); - public static final DeferredBlock REDSTONE_TRANSCEIVER = register(blockWithItem("redstone_transceiver", () -> new RedstoneTransceiverBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.REPEATER)), InkColors.RED).withPredefinedItemModel().withBlockModel((ctx, block) -> { + public static final DeferredBlock REDSTONE_TRANSCEIVER = register(blockWithItem("redstone_transceiver", () -> new RedstoneTransceiverBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.REPEATER))).withPredefinedItemModel().withBlockModel((ctx, block) -> { MultiPartGenerator multipart = MultiPartGenerator.multiPart(block); ResourceLocation senderOn = SpectrumModelTemplates.REDSTONE_TRANSCEIVER_SENDER.createWithSuffix(block, "_sender", new TextureMapping().put(SpectrumTextureSlots.LIGHT, TextureMapping.getBlockTexture(REDSTONE_TORCH)), ctx.modelOutput); ResourceLocation senderOff = SpectrumModelTemplates.REDSTONE_TRANSCEIVER_SENDER.createWithSuffix(block, "_sender_off", new TextureMapping().put(SpectrumTextureSlots.LIGHT, TextureMapping.getBlockTexture(REDSTONE_TORCH, "_off")), ctx.modelOutput); @@ -1272,25 +1274,25 @@ private static BlockBehaviour.Properties gravityBlock(MapColor mapColor) { } return multipart; })); - public static final DeferredBlock BLOCK_PLACER = register(blockWithItem("block_placer", () -> new BlockPlacerBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.DISPENSER)), InkColors.CYAN).withBlockModel((ctx, block) -> SpectrumModelHelper.createVariantsSupplier(ctx, block, SpectrumTexturedModelProviders.complexOrientable(b -> b, "_side", b -> b, "_top", b -> NOTCHED_POLISHED_CALCITE.get(), "_top", b -> b, "_front", b -> b, "_back", b -> b, "_side")).with(SpectrumModelHelper.createUpNorthDefaultOrientationVariantMap()))); - public static final DeferredBlock BLOCK_DETECTOR = register(blockWithItem("block_detector", () -> new BlockDetectorBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.DISPENSER)), InkColors.CYAN).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(SpectrumModelHelper.createUpNorthDefaultOrientationVariantMap()).with(SpectrumModelHelper.createBooleanModelMap(BlockStateProperties.TRIGGERED, SpectrumTexturedModelProviders.complexOrientable(b -> b, "_side", b -> b, "_top", b -> NOTCHED_POLISHED_BASALT.get(), "_top", b -> b, "_front", b -> b, "_back_active", b -> b, "_side").createWithSuffix(block, "_active", ctx.modelOutput), SpectrumTexturedModelProviders.complexOrientable(b -> b, "_side", b -> b, "_top", b -> NOTCHED_POLISHED_BASALT.get(), "_top", b -> b, "_front", b -> b, "_back", b -> b, "_side").create(block, ctx.modelOutput))))); - public static final DeferredBlock BLOCK_BREAKER = register(blockWithItem("block_breaker", () -> new BlockBreakerBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.DISPENSER)), InkColors.CYAN).withBlockModel((ctx, block) -> SpectrumModelHelper.createVariantsSupplier(ctx, block, SpectrumTexturedModelProviders.complexOrientable(b -> b, "_side", b -> b, "_top", b -> POLISHED_BONE_ASH_PILLAR.get(), "_top", b -> b, "_front", b -> b, "_back", b -> b, "_side")).with(SpectrumModelHelper.createUpNorthDefaultOrientationVariantMap()))); - public static final DeferredBlock ENDER_DROPPER = register(orientable(blockWithItem("ender_dropper", () -> new EnderDropperBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.DROPPER).mapColor(MapColor.COLOR_GRAY).requiresCorrectToolForDrops().strength(15F, 60.0F)), InkColors.PURPLE))); - public static final DeferredBlock ENDER_HOPPER = register(singletonWithSoup(blockWithItem("ender_hopper", () -> new EnderHopperBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.HOPPER).mapColor(MapColor.COLOR_GRAY).requiresCorrectToolForDrops().strength(15F, 60.0F)), InkColors.PURPLE), ModelLocationUtils::getModelLocation).withItemModel(SpectrumModelHelper::registerItemModel)); + public static final DeferredBlock BLOCK_PLACER = register(blockWithItem("block_placer", () -> new BlockPlacerBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.DISPENSER))).withBlockModel((ctx, block) -> SpectrumModelHelper.createVariantsSupplier(ctx, block, SpectrumTexturedModelProviders.complexOrientable(b -> b, "_side", b -> b, "_top", b -> NOTCHED_POLISHED_CALCITE.get(), "_top", b -> b, "_front", b -> b, "_back", b -> b, "_side")).with(SpectrumModelHelper.createUpNorthDefaultOrientationVariantMap()))); + public static final DeferredBlock BLOCK_DETECTOR = register(blockWithItem("block_detector", () -> new BlockDetectorBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.DISPENSER))).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(SpectrumModelHelper.createUpNorthDefaultOrientationVariantMap()).with(SpectrumModelHelper.createBooleanModelMap(BlockStateProperties.TRIGGERED, SpectrumTexturedModelProviders.complexOrientable(b -> b, "_side", b -> b, "_top", b -> NOTCHED_POLISHED_BASALT.get(), "_top", b -> b, "_front", b -> b, "_back_active", b -> b, "_side").createWithSuffix(block, "_active", ctx.modelOutput), SpectrumTexturedModelProviders.complexOrientable(b -> b, "_side", b -> b, "_top", b -> NOTCHED_POLISHED_BASALT.get(), "_top", b -> b, "_front", b -> b, "_back", b -> b, "_side").create(block, ctx.modelOutput))))); + public static final DeferredBlock BLOCK_BREAKER = register(blockWithItem("block_breaker", () -> new BlockBreakerBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.DISPENSER))).withBlockModel((ctx, block) -> SpectrumModelHelper.createVariantsSupplier(ctx, block, SpectrumTexturedModelProviders.complexOrientable(b -> b, "_side", b -> b, "_top", b -> POLISHED_BONE_ASH_PILLAR.get(), "_top", b -> b, "_front", b -> b, "_back", b -> b, "_side")).with(SpectrumModelHelper.createUpNorthDefaultOrientationVariantMap()))); + public static final DeferredBlock ENDER_DROPPER = register(orientable(blockWithItem("ender_dropper", () -> new EnderDropperBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.DROPPER).mapColor(MapColor.COLOR_GRAY).requiresCorrectToolForDrops().strength(15F, 60.0F))))); + public static final DeferredBlock ENDER_HOPPER = register(singletonWithSoup(blockWithItem("ender_hopper", () -> new EnderHopperBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.HOPPER).mapColor(MapColor.COLOR_GRAY).requiresCorrectToolForDrops().strength(15F, 60.0F))), ModelLocationUtils::getModelLocation).withItemModel(SpectrumModelHelper::registerItemModel)); - public static final DeferredBlock OMINOUS_SAPLING = register(simplePlant(blockWithItem("ominous_sapling", () -> new OminousSaplingBlock(BlockBehaviour.Properties.ofFullCopy(OAK_SAPLING)), block -> new OminousSaplingBlockItem(block, IS.of()), InkColors.GREEN))); + public static final DeferredBlock OMINOUS_SAPLING = register(simplePlant(blockWithItem("ominous_sapling", () -> new OminousSaplingBlock(BlockBehaviour.Properties.ofFullCopy(OAK_SAPLING)), block -> new OminousSaplingBlockItem(block, IS.of())))); - public static final DeferredBlock SPIRIT_SALLOW_LEAVES = register(singleton(blockWithItem("spirit_sallow_leaves", () -> new SpiritSallowLeavesBlock(BlockBehaviour.Properties.ofFullCopy(OAK_LEAVES).mapColor(MapColor.QUARTZ).lightLevel((state) -> 8)), InkColors.GREEN), TexturedModel.LEAVES)); - public static final DeferredBlock SPIRIT_SALLOW_LOG = register(log(blockWithItem("spirit_sallow_log", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(OAK_WOOD).mapColor(MapColor.COLOR_GRAY)), InkColors.GREEN))); - public static final DeferredBlock SPIRIT_SALLOW_ROOTS = register(blockWithItem("spirit_sallow_roots", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(OAK_WOOD).mapColor(MapColor.COLOR_GRAY)), InkColors.GREEN).withBlockModel((ctx, block) -> { + public static final DeferredBlock SPIRIT_SALLOW_LEAVES = register(singleton(blockWithItem("spirit_sallow_leaves", () -> new SpiritSallowLeavesBlock(BlockBehaviour.Properties.ofFullCopy(OAK_LEAVES).mapColor(MapColor.QUARTZ).lightLevel((state) -> 8))), TexturedModel.LEAVES)); + public static final DeferredBlock SPIRIT_SALLOW_LOG = register(log(blockWithItem("spirit_sallow_log", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(OAK_WOOD).mapColor(MapColor.COLOR_GRAY))))); + public static final DeferredBlock SPIRIT_SALLOW_ROOTS = register(blockWithItem("spirit_sallow_roots", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(OAK_WOOD).mapColor(MapColor.COLOR_GRAY))).withBlockModel((ctx, block) -> { TextureMapping textureMap = SpectrumTextureMaps.sideEnd(block, "", block, ""); ResourceLocation vertical = ModelTemplates.CUBE_COLUMN.create(block, textureMap, ctx.modelOutput); ResourceLocation horizontal = ModelTemplates.CUBE_COLUMN_HORIZONTAL.create(block, textureMap, ctx.modelOutput); return BlockModelGenerators.createRotatedPillarWithHorizontalVariant(block, vertical, horizontal); })); - public static final DeferredBlock SPIRIT_SALLOW_HEART = register(singleton(blockWithItem("spirit_sallow_heart", () -> new Block(BlockBehaviour.Properties.ofFullCopy(OAK_WOOD).mapColor(MapColor.COLOR_GRAY).lightLevel(s -> 11)), InkColors.GREEN), SpectrumTexturedModelProviders.cubeColumn(b -> b, "", b -> SPIRIT_SALLOW_LOG.get(), "_top"))); + public static final DeferredBlock SPIRIT_SALLOW_HEART = register(singleton(blockWithItem("spirit_sallow_heart", () -> new Block(BlockBehaviour.Properties.ofFullCopy(OAK_WOOD).mapColor(MapColor.COLOR_GRAY).lightLevel(s -> 11))), SpectrumTexturedModelProviders.cubeColumn(b -> b, "", b -> SPIRIT_SALLOW_LOG.get(), "_top"))); - public static final DeferredBlock SACRED_SOIL = register(blockWithItem("sacred_soil", () -> new ExtraTickFarmlandBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.FARMLAND).mapColor(MapColor.CLAY), Blocks.DIRT.defaultBlockState()), InkColors.LIME).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(BlockStateProperties.MOISTURE).generate(moisture -> SpectrumModelHelper.createModelVariant(block, moisture == 7 ? "_moist" : ""))))); + public static final DeferredBlock SACRED_SOIL = register(blockWithItem("sacred_soil", () -> new ExtraTickFarmlandBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.FARMLAND).mapColor(MapColor.CLAY), Blocks.DIRT.defaultBlockState())).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(BlockStateProperties.MOISTURE).generate(moisture -> SpectrumModelHelper.createModelVariant(block, moisture == 7 ? "_moist" : ""))))); private static BlockBehaviour.Properties spiritVines(MapColor mapColor) { return settings(mapColor, SoundType.CAVE_VINES, 0.0F).noCollission(); @@ -1315,57 +1317,57 @@ private static BlockBehaviour.Properties upgrade() { return BlockBehaviour.Properties.ofFullCopy(POLISHED_BASALT.get()).forceSolidOn(); } - public static final DeferredBlock UPGRADE_SPEED = register(parented(blockWithItem("upgrade_speed", () -> new UpgradeBlock(upgrade(), Upgradeable.UpgradeType.SPEED, 1, InkColors.MAGENTA_COLOR, "upgrade_speed"), () -> IS.of(16, Rarity.UNCOMMON), InkColors.LIGHT_GRAY), b -> b)); - public static final DeferredBlock UPGRADE_SPEED2 = register(parented(blockWithItem("upgrade_speed2", () -> new UpgradeBlock(upgrade(), Upgradeable.UpgradeType.SPEED, 2, InkColors.MAGENTA_COLOR, "upgrade_speed2"), () -> IS.of(16, Rarity.UNCOMMON), InkColors.LIGHT_GRAY), b -> UPGRADE_SPEED.get())); - public static final DeferredBlock UPGRADE_SPEED3 = register(parented(blockWithItem("upgrade_speed3", () -> new UpgradeBlock(upgrade(), Upgradeable.UpgradeType.SPEED, 8, InkColors.MAGENTA_COLOR, "upgrade_speed3"), () -> IS.of(16, Rarity.UNCOMMON), InkColors.LIGHT_GRAY), b -> UPGRADE_SPEED.get())); - public static final DeferredBlock UPGRADE_EFFICIENCY = register(parented(blockWithItem("upgrade_efficiency", () -> new UpgradeBlock(upgrade(), Upgradeable.UpgradeType.EFFICIENCY, 1, InkColors.YELLOW_COLOR, "upgrade_efficiency"), () -> IS.of(16, Rarity.UNCOMMON), InkColors.LIGHT_GRAY), b -> b)); - public static final DeferredBlock UPGRADE_EFFICIENCY2 = register(parented(blockWithItem("upgrade_efficiency2", () -> new UpgradeBlock(upgrade(), Upgradeable.UpgradeType.EFFICIENCY, 4, InkColors.YELLOW_COLOR, "upgrade_efficiency2"), () -> IS.of(16, Rarity.UNCOMMON), InkColors.LIGHT_GRAY), b -> UPGRADE_EFFICIENCY.get())); - public static final DeferredBlock UPGRADE_YIELD = register(parented(blockWithItem("upgrade_yield", () -> new UpgradeBlock(upgrade(), Upgradeable.UpgradeType.YIELD, 1, InkColors.CYAN_COLOR, "upgrade_yield"), () -> IS.of(16, Rarity.UNCOMMON), InkColors.LIGHT_GRAY), b -> b)); - public static final DeferredBlock UPGRADE_YIELD2 = register(parented(blockWithItem("upgrade_yield2", () -> new UpgradeBlock(upgrade(), Upgradeable.UpgradeType.YIELD, 4, InkColors.CYAN_COLOR, "upgrade_yield2"), () -> IS.of(16, Rarity.UNCOMMON), InkColors.LIGHT_GRAY), b -> UPGRADE_YIELD.get())); - public static final DeferredBlock UPGRADE_EXPERIENCE = register(parented(blockWithItem("upgrade_experience", () -> new UpgradeBlock(upgrade(), Upgradeable.UpgradeType.EXPERIENCE, 1, InkColors.PURPLE_COLOR, "upgrade_experience"), () -> IS.of(16, Rarity.UNCOMMON), InkColors.LIGHT_GRAY), b -> b)); - public static final DeferredBlock UPGRADE_EXPERIENCE2 = register(parented(blockWithItem("upgrade_experience2", () -> new UpgradeBlock(upgrade(), Upgradeable.UpgradeType.EXPERIENCE, 4, InkColors.PURPLE_COLOR, "upgrade_experience2"), () -> IS.of(16, Rarity.UNCOMMON), InkColors.LIGHT_GRAY), b -> UPGRADE_EXPERIENCE.get())); + public static final DeferredBlock UPGRADE_SPEED = register(parented(blockWithItem("upgrade_speed", () -> new UpgradeBlock(upgrade(), Upgradeable.UpgradeType.SPEED, 1, InkColors.MAGENTA_COLOR, "upgrade_speed"), () -> IS.of(16, Rarity.UNCOMMON)), b -> b)); + public static final DeferredBlock UPGRADE_SPEED2 = register(parented(blockWithItem("upgrade_speed2", () -> new UpgradeBlock(upgrade(), Upgradeable.UpgradeType.SPEED, 2, InkColors.MAGENTA_COLOR, "upgrade_speed2"), () -> IS.of(16, Rarity.UNCOMMON)), b -> UPGRADE_SPEED.get())); + public static final DeferredBlock UPGRADE_SPEED3 = register(parented(blockWithItem("upgrade_speed3", () -> new UpgradeBlock(upgrade(), Upgradeable.UpgradeType.SPEED, 8, InkColors.MAGENTA_COLOR, "upgrade_speed3"), () -> IS.of(16, Rarity.UNCOMMON)), b -> UPGRADE_SPEED.get())); + public static final DeferredBlock UPGRADE_EFFICIENCY = register(parented(blockWithItem("upgrade_efficiency", () -> new UpgradeBlock(upgrade(), Upgradeable.UpgradeType.EFFICIENCY, 1, InkColors.YELLOW_COLOR, "upgrade_efficiency"), () -> IS.of(16, Rarity.UNCOMMON)), b -> b)); + public static final DeferredBlock UPGRADE_EFFICIENCY2 = register(parented(blockWithItem("upgrade_efficiency2", () -> new UpgradeBlock(upgrade(), Upgradeable.UpgradeType.EFFICIENCY, 4, InkColors.YELLOW_COLOR, "upgrade_efficiency2"), () -> IS.of(16, Rarity.UNCOMMON)), b -> UPGRADE_EFFICIENCY.get())); + public static final DeferredBlock UPGRADE_YIELD = register(parented(blockWithItem("upgrade_yield", () -> new UpgradeBlock(upgrade(), Upgradeable.UpgradeType.YIELD, 1, InkColors.CYAN_COLOR, "upgrade_yield"), () -> IS.of(16, Rarity.UNCOMMON)), b -> b)); + public static final DeferredBlock UPGRADE_YIELD2 = register(parented(blockWithItem("upgrade_yield2", () -> new UpgradeBlock(upgrade(), Upgradeable.UpgradeType.YIELD, 4, InkColors.CYAN_COLOR, "upgrade_yield2"), () -> IS.of(16, Rarity.UNCOMMON)), b -> UPGRADE_YIELD.get())); + public static final DeferredBlock UPGRADE_EXPERIENCE = register(parented(blockWithItem("upgrade_experience", () -> new UpgradeBlock(upgrade(), Upgradeable.UpgradeType.EXPERIENCE, 1, InkColors.PURPLE_COLOR, "upgrade_experience"), () -> IS.of(16, Rarity.UNCOMMON)), b -> b)); + public static final DeferredBlock UPGRADE_EXPERIENCE2 = register(parented(blockWithItem("upgrade_experience2", () -> new UpgradeBlock(upgrade(), Upgradeable.UpgradeType.EXPERIENCE, 4, InkColors.PURPLE_COLOR, "upgrade_experience2"), () -> IS.of(16, Rarity.UNCOMMON)), b -> UPGRADE_EXPERIENCE.get())); - public static final DeferredBlock REDSTONE_SAND = register(simple(blockWithItem("redstone_sand", () -> new RedstoneSandBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SAND).mapColor(MapColor.FIRE)), InkColors.RED))); - public static final DeferredBlock ENDER_GLASS = register(blockWithItem("ender_glass", () -> new EnderGlassBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLASS).mapColor(MapColor.COLOR_PURPLE).noOcclusion().isRedstoneConductor(SpectrumBlocks::never).isValidSpawn((state, world, pos, entityType) -> EnderGlassBlock.getTransparencyState(state) == EnderGlassBlock.TransparencyState.SOLID).isSuffocating((state, world, pos) -> EnderGlassBlock.getTransparencyState(state) == EnderGlassBlock.TransparencyState.SOLID).isViewBlocking((state, world, pos) -> EnderGlassBlock.getTransparencyState(state) == EnderGlassBlock.TransparencyState.SOLID)), InkColors.PURPLE).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerParentedItemModel(ctx, block, block, "_solid")).withBlockModel((ctx, block) -> + public static final DeferredBlock REDSTONE_SAND = register(simple(blockWithItem("redstone_sand", () -> new RedstoneSandBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SAND).mapColor(MapColor.FIRE))))); + public static final DeferredBlock ENDER_GLASS = register(blockWithItem("ender_glass", () -> new EnderGlassBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLASS).mapColor(MapColor.COLOR_PURPLE).noOcclusion().isRedstoneConductor(SpectrumBlocks::never).isValidSpawn((state, world, pos, entityType) -> EnderGlassBlock.getTransparencyState(state) == EnderGlassBlock.TransparencyState.SOLID).isSuffocating((state, world, pos) -> EnderGlassBlock.getTransparencyState(state) == EnderGlassBlock.TransparencyState.SOLID).isViewBlocking((state, world, pos) -> EnderGlassBlock.getTransparencyState(state) == EnderGlassBlock.TransparencyState.SOLID))).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerParentedItemModel(ctx, block, block, "_solid")).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(EnderGlassBlock.TRANSPARENCY_STATE) .generate(transparency -> SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cubeAll(b -> b, "_" + transparency.getSerializedName()).createWithSuffix(block, "_" + transparency.getSerializedName(), ctx.modelOutput)))))); - public static final DeferredBlock CLOVER = register(singletonWithSoup(blockWithItem("clover", () -> new CloverBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SHORT_GRASS).offsetType(BlockBehaviour.OffsetType.XZ)), InkColors.LIME), ModelLocationUtils::getModelLocation).withItemModel(SpectrumModelHelper::registerItemModel)); - public static final DeferredBlock FOUR_LEAF_CLOVER = register(singletonWithSoup(blockWithItem("four_leaf_clover", () -> new FourLeafCloverBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SHORT_GRASS).offsetType(BlockBehaviour.OffsetType.XZ)), block -> new FourLeafCloverItem(block, IS.of(), SpectrumAdvancements.REVEAL_FOUR_LEAF_CLOVER, CLOVER.asItem()), InkColors.LIME), ModelLocationUtils::getModelLocation).withItemModel(SpectrumModelHelper::registerItemModel)); + public static final DeferredBlock CLOVER = register(singletonWithSoup(blockWithItem("clover", () -> new CloverBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SHORT_GRASS).offsetType(BlockBehaviour.OffsetType.XZ))), ModelLocationUtils::getModelLocation).withItemModel(SpectrumModelHelper::registerItemModel)); + public static final DeferredBlock FOUR_LEAF_CLOVER = register(singletonWithSoup(blockWithItem("four_leaf_clover", () -> new FourLeafCloverBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SHORT_GRASS).offsetType(BlockBehaviour.OffsetType.XZ)), block -> new FourLeafCloverItem(block, IS.of(), SpectrumAdvancements.REVEAL_FOUR_LEAF_CLOVER, CLOVER.asItem())), ModelLocationUtils::getModelLocation).withItemModel(SpectrumModelHelper::registerItemModel)); private static final UniformInt gemOreExperienceProvider = UniformInt.of(1, 4); - public static final DeferredBlock TOPAZ_ORE = register(simple(blockWithItem("topaz_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, ore(), BuiltinGemstoneColor.CYAN, SpectrumAdvancements.COLLECT_TOPAZ, STONE.defaultBlockState()), InkColors.CYAN))); - public static final DeferredBlock AMETHYST_ORE = register(simple(blockWithItem("amethyst_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, ore(), BuiltinGemstoneColor.MAGENTA, SpectrumAdvancements.COLLECT_AMETHYST, STONE.defaultBlockState()), InkColors.MAGENTA))); - public static final DeferredBlock CITRINE_ORE = register(simple(blockWithItem("citrine_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, ore(), BuiltinGemstoneColor.YELLOW, SpectrumAdvancements.COLLECT_CITRINE, STONE.defaultBlockState()), InkColors.YELLOW))); - public static final DeferredBlock ONYX_ORE = register(simple(blockWithItem("onyx_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, ore(), BuiltinGemstoneColor.BLACK, SpectrumAdvancements.CREATE_ONYX, STONE.defaultBlockState()), InkColors.BLACK))); - public static final DeferredBlock MOONSTONE_ORE = register(simple(blockWithItem("moonstone_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, ore(), BuiltinGemstoneColor.WHITE, SpectrumAdvancements.COLLECT_MOONSTONE, STONE.defaultBlockState()), InkColors.WHITE))); - - public static final DeferredBlock DEEPSLATE_TOPAZ_ORE = register(simple(blockWithItem("deepslate_topaz_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, deepslateOre(), BuiltinGemstoneColor.CYAN, SpectrumAdvancements.COLLECT_TOPAZ, DEEPSLATE.defaultBlockState()), InkColors.CYAN))); - public static final DeferredBlock DEEPSLATE_AMETHYST_ORE = register(simple(blockWithItem("deepslate_amethyst_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, deepslateOre(), BuiltinGemstoneColor.MAGENTA, SpectrumAdvancements.COLLECT_AMETHYST, DEEPSLATE.defaultBlockState()), InkColors.MAGENTA))); - public static final DeferredBlock DEEPSLATE_CITRINE_ORE = register(simple(blockWithItem("deepslate_citrine_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, deepslateOre(), BuiltinGemstoneColor.YELLOW, SpectrumAdvancements.COLLECT_CITRINE, DEEPSLATE.defaultBlockState()), InkColors.YELLOW))); - public static final DeferredBlock DEEPSLATE_ONYX_ORE = register(simple(blockWithItem("deepslate_onyx_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, deepslateOre(), BuiltinGemstoneColor.BLACK, SpectrumAdvancements.CREATE_ONYX, DEEPSLATE.defaultBlockState()), InkColors.BLACK))); - public static final DeferredBlock DEEPSLATE_MOONSTONE_ORE = register(simple(blockWithItem("deepslate_moonstone_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, deepslateOre(), BuiltinGemstoneColor.WHITE, SpectrumAdvancements.COLLECT_MOONSTONE, DEEPSLATE.defaultBlockState()), InkColors.WHITE))); - - public static final DeferredBlock BLACKSLAG_TOPAZ_ORE = register(singleton(blockWithItem("blackslag_topaz_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, blackslagOre(), BuiltinGemstoneColor.CYAN, SpectrumAdvancements.COLLECT_TOPAZ, BLACKSLAG.get().defaultBlockState()), InkColors.CYAN), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock BLACKSLAG_AMETHYST_ORE = register(singleton(blockWithItem("blackslag_amethyst_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, blackslagOre(), BuiltinGemstoneColor.MAGENTA, SpectrumAdvancements.COLLECT_AMETHYST, BLACKSLAG.get().defaultBlockState()), InkColors.MAGENTA), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock BLACKSLAG_CITRINE_ORE = register(singleton(blockWithItem("blackslag_citrine_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, blackslagOre(), BuiltinGemstoneColor.YELLOW, SpectrumAdvancements.COLLECT_CITRINE, BLACKSLAG.get().defaultBlockState()), InkColors.YELLOW), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock BLACKSLAG_ONYX_ORE = register(singleton(blockWithItem("blackslag_onyx_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, blackslagOre(), BuiltinGemstoneColor.BLACK, SpectrumAdvancements.CREATE_ONYX, BLACKSLAG.get().defaultBlockState()), InkColors.BLACK), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock BLACKSLAG_MOONSTONE_ORE = register(singleton(blockWithItem("blackslag_moonstone_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, blackslagOre(), BuiltinGemstoneColor.WHITE, SpectrumAdvancements.COLLECT_MOONSTONE, BLACKSLAG.get().defaultBlockState()), InkColors.WHITE), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock TOPAZ_ORE = register(simple(blockWithItem("topaz_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, ore(), BuiltinGemstoneColor.CYAN, SpectrumAdvancements.COLLECT_TOPAZ, STONE.defaultBlockState())))); + public static final DeferredBlock AMETHYST_ORE = register(simple(blockWithItem("amethyst_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, ore(), BuiltinGemstoneColor.MAGENTA, SpectrumAdvancements.COLLECT_AMETHYST, STONE.defaultBlockState())))); + public static final DeferredBlock CITRINE_ORE = register(simple(blockWithItem("citrine_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, ore(), BuiltinGemstoneColor.YELLOW, SpectrumAdvancements.COLLECT_CITRINE, STONE.defaultBlockState())))); + public static final DeferredBlock ONYX_ORE = register(simple(blockWithItem("onyx_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, ore(), BuiltinGemstoneColor.BLACK, SpectrumAdvancements.CREATE_ONYX, STONE.defaultBlockState())))); + public static final DeferredBlock MOONSTONE_ORE = register(simple(blockWithItem("moonstone_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, ore(), BuiltinGemstoneColor.WHITE, SpectrumAdvancements.COLLECT_MOONSTONE, STONE.defaultBlockState())))); + + public static final DeferredBlock DEEPSLATE_TOPAZ_ORE = register(simple(blockWithItem("deepslate_topaz_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, deepslateOre(), BuiltinGemstoneColor.CYAN, SpectrumAdvancements.COLLECT_TOPAZ, DEEPSLATE.defaultBlockState())))); + public static final DeferredBlock DEEPSLATE_AMETHYST_ORE = register(simple(blockWithItem("deepslate_amethyst_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, deepslateOre(), BuiltinGemstoneColor.MAGENTA, SpectrumAdvancements.COLLECT_AMETHYST, DEEPSLATE.defaultBlockState())))); + public static final DeferredBlock DEEPSLATE_CITRINE_ORE = register(simple(blockWithItem("deepslate_citrine_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, deepslateOre(), BuiltinGemstoneColor.YELLOW, SpectrumAdvancements.COLLECT_CITRINE, DEEPSLATE.defaultBlockState())))); + public static final DeferredBlock DEEPSLATE_ONYX_ORE = register(simple(blockWithItem("deepslate_onyx_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, deepslateOre(), BuiltinGemstoneColor.BLACK, SpectrumAdvancements.CREATE_ONYX, DEEPSLATE.defaultBlockState())))); + public static final DeferredBlock DEEPSLATE_MOONSTONE_ORE = register(simple(blockWithItem("deepslate_moonstone_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, deepslateOre(), BuiltinGemstoneColor.WHITE, SpectrumAdvancements.COLLECT_MOONSTONE, DEEPSLATE.defaultBlockState())))); + + public static final DeferredBlock BLACKSLAG_TOPAZ_ORE = register(singleton(blockWithItem("blackslag_topaz_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, blackslagOre(), BuiltinGemstoneColor.CYAN, SpectrumAdvancements.COLLECT_TOPAZ, BLACKSLAG.get().defaultBlockState())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock BLACKSLAG_AMETHYST_ORE = register(singleton(blockWithItem("blackslag_amethyst_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, blackslagOre(), BuiltinGemstoneColor.MAGENTA, SpectrumAdvancements.COLLECT_AMETHYST, BLACKSLAG.get().defaultBlockState())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock BLACKSLAG_CITRINE_ORE = register(singleton(blockWithItem("blackslag_citrine_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, blackslagOre(), BuiltinGemstoneColor.YELLOW, SpectrumAdvancements.COLLECT_CITRINE, BLACKSLAG.get().defaultBlockState())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock BLACKSLAG_ONYX_ORE = register(singleton(blockWithItem("blackslag_onyx_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, blackslagOre(), BuiltinGemstoneColor.BLACK, SpectrumAdvancements.CREATE_ONYX, BLACKSLAG.get().defaultBlockState())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock BLACKSLAG_MOONSTONE_ORE = register(singleton(blockWithItem("blackslag_moonstone_ore", () -> new GemstoneOreBlock(gemOreExperienceProvider, blackslagOre(), BuiltinGemstoneColor.WHITE, SpectrumAdvancements.COLLECT_MOONSTONE, BLACKSLAG.get().defaultBlockState())), TexturedModel.COLUMN_ALT)); private static BlockBehaviour.Properties polishedGemBlock(MapColor mapColor, SoundType soundGroup) { return settings(mapColor, soundGroup, 5.0F, 6.0F); } - public static final DeferredBlock POLISHED_TOPAZ = register(simple(blockWithItem("polished_topaz", () -> new Block(polishedGemBlock(MapColor.COLOR_CYAN, SpectrumSoundTypes.TOPAZ_BLOCK)), InkColors.CYAN))); - public static final DeferredBlock POLISHED_AMETHYST = register(simple(blockWithItem("polished_amethyst", () -> new Block(polishedGemBlock(MapColor.COLOR_MAGENTA, SoundType.AMETHYST)), InkColors.MAGENTA))); - public static final DeferredBlock POLISHED_CITRINE = register(simple(blockWithItem("polished_citrine", () -> new Block(polishedGemBlock(MapColor.COLOR_YELLOW, SpectrumSoundTypes.CITRINE_BLOCK)), InkColors.YELLOW))); - public static final DeferredBlock POLISHED_ONYX = register(simple(blockWithItem("polished_onyx", () -> new Block(polishedGemBlock(MapColor.COLOR_BLACK, SpectrumSoundTypes.ONYX_BLOCK)), InkColors.BLACK))); - public static final DeferredBlock POLISHED_MOONSTONE = register(simple(blockWithItem("polished_moonstone", () -> new Block(polishedGemBlock(MapColor.SNOW, SpectrumSoundTypes.MOONSTONE_BLOCK)), InkColors.WHITE))); + public static final DeferredBlock POLISHED_TOPAZ = register(simple(blockWithItem("polished_topaz", () -> new Block(polishedGemBlock(MapColor.COLOR_CYAN, SpectrumSoundTypes.TOPAZ_BLOCK))))); + public static final DeferredBlock POLISHED_AMETHYST = register(simple(blockWithItem("polished_amethyst", () -> new Block(polishedGemBlock(MapColor.COLOR_MAGENTA, SoundType.AMETHYST))))); + public static final DeferredBlock POLISHED_CITRINE = register(simple(blockWithItem("polished_citrine", () -> new Block(polishedGemBlock(MapColor.COLOR_YELLOW, SpectrumSoundTypes.CITRINE_BLOCK))))); + public static final DeferredBlock POLISHED_ONYX = register(simple(blockWithItem("polished_onyx", () -> new Block(polishedGemBlock(MapColor.COLOR_BLACK, SpectrumSoundTypes.ONYX_BLOCK))))); + public static final DeferredBlock POLISHED_MOONSTONE = register(simple(blockWithItem("polished_moonstone", () -> new Block(polishedGemBlock(MapColor.SNOW, SpectrumSoundTypes.MOONSTONE_BLOCK))))); - public static final DeferredBlock TOPAZ_PILLAR = register(singleton(blockWithItem("topaz_pillar", () -> new Block(polishedGemBlock(MapColor.COLOR_CYAN, SpectrumSoundTypes.TOPAZ_BLOCK)), InkColors.CYAN), TexturedModel.TOP_BOTTOM_WITH_WALL)); - public static final DeferredBlock AMETHYST_PILLAR = register(singleton(blockWithItem("amethyst_pillar", () -> new Block(polishedGemBlock(MapColor.COLOR_MAGENTA, SoundType.AMETHYST)), InkColors.MAGENTA), TexturedModel.TOP_BOTTOM_WITH_WALL)); - public static final DeferredBlock CITRINE_PILLAR = register(singleton(blockWithItem("citrine_pillar", () -> new Block(polishedGemBlock(MapColor.COLOR_YELLOW, SpectrumSoundTypes.CITRINE_BLOCK)), InkColors.YELLOW), TexturedModel.TOP_BOTTOM_WITH_WALL)); - public static final DeferredBlock ONYX_PILLAR = register(singleton(blockWithItem("onyx_pillar", () -> new Block(polishedGemBlock(MapColor.COLOR_BLACK, SpectrumSoundTypes.ONYX_BLOCK)), InkColors.BLACK), TexturedModel.TOP_BOTTOM_WITH_WALL)); - public static final DeferredBlock MOONSTONE_PILLAR = register(singleton(blockWithItem("moonstone_pillar", () -> new Block(polishedGemBlock(MapColor.SNOW, SpectrumSoundTypes.MOONSTONE_BLOCK)), InkColors.WHITE), TexturedModel.TOP_BOTTOM_WITH_WALL)); + public static final DeferredBlock TOPAZ_PILLAR = register(singleton(blockWithItem("topaz_pillar", () -> new Block(polishedGemBlock(MapColor.COLOR_CYAN, SpectrumSoundTypes.TOPAZ_BLOCK))), TexturedModel.TOP_BOTTOM_WITH_WALL)); + public static final DeferredBlock AMETHYST_PILLAR = register(singleton(blockWithItem("amethyst_pillar", () -> new Block(polishedGemBlock(MapColor.COLOR_MAGENTA, SoundType.AMETHYST))), TexturedModel.TOP_BOTTOM_WITH_WALL)); + public static final DeferredBlock CITRINE_PILLAR = register(singleton(blockWithItem("citrine_pillar", () -> new Block(polishedGemBlock(MapColor.COLOR_YELLOW, SpectrumSoundTypes.CITRINE_BLOCK))), TexturedModel.TOP_BOTTOM_WITH_WALL)); + public static final DeferredBlock ONYX_PILLAR = register(singleton(blockWithItem("onyx_pillar", () -> new Block(polishedGemBlock(MapColor.COLOR_BLACK, SpectrumSoundTypes.ONYX_BLOCK))), TexturedModel.TOP_BOTTOM_WITH_WALL)); + public static final DeferredBlock MOONSTONE_PILLAR = register(singleton(blockWithItem("moonstone_pillar", () -> new Block(polishedGemBlock(MapColor.SNOW, SpectrumSoundTypes.MOONSTONE_BLOCK))), TexturedModel.TOP_BOTTOM_WITH_WALL)); private static BlockBehaviour.Properties copyWithMapColor(Block baseBlock, MapColor color) { return BlockBehaviour.Properties.ofFullCopy(baseBlock).mapColor(color); @@ -1375,13 +1377,13 @@ public static BlockBehaviour.Properties pottedPlant() { return BlockBehaviour.Properties.of().instabreak().noOcclusion().pushReaction(PushReaction.DESTROY); } - public static final DeferredBlock AMARANTH_BUSHEL = register(cross(blockWithItem("amaranth_bushel", () -> new AmaranthBushelBlock(SpectrumMobEffects.NOURISHING, 8, settings(MapColor.NONE, SoundType.CROP, 0.0F).noCollission()), InkColors.RED)).withItemModel(SpectrumModelHelper::registerItemModel)); + public static final DeferredBlock AMARANTH_BUSHEL = register(cross(blockWithItem("amaranth_bushel", () -> new AmaranthBushelBlock(SpectrumMobEffects.NOURISHING, 8, settings(MapColor.NONE, SoundType.CROP, 0.0F).noCollission()))).withItemModel(SpectrumModelHelper::registerItemModel)); public static final DeferredBlock POTTED_AMARANTH_BUSHEL = register(pottedPlant(block("potted_amaranth_bushel", () -> new PottedAmaranthBushelBlock(AMARANTH_BUSHEL.get(), pottedPlant())), false)); - public static final DeferredBlock RESONANT_LILY = register(simplePlant(blockWithItem("resonant_lily", () -> new ResonantLilyBlock(MobEffects.REGENERATION, 5, BlockBehaviour.Properties.ofFullCopy(POPPY).mapColor(MapColor.SNOW)), InkColors.GREEN))); + public static final DeferredBlock RESONANT_LILY = register(simplePlant(blockWithItem("resonant_lily", () -> new ResonantLilyBlock(MobEffects.REGENERATION, 5, BlockBehaviour.Properties.ofFullCopy(POPPY).mapColor(MapColor.SNOW))))); public static final DeferredBlock POTTED_RESONANT_LILY = register(pottedPlant(block("potted_resonant_lily", () -> new PottedResonantLilyBlock(RESONANT_LILY.get(), pottedPlant())), false)); - public static final DeferredBlock BLOOD_ORCHID = register(blockWithItem("blood_orchid", () -> new BloodOrchidBlock(SpectrumMobEffects.FRENZY, 10, BlockBehaviour.Properties.ofFullCopy(Blocks.POPPY).offsetType(BlockBehaviour.OffsetType.NONE).randomTicks()), InkColors.RED).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerBlockTexturedItemModel(ctx, block, "5")).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(BloodOrchidBlock.AGE).generate(stage -> SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, stage.toString()).createWithSuffix(block, stage.toString(), ctx.modelOutput)))))); + public static final DeferredBlock BLOOD_ORCHID = register(blockWithItem("blood_orchid", () -> new BloodOrchidBlock(SpectrumMobEffects.FRENZY, 10, BlockBehaviour.Properties.ofFullCopy(Blocks.POPPY).offsetType(BlockBehaviour.OffsetType.NONE).randomTicks())).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerBlockTexturedItemModel(ctx, block, "5")).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(PropertyDispatch.property(BloodOrchidBlock.AGE).generate(stage -> SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.cross(b -> b, stage.toString()).createWithSuffix(block, stage.toString(), ctx.modelOutput)))))); public static final DeferredBlock POTTED_BLOOD_ORCHID = register(singleton(block("potted_blood_orchid", () -> new PottedBloodOrchidBlock(BLOOD_ORCHID.get(), pottedPlant())), SpectrumTexturedModelProviders.flowerPotCross(b -> BLOOD_ORCHID.get(), "5", false))); public static final DeferredBlock POTTED_SWEET_PEA = register(pottedPlantWithCustomTexture(block("potted_sweet_pea", () -> new FlowerPotBlock(() -> (FlowerPotBlock) FLOWER_POT, SWEET_PEA, pottedPlant().lightLevel(s -> 11).hasPostProcess(SpectrumBlocks::always).emissiveRendering(SpectrumBlocks::always))), "_potted")); @@ -1390,7 +1392,7 @@ public static BlockBehaviour.Properties pottedPlant() { public static final DeferredBlock POTTED_HUMMING_BELL = register(pottedPlant(block("potted_humming_bell", () -> new FlowerPotBlock(() -> (FlowerPotBlock) FLOWER_POT, HUMMING_BELL, pottedPlant().lightLevel(s -> 9).hasPostProcess(SpectrumBlocks::always).emissiveRendering(SpectrumBlocks::always))), false)); public static DeferredBlock registerColoredSapling(String name, InkColor color, TreeGrower generator) { - return register(simplePlant(blockWithItem(name, () -> new ColoredSaplingBlock(copyWithMapColor(OAK_SAPLING, color.getDyeColor().orElse(DyeColor.LIME).getMapColor()), color, generator), color))); + return register(simplePlant(blockWithItem(name, () -> new ColoredSaplingBlock(copyWithMapColor(OAK_SAPLING, color.getDyeColor().orElse(DyeColor.LIME).getMapColor()), color, generator)))); } public static final DeferredBlock BLACK_SAPLING = registerColoredSapling("black_sapling", InkColors.BLACK, SpectrumTreeGrowers.BLACK_COLORED_SAPLING_GENERATOR); public static final DeferredBlock BLUE_SAPLING = registerColoredSapling("blue_sapling", InkColors.BLUE, SpectrumTreeGrowers.BLUE_COLORED_SAPLING_GENERATOR); @@ -1431,7 +1433,7 @@ public static DeferredBlock registerPottedColoredSapl public static final DeferredBlock POTTED_YELLOW_SAPLING = registerPottedColoredSapling("potted_yellow_sapling", YELLOW_SAPLING); public static DeferredBlock registerColoredStrippedLog(String name, InkColor color) { - return register(log(blockWithItem(name, () -> new ColoredStrippedSpectrumLogBlock(copyWithMapColor(STRIPPED_OAK_LOG, color.getDyeColor().orElse(DyeColor.LIME).getMapColor()), color), color))); + return register(log(blockWithItem(name, () -> new ColoredStrippedSpectrumLogBlock(copyWithMapColor(STRIPPED_OAK_LOG, color.getDyeColor().orElse(DyeColor.LIME).getMapColor()), color)))); } public static final DeferredBlock STRIPPED_BLACK_LOG = registerColoredStrippedLog("stripped_black_log", InkColors.BLACK); @@ -1452,7 +1454,7 @@ public static DeferredBlock registerColoredStri public static final DeferredBlock STRIPPED_YELLOW_LOG = registerColoredStrippedLog("stripped_yellow_log", InkColors.YELLOW); public static DeferredBlock registerColoredStrippedWood(String name, DeferredBlock logBlock, InkColor color) { - return register(blockWithItem(name, () -> new ColoredStrippedWoodBlockSpectrum(copyWithMapColor(STRIPPED_OAK_WOOD, logBlock.get().defaultMapColor()), color), color)); + return register(blockWithItem(name, () -> new ColoredStrippedWoodBlockSpectrum(copyWithMapColor(STRIPPED_OAK_WOOD, logBlock.get().defaultMapColor()), color))); } public static final DeferredBlock STRIPPED_BLACK_WOOD = registerColoredStrippedWood("stripped_black_wood", STRIPPED_BLACK_LOG, InkColors.BLACK); @@ -1473,7 +1475,7 @@ public static DeferredBlock registerColoredStr public static final DeferredBlock STRIPPED_YELLOW_WOOD = registerColoredStrippedWood("stripped_yellow_wood", STRIPPED_YELLOW_LOG, InkColors.YELLOW); public static DeferredBlock registerColoredLog(String name, Supplier strippedBlock, InkColor color, ResourceKey strippingLootTableKey) { - return register(log(blockWithItem(name, () -> new ColoredLogBlock(copyWithMapColor(OAK_LOG, color.getDyeColor().orElse(DyeColor.LIME).getMapColor()), strippedBlock, color, strippingLootTableKey), color))); + return register(log(blockWithItem(name, () -> new ColoredLogBlock(copyWithMapColor(OAK_LOG, color.getDyeColor().orElse(DyeColor.LIME).getMapColor()), strippedBlock, color, strippingLootTableKey)))); } public static final DeferredBlock BLACK_LOG = registerColoredLog("black_log", STRIPPED_BLACK_LOG, InkColors.BLACK, SpectrumLootTableKeys.BLACK_LOG_STRIPPING); @@ -1494,7 +1496,7 @@ public static DeferredBlock registerColoredLog(String name, Sup public static final DeferredBlock YELLOW_LOG = registerColoredLog("yellow_log", STRIPPED_YELLOW_LOG, InkColors.YELLOW, SpectrumLootTableKeys.YELLOW_LOG_STRIPPING); public static DeferredBlock registerColoredWood(String name, Supplier strippedBlock, DeferredBlock logBlock, InkColor color, ResourceKey strippingLootTableKey) { - return register(blockWithItem(name, () -> new ColoredWoodBlock(copyWithMapColor(OAK_WOOD, logBlock.get().defaultMapColor()), strippedBlock, color, strippingLootTableKey), color)); + return register(blockWithItem(name, () -> new ColoredWoodBlock(copyWithMapColor(OAK_WOOD, logBlock.get().defaultMapColor()), strippedBlock, color, strippingLootTableKey))); } public static final DeferredBlock BLACK_WOOD = registerColoredWood("black_wood", STRIPPED_BLACK_WOOD, BLACK_LOG, InkColors.BLACK, SpectrumLootTableKeys.BLACK_LOG_STRIPPING); @@ -1515,7 +1517,7 @@ public static DeferredBlock registerColoredWood(String name, S public static final DeferredBlock YELLOW_WOOD = registerColoredWood("yellow_wood", STRIPPED_YELLOW_WOOD, YELLOW_LOG, InkColors.YELLOW, SpectrumLootTableKeys.YELLOW_LOG_STRIPPING); public static DeferredBlock registerColoredLeaves(String name, InkColor color) { - return register(singleton(blockWithItem(name, () -> new ColoredLeavesBlock(copyWithMapColor(OAK_LEAVES, color.getDyeColor().orElse(DyeColor.LIME).getMapColor()), color), color), TexturedModel.LEAVES)); + return register(singleton(blockWithItem(name, () -> new ColoredLeavesBlock(copyWithMapColor(OAK_LEAVES, color.getDyeColor().orElse(DyeColor.LIME).getMapColor()), color)), TexturedModel.LEAVES)); } public static final DeferredBlock BLACK_LEAVES = registerColoredLeaves("black_leaves", InkColors.BLACK); @@ -1536,7 +1538,7 @@ public static DeferredBlock registerColoredLeaves(String nam public static final DeferredBlock YELLOW_LEAVES = registerColoredLeaves("yellow_leaves", InkColors.YELLOW); public static DeferredBlock registerGlowBlock(String name, InkColor color) { - return register(simple(blockWithItem(name, () -> new GlowBlock(settings(color.getDyeColor().orElse(DyeColor.LIME).getMapColor(), SoundType.BASALT, 2.5F).requiresCorrectToolForDrops().lightLevel(state -> 1).hasPostProcess(SpectrumBlocks::always).emissiveRendering(SpectrumBlocks::always), color), color))); + return register(simple(blockWithItem(name, () -> new GlowBlock(settings(color.getDyeColor().orElse(DyeColor.LIME).getMapColor(), SoundType.BASALT, 2.5F).requiresCorrectToolForDrops().lightLevel(state -> 1).hasPostProcess(SpectrumBlocks::always).emissiveRendering(SpectrumBlocks::always), color)))); } public static final DeferredBlock BLACK_GLOWBLOCK = registerGlowBlock("black_glowblock", InkColors.BLACK); @@ -1557,7 +1559,7 @@ public static DeferredBlock registerGlowBlock(String name, InkColor c public static final DeferredBlock YELLOW_GLOWBLOCK = registerGlowBlock("yellow_glowblock", InkColors.YELLOW); public static DeferredBlock registerColoredLightBlock(String name, InkColor color) { - return register(blockWithItem(name, () -> new ColoredLightBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.REDSTONE_LAMP).mapColor(color.getDyeColor().orElse(DyeColor.LIME).getMapColor()), color), color).withBlockModel((ctx, block) -> { + return register(blockWithItem(name, () -> new ColoredLightBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.REDSTONE_LAMP).mapColor(color.getDyeColor().orElse(DyeColor.LIME).getMapColor()), color)).withBlockModel((ctx, block) -> { ResourceLocation off = TexturedModel.CUBE.create(block, ctx.modelOutput); ResourceLocation on = SpectrumModelTemplates.COLORED_LAMP_ON.createWithSuffix(block, "_on", SpectrumTextureMaps.innerOuter(block, "_on", block, "_outer"), ctx.modelOutput); return MultiVariantGenerator.multiVariant(block).with(SpectrumModelHelper.createBooleanModelMap(BlockStateProperties.LIT, on, off)); @@ -1582,7 +1584,7 @@ public static DeferredBlock registerColoredLightBlock(String public static final DeferredBlock YELLOW_LAMP = registerColoredLightBlock("yellow_lamp", InkColors.YELLOW); public static DeferredBlock registerPigmentBlock(String name, InkColor color) { - return register(simple(blockWithItem(name, () -> new PigmentBlock(settings(color.getDyeColor().orElse(DyeColor.LIME).getMapColor(), SoundType.WOOL, 1.0F), color), color))); + return register(simple(blockWithItem(name, () -> new PigmentBlock(settings(color.getDyeColor().orElse(DyeColor.LIME).getMapColor(), SoundType.WOOL, 1.0F), color)))); } public static final DeferredBlock BLACK_BLOCK = registerPigmentBlock("black_block", InkColors.BLACK); @@ -1603,7 +1605,7 @@ public static DeferredBlock registerPigmentBlock(String name, InkC public static final DeferredBlock YELLOW_BLOCK = registerPigmentBlock("yellow_block", InkColors.YELLOW); public static DeferredBlock registerColoredSporeBlossomBlock(String name, InkColor color, ColoredFallingSporeBlossomParticleEffect falling, ColoredSporeBlossomAirParticleEffect air) { - return register(singleton(blockWithItem(name, () -> new ColoredSporeBlossomBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SPORE_BLOSSOM).mapColor(color.getDyeColor().orElse(DyeColor.LIME).getMapColor()), color, falling, air), color), TexturedModel.createDefault(b -> SpectrumTextureMaps.flowerParticle(b, "", b, ""), SpectrumModelTemplates.SPORE_BLOSSOM))); + return register(singleton(blockWithItem(name, () -> new ColoredSporeBlossomBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SPORE_BLOSSOM).mapColor(color.getDyeColor().orElse(DyeColor.LIME).getMapColor()), color, falling, air)), TexturedModel.createDefault(b -> SpectrumTextureMaps.flowerParticle(b, "", b, ""), SpectrumModelTemplates.SPORE_BLOSSOM))); } public static final DeferredBlock BLACK_SPORE_BLOSSOM = registerColoredSporeBlossomBlock("black_spore_blossom", InkColors.BLACK, ColoredFallingSporeBlossomParticleEffect.BLACK, ColoredSporeBlossomAirParticleEffect.BLACK); @@ -1624,7 +1626,7 @@ public static DeferredBlock registerColoredSporeBlosso public static final DeferredBlock YELLOW_SPORE_BLOSSOM = registerColoredSporeBlossomBlock("yellow_spore_blossom", InkColors.YELLOW, ColoredFallingSporeBlossomParticleEffect.YELLOW, ColoredSporeBlossomAirParticleEffect.YELLOW); public static DeferredBlock registerShimmerstoneLight(String name, SoundType soundGroup, Supplier outerSupplier) { - return register(blockWithItem(name, () -> new ShimmerstoneLightBlock(settings(MapColor.NONE, soundGroup, 1.0F).noOcclusion().requiresCorrectToolForDrops().lightLevel(state -> 15).pushReaction(PushReaction.DESTROY)), InkColors.YELLOW).withBlockModel((ctx, block) -> { + return register(blockWithItem(name, () -> new ShimmerstoneLightBlock(settings(MapColor.NONE, soundGroup, 1.0F).noOcclusion().requiresCorrectToolForDrops().lightLevel(state -> 15).pushReaction(PushReaction.DESTROY))).withBlockModel((ctx, block) -> { ResourceLocation outer = outerSupplier.get(); ResourceLocation base = SpectrumModelTemplates.SHIMMERSTONE_LIGHT.create(block, SpectrumTextureMaps.innerOuterParticle(SpectrumTextures.SHIMMERSTONE_LIGHT, outer, outer), ctx.modelOutput); ResourceLocation mirrored = SpectrumModelTemplates.SHIMMERSTONE_LIGHT_MIRRORED.createWithSuffix(block, "_mirrored", SpectrumTextureMaps.innerOuterParticle(SpectrumTextures.SHIMMERSTONE_LIGHT, outer, outer), ctx.modelOutput); @@ -1646,73 +1648,73 @@ private static BlockBehaviour.Properties crystallarieumGrowable(Block baseBlock) return BlockBehaviour.Properties.ofFullCopy(baseBlock).strength(1.5F).noOcclusion().forceSolidOn().requiresCorrectToolForDrops().pushReaction(PushReaction.DESTROY); } - public static final DeferredBlock SMALL_COAL_BUD = register(cluster(blockWithItem("small_coal_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(COAL_BLOCK), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock LARGE_COAL_BUD = register(cluster(blockWithItem("large_coal_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_COAL_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock COAL_CLUSTER = register(cluster(blockWithItem("coal_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_COAL_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock SMALL_IRON_BUD = register(cluster(blockWithItem("small_iron_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(IRON_BLOCK), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock LARGE_IRON_BUD = register(cluster(blockWithItem("large_iron_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_IRON_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock IRON_CLUSTER = register(cluster(blockWithItem("iron_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_IRON_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock SMALL_GOLD_BUD = register(cluster(blockWithItem("small_gold_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(GOLD_BLOCK), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock LARGE_GOLD_BUD = register(cluster(blockWithItem("large_gold_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GOLD_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock GOLD_CLUSTER = register(cluster(blockWithItem("gold_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GOLD_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock SMALL_DIAMOND_BUD = register(cluster(blockWithItem("small_diamond_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(DIAMOND_BLOCK), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.CYAN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock LARGE_DIAMOND_BUD = register(cluster(blockWithItem("large_diamond_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_DIAMOND_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.CYAN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock DIAMOND_CLUSTER = register(cluster(blockWithItem("diamond_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_DIAMOND_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.CYAN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock SMALL_EMERALD_BUD = register(cluster(blockWithItem("small_emerald_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(EMERALD_BLOCK), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.CYAN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock LARGE_EMERALD_BUD = register(cluster(blockWithItem("large_emerald_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_EMERALD_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.CYAN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock EMERALD_CLUSTER = register(cluster(blockWithItem("emerald_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_EMERALD_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.CYAN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock SMALL_REDSTONE_BUD = register(cluster(blockWithItem("small_redstone_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(REDSTONE_BLOCK), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.RED), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock LARGE_REDSTONE_BUD = register(cluster(blockWithItem("large_redstone_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_REDSTONE_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.RED), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock REDSTONE_CLUSTER = register(cluster(blockWithItem("redstone_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_REDSTONE_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.RED), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock SMALL_LAPIS_BUD = register(cluster(blockWithItem("small_lapis_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(LAPIS_BLOCK), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.PURPLE), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock LARGE_LAPIS_BUD = register(cluster(blockWithItem("large_lapis_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_LAPIS_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.PURPLE), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock LAPIS_CLUSTER = register(cluster(blockWithItem("lapis_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_LAPIS_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.PURPLE), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock SMALL_COPPER_BUD = register(cluster(blockWithItem("small_copper_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(COPPER_BLOCK), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock LARGE_COPPER_BUD = register(cluster(blockWithItem("large_copper_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_COPPER_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock COPPER_CLUSTER = register(cluster(blockWithItem("copper_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_COPPER_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock SMALL_QUARTZ_BUD = register(cluster(blockWithItem("small_quartz_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(QUARTZ_BLOCK), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock LARGE_QUARTZ_BUD = register(cluster(blockWithItem("large_quartz_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_QUARTZ_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock QUARTZ_CLUSTER = register(cluster(blockWithItem("quartz_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_QUARTZ_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock SMALL_NETHERITE_SCRAP_BUD = register(cluster(blockWithItem("small_netherite_scrap_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(ANCIENT_DEBRIS), SpectrumClusterBlock.GrowthStage.SMALL), () -> IS.of().fireResistant(), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock LARGE_NETHERITE_SCRAP_BUD = register(cluster(blockWithItem("large_netherite_scrap_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_NETHERITE_SCRAP_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), () -> IS.of().fireResistant(), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock NETHERITE_SCRAP_CLUSTER = register(cluster(blockWithItem("netherite_scrap_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_NETHERITE_SCRAP_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), () -> IS.of().fireResistant(), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock SMALL_ECHO_BUD = register(cluster(blockWithItem("small_echo_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(SCULK), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock LARGE_ECHO_BUD = register(cluster(blockWithItem("large_echo_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_ECHO_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock ECHO_CLUSTER = register(cluster(blockWithItem("echo_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_ECHO_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.BROWN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock SMALL_GLOWSTONE_BUD = register(cluster(blockWithItem("small_glowstone_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(GLOWSTONE).lightLevel(state -> 4), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.YELLOW), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock LARGE_GLOWSTONE_BUD = register(cluster(blockWithItem("large_glowstone_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GLOWSTONE_BUD.get()).lightLevel(state -> 8), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.YELLOW), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock GLOWSTONE_CLUSTER = register(cluster(blockWithItem("glowstone_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GLOWSTONE_BUD.get()).lightLevel(state -> 14), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.YELLOW), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock SMALL_PRISMARINE_BUD = register(cluster(blockWithItem("small_prismarine_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(SCULK), SpectrumClusterBlock.GrowthStage.SMALL), InkColors.CYAN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock LARGE_PRISMARINE_BUD = register(cluster(blockWithItem("large_prismarine_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_PRISMARINE_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), InkColors.CYAN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - public static final DeferredBlock PRISMARINE_CLUSTER = register(cluster(blockWithItem("prismarine_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_PRISMARINE_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), InkColors.CYAN), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); - - public static final DeferredBlock PURE_COAL_BLOCK = register(simple(blockWithItem("pure_coal_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(COAL_BLOCK)), InkColors.BROWN))); - public static final DeferredBlock PURE_IRON_BLOCK = register(simple(blockWithItem("pure_iron_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(IRON_BLOCK)), InkColors.BROWN))); - public static final DeferredBlock PURE_GOLD_BLOCK = register(simple(blockWithItem("pure_gold_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(GOLD_BLOCK)), InkColors.BROWN))); - public static final DeferredBlock PURE_DIAMOND_BLOCK = register(simple(blockWithItem("pure_diamond_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(DIAMOND_BLOCK)), InkColors.CYAN))); - public static final DeferredBlock PURE_EMERALD_BLOCK = register(simple(blockWithItem("pure_emerald_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(EMERALD_BLOCK)), InkColors.CYAN))); - public static final DeferredBlock PURE_REDSTONE_BLOCK = register(simple(blockWithItem("pure_redstone_block", () -> new PureRedstoneBlock(BlockBehaviour.Properties.ofFullCopy(REDSTONE_BLOCK)), InkColors.RED))); - public static final DeferredBlock PURE_LAPIS_BLOCK = register(simple(blockWithItem("pure_lapis_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(LAPIS_BLOCK)), InkColors.PURPLE))); - public static final DeferredBlock PURE_COPPER_BLOCK = register(simple(blockWithItem("pure_copper_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(COPPER_BLOCK)), InkColors.BROWN))); - public static final DeferredBlock PURE_QUARTZ_BLOCK = register(simple(blockWithItem("pure_quartz_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(QUARTZ_BLOCK)), InkColors.BROWN))); - public static final DeferredBlock PURE_GLOWSTONE_BLOCK = register(simple(blockWithItem("pure_glowstone_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(GLOWSTONE)), InkColors.YELLOW))); - public static final DeferredBlock PURE_PRISMARINE_BLOCK = register(simple(blockWithItem("pure_prismarine_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PRISMARINE)), InkColors.CYAN))); - public static final DeferredBlock PURE_NETHERITE_SCRAP_BLOCK = register(simple(blockWithItem("pure_netherite_scrap_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(ANCIENT_DEBRIS)), () -> IS.of().fireResistant(), InkColors.BROWN))); - public static final DeferredBlock PURE_ECHO_BLOCK = register(simple(blockWithItem("pure_echo_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(DIAMOND_BLOCK)), InkColors.BROWN))); + public static final DeferredBlock SMALL_COAL_BUD = register(cluster(blockWithItem("small_coal_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(COAL_BLOCK), SpectrumClusterBlock.GrowthStage.SMALL)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock LARGE_COAL_BUD = register(cluster(blockWithItem("large_coal_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_COAL_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock COAL_CLUSTER = register(cluster(blockWithItem("coal_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_COAL_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock SMALL_IRON_BUD = register(cluster(blockWithItem("small_iron_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(IRON_BLOCK), SpectrumClusterBlock.GrowthStage.SMALL)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock LARGE_IRON_BUD = register(cluster(blockWithItem("large_iron_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_IRON_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock IRON_CLUSTER = register(cluster(blockWithItem("iron_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_IRON_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock SMALL_GOLD_BUD = register(cluster(blockWithItem("small_gold_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(GOLD_BLOCK), SpectrumClusterBlock.GrowthStage.SMALL)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock LARGE_GOLD_BUD = register(cluster(blockWithItem("large_gold_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GOLD_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock GOLD_CLUSTER = register(cluster(blockWithItem("gold_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GOLD_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock SMALL_DIAMOND_BUD = register(cluster(blockWithItem("small_diamond_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(DIAMOND_BLOCK), SpectrumClusterBlock.GrowthStage.SMALL)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock LARGE_DIAMOND_BUD = register(cluster(blockWithItem("large_diamond_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_DIAMOND_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock DIAMOND_CLUSTER = register(cluster(blockWithItem("diamond_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_DIAMOND_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock SMALL_EMERALD_BUD = register(cluster(blockWithItem("small_emerald_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(EMERALD_BLOCK), SpectrumClusterBlock.GrowthStage.SMALL)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock LARGE_EMERALD_BUD = register(cluster(blockWithItem("large_emerald_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_EMERALD_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock EMERALD_CLUSTER = register(cluster(blockWithItem("emerald_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_EMERALD_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock SMALL_REDSTONE_BUD = register(cluster(blockWithItem("small_redstone_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(REDSTONE_BLOCK), SpectrumClusterBlock.GrowthStage.SMALL)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock LARGE_REDSTONE_BUD = register(cluster(blockWithItem("large_redstone_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_REDSTONE_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock REDSTONE_CLUSTER = register(cluster(blockWithItem("redstone_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_REDSTONE_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock SMALL_LAPIS_BUD = register(cluster(blockWithItem("small_lapis_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(LAPIS_BLOCK), SpectrumClusterBlock.GrowthStage.SMALL)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock LARGE_LAPIS_BUD = register(cluster(blockWithItem("large_lapis_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_LAPIS_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock LAPIS_CLUSTER = register(cluster(blockWithItem("lapis_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_LAPIS_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock SMALL_COPPER_BUD = register(cluster(blockWithItem("small_copper_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(COPPER_BLOCK), SpectrumClusterBlock.GrowthStage.SMALL)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock LARGE_COPPER_BUD = register(cluster(blockWithItem("large_copper_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_COPPER_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock COPPER_CLUSTER = register(cluster(blockWithItem("copper_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_COPPER_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock SMALL_QUARTZ_BUD = register(cluster(blockWithItem("small_quartz_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(QUARTZ_BLOCK), SpectrumClusterBlock.GrowthStage.SMALL)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock LARGE_QUARTZ_BUD = register(cluster(blockWithItem("large_quartz_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_QUARTZ_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock QUARTZ_CLUSTER = register(cluster(blockWithItem("quartz_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_QUARTZ_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock SMALL_NETHERITE_SCRAP_BUD = register(cluster(blockWithItem("small_netherite_scrap_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(ANCIENT_DEBRIS), SpectrumClusterBlock.GrowthStage.SMALL), () -> IS.of().fireResistant()), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock LARGE_NETHERITE_SCRAP_BUD = register(cluster(blockWithItem("large_netherite_scrap_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_NETHERITE_SCRAP_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE), () -> IS.of().fireResistant()), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock NETHERITE_SCRAP_CLUSTER = register(cluster(blockWithItem("netherite_scrap_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_NETHERITE_SCRAP_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER), () -> IS.of().fireResistant()), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock SMALL_ECHO_BUD = register(cluster(blockWithItem("small_echo_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(SCULK), SpectrumClusterBlock.GrowthStage.SMALL)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock LARGE_ECHO_BUD = register(cluster(blockWithItem("large_echo_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_ECHO_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock ECHO_CLUSTER = register(cluster(blockWithItem("echo_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_ECHO_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock SMALL_GLOWSTONE_BUD = register(cluster(blockWithItem("small_glowstone_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(GLOWSTONE).lightLevel(state -> 4), SpectrumClusterBlock.GrowthStage.SMALL)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock LARGE_GLOWSTONE_BUD = register(cluster(blockWithItem("large_glowstone_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GLOWSTONE_BUD.get()).lightLevel(state -> 8), SpectrumClusterBlock.GrowthStage.LARGE)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock GLOWSTONE_CLUSTER = register(cluster(blockWithItem("glowstone_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_GLOWSTONE_BUD.get()).lightLevel(state -> 14), SpectrumClusterBlock.GrowthStage.CLUSTER)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock SMALL_PRISMARINE_BUD = register(cluster(blockWithItem("small_prismarine_bud", () -> new SpectrumClusterBlock(crystallarieumGrowable(SCULK), SpectrumClusterBlock.GrowthStage.SMALL)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock LARGE_PRISMARINE_BUD = register(cluster(blockWithItem("large_prismarine_bud", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_PRISMARINE_BUD.get()), SpectrumClusterBlock.GrowthStage.LARGE)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + public static final DeferredBlock PRISMARINE_CLUSTER = register(cluster(blockWithItem("prismarine_cluster", () -> new SpectrumClusterBlock(BlockBehaviour.Properties.ofFullCopy(SMALL_PRISMARINE_BUD.get()), SpectrumClusterBlock.GrowthStage.CLUSTER)), SpectrumModelTemplates.CRYSTALLARIEUM_FARMABLE)); + + public static final DeferredBlock PURE_COAL_BLOCK = register(simple(blockWithItem("pure_coal_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(COAL_BLOCK))))); + public static final DeferredBlock PURE_IRON_BLOCK = register(simple(blockWithItem("pure_iron_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(IRON_BLOCK))))); + public static final DeferredBlock PURE_GOLD_BLOCK = register(simple(blockWithItem("pure_gold_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(GOLD_BLOCK))))); + public static final DeferredBlock PURE_DIAMOND_BLOCK = register(simple(blockWithItem("pure_diamond_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(DIAMOND_BLOCK))))); + public static final DeferredBlock PURE_EMERALD_BLOCK = register(simple(blockWithItem("pure_emerald_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(EMERALD_BLOCK))))); + public static final DeferredBlock PURE_REDSTONE_BLOCK = register(simple(blockWithItem("pure_redstone_block", () -> new PureRedstoneBlock(BlockBehaviour.Properties.ofFullCopy(REDSTONE_BLOCK))))); + public static final DeferredBlock PURE_LAPIS_BLOCK = register(simple(blockWithItem("pure_lapis_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(LAPIS_BLOCK))))); + public static final DeferredBlock PURE_COPPER_BLOCK = register(simple(blockWithItem("pure_copper_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(COPPER_BLOCK))))); + public static final DeferredBlock PURE_QUARTZ_BLOCK = register(simple(blockWithItem("pure_quartz_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(QUARTZ_BLOCK))))); + public static final DeferredBlock PURE_GLOWSTONE_BLOCK = register(simple(blockWithItem("pure_glowstone_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(GLOWSTONE))))); + public static final DeferredBlock PURE_PRISMARINE_BLOCK = register(simple(blockWithItem("pure_prismarine_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PRISMARINE))))); + public static final DeferredBlock PURE_NETHERITE_SCRAP_BLOCK = register(simple(blockWithItem("pure_netherite_scrap_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(ANCIENT_DEBRIS)), () -> IS.of().fireResistant()))); + public static final DeferredBlock PURE_ECHO_BLOCK = register(simple(blockWithItem("pure_echo_block", () -> new Block(BlockBehaviour.Properties.ofFullCopy(DIAMOND_BLOCK))))); private static BlockBehaviour.Properties preservationBlock() { return settings(MapColor.CLAY, SoundType.STONE, -1.0F, 3600000.0F).instrument(NoteBlockInstrument.BASEDRUM).noLootTable().isValidSpawn(SpectrumBlocks::never).forceSolidOn(); } - public static final DeferredBlock PRESERVATION_CONTROLLER = register(singletonWithSoup(blockWithItem("preservation_controller", () -> new PreservationControllerBlock(preservationBlock().lightLevel(state -> 1).emissiveRendering(SpectrumBlocks::always).hasPostProcess(SpectrumBlocks::always)), InkColors.BLUE), ModelLocationUtils::getModelLocation).withPredefinedItemModel()); - public static final DeferredBlock DIKE_GATE = register(simple(blockWithItem("dike_gate", () -> new DikeGateBlock(preservationBlock().lightLevel(state -> 3).sound(SoundType.GLASS).noOcclusion().emissiveRendering(SpectrumBlocks::always).hasPostProcess(SpectrumBlocks::always).isRedstoneConductor(SpectrumBlocks::never).isSuffocating(SpectrumBlocks::never).isViewBlocking(SpectrumBlocks::never)), InkColors.BLUE))); - public static final DeferredBlock DREAM_GATE = register(simple(blockWithItem("dream_gate", () -> new DreamGateBlock(preservationBlock().lightLevel(state -> 3).sound(SoundType.GLASS).noOcclusion().emissiveRendering(SpectrumBlocks::always).hasPostProcess(SpectrumBlocks::always).isRedstoneConductor(SpectrumBlocks::never).isSuffocating(SpectrumBlocks::never).isViewBlocking(SpectrumBlocks::never)), InkColors.BLUE))); - public static final DeferredBlock INVISIBLE_WALL = register(singleton(blockWithItem("invisible_wall", () -> new InvisibleWallBlock(preservationBlock().lightLevel(state -> 3).sound(SoundType.GLASS).noOcclusion().isViewBlocking(SpectrumBlocks::never)), InkColors.BLUE), SpectrumTexturedModelProviders.particle(b -> Blocks.GLASS, "")).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerParentedItemModel(ctx, block, ETHEREAL_PLATFORM.get()))); - public static final DeferredBlock PRESERVATION_CHEST = register(singletonWithSoup(blockWithItem("preservation_chest", () -> new PreservationChestBlock(preservationBlock()), InkColors.BLUE), ModelLocationUtils::getModelLocation)); + public static final DeferredBlock PRESERVATION_CONTROLLER = register(singletonWithSoup(blockWithItem("preservation_controller", () -> new PreservationControllerBlock(preservationBlock().lightLevel(state -> 1).emissiveRendering(SpectrumBlocks::always).hasPostProcess(SpectrumBlocks::always))), ModelLocationUtils::getModelLocation).withPredefinedItemModel()); + public static final DeferredBlock DIKE_GATE = register(simple(blockWithItem("dike_gate", () -> new DikeGateBlock(preservationBlock().lightLevel(state -> 3).sound(SoundType.GLASS).noOcclusion().emissiveRendering(SpectrumBlocks::always).hasPostProcess(SpectrumBlocks::always).isRedstoneConductor(SpectrumBlocks::never).isSuffocating(SpectrumBlocks::never).isViewBlocking(SpectrumBlocks::never))))); + public static final DeferredBlock DREAM_GATE = register(simple(blockWithItem("dream_gate", () -> new DreamGateBlock(preservationBlock().lightLevel(state -> 3).sound(SoundType.GLASS).noOcclusion().emissiveRendering(SpectrumBlocks::always).hasPostProcess(SpectrumBlocks::always).isRedstoneConductor(SpectrumBlocks::never).isSuffocating(SpectrumBlocks::never).isViewBlocking(SpectrumBlocks::never))))); + public static final DeferredBlock INVISIBLE_WALL = register(singleton(blockWithItem("invisible_wall", () -> new InvisibleWallBlock(preservationBlock().lightLevel(state -> 3).sound(SoundType.GLASS).noOcclusion().isViewBlocking(SpectrumBlocks::never))), SpectrumTexturedModelProviders.particle(b -> Blocks.GLASS, "")).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerParentedItemModel(ctx, block, ETHEREAL_PLATFORM.get()))); + public static final DeferredBlock PRESERVATION_CHEST = register(singletonWithSoup(blockWithItem("preservation_chest", () -> new PreservationChestBlock(preservationBlock())), ModelLocationUtils::getModelLocation)); - public static final DeferredBlock DOWNSTONE = register(simple(blockWithItem("downstone", () -> new Block(preservationBlock()), InkColors.BLUE))); // "raw" preservation stone, used in the Deeper Down bottom in place of bedrock + public static final DeferredBlock DOWNSTONE = register(simple(blockWithItem("downstone", () -> new Block(preservationBlock())))); // "raw" preservation stone, used in the Deeper Down bottom in place of bedrock - public static final DeferredBlock PRESERVATION_STONE = register(blockWithItem("preservation_stone", () -> new Block(preservationBlock()), InkColors.BLUE).withBlockModel((ctx, block) -> { + public static final DeferredBlock PRESERVATION_STONE = register(blockWithItem("preservation_stone", () -> new Block(preservationBlock())).withBlockModel((ctx, block) -> { List modelIds = new ArrayList<>(); int[] tops = new int[]{0, 3, 1, 1, 2, 2, 0, 3, 1, 2, 3}; modelIds.add(SpectrumTexturedModelProviders.cubeBottomTop(b -> b, "", b -> b, "_top_" + tops[0], b -> b, "_bottom").create(block, ctx.modelOutput)); @@ -1728,70 +1730,70 @@ private static BlockBehaviour.Properties preservationBlock() { } return MultiVariantGenerator.multiVariant(block, variants.toArray(Variant[]::new)); })); - public static final DeferredBlock PRESERVATION_STAIRS = register(blockWithItem("preservation_stairs", () -> new StairBlock(PRESERVATION_STONE.get().defaultBlockState(), preservationBlock()), InkColors.BLUE)); - public static final DeferredBlock PRESERVATION_SLAB = register(blockWithItem("preservation_slab", () -> new SlabBlock(preservationBlock()), InkColors.BLUE)); - public static final DeferredBlock PRESERVATION_WALL = register(blockWithItem("preservation_wall", () -> new WallBlock(preservationBlock()), InkColors.BLUE)); + public static final DeferredBlock PRESERVATION_STAIRS = register(blockWithItem("preservation_stairs", () -> new StairBlock(PRESERVATION_STONE.get().defaultBlockState(), preservationBlock()))); + public static final DeferredBlock PRESERVATION_SLAB = register(blockWithItem("preservation_slab", () -> new SlabBlock(preservationBlock()))); + public static final DeferredBlock PRESERVATION_WALL = register(blockWithItem("preservation_wall", () -> new WallBlock(preservationBlock()))); - public static final DeferredBlock POWDER_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("powder_chiseled_preservation_stone", () -> new Block(preservationBlock().lightLevel(state -> 2)), InkColors.BLUE), SpectrumTexturedModelProviders.cubeColumn(b -> b, "", b -> PRESERVATION_STONE.get(), "_top_generic"))); - public static final DeferredBlock DIKE_CHISELED_PRESERVATION_STONE = register(simple(blockWithItem("dike_chiseled_preservation_stone", () -> new Block(preservationBlock().lightLevel(state -> 6)), InkColors.BLUE))); - public static final DeferredBlock DREAM_CHISELED_PRESERVATION_STONE = register(simple(blockWithItem("dream_chiseled_preservation_stone", () -> new Block(preservationBlock().lightLevel(state -> 6)), InkColors.BLUE))); - public static final DeferredBlock DEEP_LIGHT_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("deep_light_chiseled_preservation_stone", () -> new DeepLightBlock(preservationBlock().lightLevel(state -> 2)), InkColors.BLUE), SpectrumTexturedModelProviders.cubeColumn(b -> b, "", b -> PRESERVATION_STONE.get(), "_top_generic"))); + public static final DeferredBlock POWDER_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("powder_chiseled_preservation_stone", () -> new Block(preservationBlock().lightLevel(state -> 2))), SpectrumTexturedModelProviders.cubeColumn(b -> b, "", b -> PRESERVATION_STONE.get(), "_top_generic"))); + public static final DeferredBlock DIKE_CHISELED_PRESERVATION_STONE = register(simple(blockWithItem("dike_chiseled_preservation_stone", () -> new Block(preservationBlock().lightLevel(state -> 6))))); + public static final DeferredBlock DREAM_CHISELED_PRESERVATION_STONE = register(simple(blockWithItem("dream_chiseled_preservation_stone", () -> new Block(preservationBlock().lightLevel(state -> 6))))); + public static final DeferredBlock DEEP_LIGHT_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("deep_light_chiseled_preservation_stone", () -> new DeepLightBlock(preservationBlock().lightLevel(state -> 2))), SpectrumTexturedModelProviders.cubeColumn(b -> b, "", b -> PRESERVATION_STONE.get(), "_top_generic"))); - public static final DeferredBlock PRESERVATION_ITEM_BOWL = register(singleton(blockWithItem("preservation_item_bowl", () -> new PreservationItemBowlBlock(preservationBlock().noOcclusion().isRedstoneConductor(SpectrumBlocks::never).isSuffocating(SpectrumBlocks::never).isViewBlocking(SpectrumBlocks::never)), InkColors.BLUE), TexturedModel.createDefault(b -> new TextureMapping().put(TextureSlot.TEXTURE, SpectrumCommon.locate("block/preservation_item_bowl")).put(TextureSlot.SIDE, SpectrumCommon.locate("block/preservation_bricks")).put(SpectrumTextureSlots.BASE, SpectrumCommon.locate("block/preservation_stone_top_0")), SpectrumModelTemplates.BOWL))); - public static final DeferredBlock DIKE_GATE_FOUNTAIN = register(defaultUpFacing(blockWithItem("dike_gate_fountain", () -> new SpectrumFacingBlock(preservationBlock()), InkColors.BLUE), SpectrumTexturedModelProviders.cubeBottomTopParticle(b -> b, "_side", b -> b, "_top", b -> PRESERVATION_STONE.get(), "", b -> PRESERVATION_STONE.get(), ""))); - public static final DeferredBlock PRESERVATION_BRICKS = register(simple(blockWithItem("preservation_bricks", () -> new Block(preservationBlock()), InkColors.BLUE))); - public static final DeferredBlock SHIMMERING_PRESERVATION_BRICKS = register(blockWithItem("shimmering_preservation_bricks", () -> new Block(preservationBlock().lightLevel(s -> 5)), InkColors.BLUE).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block, createModelVariant(TexturedModel.CUBE.create(block, ctx.modelOutput)), createModelVariant(SpectrumTexturedModelProviders.cubeAll(b -> b, "_fast").createWithSuffix(block, "_fast", ctx.modelOutput)), createModelVariant(SpectrumTexturedModelProviders.cubeAll(b -> b, "_slow").createWithSuffix(block, "_slow", ctx.modelOutput))))); + public static final DeferredBlock PRESERVATION_ITEM_BOWL = register(singleton(blockWithItem("preservation_item_bowl", () -> new PreservationItemBowlBlock(preservationBlock().noOcclusion().isRedstoneConductor(SpectrumBlocks::never).isSuffocating(SpectrumBlocks::never).isViewBlocking(SpectrumBlocks::never))), TexturedModel.createDefault(b -> new TextureMapping().put(TextureSlot.TEXTURE, SpectrumCommon.locate("block/preservation_item_bowl")).put(TextureSlot.SIDE, SpectrumCommon.locate("block/preservation_bricks")).put(SpectrumTextureSlots.BASE, SpectrumCommon.locate("block/preservation_stone_top_0")), SpectrumModelTemplates.BOWL))); + public static final DeferredBlock DIKE_GATE_FOUNTAIN = register(defaultUpFacing(blockWithItem("dike_gate_fountain", () -> new SpectrumFacingBlock(preservationBlock())), SpectrumTexturedModelProviders.cubeBottomTopParticle(b -> b, "_side", b -> b, "_top", b -> PRESERVATION_STONE.get(), "", b -> PRESERVATION_STONE.get(), ""))); + public static final DeferredBlock PRESERVATION_BRICKS = register(simple(blockWithItem("preservation_bricks", () -> new Block(preservationBlock())))); + public static final DeferredBlock SHIMMERING_PRESERVATION_BRICKS = register(blockWithItem("shimmering_preservation_bricks", () -> new Block(preservationBlock().lightLevel(s -> 5))).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block, createModelVariant(TexturedModel.CUBE.create(block, ctx.modelOutput)), createModelVariant(SpectrumTexturedModelProviders.cubeAll(b -> b, "_fast").createWithSuffix(block, "_fast", ctx.modelOutput)), createModelVariant(SpectrumTexturedModelProviders.cubeAll(b -> b, "_slow").createWithSuffix(block, "_slow", ctx.modelOutput))))); - public static final DeferredBlock COURIER_STATUE = register(blockWithItem("courier_statue", () -> new StatueBlock(preservationBlock()), InkColors.BLUE).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerParentedItemModel(ctx, block, block, "_top")).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(SpectrumModelHelper.createNorthDefaultHorizontalFacingVariantMap()).with(PropertyDispatch.property(StatueBlock.HALF).select(DoubleBlockHalf.LOWER, SpectrumModelHelper.createModelVariant(block, "_bottom")).select(DoubleBlockHalf.UPPER, SpectrumModelHelper.createModelVariant(block, "_top"))))); + public static final DeferredBlock COURIER_STATUE = register(blockWithItem("courier_statue", () -> new StatueBlock(preservationBlock())).withBlockItemModel((ctx, block) -> SpectrumModelHelper.registerParentedItemModel(ctx, block, block, "_top")).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block).with(SpectrumModelHelper.createNorthDefaultHorizontalFacingVariantMap()).with(PropertyDispatch.property(StatueBlock.HALF).select(DoubleBlockHalf.LOWER, SpectrumModelHelper.createModelVariant(block, "_bottom")).select(DoubleBlockHalf.UPPER, SpectrumModelHelper.createModelVariant(block, "_top"))))); public static final DeferredBlock MANXI = register(singletonWithSoup(block("manxi", () -> new ManxiBlock(preservationBlock().noOcclusion().noCollission().noLootTable())), b -> SpectrumModelTemplates.MOB_HEAD)); - public static final DeferredBlock BLACK_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("black_chiseled_preservation_stone", () -> new Block(preservationBlock()), InkColors.BLACK), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock BLUE_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("blue_chiseled_preservation_stone", () -> new Block(preservationBlock()), InkColors.BLUE), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock BROWN_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("brown_chiseled_preservation_stone", () -> new Block(preservationBlock()), InkColors.BROWN), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock CYAN_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("cyan_chiseled_preservation_stone", () -> new Block(preservationBlock()), InkColors.CYAN), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock GRAY_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("gray_chiseled_preservation_stone", () -> new Block(preservationBlock()), InkColors.GRAY), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock GREEN_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("green_chiseled_preservation_stone", () -> new Block(preservationBlock()), InkColors.GREEN), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock LIGHT_BLUE_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("light_blue_chiseled_preservation_stone", () -> new Block(preservationBlock()), InkColors.LIGHT_BLUE), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock LIGHT_GRAY_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("light_gray_chiseled_preservation_stone", () -> new Block(preservationBlock()), InkColors.LIGHT_GRAY), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock LIME_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("lime_chiseled_preservation_stone", () -> new Block(preservationBlock()), InkColors.LIME), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock MAGENTA_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("magenta_chiseled_preservation_stone", () -> new Block(preservationBlock()), InkColors.MAGENTA), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock ORANGE_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("orange_chiseled_preservation_stone", () -> new Block(preservationBlock()), InkColors.ORANGE), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock PINK_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("pink_chiseled_preservation_stone", () -> new Block(preservationBlock()), InkColors.PINK), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock PURPLE_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("purple_chiseled_preservation_stone", () -> new Block(preservationBlock()), InkColors.PURPLE), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock RED_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("red_chiseled_preservation_stone", () -> new Block(preservationBlock()), InkColors.RED), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock WHITE_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("white_chiseled_preservation_stone", () -> new Block(preservationBlock()), InkColors.WHITE), TexturedModel.COLUMN_ALT)); - public static final DeferredBlock YELLOW_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("yellow_chiseled_preservation_stone", () -> new Block(preservationBlock()), InkColors.YELLOW), TexturedModel.COLUMN_ALT)); - - public static final DeferredBlock PRESERVATION_GLASS = register(simple(blockWithItem("preservation_glass", () -> new TransparentBlock(preservationBlock().sound(SoundType.GLASS).noOcclusion().isRedstoneConductor(SpectrumBlocks::never).isSuffocating(SpectrumBlocks::never).isViewBlocking(SpectrumBlocks::never)), InkColors.BLUE))); - public static final DeferredBlock TINTED_PRESERVATION_GLASS = register(simple(blockWithItem("tinted_preservation_glass", () -> new TintedGlassBlock(BlockBehaviour.Properties.ofFullCopy(PRESERVATION_GLASS.get())), InkColors.BLUE))); - public static final DeferredBlock PRESERVATION_ROUNDEL = register(singleton(blockWithItem("preservation_roundel", () -> new PreservationRoundelBlock(preservationBlock().noOcclusion().forceSolidOn()), InkColors.BLUE), SpectrumTexturedModelProviders.ROUNDEL)); - public static final DeferredBlock PRESERVATION_BLOCK_DETECTOR = register(blockWithItem("preservation_block_detector", () -> new PreservationBlockDetectorBlock(preservationBlock()), InkColors.BLUE).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block, SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.complexOrientable(b -> b, "_side", b -> b, "_top", b -> PRESERVATION_STONE.get(), "_top_generic", b -> b, "_front", b -> b, "_back", b -> b, "_side").create(block, ctx.modelOutput))).with(SpectrumModelHelper.createNorthDefaultFacingVariantMap()))); + public static final DeferredBlock BLACK_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("black_chiseled_preservation_stone", () -> new Block(preservationBlock())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock BLUE_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("blue_chiseled_preservation_stone", () -> new Block(preservationBlock())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock BROWN_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("brown_chiseled_preservation_stone", () -> new Block(preservationBlock())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock CYAN_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("cyan_chiseled_preservation_stone", () -> new Block(preservationBlock())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock GRAY_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("gray_chiseled_preservation_stone", () -> new Block(preservationBlock())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock GREEN_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("green_chiseled_preservation_stone", () -> new Block(preservationBlock())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock LIGHT_BLUE_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("light_blue_chiseled_preservation_stone", () -> new Block(preservationBlock())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock LIGHT_GRAY_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("light_gray_chiseled_preservation_stone", () -> new Block(preservationBlock())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock LIME_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("lime_chiseled_preservation_stone", () -> new Block(preservationBlock())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock MAGENTA_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("magenta_chiseled_preservation_stone", () -> new Block(preservationBlock())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock ORANGE_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("orange_chiseled_preservation_stone", () -> new Block(preservationBlock())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock PINK_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("pink_chiseled_preservation_stone", () -> new Block(preservationBlock())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock PURPLE_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("purple_chiseled_preservation_stone", () -> new Block(preservationBlock())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock RED_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("red_chiseled_preservation_stone", () -> new Block(preservationBlock())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock WHITE_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("white_chiseled_preservation_stone", () -> new Block(preservationBlock())), TexturedModel.COLUMN_ALT)); + public static final DeferredBlock YELLOW_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("yellow_chiseled_preservation_stone", () -> new Block(preservationBlock())), TexturedModel.COLUMN_ALT)); + + public static final DeferredBlock PRESERVATION_GLASS = register(simple(blockWithItem("preservation_glass", () -> new TransparentBlock(preservationBlock().sound(SoundType.GLASS).noOcclusion().isRedstoneConductor(SpectrumBlocks::never).isSuffocating(SpectrumBlocks::never).isViewBlocking(SpectrumBlocks::never))))); + public static final DeferredBlock TINTED_PRESERVATION_GLASS = register(simple(blockWithItem("tinted_preservation_glass", () -> new TintedGlassBlock(BlockBehaviour.Properties.ofFullCopy(PRESERVATION_GLASS.get()))))); + public static final DeferredBlock PRESERVATION_ROUNDEL = register(singleton(blockWithItem("preservation_roundel", () -> new PreservationRoundelBlock(preservationBlock().noOcclusion().forceSolidOn())), SpectrumTexturedModelProviders.ROUNDEL)); + public static final DeferredBlock PRESERVATION_BLOCK_DETECTOR = register(blockWithItem("preservation_block_detector", () -> new PreservationBlockDetectorBlock(preservationBlock())).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block, SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.complexOrientable(b -> b, "_side", b -> b, "_top", b -> PRESERVATION_STONE.get(), "_top_generic", b -> b, "_front", b -> b, "_back", b -> b, "_side").create(block, ctx.modelOutput))).with(SpectrumModelHelper.createNorthDefaultFacingVariantMap()))); private static BlockBehaviour.Properties shootingStar() { return BlockBehaviour.Properties.ofFullCopy(STONE).noOcclusion(); } - public static final DeferredBlock GLISTERING_SHOOTING_STAR = register(singleton(blockWithItem("glistering_shooting_star", () -> new ShootingStarBlock(shootingStar(), ShootingStar.Variant.GLISTERING), block -> new ShootingStarItem(block, IS.of(1, Rarity.UNCOMMON)), InkColors.PURPLE), SpectrumTexturedModelProviders.SHOOTING_STAR)); - public static final DeferredBlock FIERY_SHOOTING_STAR = register(singleton(blockWithItem("fiery_shooting_star", () -> new ShootingStarBlock(shootingStar(), ShootingStar.Variant.FIERY), block -> new ShootingStarItem(block, IS.of(1, Rarity.UNCOMMON)), InkColors.PURPLE), SpectrumTexturedModelProviders.SHOOTING_STAR)); - public static final DeferredBlock COLORFUL_SHOOTING_STAR = register(singleton(blockWithItem("colorful_shooting_star", () -> new ShootingStarBlock(shootingStar(), ShootingStar.Variant.COLORFUL), block -> new ShootingStarItem(block, IS.of(1, Rarity.UNCOMMON)), InkColors.PURPLE), SpectrumTexturedModelProviders.SHOOTING_STAR)); - public static final DeferredBlock PRISTINE_SHOOTING_STAR = register(singleton(blockWithItem("pristine_shooting_star", () -> new ShootingStarBlock(shootingStar(), ShootingStar.Variant.PRISTINE), block -> new ShootingStarItem(block, IS.of(1, Rarity.UNCOMMON)), InkColors.PURPLE), SpectrumTexturedModelProviders.SHOOTING_STAR)); - public static final DeferredBlock GEMSTONE_SHOOTING_STAR = register(singleton(blockWithItem("gemstone_shooting_star", () -> new ShootingStarBlock(shootingStar(), ShootingStar.Variant.GEMSTONE), block -> new ShootingStarItem(block, IS.of(1, Rarity.UNCOMMON)), InkColors.PURPLE), SpectrumTexturedModelProviders.SHOOTING_STAR)); - public static final DeferredBlock STARDUST_BLOCK = register(blockWithItem("stardust_block", () -> new ColoredFallingBlock(new ColorRGBA(DyeColor.PURPLE.getFireworkColor()), BlockBehaviour.Properties.ofFullCopy(Blocks.SAND).mapColor(MapColor.COLOR_PURPLE)), () -> IS.of(Rarity.UNCOMMON), InkColors.BLACK)); + public static final DeferredBlock GLISTERING_SHOOTING_STAR = register(singleton(blockWithItem("glistering_shooting_star", () -> new ShootingStarBlock(shootingStar(), ShootingStar.Variant.GLISTERING), block -> new ShootingStarItem(block, IS.of(1, Rarity.UNCOMMON))), SpectrumTexturedModelProviders.SHOOTING_STAR)); + public static final DeferredBlock FIERY_SHOOTING_STAR = register(singleton(blockWithItem("fiery_shooting_star", () -> new ShootingStarBlock(shootingStar(), ShootingStar.Variant.FIERY), block -> new ShootingStarItem(block, IS.of(1, Rarity.UNCOMMON))), SpectrumTexturedModelProviders.SHOOTING_STAR)); + public static final DeferredBlock COLORFUL_SHOOTING_STAR = register(singleton(blockWithItem("colorful_shooting_star", () -> new ShootingStarBlock(shootingStar(), ShootingStar.Variant.COLORFUL), block -> new ShootingStarItem(block, IS.of(1, Rarity.UNCOMMON))), SpectrumTexturedModelProviders.SHOOTING_STAR)); + public static final DeferredBlock PRISTINE_SHOOTING_STAR = register(singleton(blockWithItem("pristine_shooting_star", () -> new ShootingStarBlock(shootingStar(), ShootingStar.Variant.PRISTINE), block -> new ShootingStarItem(block, IS.of(1, Rarity.UNCOMMON))), SpectrumTexturedModelProviders.SHOOTING_STAR)); + public static final DeferredBlock GEMSTONE_SHOOTING_STAR = register(singleton(blockWithItem("gemstone_shooting_star", () -> new ShootingStarBlock(shootingStar(), ShootingStar.Variant.GEMSTONE), block -> new ShootingStarItem(block, IS.of(1, Rarity.UNCOMMON))), SpectrumTexturedModelProviders.SHOOTING_STAR)); + public static final DeferredBlock STARDUST_BLOCK = register(blockWithItem("stardust_block", () -> new ColoredFallingBlock(new ColorRGBA(DyeColor.PURPLE.getFireworkColor()), BlockBehaviour.Properties.ofFullCopy(Blocks.SAND).mapColor(MapColor.COLOR_PURPLE)), () -> IS.of(Rarity.UNCOMMON))); - public static final DeferredBlock INCANDESCENT_AMALGAM = register(singletonWithSoup(blockWithItem("incandescent_amalgam", () -> new IncandescentAmalgamBlock(BlockBehaviour.Properties.of().instabreak().noOcclusion()), block -> new IncandescentAmalgamItem(block, IS.of().food(SpectrumFoodComponents.INCANDESCENT_AMALGAM)), InkColors.RED), ModelLocationUtils::getModelLocation).withBlockItemModel(SpectrumModelHelper::registerBlockTexturedItemModel)); + public static final DeferredBlock INCANDESCENT_AMALGAM = register(singletonWithSoup(blockWithItem("incandescent_amalgam", () -> new IncandescentAmalgamBlock(BlockBehaviour.Properties.of().instabreak().noOcclusion()), block -> new IncandescentAmalgamItem(block, IS.of().food(SpectrumFoodComponents.INCANDESCENT_AMALGAM))), ModelLocationUtils::getModelLocation).withBlockItemModel(SpectrumModelHelper::registerBlockTexturedItemModel)); private static BlockBehaviour.Properties idol(SoundType soundGroup) { return settings(MapColor.TERRACOTTA_WHITE, soundGroup, 3.0F).requiresCorrectToolForDrops().noOcclusion(); } - public static final DeferredBlock AXOLOTL_IDOL = register(idol(blockWithItem("axolotl_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.AXOLOTL_IDOL), ParticleTypes.HEART, MobEffects.REGENERATION, 0, 100), InkColors.PINK))); // heals 2 hp / 1 hear - public static final DeferredBlock BAT_IDOL = register(idol(blockWithItem("bat_idol", () -> new AoEStatusEffectIdolBlock(idol(SpectrumSoundTypes.BAT_IDOL), ParticleTypes.INSTANT_EFFECT, MobEffects.GLOWING, 0, 200, 8), InkColors.PINK))); - public static final DeferredBlock BEE_IDOL = register(idol(blockWithItem("bee_idol", () -> new BonemealingIdolBlock(idol(SpectrumSoundTypes.BEE_IDOL), ParticleTypes.DRIPPING_HONEY), InkColors.PINK))); - public static final DeferredBlock BLAZE_IDOL = register(idol(blockWithItem("blaze_idol", () -> new FirestarterIdolBlock(idol(SpectrumSoundTypes.BLAZE_IDOL), ParticleTypes.FLAME), InkColors.PINK))); - public static final DeferredBlock CAT_IDOL = register(idol(blockWithItem("cat_idol", () -> new FallDamageNegatingIdolBlock(idol(SpectrumSoundTypes.CAT_IDOL), ParticleTypes.ENCHANTED_HIT), InkColors.PINK))); - public static final DeferredBlock CHICKEN_IDOL = register(idol(blockWithItem("chicken_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.CHICKEN_IDOL), ParticleTypes.ENCHANTED_HIT, MobEffects.SLOW_FALLING, 0, 100), InkColors.PINK))); - public static final DeferredBlock COW_IDOL = register(idol(blockWithItem("cow_idol", () -> new MilkingIdolBlock(idol(SpectrumSoundTypes.COW_IDOL), ParticleTypes.ENCHANTED_HIT, 6), InkColors.PINK))); - public static final DeferredBlock CREEPER_IDOL = register(idol(blockWithItem("creeper_idol", () -> new ExplosionIdolBlock(idol(SpectrumSoundTypes.CREEPER_IDOL), ParticleTypes.EXPLOSION, 3, false, Explosion.BlockInteraction.DESTROY), InkColors.PINK))); + public static final DeferredBlock AXOLOTL_IDOL = register(idol(blockWithItem("axolotl_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.AXOLOTL_IDOL), ParticleTypes.HEART, MobEffects.REGENERATION, 0, 100)))); // heals 2 hp / 1 hear + public static final DeferredBlock BAT_IDOL = register(idol(blockWithItem("bat_idol", () -> new AoEStatusEffectIdolBlock(idol(SpectrumSoundTypes.BAT_IDOL), ParticleTypes.INSTANT_EFFECT, MobEffects.GLOWING, 0, 200, 8)))); + public static final DeferredBlock BEE_IDOL = register(idol(blockWithItem("bee_idol", () -> new BonemealingIdolBlock(idol(SpectrumSoundTypes.BEE_IDOL), ParticleTypes.DRIPPING_HONEY)))); + public static final DeferredBlock BLAZE_IDOL = register(idol(blockWithItem("blaze_idol", () -> new FirestarterIdolBlock(idol(SpectrumSoundTypes.BLAZE_IDOL), ParticleTypes.FLAME)))); + public static final DeferredBlock CAT_IDOL = register(idol(blockWithItem("cat_idol", () -> new FallDamageNegatingIdolBlock(idol(SpectrumSoundTypes.CAT_IDOL), ParticleTypes.ENCHANTED_HIT)))); + public static final DeferredBlock CHICKEN_IDOL = register(idol(blockWithItem("chicken_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.CHICKEN_IDOL), ParticleTypes.ENCHANTED_HIT, MobEffects.SLOW_FALLING, 0, 100)))); + public static final DeferredBlock COW_IDOL = register(idol(blockWithItem("cow_idol", () -> new MilkingIdolBlock(idol(SpectrumSoundTypes.COW_IDOL), ParticleTypes.ENCHANTED_HIT, 6)))); + public static final DeferredBlock CREEPER_IDOL = register(idol(blockWithItem("creeper_idol", () -> new ExplosionIdolBlock(idol(SpectrumSoundTypes.CREEPER_IDOL), ParticleTypes.EXPLOSION, 3, false, Explosion.BlockInteraction.DESTROY)))); public static final DeferredBlock ENDER_DRAGON_IDOL = register(idol(blockWithItem("ender_dragon_idol", () -> new ProjectileIdolBlock(idol(SpectrumSoundTypes.ENDER_DRAGON_IDOL), ParticleTypes.DRAGON_BREATH, EntityType.DRAGON_FIREBALL, SoundEvents.ENDER_DRAGON_SHOOT, 6.0F, 1.1F) { @Override public Projectile createProjectile(ServerLevel world, BlockPos mobBlockPos, Position position, Direction side) { @@ -1806,17 +1808,17 @@ public Projectile createProjectile(ServerLevel world, BlockPos mobBlockPos, Posi markerEntity.discard(); return entity; } - }, InkColors.PINK))); - public static final DeferredBlock ENDERMAN_IDOL = register(idol(blockWithItem("enderman_idol", () -> new RandomTeleportingIdolBlock(idol(SpectrumSoundTypes.ENDERMAN_IDOL), ParticleTypes.REVERSE_PORTAL, 16, 16), InkColors.PINK))); - public static final DeferredBlock ENDERMITE_IDOL = register(idol(blockWithItem("endermite_idol", () -> new LineTeleportingIdolBlock(idol(SpectrumSoundTypes.ENDERMITE_IDOL), ParticleTypes.REVERSE_PORTAL, 16), InkColors.PINK))); + }))); + public static final DeferredBlock ENDERMAN_IDOL = register(idol(blockWithItem("enderman_idol", () -> new RandomTeleportingIdolBlock(idol(SpectrumSoundTypes.ENDERMAN_IDOL), ParticleTypes.REVERSE_PORTAL, 16, 16)))); + public static final DeferredBlock ENDERMITE_IDOL = register(idol(blockWithItem("endermite_idol", () -> new LineTeleportingIdolBlock(idol(SpectrumSoundTypes.ENDERMITE_IDOL), ParticleTypes.REVERSE_PORTAL, 16)))); public static final DeferredBlock EVOKER_IDOL = register(idol(blockWithItem("evoker_idol", () -> new EntitySummoningIdolBlock(idol(SpectrumSoundTypes.EVOKER_IDOL), ParticleTypes.ANGRY_VILLAGER, EntityType.VEX) { @Override public void afterSummon(ServerLevel world, Entity entity) { ((Vex) entity).setLimitedLife(20 * (30 + world.getRandom().nextInt(90))); } - }, InkColors.PINK))); - public static final DeferredBlock FISH_IDOL = register(idol(blockWithItem("fish_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.FISH_IDOL), ParticleTypes.SPLASH, MobEffects.WATER_BREATHING, 0, 200), InkColors.PINK))); - public static final DeferredBlock FOX_IDOL = register(idol(blockWithItem("fox_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.FOX_IDOL), ParticleTypes.ENCHANTED_HIT, MobEffects.DIG_SPEED, 0, 200), InkColors.PINK))); + }))); + public static final DeferredBlock FISH_IDOL = register(idol(blockWithItem("fish_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.FISH_IDOL), ParticleTypes.SPLASH, MobEffects.WATER_BREATHING, 0, 200)))); + public static final DeferredBlock FOX_IDOL = register(idol(blockWithItem("fox_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.FOX_IDOL), ParticleTypes.ENCHANTED_HIT, MobEffects.DIG_SPEED, 0, 200)))); public static final DeferredBlock GHAST_IDOL = register(idol(blockWithItem("ghast_idol", () -> new ProjectileIdolBlock(idol(SpectrumSoundTypes.GHAST_IDOL), ParticleTypes.SMOKE, EntityType.FIREBALL, SoundEvents.GHAST_SHOOT, 6.0F, 1.1F) { @Override public Projectile createProjectile(ServerLevel world, BlockPos mobBlockPos, Position position, Direction side) { @@ -1831,23 +1833,23 @@ public Projectile createProjectile(ServerLevel world, BlockPos mobBlockPos, Posi markerEntity.discard(); return entity; } - }, InkColors.PINK))); - public static final DeferredBlock GLOW_SQUID_IDOL = register(idol(blockWithItem("glow_squid_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.GLOW_SQUID_IDOL), ParticleTypes.GLOW_SQUID_INK, MobEffects.GLOWING, 0, 200), InkColors.PINK))); - public static final DeferredBlock GOAT_IDOL = register(idol(blockWithItem("goat_idol", () -> new KnockbackIdolBlock(idol(SpectrumSoundTypes.GOAT_IDOL), ParticleTypes.ENCHANTED_HIT, 5.0F, 0.5F), InkColors.PINK))); // knocks mostly sideways - public static final DeferredBlock GUARDIAN_IDOL = register(idol(blockWithItem("guardian_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.GUARDIAN_IDOL), ParticleTypes.BUBBLE, MobEffects.DIG_SLOWDOWN, 2, 200), InkColors.PINK))); - public static final DeferredBlock HORSE_IDOL = register(idol(blockWithItem("horse_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.HORSE_IDOL), ParticleTypes.INSTANT_EFFECT, MobEffects.DAMAGE_BOOST, 0, 100), InkColors.PINK))); - public static final DeferredBlock ILLUSIONER_IDOL = register(idol(blockWithItem("illusioner_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.ILLUSIONER_IDOL), ParticleTypes.ANGRY_VILLAGER, MobEffects.INVISIBILITY, 0, 100), InkColors.PINK))); - public static final DeferredBlock OCELOT_IDOL = register(idol(blockWithItem("ocelot_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.OCELOT_IDOL), ParticleTypes.INSTANT_EFFECT, MobEffects.NIGHT_VISION, 0, 100), InkColors.PINK))); - public static final DeferredBlock PARROT_IDOL = register(idol(blockWithItem("parrot_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.PARROT_IDOL), ParticleTypes.INSTANT_EFFECT, MobEffects.ABSORPTION, 0, 100), InkColors.PINK))); - public static final DeferredBlock PHANTOM_IDOL = register(idol(blockWithItem("phantom_idol", () -> new InsomniaIdolBlock(idol(SpectrumSoundTypes.PHANTOM_IDOL), ParticleTypes.POOF, 24000), InkColors.PINK))); // +1 ingame day without sleep - public static final DeferredBlock PIG_IDOL = register(idol(blockWithItem("pig_idol", () -> new FeedingIdolBlock(idol(SpectrumSoundTypes.PIG_IDOL), ParticleTypes.INSTANT_EFFECT, 6), InkColors.PINK))); - public static final DeferredBlock PIGLIN_IDOL = register(idol(blockWithItem("piglin_idol", () -> new PiglinTradeIdolBlock(idol(SpectrumSoundTypes.PIGLIN_IDOL), ParticleTypes.HEART), InkColors.PINK))); - public static final DeferredBlock POLAR_BEAR_IDOL = register(idol(blockWithItem("polar_bear_idol", () -> new FreezingIdolBlock(idol(SpectrumSoundTypes.POLAR_BEAR_IDOL), ParticleTypes.SNOWFLAKE), InkColors.PINK))); - public static final DeferredBlock PUFFERFISH_IDOL = register(idol(blockWithItem("pufferfish_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.PUFFERFISH_IDOL), ParticleTypes.SPLASH, MobEffects.CONFUSION, 0, 200), InkColors.PINK))); - public static final DeferredBlock RABBIT_IDOL = register(idol(blockWithItem("rabbit_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.RABBIT_IDOL), ParticleTypes.INSTANT_EFFECT, MobEffects.JUMP, 3, 100), InkColors.PINK))); - public static final DeferredBlock SHEEP_IDOL = register(idol(blockWithItem("sheep_idol", () -> new ShearingIdolBlock(idol(SpectrumSoundTypes.SHEEP_IDOL), ParticleTypes.ENCHANTED_HIT, 6), InkColors.PINK))); - public static final DeferredBlock SHULKER_IDOL = register(idol(blockWithItem("shulker_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.SHULKER_IDOL), ParticleTypes.END_ROD, MobEffects.LEVITATION, 0, 100), InkColors.PINK))); - public static final DeferredBlock SILVERFISH_IDOL = register(idol(blockWithItem("silverfish_idol", () -> new SilverfishInsertingIdolBlock(idol(SpectrumSoundTypes.SILVERFISH_IDOL), ParticleTypes.EXPLOSION), InkColors.PINK))); + }))); + public static final DeferredBlock GLOW_SQUID_IDOL = register(idol(blockWithItem("glow_squid_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.GLOW_SQUID_IDOL), ParticleTypes.GLOW_SQUID_INK, MobEffects.GLOWING, 0, 200)))); + public static final DeferredBlock GOAT_IDOL = register(idol(blockWithItem("goat_idol", () -> new KnockbackIdolBlock(idol(SpectrumSoundTypes.GOAT_IDOL), ParticleTypes.ENCHANTED_HIT, 5.0F, 0.5F)))); // knocks mostly sideways + public static final DeferredBlock GUARDIAN_IDOL = register(idol(blockWithItem("guardian_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.GUARDIAN_IDOL), ParticleTypes.BUBBLE, MobEffects.DIG_SLOWDOWN, 2, 200)))); + public static final DeferredBlock HORSE_IDOL = register(idol(blockWithItem("horse_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.HORSE_IDOL), ParticleTypes.INSTANT_EFFECT, MobEffects.DAMAGE_BOOST, 0, 100)))); + public static final DeferredBlock ILLUSIONER_IDOL = register(idol(blockWithItem("illusioner_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.ILLUSIONER_IDOL), ParticleTypes.ANGRY_VILLAGER, MobEffects.INVISIBILITY, 0, 100)))); + public static final DeferredBlock OCELOT_IDOL = register(idol(blockWithItem("ocelot_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.OCELOT_IDOL), ParticleTypes.INSTANT_EFFECT, MobEffects.NIGHT_VISION, 0, 100)))); + public static final DeferredBlock PARROT_IDOL = register(idol(blockWithItem("parrot_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.PARROT_IDOL), ParticleTypes.INSTANT_EFFECT, MobEffects.ABSORPTION, 0, 100)))); + public static final DeferredBlock PHANTOM_IDOL = register(idol(blockWithItem("phantom_idol", () -> new InsomniaIdolBlock(idol(SpectrumSoundTypes.PHANTOM_IDOL), ParticleTypes.POOF, 24000)))); // +1 ingame day without sleep + public static final DeferredBlock PIG_IDOL = register(idol(blockWithItem("pig_idol", () -> new FeedingIdolBlock(idol(SpectrumSoundTypes.PIG_IDOL), ParticleTypes.INSTANT_EFFECT, 6)))); + public static final DeferredBlock PIGLIN_IDOL = register(idol(blockWithItem("piglin_idol", () -> new PiglinTradeIdolBlock(idol(SpectrumSoundTypes.PIGLIN_IDOL), ParticleTypes.HEART)))); + public static final DeferredBlock POLAR_BEAR_IDOL = register(idol(blockWithItem("polar_bear_idol", () -> new FreezingIdolBlock(idol(SpectrumSoundTypes.POLAR_BEAR_IDOL), ParticleTypes.SNOWFLAKE)))); + public static final DeferredBlock PUFFERFISH_IDOL = register(idol(blockWithItem("pufferfish_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.PUFFERFISH_IDOL), ParticleTypes.SPLASH, MobEffects.CONFUSION, 0, 200)))); + public static final DeferredBlock RABBIT_IDOL = register(idol(blockWithItem("rabbit_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.RABBIT_IDOL), ParticleTypes.INSTANT_EFFECT, MobEffects.JUMP, 3, 100)))); + public static final DeferredBlock SHEEP_IDOL = register(idol(blockWithItem("sheep_idol", () -> new ShearingIdolBlock(idol(SpectrumSoundTypes.SHEEP_IDOL), ParticleTypes.ENCHANTED_HIT, 6)))); + public static final DeferredBlock SHULKER_IDOL = register(idol(blockWithItem("shulker_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.SHULKER_IDOL), ParticleTypes.END_ROD, MobEffects.LEVITATION, 0, 100)))); + public static final DeferredBlock SILVERFISH_IDOL = register(idol(blockWithItem("silverfish_idol", () -> new SilverfishInsertingIdolBlock(idol(SpectrumSoundTypes.SILVERFISH_IDOL), ParticleTypes.EXPLOSION)))); public static final DeferredBlock SKELETON_IDOL = register(idol(blockWithItem("skeleton_idol", () -> new ProjectileIdolBlock(idol(SpectrumSoundTypes.SKELETON_IDOL), ParticleTypes.INSTANT_EFFECT, EntityType.ARROW, SoundEvents.ARROW_SHOOT, 6.0F, 1.1F) { @Override public Projectile createProjectile(ServerLevel world, BlockPos mobBlockPos, Position position, Direction side) { @@ -1855,24 +1857,24 @@ public Projectile createProjectile(ServerLevel world, BlockPos mobBlockPos, Posi arrowEntity.pickup = AbstractArrow.Pickup.DISALLOWED; return arrowEntity; } - }, InkColors.PINK))); - public static final DeferredBlock SLIME_IDOL = register(idol(blockWithItem("slime_idol", () -> new SlimeSizingIdolBlock(idol(SpectrumSoundTypes.SLIME_IDOL), ParticleTypes.ITEM_SLIME, 6, 8), InkColors.PINK))); + }))); + public static final DeferredBlock SLIME_IDOL = register(idol(blockWithItem("slime_idol", () -> new SlimeSizingIdolBlock(idol(SpectrumSoundTypes.SLIME_IDOL), ParticleTypes.ITEM_SLIME, 6, 8)))); public static final DeferredBlock SNOW_GOLEM_IDOL = register(idol(blockWithItem("snow_golem_idol", () -> new ProjectileIdolBlock(idol(SpectrumSoundTypes.SNOW_GOLEM_IDOL), ParticleTypes.SNOWFLAKE, EntityType.SNOWBALL, SoundEvents.ARROW_SHOOT, 3.0F, 1.1F) { @Override public Projectile createProjectile(ServerLevel world, BlockPos mobBlockPos, Position position, Direction side) { world.playSound(null, mobBlockPos.getX(), mobBlockPos.getY(), mobBlockPos.getZ(), SoundEvents.SNOW_GOLEM_SHOOT, SoundSource.BLOCKS, 1.0F, 0.4F / world.getRandom().nextFloat() * 0.4F + 0.8F); return new Snowball(world, position.x(), position.y(), position.z()); } - }, InkColors.PINK))); - public static final DeferredBlock SPIDER_IDOL = register(idol(blockWithItem("spider_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.SPIDER_IDOL), ParticleTypes.ENCHANTED_HIT, MobEffects.POISON, 0, 100), InkColors.PINK))); - public static final DeferredBlock SQUID_IDOL = register(idol(blockWithItem("squid_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.SQUID_IDOL), ParticleTypes.SQUID_INK, MobEffects.BLINDNESS, 0, 200), InkColors.PINK))); - public static final DeferredBlock STRAY_IDOL = register(idol(blockWithItem("stray_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.STRAY_IDOL), ParticleTypes.ENCHANTED_HIT, MobEffects.MOVEMENT_SLOWDOWN, 2, 100), InkColors.PINK))); - public static final DeferredBlock STRIDER_IDOL = register(idol(blockWithItem("strider_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.STRIDER_IDOL), ParticleTypes.DRIPPING_LAVA, MobEffects.FIRE_RESISTANCE, 0, 200), InkColors.PINK))); - public static final DeferredBlock TURTLE_IDOL = register(idol(blockWithItem("turtle_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.TURTLE_IDOL), ParticleTypes.DRIPPING_WATER, MobEffects.DAMAGE_RESISTANCE, 1, 200), InkColors.PINK))); - public static final DeferredBlock WITCH_IDOL = register(idol(blockWithItem("witch_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.WITCH_IDOL), ParticleTypes.ENCHANTED_HIT, MobEffects.WEAKNESS, 0, 200), InkColors.PINK))); - public static final DeferredBlock WITHER_IDOL = register(idol(blockWithItem("wither_idol", () -> new ExplosionIdolBlock(idol(SpectrumSoundTypes.WITHER_IDOL), ParticleTypes.EXPLOSION, 7.0F, true, Explosion.BlockInteraction.DESTROY), InkColors.PINK))); - public static final DeferredBlock WITHER_SKELETON_IDOL = register(idol(blockWithItem("wither_skeleton_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.WITHER_SKELETON_IDOL), ParticleTypes.ENCHANTED_HIT, MobEffects.WITHER, 0, 100), InkColors.PINK))); - public static final DeferredBlock ZOMBIE_IDOL = register(idol(blockWithItem("zombie_idol", () -> new VillagerConvertingIdolBlock(idol(SpectrumSoundTypes.ZOMBIE_IDOL), ParticleTypes.ENCHANTED_HIT), InkColors.PINK))); + }))); + public static final DeferredBlock SPIDER_IDOL = register(idol(blockWithItem("spider_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.SPIDER_IDOL), ParticleTypes.ENCHANTED_HIT, MobEffects.POISON, 0, 100)))); + public static final DeferredBlock SQUID_IDOL = register(idol(blockWithItem("squid_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.SQUID_IDOL), ParticleTypes.SQUID_INK, MobEffects.BLINDNESS, 0, 200)))); + public static final DeferredBlock STRAY_IDOL = register(idol(blockWithItem("stray_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.STRAY_IDOL), ParticleTypes.ENCHANTED_HIT, MobEffects.MOVEMENT_SLOWDOWN, 2, 100)))); + public static final DeferredBlock STRIDER_IDOL = register(idol(blockWithItem("strider_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.STRIDER_IDOL), ParticleTypes.DRIPPING_LAVA, MobEffects.FIRE_RESISTANCE, 0, 200)))); + public static final DeferredBlock TURTLE_IDOL = register(idol(blockWithItem("turtle_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.TURTLE_IDOL), ParticleTypes.DRIPPING_WATER, MobEffects.DAMAGE_RESISTANCE, 1, 200)))); + public static final DeferredBlock WITCH_IDOL = register(idol(blockWithItem("witch_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.WITCH_IDOL), ParticleTypes.ENCHANTED_HIT, MobEffects.WEAKNESS, 0, 200)))); + public static final DeferredBlock WITHER_IDOL = register(idol(blockWithItem("wither_idol", () -> new ExplosionIdolBlock(idol(SpectrumSoundTypes.WITHER_IDOL), ParticleTypes.EXPLOSION, 7.0F, true, Explosion.BlockInteraction.DESTROY)))); + public static final DeferredBlock WITHER_SKELETON_IDOL = register(idol(blockWithItem("wither_skeleton_idol", () -> new StatusEffectIdolBlock(idol(SpectrumSoundTypes.WITHER_SKELETON_IDOL), ParticleTypes.ENCHANTED_HIT, MobEffects.WITHER, 0, 100)))); + public static final DeferredBlock ZOMBIE_IDOL = register(idol(blockWithItem("zombie_idol", () -> new VillagerConvertingIdolBlock(idol(SpectrumSoundTypes.ZOMBIE_IDOL), ParticleTypes.ENCHANTED_HIT)))); // FLUIDS private static BlockBehaviour.Properties fluid(MapColor mapColor) { @@ -1887,17 +1889,17 @@ private static BlockBehaviour.Properties fluid(MapColor mapColor) { public static final DeferredBlock MIDNIGHT_SOLUTION_CAULDRON = register(simple(block("midnight_solution_cauldron", () -> new SpectrumCauldronBlock(SpectrumFluids.MIDNIGHT_SOLUTION, CauldronInteraction.newInteractionMap(SpectrumCauldronInteractions.MIDNIGHT_SOLUTION_INTERACTION), BlockBehaviour.Properties.ofFullCopy(Blocks.CAULDRON))))); public static final DeferredBlock DRAGONROT_CAULDRON = register(simple(block("dragonrot_cauldron", () -> new SpectrumCauldronBlock(SpectrumFluids.DRAGONROT, CauldronInteraction.newInteractionMap(SpectrumCauldronInteractions.DRAGONROT_INTERACTION), BlockBehaviour.Properties.ofFullCopy(Blocks.CAULDRON))))); - public static final DeferredBlock TOPAZ_BRICKS = register(simple(blockWithItem("topaz_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_TOPAZ.get())), InkColors.CYAN))); - public static final DeferredBlock AMETHYST_BRICKS = register(simple(blockWithItem("amethyst_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_AMETHYST.get())), InkColors.MAGENTA))); - public static final DeferredBlock CITRINE_BRICKS = register(simple(blockWithItem("citrine_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_CITRINE.get())), InkColors.YELLOW))); - public static final DeferredBlock ONYX_BRICKS = register(simple(blockWithItem("onyx_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_ONYX.get())), InkColors.BLACK))); - public static final DeferredBlock MOONSTONE_BRICKS = register(simple(blockWithItem("moonstone_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_MOONSTONE.get())), InkColors.WHITE))); - public static final DeferredBlock MIXED_GEMSTONE_BRICKS = register(simple(blockWithItem("mixed_gemstone_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_AMETHYST.get())), InkColors.MAGENTA))); + public static final DeferredBlock TOPAZ_BRICKS = register(simple(blockWithItem("topaz_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_TOPAZ.get()))))); + public static final DeferredBlock AMETHYST_BRICKS = register(simple(blockWithItem("amethyst_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_AMETHYST.get()))))); + public static final DeferredBlock CITRINE_BRICKS = register(simple(blockWithItem("citrine_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_CITRINE.get()))))); + public static final DeferredBlock ONYX_BRICKS = register(simple(blockWithItem("onyx_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_ONYX.get()))))); + public static final DeferredBlock MOONSTONE_BRICKS = register(simple(blockWithItem("moonstone_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_MOONSTONE.get()))))); + public static final DeferredBlock MIXED_GEMSTONE_BRICKS = register(simple(blockWithItem("mixed_gemstone_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(POLISHED_AMETHYST.get()))))); - public static final DeferredBlock AZURITE_BRICKS = register(simple(blockWithItem("azurite_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PURE_AZURITE_BLOCK.get())), InkColors.BLUE))); - public static final DeferredBlock MALACHITE_BRICKS = register(simple(blockWithItem("malachite_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PURE_MALACHITE_BLOCK.get())), InkColors.GREEN))); - public static final DeferredBlock BLOODSTONE_BRICKS = register(simple(blockWithItem("bloodstone_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PURE_BLOODSTONE_BLOCK.get())), InkColors.RED))); - public static final DeferredBlock MIXED_REFINED_CRYSTAL_BRICKS = register(simple(blockWithItem("mixed_refined_crystal_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PURE_AZURITE_BLOCK.get())), InkColors.BLUE))); + public static final DeferredBlock AZURITE_BRICKS = register(simple(blockWithItem("azurite_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PURE_AZURITE_BLOCK.get()))))); + public static final DeferredBlock MALACHITE_BRICKS = register(simple(blockWithItem("malachite_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PURE_MALACHITE_BLOCK.get()))))); + public static final DeferredBlock BLOODSTONE_BRICKS = register(simple(blockWithItem("bloodstone_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PURE_BLOODSTONE_BLOCK.get()))))); + public static final DeferredBlock MIXED_REFINED_CRYSTAL_BRICKS = register(simple(blockWithItem("mixed_refined_crystal_bricks", () -> new Block(BlockBehaviour.Properties.ofFullCopy(PURE_AZURITE_BLOCK.get()))))); static boolean never(BlockState state, BlockGetter world, BlockPos pos, EntityType type) { return false; @@ -1939,15 +1941,15 @@ public static BlockRegistrar block(String name, Supplier return new BlockRegistrar(name).withBlock(blockFactory); } - public static BlockRegistrar blockWithItem(String name, Supplier block, InkColor color) { - return blockWithItem(name, block, () -> IS.of(), color); + public static BlockRegistrar blockWithItem(String name, Supplier block) { + return blockWithItem(name, block, () -> IS.of()); } - public static BlockRegistrar blockWithItem(String name, Supplier block, Supplier itemProperties, InkColor color) { - return blockWithItem(name, block, b -> new BlockItem(b, itemProperties.get()), color); + public static BlockRegistrar blockWithItem(String name, Supplier block, Supplier itemProperties) { + return blockWithItem(name, block, b -> new BlockItem(b, itemProperties.get())); } - public static BlockRegistrar blockWithItem(String name, Supplier block, Function itemFactory, InkColor color) { + public static BlockRegistrar blockWithItem(String name, Supplier block, Function itemFactory) { return block(name, block).withItem(itemFactory); } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java index 3374b85cb6..9d64159f58 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java @@ -229,11 +229,6 @@ public static void registerSubTabs() { entries.accept(SpectrumBlocks.CRYSTAL_APOTHECARY); entries.accept(SpectrumBlocks.COLOR_PICKER); - entries.accept(SpectrumBlocks.DAWNBRUSH); - entries.accept(SpectrumBlocks.TWILL); - entries.accept(SpectrumBlocks.VANTACLAST); - - entries.accept(SpectrumBlocks.TINTING_STATION); entries.accept(SpectrumBlocks.CINDERHEARTH); entries.accept(SpectrumBlocks.CRYSTALLARIEUM); @@ -1564,6 +1559,13 @@ public static void registerSubTabs() { entries.accept(SpectrumBlocks.PRESERVATION_CHEST); entries.accept(SpectrumItems.DIVINATION_HEART); + + // TODO: Finish impl + entries.accept(SpectrumBlocks.DAWNBRUSH); + entries.accept(SpectrumBlocks.TWILL); + entries.accept(SpectrumBlocks.VANTACLAST); + + entries.accept(SpectrumBlocks.TINTING_STATION); }).build(); } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java index 4a6b667721..be46b86ca0 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java @@ -27,7 +27,6 @@ public class SpectrumRegistryKeys { public static final ResourceKey> PASTEL_UPGRADE = of("pastel_upgrade"); public static final ResourceKey>> RESONANCE_PROCESSOR_TYPE = of("resonance_processor_type"); public static final ResourceKey> RESONANCE_PROCESSOR = of("resonance_processor"); - public static final ResourceKey>> PASTEL_PAYLOAD_TYPE = of("pastel_payload_type"); public static final ResourceKey> GEODE_ORES = of("geode_ores"); public static final ResourceKey> PASTEL_PAYLOAD_TYPE = of("pastel_payload_type"); public static final ResourceKey>> PASTEL_PAYLOAD = of("pastel_payload"); From 5c85313f11f36f3e1006a51bad352980434869a6 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 18:12:41 +0200 Subject: [PATCH 106/477] optimize imports --- .../de/dafuqs/spectrum/SpectrumCommon.java | 2 +- .../spectrum/api/block/ColorableBlock.java | 2 +- .../api/block/FilterConfigurable.java | 2 +- .../api/block/ImplementedInventory.java | 1 - .../block/InkColorSelectedPacketReceiver.java | 2 +- .../api/block/MoonstoneStrikeableBlock.java | 2 +- .../spectrum/api/block/MultiblockCrafter.java | 2 +- .../spectrum/api/block/PlayerOwned.java | 3 +- .../spectrum/api/block/StrippableDrop.java | 2 +- .../spectrum/api/block/package-info.java | 2 +- .../spectrum/api/color/package-info.java | 2 +- .../api/damage_type/package-info.java | 2 +- .../spectrum/api/entity/POIMemorized.java | 2 +- .../spectrum/api/entity/PackEntity.java | 2 +- .../spectrum/api/entity/package-info.java | 2 +- .../spectrum/api/fluid/SpectrumFluidTank.java | 1 - .../spectrum/api/fluid/package-info.java | 2 +- .../api/gui/SpectrumTooltipComponent.java | 1 - .../dafuqs/spectrum/api/gui/package-info.java | 2 +- .../dafuqs/spectrum/api/ink/InkPowered.java | 2 +- .../api/ink/capability/ItemInkCapability.java | 2 -- .../spectrum/api/ink/color/InkColor.java | 2 +- .../spectrum/api/ink/color/package-info.java | 2 +- .../dafuqs/spectrum/api/ink/package-info.java | 2 +- .../ink/storage/InkStorageBlockEntity.java | 1 - .../api/ink/storage/package-info.java | 5 ++-- .../api/interaction/EntityColorProcessor.java | 2 +- .../EntityColorProcessorRegistry.java | 2 +- .../interaction/ItemProjectileBehavior.java | 2 +- .../api/interaction/ItemProviderRegistry.java | 2 +- .../OmniAcceleratorProjectile.java | 2 +- .../api/interaction/package-info.java | 2 +- .../api/item/ExpandedStatTooltip.java | 2 +- .../api/item/ExperienceStorageItem.java | 2 -- .../api/item/InkPoweredPotionFillable.java | 1 - .../spectrum/api/item/Preenchanted.java | 2 +- .../spectrum/api/item/SlotReservingItem.java | 2 +- .../spectrum/api/item/package-info.java | 2 +- .../spectrum/api/item_group/package-info.java | 2 +- .../PastelUpgradeSignature.java | 1 - .../api/pastel_network/package-info.java | 2 +- .../api/predicate/block/package-info.java | 2 +- .../item/BottomlessStackPredicate.java | 1 - .../item/InfusedBeveragePredicate.java | 1 - .../item/StoredExperiencePredicate.java | 1 - .../predicate/item/SweetenedPredicate.java | 1 - .../api/predicate/item/package-info.java | 2 +- .../predicate/location/CommandPredicate.java | 1 - .../location/MoonPhasePredicate.java | 1 - .../location/TimeOfDayPredicate.java | 2 +- .../predicate/location/WeatherPredicate.java | 1 - .../api/predicate/location/package-info.java | 2 +- .../recipe/FusionShrineRecipeWorldEffect.java | 1 - .../spectrum/api/recipe/GatedRecipe.java | 3 +- .../spectrum/api/recipe/IngredientStack.java | 2 +- .../spectrum/api/recipe/package-info.java | 2 +- .../api/render/DynamicRenderModel.java | 8 +++--- .../api/render/ExtendedItemBarProvider.java | 2 +- .../render/SlotBackgroundEffectProvider.java | 2 +- .../spectrum/api/render/package-info.java | 2 +- .../AzureDikeAttachmentType.java | 1 - .../EverpromiseRibbonAttachmentType.java | 1 - .../HardcoreDeathAttachmentType.java | 1 - .../LastKillAttachmentType.java | 1 - .../MiscPlayerDataAttachmentType.java | 2 +- .../PrimordialFireAttachmentType.java | 1 - .../attachment_types/package-info.java | 2 +- .../spectrum/blocks/BedrockAnvilBlock.java | 2 +- .../spectrum/blocks/BismuthBudBlock.java | 2 +- .../spectrum/blocks/BlockWithTooltip.java | 2 +- .../dafuqs/spectrum/blocks/FluidLogging.java | 2 +- .../blocks/InWorldInteractionBlockEntity.java | 2 +- .../spectrum/blocks/PlacedItemBlock.java | 2 +- .../blocks/PlacedItemBlockEntity.java | 1 - .../spectrum/blocks/PrimordialFireBlock.java | 2 +- .../dafuqs/spectrum/blocks/TallCropBlock.java | 2 +- .../spectrum/blocks/amphora/AmphoraBlock.java | 2 +- .../spectrum/blocks/amphora/package-info.java | 2 +- .../block_flooder/BlockFlooderBlock.java | 2 +- .../BlockFlooderBlockEntity.java | 2 +- .../blocks/block_flooder/package-info.java | 2 +- .../blocks/boom/ExplosionWithStack.java | 4 +-- .../blocks/boom/IncandescentAmalgamBlock.java | 2 +- .../boom/ParametricMiningDeviceBlock.java | 11 +------- .../boom/ParametricMiningDeviceItem.java | 2 -- .../blocks/boom/ThreatConfluxBlock.java | 4 +-- .../blocks/boom/ThreatConfluxItem.java | 1 - .../spectrum/blocks/boom/package-info.java | 2 +- .../BottomlessBundleBlock.java | 2 +- .../BottomlessBundleBlockEntity.java | 1 - .../BottomlessBundleItem.java | 1 - .../BottomlessComponent.java | 2 +- .../BottomlessItemCapability.java | 2 +- .../BottomlessItemHandler.java | 11 ++------ .../bottomless_bundle/package-info.java | 2 +- .../blocks/chests/BlackHoleChestBlock.java | 3 +- .../BlackHoleChestBlockEntityRenderer.java | 1 - .../blocks/chests/CompactingChestBlock.java | 3 +- .../chests/CompactingChestBlockEntity.java | 2 +- .../CompactingChestBlockEntityRenderer.java | 1 - .../blocks/chests/FabricationChestBlock.java | 3 +- .../chests/FabricationChestBlockEntity.java | 2 +- .../FabricationChestBlockEntityRenderer.java | 1 - .../blocks/chests/HeartboundChestBlock.java | 2 +- .../chests/HeartboundChestBlockEntity.java | 2 +- .../HeartboundChestBlockEntityRenderer.java | 1 - .../chests/SpectrumChestBlockEntity.java | 3 +- .../SpectrumChestBlockEntityRenderer.java | 1 - .../spectrum/blocks/chests/package-info.java | 2 +- .../blocks/cinderhearth/package-info.java | 2 +- .../conditional/MermaidsBrushBlock.java | 2 +- .../blocks/conditional/MermaidsGemItem.java | 1 - .../conditional/QuitoxicReedsBlock.java | 2 +- .../conditional/StuckStormStoneBlock.java | 2 +- .../amaranth/AmaranthBushelBlock.java | 2 +- .../amaranth/AmaranthCropBlock.java | 2 +- .../amaranth/PottedAmaranthBushelBlock.java | 2 +- .../conditional/amaranth/package-info.java | 2 +- .../blood_orchid/BloodOrchidBlock.java | 2 +- .../blood_orchid/PottedBloodOrchidBlock.java | 2 +- .../blood_orchid/package-info.java | 2 +- .../colored_tree/ColoredFenceBlock.java | 2 +- .../colored_tree/ColoredFenceGateBlock.java | 2 +- .../colored_tree/ColoredLeavesBlock.java | 2 +- .../colored_tree/ColoredLightBlock.java | 2 +- .../colored_tree/ColoredLogBlock.java | 3 +- .../colored_tree/ColoredPlankBlock.java | 2 +- .../ColoredPressurePlateBlock.java | 2 +- .../colored_tree/ColoredSaplingBlock.java | 2 +- .../colored_tree/ColoredSlabBlock.java | 2 +- .../ColoredSporeBlossomBlock.java | 4 +-- .../colored_tree/ColoredStairBlock.java | 2 +- .../ColoredStrippedSpectrumLogBlock.java | 2 +- .../ColoredStrippedWoodBlockSpectrum.java | 2 +- .../colored_tree/ColoredWoodBlock.java | 5 ++-- .../ColoredWoodenButtonBlock.java | 2 +- .../PottedColoredSaplingBlock.java | 2 +- .../colored_tree/package-info.java | 2 +- .../blocks/conditional/package-info.java | 2 +- .../PottedResonantLilyBlock.java | 2 +- .../resonant_lily/package-info.java | 2 +- .../spectrum/blocks/decay/DecayAwayBlock.java | 2 +- .../spectrum/blocks/decay/DecayBlock.java | 2 +- .../spectrum/blocks/decay/FadingBlock.java | 3 +- .../spectrum/blocks/decay/FailingBlock.java | 3 +- .../blocks/decay/ForfeitureBlock.java | 3 +- .../spectrum/blocks/decay/RuinBlock.java | 4 +-- .../spectrum/blocks/decay/package-info.java | 2 +- .../blocks/decoration/CloverBlock.java | 1 - .../decoration/CushionedCarpetBlock.java | 1 - .../blocks/decoration/DecoStoneBlock.java | 2 +- .../blocks/decoration/DiagonalBlock.java | 2 +- .../decoration/EtherealPlatformBlock.java | 2 -- .../blocks/decoration/FlexLanternBlock.java | 2 +- .../blocks/decoration/GemstoneChimeBlock.java | 2 +- .../blocks/decoration/GemstoneGlassBlock.java | 2 +- .../spectrum/blocks/decoration/GlowBlock.java | 2 +- .../decoration/PersistentLightBlock.java | 2 -- .../blocks/decoration/PigmentBlock.java | 2 +- .../blocks/decoration/ProjectorBlock.java | 2 +- .../blocks/decoration/PylonBlock.java | 2 +- .../SemiPermeableGemstoneGlassBlock.java | 2 -- .../decoration/SemiPermeableGlassBlock.java | 2 +- .../decoration/ShimmerstoneLightBlock.java | 2 +- .../blocks/decoration/SpectrumBedBlock.java | 2 +- .../blocks/decoration/package-info.java | 2 +- .../blocks/deeper_down/DragonboneBlock.java | 2 +- .../blocks/deeper_down/HummingstoneBlock.java | 2 +- .../deeper_down/HummingstoneBlockEntity.java | 1 - .../blocks/deeper_down/PyriteRipperBlock.java | 2 +- .../SplinterspawnInfestedBlock.java | 3 +- .../deeper_down/StrippingLootBlock.java | 2 +- .../deeper_down/StrippingLootPillarBlock.java | 2 +- .../deeper_down/flora/AbyssalVineBlock.java | 2 -- .../flora/BristleSproutsBlock.java | 2 +- .../deeper_down/flora/DoomBloomBlock.java | 2 +- .../deeper_down/flora/GiantMossBallBlock.java | 2 -- .../flora/SawbladeHollyBushBlock.java | 2 +- .../flora/SmallDragonjagBlock.java | 2 +- .../deeper_down/flora/TallDragonjagBlock.java | 2 +- .../deeper_down/flora/TriStateVineBlock.java | 2 +- .../flora/WeepingGalaFrondsTipBlock.java | 1 - .../deeper_down/flora/package-info.java | 2 +- .../groundcover/OvergrownSlushBlock.java | 5 +--- .../deeper_down/groundcover/SlushBlock.java | 2 +- .../deeper_down/groundcover/package-info.java | 2 +- .../blocks/deeper_down/package-info.java | 5 ++-- .../blocks/enchanter/EnchanterBlock.java | 2 +- .../enchanter/EnchanterBlockEntity.java | 6 +--- .../blocks/enchanter/package-info.java | 2 +- .../blocks/end_portal/EndPortalShaper.java | 1 - .../blocks/end_portal/package-info.java | 2 +- .../blocks/ender/EnderDropperBlock.java | 2 +- .../blocks/ender/EnderDropperBlockEntity.java | 2 +- .../blocks/ender/EnderHopperBlock.java | 2 +- .../blocks/ender/EnderHopperBlockEntity.java | 1 - .../spectrum/blocks/ender/package-info.java | 2 +- .../blocks/farming/SpectrumFarmlandBlock.java | 2 +- .../spectrum/blocks/farming/package-info.java | 5 ++-- .../blocks/flammable/FlammableBlock.java | 1 - .../flammable/FlammableCarpetBlock.java | 1 - .../blocks/flammable/FlammableFenceBlock.java | 7 ++--- .../flammable/FlammableFenceGateBlock.java | 7 ++--- .../flammable/FlammableFlowerBlock.java | 1 - .../flammable/FlammableLeavesBlock.java | 1 - .../blocks/flammable/FlammableLogBlock.java | 2 +- .../blocks/flammable/FlammablePlankBlock.java | 1 - .../flammable/FlammableRedstoneLampBlock.java | 1 - .../FlammableRotatedPillarBlock.java | 10 +++---- .../blocks/flammable/FlammableSlabBlock.java | 7 ++--- .../blocks/flammable/FlammableStairBlock.java | 7 ++--- .../blocks/flammable/package-info.java | 2 +- .../spectrum/blocks/fluid/DragonrotFluid.java | 1 - .../blocks/fluid/DragonrotFluidBlock.java | 2 +- .../blocks/fluid/LiquidCrystalFluid.java | 1 - .../blocks/fluid/LiquidCrystalFluidBlock.java | 2 +- .../blocks/fluid/MidnightSolutionFluid.java | 1 - .../fluid/MidnightSolutionFluidBlock.java | 2 +- .../blocks/fluid/SpectrumCauldronBlock.java | 5 ---- .../spectrum/blocks/fluid/SpectrumFluid.java | 2 +- .../blocks/fluid/SpectrumFluidBlock.java | 2 +- .../blocks/fluid/SpectrumFluidType.java | 13 --------- .../spectrum/blocks/fluid/package-info.java | 2 +- .../fusion_shrine/FusionShrineBlock.java | 2 +- .../FusionShrineBlockEntity.java | 4 +-- .../FusionShrineBlockEntityRenderer.java | 1 - .../blocks/fusion_shrine/package-info.java | 2 +- .../blocks/gemstone/SpectrumBuddingBlock.java | 2 +- .../blocks/gemstone/package-info.java | 2 +- .../spectrum/blocks/geology/AzuriteBlock.java | 2 +- .../spectrum/blocks/geology/package-info.java | 2 +- .../idols/AoEStatusEffectIdolBlock.java | 2 +- .../blocks/idols/BonemealingIdolBlock.java | 2 +- .../idols/EntitySummoningIdolBlock.java | 2 +- .../blocks/idols/ExplosionIdolBlock.java | 2 +- .../idols/FallDamageNegatingIdolBlock.java | 2 +- .../blocks/idols/FeedingIdolBlock.java | 2 +- .../blocks/idols/FirestarterIdolBlock.java | 2 +- .../blocks/idols/FreezingIdolBlock.java | 2 +- .../spectrum/blocks/idols/IdolBlock.java | 2 +- .../blocks/idols/InsomniaIdolBlock.java | 2 +- .../blocks/idols/KnockbackIdolBlock.java | 2 +- .../idols/LineTeleportingIdolBlock.java | 2 +- .../blocks/idols/MilkingIdolBlock.java | 2 +- .../blocks/idols/PiglinTradeIdolBlock.java | 2 +- .../blocks/idols/ProjectileIdolBlock.java | 2 +- .../idols/RandomTeleportingIdolBlock.java | 2 +- .../blocks/idols/ShearingIdolBlock.java | 2 +- .../idols/SilverfishInsertingIdolBlock.java | 2 +- .../blocks/idols/SlimeSizingIdolBlock.java | 2 +- .../blocks/idols/StatusEffectIdolBlock.java | 2 +- .../idols/VillagerConvertingIdolBlock.java | 2 +- .../spectrum/blocks/idols/package-info.java | 5 ++-- .../spectrum/blocks/ink/BaseInkBlock.java | 3 -- .../ink/gen/CrystalApothecaryBlock.java | 2 +- .../ink/gen/CrystalApothecaryBlockEntity.java | 1 - .../blocks/ink/gen/DawnbrushBlock.java | 2 +- .../spectrum/blocks/ink/gen/TwillBlock.java | 2 +- .../blocks/ink/gen/TwillBlockEntity.java | 2 -- .../blocks/ink/gen/VantaclastBlock.java | 2 +- .../blocks/ink/gen/VantaclastBlockEntity.java | 3 -- .../spectrum/blocks/ink/gen/package-info.java | 2 +- .../blocks/ink/sink/CinderhearthBlock.java | 2 +- .../ink/sink/CinderhearthBlockEntity.java | 2 +- .../blocks/ink/sink/CrystallarieumBlock.java | 2 +- .../ink/sink/CrystallarieumBlockEntity.java | 4 +-- .../blocks/item_bowl/ItemBowlBlock.java | 4 +-- .../blocks/item_bowl/ItemBowlBlockEntity.java | 3 -- .../blocks/item_bowl/package-info.java | 2 +- .../blocks/item_roundel/package-info.java | 2 +- .../spectrum/blocks/jade_vines/JadeVine.java | 1 - .../blocks/jade_vines/JadeVineBulbBlock.java | 1 - .../blocks/jade_vines/JadeVinePetalBlock.java | 1 - .../blocks/jade_vines/JadeVineRootsBlock.java | 2 +- .../jade_vines/JadeVineRootsBlockEntity.java | 2 +- .../jade_vines/JadeiteLotusFlowerBlock.java | 1 - .../jade_vines/JadeiteLotusStemBlock.java | 2 +- .../jade_vines/NephriteBlossomStemBlock.java | 2 +- .../blocks/jade_vines/package-info.java | 2 +- .../blocks/lava_sponge/WetLavaSpongeItem.java | 1 - .../blocks/lava_sponge/package-info.java | 2 +- .../spectrum/blocks/memory/MemoryBlock.java | 2 +- .../spectrum/blocks/memory/MemoryItem.java | 2 +- .../spectrum/blocks/memory/package-info.java | 2 +- .../blocks/mob_head/SpectrumSkullType.java | 1 - .../SpectrumSkullBlockEntityRenderer.java | 2 +- .../mob_head/client/models/package-info.java | 5 ++-- .../blocks/mob_head/client/package-info.java | 2 +- .../blocks/mob_head/package-info.java | 2 +- .../dafuqs/spectrum/blocks/package-info.java | 2 +- .../AbstractParticleSpawnerBlock.java | 2 +- .../ParticleSpawnerBlockEntity.java | 2 +- .../ParticleSpawnerConfiguration.java | 1 - .../blocks/particle_spawner/package-info.java | 2 +- .../network/PastelTransmission.java | 4 +-- .../network/PastelTransmissionLogic.java | 4 --- .../network/ServerPastelNetwork.java | 2 +- .../network/ServerPastelNetworkManager.java | 1 - .../pastel_network/network/package-info.java | 2 +- .../pastel_network/nodes/PastelNodeBlock.java | 3 +- .../nodes/PastelNodeBlockEntityRenderer.java | 4 --- .../pastel_network/nodes/PastelNodeType.java | 4 --- .../pastel_network/nodes/package-info.java | 2 +- .../blocks/pastel_network/package-info.java | 2 +- .../payloads/FluidPastelPayload.java | 3 -- .../payloads/ItemPastelPayload.java | 28 +++++++++---------- .../payloads/ItemPastelPayloadType.java | 16 +++++------ .../payloads/PastelPayload.java | 7 +---- .../pastel_network/payloads/package-info.java | 5 ++-- .../blocks/pedestal/BuiltinGemstoneColor.java | 1 - .../blocks/pedestal/PedestalBlock.java | 4 +-- .../pedestal/PedestalBlockEntityRenderer.java | 1 - .../blocks/pedestal/PedestalRecipeInput.java | 2 +- .../blocks/pedestal/package-info.java | 2 +- .../potion_workshop/PotionWorkshopBlock.java | 2 +- .../PotionWorkshopBlockEntity.java | 2 +- .../blocks/potion_workshop/package-info.java | 2 +- .../spectrum/blocks/present/PresentBlock.java | 2 +- .../blocks/present/PresentBlockItem.java | 2 +- .../spectrum/blocks/present/package-info.java | 2 +- .../blocks/redstone/BlockBreakerBlock.java | 2 +- .../blocks/redstone/BlockPlacerBlock.java | 2 +- .../blocks/redstone/PlayerDetectorBlock.java | 2 +- .../redstone/RedstoneCalculatorBlock.java | 1 - .../blocks/redstone/RedstoneSandBlock.java | 2 +- .../blocks/redstone/RedstoneTimerBlock.java | 4 +-- .../redstone/RedstoneTransceiverBlock.java | 2 +- .../RedstoneTransceiverBlockEntity.java | 2 +- .../blocks/redstone/package-info.java | 2 +- .../blocks/shooting_star/ShootingStar.java | 5 ---- .../ShootingStarDispenserBehavior.java | 1 - .../shooting_star/ShootingStarItem.java | 1 - .../blocks/shooting_star/package-info.java | 2 +- .../SpiritInstillerBlock.java | 2 +- .../SpiritInstillerBlockEntity.java | 1 - .../blocks/spirit_instiller/package-info.java | 2 +- .../spirit_sallow/OminousSaplingBlock.java | 2 +- .../spirit_sallow/SpiritVinesPlantBlock.java | 4 +-- .../SpiritVinesPlantStemBlock.java | 4 +-- .../blocks/spirit_sallow/package-info.java | 2 +- .../blocks/statues/GrotesqueBlock.java | 2 +- .../spectrum/blocks/statues/package-info.java | 2 +- .../blocks/structure/DeepLightBlock.java | 2 +- .../blocks/structure/DreamGateBlock.java | 2 +- .../spectrum/blocks/structure/ManxiBlock.java | 2 +- .../PreservationBlockDetectorBlock.java | 2 +- .../PreservationBlockDetectorBlockEntity.java | 2 +- .../structure/PreservationChestBlock.java | 4 +-- .../PreservationChestBlockEntity.java | 2 +- .../PreservationControllerBlock.java | 2 +- .../PreservationControllerBlockEntity.java | 4 +-- .../structure/PreservationItemBowlBlock.java | 2 +- .../blocks/structure/package-info.java | 2 +- .../TitrationBarrelBlock.java | 2 +- .../TitrationBarrelBlockEntity.java | 2 +- .../blocks/titration_barrel/package-info.java | 2 +- .../spectrum/blocks/upgrade/UpgradeBlock.java | 2 +- .../UpgradeBlockBlockEntityRenderer.java | 1 - .../spectrum/blocks/upgrade/Upgradeable.java | 2 +- .../spectrum/blocks/upgrade/package-info.java | 2 +- .../blocks/weathering/ShaleClayBlock.java | 2 +- .../blocks/weathering/Weathering.java | 1 - .../weathering/WeatheringSlabBlock.java | 2 +- .../weathering/WeatheringStairsBlock.java | 2 +- .../blocks/weathering/package-info.java | 2 +- .../capabilities/SpectrumCapabilities.java | 1 - .../spectrum/capabilities/package-info.java | 2 +- .../commands/DumpRegistriesCommand.java | 1 - .../commands/ListItemTagsCommand.java | 2 +- .../spectrum/commands/SanityCommand.java | 6 ++-- .../spectrum/commands/package-info.java | 2 +- .../compat/REI/FluidIngredientREI.java | 6 +--- .../compat/REI/GatedRecipeDisplay.java | 2 +- .../compat/REI/GatedSpectrumDisplay.java | 2 +- .../dafuqs/spectrum/compat/REI/REIHelper.java | 1 - .../spectrum/compat/REI/package-info.java | 2 +- .../REI/plugins/AnvilCrushingCategory.java | 1 - .../BlockToBlockWithChanceCategory.java | 1 - .../BlockToBlockWithChanceDisplay.java | 2 +- .../compat/REI/plugins/EnchanterCategory.java | 1 - .../compat/REI/plugins/EnchanterDisplay.java | 1 - .../plugins/EnchanterEnchantingCategory.java | 1 - .../plugins/EnchanterEnchantingDisplay.java | 1 - .../plugins/EnchantmentUpgradeCategory.java | 1 - .../plugins/EnchantmentUpgradeDisplay.java | 8 ------ .../REI/plugins/FluidConvertingCategory.java | 1 - .../REI/plugins/FusionShrineCategory.java | 1 - .../REI/plugins/FusionShrineDisplay.java | 1 - .../REI/plugins/GatedDisplayCategory.java | 1 - .../GatedItemInformationPageCategory.java | 1 - .../REI/plugins/InkConvertingCategory.java | 1 - .../REI/plugins/InkConvertingDisplay.java | 3 +- .../NaturesStaffConversionsCategory.java | 1 - .../NaturesStaffConversionsDisplay.java | 2 +- .../REI/plugins/PedestalCraftingCategory.java | 1 - .../REI/plugins/PedestalCraftingDisplay.java | 2 +- .../REI/plugins/PotionWorkshopCategory.java | 1 - .../PrimordialFireBurningCategory.java | 1 - .../REI/plugins/ScrollableTextWidget.java | 2 +- .../REI/plugins/SpiritInstillingCategory.java | 1 - .../REI/plugins/SpiritInstillingDisplay.java | 1 - .../REI/plugins/TitrationBarrelCategory.java | 1 - .../REI/plugins/TitrationBarrelDisplay.java | 2 -- .../compat/REI/plugins/package-info.java | 5 ++-- .../REI/widgets/AnimatedTexturedWidget.java | 2 +- .../REI/widgets/IndexedEntryWidget.java | 2 -- .../compat/REI/widgets/OffsetEntryWidget.java | 1 - .../compat/REI/widgets/package-info.java | 2 +- .../compat/SpectrumIntegrationPacks.java | 1 - .../spectrum/compat/ae2/package-info.java | 2 +- .../compat/alloy_forgery/package-info.java | 2 +- .../compat/botania/BlackestLotusItem.java | 1 - .../compat/botania/BotaniaCompat.java | 10 ------- .../compat/botania/LeastBlackLotusItem.java | 1 - .../compat/claims/GenericClaimModsCompat.java | 2 +- .../spectrum/compat/claims/package-info.java | 2 +- .../spectrum/compat/create/CreateCompat.java | 2 +- .../spectrum/compat/create/package-info.java | 2 +- .../compat/emi/GatedSpectrumEmiRecipe.java | 2 +- .../compat/emi/SpectrumEmiRecipe.java | 2 +- .../compat/emi/handlers/package-info.java | 2 +- .../spectrum/compat/emi/package-info.java | 2 +- .../recipes/CrystallarieumEmiRecipeGated.java | 2 -- .../EnchantmentUpgradeEmiRecipeGated.java | 2 -- .../recipes/InkConvertingEmiRecipeGated.java | 2 +- .../PedestalCraftingEmiRecipeGated.java | 2 +- .../TitrationBarrelEmiRecipeGated.java | 4 +-- .../compat/emi/recipes/package-info.java | 2 +- .../compat/emi/widgets/package-info.java | 2 +- .../exclusions_lib/ExclusionsLibCompat.java | 5 ---- .../compat/exclusions_lib/package-info.java | 2 +- .../spectrum/compat/gobber/GobberCompat.java | 3 +- .../spectrum/compat/gobber/package-info.java | 5 ++-- .../spectrum/compat/malum/package-info.java | 2 +- .../compat/modonomicon/ModonomiconCompat.java | 2 +- .../compat/modonomicon/ModonomiconHelper.java | 2 +- .../BookCinderhearthSmeltingPageRenderer.java | 2 +- ...BookCrystallarieumGrowingPageRenderer.java | 2 +- .../BookEnchanterUpgradingPageRenderer.java | 2 -- .../BookFusionShrineCraftingPageRenderer.java | 1 - .../client/pages/BookHintPageRenderer.java | 2 +- .../pages/BookInkConvertingPageRenderer.java | 2 +- .../client/pages/BookLinkPageRenderer.java | 2 +- .../BookPedestalCraftingPageRenderer.java | 2 -- .../client/pages/BookSnippetPageRenderer.java | 2 +- .../pages/BookStatusEffectPageRenderer.java | 1 - ...TitrationBarrelFermentingPageRenderer.java | 2 +- .../client/pages/package-info.java | 2 +- .../compat/modonomicon/package-info.java | 2 +- .../modonomicon/page_types/WebLinkEntry.java | 2 +- .../modonomicon/page_types/package-info.java | 2 +- .../pages/BookGatedRecipePage.java | 2 +- .../modonomicon/pages/package-info.java | 2 +- .../EnchantmentRegisteredCondition.java | 2 +- .../RecipesLoadedAndUnlockedCondition.java | 2 +- .../unlock_conditions/package-info.java | 2 +- .../dafuqs/spectrum/compat/package-info.java | 5 ++-- .../travelersbackpack/package-info.java | 2 +- .../components/BeverageComponent.java | 1 - .../components/CustomPotionDataComponent.java | 1 - .../components/InfusedBeverageComponent.java | 1 - .../components/JadeWineComponent.java | 1 - .../components/WithMilkComponent.java | 1 - .../spectrum/components/package-info.java | 2 +- .../spectrum/config/SpectrumConfig.java | 1 - .../dafuqs/spectrum/config/package-info.java | 5 ++-- .../de/dafuqs/spectrum/data/package-info.java | 2 +- .../data_loaders/ColorMappingDataLoader.java | 1 - ...rystalApothecarySimulationsDataLoader.java | 1 - .../data_loaders/EntityFishingDataLoader.java | 1 - .../data_loaders/GeodeOreDefinition.java | 3 -- .../NaturesStaffConversionDataLoader.java | 2 +- .../client/BiomeRenderingDataLoader.java | 14 ++++------ .../ParticleSpawnerParticlesDataLoader.java | 2 +- .../data_loaders/client/package-info.java | 2 +- .../spectrum/data_loaders/package-info.java | 5 ++-- .../resonance_processors/package-info.java | 2 +- .../client/DeeperDownDimensionEffects.java | 2 +- .../client/HowlingSpireEffects.java | 1 - .../deeper_down/client/package-info.java | 2 +- .../spectrum/deeper_down/package-info.java | 2 +- .../SpectrumEntitySubPredicateTypes.java | 1 - .../spectrum/entity/ai/package-info.java | 5 ++-- .../entity/animation/package-info.java | 5 ++-- .../entity/entity/BidentBaseEntity.java | 1 - .../spectrum/entity/entity/BidentEntity.java | 1 - .../entity/BidentMirrorImageEntity.java | 4 +-- .../entity/DraconicTwinswordEntity.java | 3 +- .../entity/entity/DragonTalonEntity.java | 2 +- .../entity/EggLayingWoolyPigEntity.java | 2 +- .../spectrum/entity/entity/EraserEntity.java | 2 +- .../entity/entity/FloatBlockEntity.java | 4 +-- .../entity/entity/GlassArrowEntity.java | 4 +-- .../entity/entity/KindlingEntity.java | 2 +- .../entity/entity/LightMineEntity.java | 2 +- .../entity/entity/LightShardBaseEntity.java | 2 +- .../entity/entity/LightShardEntity.java | 2 +- .../entity/entity/LightSpearEntity.java | 2 +- .../spectrum/entity/entity/LizardEntity.java | 4 +-- .../entity/entity/MagicProjectileEntity.java | 2 +- .../dafuqs/spectrum/entity/entity/Marrow.java | 2 +- .../entity/entity/MiningProjectileEntity.java | 2 +- .../entity/entity/MonstrosityEntity.java | 2 -- .../entity/ParametricMiningDeviceEntity.java | 1 - .../entity/entity/PhantomFrameEntity.java | 1 - .../entity/entity/PhantomGlowFrameEntity.java | 1 - .../entity/PreservationTurretEntity.java | 4 +-- .../spectrum/entity/entity/SeatEntity.java | 2 +- .../entity/entity/ShootingStarEntity.java | 1 - .../entity/entity/SpectrumBossEntity.java | 2 +- .../entity/entity/SpectrumFishingHook.java | 5 +--- .../spectrum/entity/entity/package-info.java | 5 ++-- .../models/PreservationTurretEntityModel.java | 1 - .../spectrum/entity/models/package-info.java | 2 +- .../dafuqs/spectrum/entity/package-info.java | 2 +- .../EggLayingWoolyPigPredicate.java | 2 +- .../entity/predicates/KindlingPredicate.java | 2 +- .../entity/predicates/LizardPredicate.java | 2 +- .../entity/predicates/ShulkerPredicate.java | 2 +- .../entity/predicates/package-info.java | 2 +- .../entity/render/KindlingEntityRenderer.java | 1 - .../entity/render/MarrowRenderer.java | 1 - .../render/MonstrosityEntityRenderer.java | 3 -- .../render/ShootingStarEntityRenderer.java | 1 - .../entity/render/SplinterspawnRenderer.java | 1 - .../spectrum/entity/render/package-info.java | 5 ++-- .../entity/spawners/ShootingStarSpawner.java | 2 -- .../entity/spawners/package-info.java | 2 +- .../entity/variants/package-info.java | 2 +- .../spectrum/events/ExactPositionSource.java | 1 - .../events/SpectrumPositionSources.java | 1 - .../ItemAndExperienceEventQueue.java | 1 - .../events/listeners/package-info.java | 2 +- .../dafuqs/spectrum/events/package-info.java | 2 +- .../de/dafuqs/spectrum/helpers/AoEHelper.java | 2 +- .../spectrum/helpers/BuildingHelper.java | 1 - .../dafuqs/spectrum/helpers/CodecHelper.java | 3 +- .../dafuqs/spectrum/helpers/EntityHelper.java | 2 +- .../spectrum/helpers/FakePlayerHelper.java | 2 +- .../helpers/InWorldInteractionHelper.java | 2 -- .../spectrum/helpers/InventoryHelper.java | 3 +- .../dafuqs/spectrum/helpers/LoreHelper.java | 2 +- .../spectrum/helpers/MobEffectHelper.java | 4 +-- .../spectrum/helpers/ParticleHelper.java | 1 - .../dafuqs/spectrum/helpers/SchedulerMap.java | 1 - .../spectrum/helpers/SpectrumColorHelper.java | 4 +-- .../helpers/SpectrumEnchantmentHelper.java | 2 +- .../dafuqs/spectrum/helpers/TimeHelper.java | 1 - .../enchantments/CloversFavorHelper.java | 2 +- .../helpers/enchantments/FoundryHelper.java | 1 - .../helpers/enchantments/package-info.java | 5 ++-- .../dafuqs/spectrum/helpers/package-info.java | 2 +- .../spectrum/injectors/package-info.java | 2 +- .../BagOfHoldingScreenHandler.java | 1 - .../inventories/BedrockAnvilScreen.java | 1 - .../CinderhearthScreenHandler.java | 2 +- .../inventories/CompactingChestScreen.java | 1 - .../CraftingTabletScreenHandler.java | 1 - .../inventories/FilteringScreenHandler.java | 2 +- .../inventories/PaintbrushScreen.java | 2 +- .../inventories/PaintbrushScreenHandler.java | 2 +- .../inventories/ParticleSpawnerScreen.java | 3 +- .../spectrum/inventories/PedestalScreen.java | 2 -- .../QuickNavigationGridScreen.java | 2 +- .../QuickNavigationGridScreenHandler.java | 2 +- .../Spectrum3x3ContainerScreen.java | 2 -- .../Spectrum3x3ContainerScreenHandler.java | 2 -- .../SpectrumGenericContainerScreen.java | 2 -- .../inventories/SpectrumMenuTypes.java | 1 - .../spectrum/inventories/WorkstaffScreen.java | 1 - .../spectrum/inventories/package-info.java | 2 +- .../slots/ColorPickerInputSlot.java | 2 +- .../inventories/slots/ExtractOnlySlot.java | 1 - .../slots/PedestalPreviewSlot.java | 1 - .../inventories/slots/package-info.java | 2 +- .../widgets/ink/InkListWidget.java | 2 -- .../inventories/widgets/ink/InkPieWidget.java | 2 +- .../inventories/widgets/package-info.java | 2 +- .../spectrum/items/ConcealingOilsItem.java | 1 - .../dafuqs/spectrum/items/CookbookItem.java | 2 -- .../items/MidnightAberrationItem.java | 2 +- .../spectrum/items/MysteriousCompassItem.java | 2 +- .../spectrum/items/armor/package-info.java | 2 +- .../items/conditional/package-info.java | 2 +- .../spectrum/items/food/ClottedCreamItem.java | 1 - .../dafuqs/spectrum/items/food/DrinkItem.java | 2 +- .../items/food/NectardewBurgeonItem.java | 2 +- .../spectrum/items/food/RockCandyItem.java | 10 +------ .../spectrum/items/food/SedativesItem.java | 1 - .../spectrum/items/food/StarCandyItem.java | 2 -- .../spectrum/items/food/package-info.java | 2 +- .../items/ink/ArtistsPaletteItem.java | 2 +- .../items/ink/CreativeInkAssortmentItem.java | 2 +- .../spectrum/items/ink/InkAssortmentItem.java | 2 +- .../spectrum/items/ink/InkFlaskItem.java | 2 +- .../items/ink/PigmentPaletteItem.java | 2 +- .../spectrum/items/ink/package-info.java | 5 ++-- .../items/item_frame/package-info.java | 2 +- .../items/magic_items/BuildingStaffItem.java | 2 +- .../magic_items/CelestialPocketWatchItem.java | 1 - .../magic_items/ConstructorsStaffItem.java | 2 +- .../items/magic_items/CraftingTabletItem.java | 2 +- .../magic_items/EnchantmentCanvasItem.java | 2 +- .../items/magic_items/EnderSpliceItem.java | 1 - .../items/magic_items/ExchangeStaffItem.java | 2 +- .../items/magic_items/GildedBookItem.java | 1 - .../items/magic_items/KnowledgeGemItem.java | 1 - .../items/magic_items/NaturesStaffItem.java | 1 - .../items/magic_items/PaintbrushItem.java | 2 +- .../items/magic_items/PipeBombItem.java | 2 +- .../items/magic_items/RadianceStaffItem.java | 1 - .../magic_items/StructureCompassItem.java | 2 +- .../ampoules/AzuriteGlassAmpouleItem.java | 2 +- .../ampoules/BloodstoneGlassAmpouleItem.java | 2 +- .../ampoules/GlassAmpouleItem.java | 2 +- .../ampoules/MalachiteGlassAmpouleItem.java | 2 +- .../magic_items/ampoules/package-info.java | 2 +- .../items/magic_items/package-info.java | 2 +- .../spectrum/items/map/ArtisansAtlasItem.java | 4 +-- .../items/map/ArtisansAtlasState.java | 2 +- .../spectrum/items/map/package-info.java | 2 +- .../items/misc/AetherVestigesItem.java | 2 +- .../dafuqs/spectrum/items/misc/AshItem.java | 1 - .../spectrum/items/misc/package-info.java | 2 +- .../dafuqs/spectrum/items/package-info.java | 2 +- .../items/tools/DraconicTwinswordItem.java | 3 +- .../spectrum/items/tools/DragonTalonItem.java | 2 +- .../spectrum/items/tools/DreamflayerItem.java | 2 +- .../items/tools/FerociousBidentItem.java | 2 +- .../items/tools/FractalBidentItem.java | 2 +- .../spectrum/items/tools/GlassArrowItem.java | 2 +- .../items/tools/GlassArrowVariant.java | 2 +- .../items/tools/GlassCrestCrossbowItem.java | 2 +- .../items/tools/GlassCrestGreatswordItem.java | 4 +-- .../items/tools/GlassCrestWorkstaffItem.java | 2 +- .../items/tools/MalachiteBidentItem.java | 3 +- .../items/tools/MalachiteCrossbowItem.java | 1 - .../spectrum/items/tools/MultiToolItem.java | 1 - .../spectrum/items/tools/NectarLanceItem.java | 4 +-- .../spectrum/items/tools/NightSaltsItem.java | 6 ---- .../items/tools/NightfallsBladeItem.java | 2 +- .../items/tools/OmniAcceleratorItem.java | 2 +- .../items/tools/ParryingSwordItem.java | 2 +- .../items/tools/PrimordialLighterItem.java | 1 - .../items/tools/SoothingBouquetItem.java | 3 +- .../items/tools/SpectrumFishingRodItem.java | 1 - .../spectrum/items/tools/package-info.java | 2 +- .../BottomlessBundleTooltipComponent.java | 1 - .../tooltip/BottomlessBundleTooltipData.java | 1 - .../spectrum/items/tooltip/package-info.java | 2 +- .../AetherGracedNectarGlovesItem.java | 2 +- .../items/trinkets/AshenCircletItem.java | 1 - .../items/trinkets/AttackRingItem.java | 2 +- .../items/trinkets/AzureDikeCurioItem.java | 2 +- .../trinkets/CircletOfArroganceItem.java | 2 +- .../items/trinkets/GleamingPinItem.java | 1 - .../items/trinkets/InkDrainCurioItem.java | 2 +- .../items/trinkets/SevenLeagueBootsItem.java | 1 - .../items/trinkets/TakeOffBeltItem.java | 1 - .../items/trinkets/WeepingCircletItem.java | 1 - .../items/trinkets/WhispyCircletItem.java | 2 +- .../spectrum/items/trinkets/package-info.java | 2 +- .../functions/DyeRandomlyLootFunction.java | 1 - .../FermentRandomlyLootFunction.java | 1 - .../FillPotionFillableLootFunction.java | 1 - .../GrantAdvancementLootFunction.java | 1 - .../SetComponentsRandomlyLootFunction.java | 1 - .../spectrum/loot/functions/package-info.java | 5 ++-- .../SnifferDiggingAdditionsLootModifier.java | 1 - .../modifiers/TreasureHunterLootModifier.java | 16 +++++------ .../spectrum/loot/modifiers/package-info.java | 2 +- .../de/dafuqs/spectrum/loot/package-info.java | 2 +- .../spectrum/magic/MoonstoneStrike.java | 2 +- .../dafuqs/spectrum/magic/package-info.java | 5 ++-- .../mixin/AbstractBlockStateMixin.java | 3 -- .../spectrum/mixin/BlockBehaviorMixin.java | 2 +- .../de/dafuqs/spectrum/mixin/BlockMixin.java | 3 -- .../de/dafuqs/spectrum/mixin/BrainMixin.java | 2 +- .../spectrum/mixin/DamageSourceMixin.java | 2 +- .../spectrum/mixin/EndermanEntityMixin.java | 3 +- .../GeodesGenerateWithGemstoneOresMixin.java | 5 ---- .../spectrum/mixin/GlassBottleItemMixin.java | 2 -- .../spectrum/mixin/ItemEntityMixin.java | 1 - .../dafuqs/spectrum/mixin/ItemStackMixin.java | 5 +--- .../spectrum/mixin/LightningEntityMixin.java | 1 - .../spectrum/mixin/LivingEntityMixin.java | 4 +-- .../LivingEntityPreventStatusClearMixin.java | 5 ---- .../dafuqs/spectrum/mixin/MapStateMixin.java | 2 +- .../dafuqs/spectrum/mixin/MobEntityMixin.java | 4 +-- .../spectrum/mixin/PlayerEntityMixin.java | 6 ---- .../spectrum/mixin/PlayerInventoryMixin.java | 1 - .../mixin/accessors/FoxEntityAccessor.java | 2 +- .../accessors/SimpleCriterionAccessor.java | 2 +- .../accessors/TridentEntityAccessor.java | 1 - .../mixin/client/GameRendererMixin.java | 2 +- .../spectrum/mixin/client/InGameHudMixin.java | 2 +- .../mixin/client/ItemRendererMixin.java | 3 -- .../mixin/client/SkinManagerMixin.java | 4 --- .../mixin/client/SoundSystemMixin.java | 16 +++++------ .../dafuqs/spectrum/mixin/compat/Plugin.java | 2 +- .../mob_effect/AscensionMobEffect.java | 1 - .../mob_effect/DeadlyPoisonMobEffect.java | 1 - .../mob_effect/DivinityMobEffect.java | 2 -- .../spectrum/mob_effect/FrenzyMobEffect.java | 1 - .../mob_effect/ImmunityMobEffect.java | 1 - .../mob_effect/LifeDrainMobEffect.java | 1 - .../mob_effect/NourishingMobEffect.java | 1 - .../spectrum/mob_effect/ScarredMobEffect.java | 1 - .../spectrum/mob_effect/SleepMobEffect.java | 2 +- .../spectrum/mob_effect/package-info.java | 5 ++-- .../AddLoreBedrockAnvilPayload.java | 1 - .../BindEnderSpliceToPlayerPayload.java | 1 - .../ChangeCompactingChestSettingsPayload.java | 1 - ...ebookConfirmationButtonPressedPayload.java | 1 - .../InkColorSelectedC2SPayload.java | 1 - ...articleSpawnerConfigurationC2SPayload.java | 1 - .../RenameItemInBedrockAnvilPayload.java | 1 - .../c2s_payloads/SetShadowSlotPayload.java | 1 - .../WorkstaffToggleSelectedPayload.java | 1 - .../networking/c2s_payloads/package-info.java | 5 ++-- .../spectrum/networking/package-info.java | 2 +- .../BlackHoleChestStatusUpdatePayload.java | 1 - .../ColorTransmissionPayload.java | 1 - .../CompactingChestStatusUpdatePayload.java | 1 - .../FabricationChestStatusUpdatePayload.java | 1 - .../InkColorSelectedS2CPayload.java | 1 - .../s2c_payloads/MoonstoneStrikePayload.java | 3 +- ...articleSpawnerConfigurationS2CPayload.java | 1 - .../PastelNetworkEdgeSyncPayload.java | 1 - .../PastelNetworkRemovedPayload.java | 1 - .../PastelNodeStatusUpdatePayload.java | 1 - .../PastelTransmissionPayload.java | 1 - .../PlayAscensionAppliedEffectsPayload.java | 5 +--- .../PlayBlockBoundSoundInstancePayload.java | 1 - .../PlayDivinityAppliedEffectsPayload.java | 2 -- ...FusionCraftingFinishedParticlePayload.java | 1 - ...sionCraftingInProgressParticlePayload.java | 1 - ...PlayMemoryManifestingParticlesPayload.java | 1 - .../PlayParticleAroundBlockSidesPayload.java | 1 - .../PlayParticleWithExactVelocityPayload.java | 1 - ...ParticleWithPatternAndVelocityPayload.java | 2 +- ...cleWithRandomOffsetAndVelocityPayload.java | 1 - ...destalCraftingFinishedParticlePayload.java | 1 - ...yPedestalStartCraftingParticlePayload.java | 1 - .../PlayPedestalUpgradedParticlePayload.java | 1 - .../PlayPresentOpeningParticlesPayload.java | 1 - .../PlayShootingStarParticlesPayload.java | 1 - .../PlayTakeOffBeltSoundInstancePayload.java | 1 - .../s2c_payloads/StartSkyLerpingPayload.java | 1 - .../SyncArtisansAtlasPayload.java | 1 - .../SyncMentalPresencePayload.java | 1 - .../TypedTransmissionPayload.java | 1 - .../UpdateBlockEntityInkPayload.java | 1 - .../networking/s2c_payloads/package-info.java | 2 +- .../java/de/dafuqs/spectrum/package-info.java | 2 +- .../particle/SpectrumParticleFactories.java | 1 - .../client/ColoredCraftingParticle.java | 2 +- .../client/ColoredExplosionParticle.java | 2 +- .../particle/client/DynamicParticle.java | 1 - .../client/MoonstoneStrikeParticle.java | 1 - .../client/PastelTransmissionParticle.java | 2 +- .../particle/client/package-info.java | 2 +- .../ColoredFluidRisingParticleEffect.java | 1 - .../PastelTransmissionParticleEffect.java | 3 +- .../particle/effect/package-info.java | 2 +- .../spectrum/particle/package-info.java | 5 ++-- .../particle/render/package-info.java | 5 ++-- .../ToggleableBlockColorProvider.java | 2 +- .../ToggleableItemColorProvider.java | 1 - .../progression/UnlockToastManager.java | 1 - .../advancement/AzureDikeChargeCriterion.java | 1 - .../advancement/BlockBrokenCriterion.java | 1 - .../BloodOrchidPluckingCriterion.java | 1 - .../CinderhearthSmeltingCriterion.java | 1 - .../CompletedMultiblockCriterion.java | 2 -- .../ConsumedPairedFoodCriterion.java | 1 - .../CrystallarieumGrownCriterion.java | 1 - .../DeeperDownPortalOpeningCriterion.java | 1 - .../advancement/DivinityTickCriterion.java | 1 - .../EnchanterCraftingCriterion.java | 1 - .../EnchantmentUpgradedCriterion.java | 1 - .../advancement/FluidDippingCriterion.java | 1 - .../FusionShrineCraftingCriterion.java | 1 - .../HummingstoneHymnCriterion.java | 1 - .../advancement/InertiaUsedCriterion.java | 1 - .../InkContainerInteractionCriterion.java | 1 - .../InkProjectileKillingCriterion.java | 1 - .../advancement/JeopardantKillCriterion.java | 1 - .../LootFunctionTriggerCriterion.java | 1 - .../MemoryManifestingCriterion.java | 1 - .../NaturesStaffConversionCriterion.java | 1 - .../PastelNetworkCreationCriterion.java | 3 -- .../PastelNodeUpgradeCriterion.java | 1 - .../PedestalCraftingCriterion.java | 1 - .../PotionWorkshopBrewingCriterion.java | 3 -- .../PotionWorkshopCraftingCriterion.java | 1 - .../PreservationCheckCriterion.java | 1 - .../advancement/SlimeSizingCriterion.java | 1 - .../SpectrumFishingRodHookedCriterion.java | 2 +- .../SpiritInstillerCraftingCriterion.java | 1 - .../advancement/TakeOffBeltJumpCriterion.java | 1 - .../TitrationBarrelTappingCriterion.java | 1 - .../advancement/TrinketChangeCriterion.java | 3 -- .../advancement/UpgradePlacingCriterion.java | 1 - .../progression/advancement/package-info.java | 2 +- .../spectrum/progression/package-info.java | 5 ++-- .../toast/UnlockedRecipeToast.java | 1 - .../progression/toast/package-info.java | 2 +- .../recipe/EmptyRecipeSerializer.java | 1 - .../spectrum/recipe/GatedSpectrumRecipe.java | 2 +- .../recipe/GatedStackSpectrumRecipe.java | 1 - .../spectrum/recipe/SimpleRecipeInput.java | 1 - .../anvil_crushing/AnvilCrushingRecipe.java | 2 +- .../recipe/anvil_crushing/package-info.java | 2 +- .../recipe/cinderhearth/package-info.java | 5 ++-- .../color_picker/InkConvertingRecipe.java | 2 +- .../recipe/color_picker/package-info.java | 2 +- .../crafting/dynamic/WrapPresentRecipe.java | 2 +- .../recipe/crafting/dynamic/package-info.java | 2 +- .../crystallarieum/CrystallarieumRecipe.java | 2 +- .../recipe/crystallarieum/package-info.java | 2 +- .../enchanter/EnchantmentUpgradeRecipe.java | 1 - .../recipe/enchanter/package-info.java | 5 ++-- .../DragonrotConvertingRecipe.java | 1 - .../FluidConvertingRecipe.java | 1 - .../LiquidCrystalConvertingRecipe.java | 1 - .../MidnightSolutionConvertingRecipe.java | 1 - .../recipe/fluid_converting/package-info.java | 5 ++-- .../fusion_shrine/FusionShrineRecipe.java | 3 +- .../fusion_shrine/dynamic/package-info.java | 2 +- .../recipe/fusion_shrine/package-info.java | 2 +- .../dafuqs/spectrum/recipe/package-info.java | 5 ++-- .../recipe/pedestal/PedestalRecipe.java | 2 +- .../recipe/pedestal/dynamic/package-info.java | 5 ++-- .../recipe/pedestal/package-info.java | 2 +- .../potion_workshop/PotionRecipeEffect.java | 2 +- .../PotionWorkshopBrewingRecipe.java | 2 +- .../PotionWorkshopCraftingRecipe.java | 1 - .../PotionWorkshopReactingRecipe.java | 1 - .../potion_workshop/PotionWorkshopRecipe.java | 2 +- .../recipe/potion_workshop/package-info.java | 2 +- .../PrimordialFireBurningRecipe.java | 2 +- .../dynamic/EnchantedBookUnsoulingRecipe.java | 1 - .../dynamic/package-info.java | 5 ++-- .../primordial_fire_burning/package-info.java | 5 ++-- .../SpiritInstillerRecipe.java | 1 - .../dynamic/HardcorePlayerRevivalRecipe.java | 3 +- .../dynamic/package-info.java | 5 ++-- .../SpawnerCreatureChangeRecipe.java | 2 +- .../recipe/spirit_instiller/package-info.java | 5 ++-- .../TitrationBarrelRecipe.java | 1 - .../dynamic/AquaRegiaRecipe.java | 1 - .../dynamic/CheongRecipe.java | 1 - .../dynamic/JadeWineRecipe.java | 1 - .../dynamic/NecteredViognierRecipe.java | 1 - .../dynamic/SuspiciousBrewRecipe.java | 2 +- .../dynamic/package-info.java | 5 ++-- .../recipe/titration_barrel/package-info.java | 2 +- .../spectrum/registries/SpectrumBlocks.java | 3 +- .../SpectrumConfiguredFeatureKeys.java | 1 - .../registries/SpectrumDamageTypes.java | 2 +- .../SpectrumDispenserBehaviors.java | 1 - .../SpectrumEntityColorProcessors.java | 2 +- .../registries/SpectrumEventListeners.java | 6 +--- .../spectrum/registries/SpectrumFluids.java | 5 ---- .../registries/SpectrumIngredientTypes.java | 5 ---- .../registries/SpectrumItemGroups.java | 4 --- .../SpectrumItemProjectileBehaviors.java | 9 +----- .../spectrum/registries/SpectrumItems.java | 2 +- .../SpectrumLootConditionTypes.java | 1 - .../registries/SpectrumMultiblocks.java | 2 +- .../SpectrumOmniAcceleratorProjectiles.java | 5 +--- .../registries/SpectrumRecipeSerializers.java | 3 -- .../spectrum/registries/SpectrumRecipes.java | 2 -- .../registries/SpectrumRegistries.java | 3 -- .../registries/SpectrumRegistryKeys.java | 1 - .../SpectrumResourceConditions.java | 5 ---- .../registries/SpectrumWoodTypes.java | 2 -- .../client/SpectrumClientEventListeners.java | 11 ++++---- .../SpectrumEnvironmentalDataOverrides.java | 12 ++++---- .../client/SpectrumRenderLayers.java | 1 - .../registries/client/package-info.java | 2 +- .../spectrum/registries/package-info.java | 2 +- .../dafuqs/spectrum/render/HudRenderers.java | 2 +- .../de/dafuqs/spectrum/render/SkyLerper.java | 2 +- .../spectrum/render/SpectrumShaders.java | 4 +-- .../render/animation/DataSignature.java | 2 +- .../render/animation/FlowAnimator.java | 2 +- .../spectrum/render/animation/FlowData.java | 2 -- .../render/animation/package-info.java | 5 ++-- .../render/armor/BedrockCapeRenderer.java | 4 +-- .../spectrum/render/armor/package-info.java | 2 +- .../render/biome_rendering/ColorGrading.java | 9 ++---- .../biome_rendering/EnvironmentalData.java | 5 ++-- .../EnvironmentalRendering.java | 17 ++++++----- .../render/biome_rendering/package-info.java | 5 ++-- .../dafuqs/spectrum/render/package-info.java | 2 +- .../sound/BiomeAttenuatingSoundInstance.java | 2 +- .../sound/BlockAuraSoundInstance.java | 3 +- .../sound/CraftingBlockSoundInstance.java | 1 - .../spectrum/sound/DimensionReverb.java | 1 - .../spectrum/sound/DivinitySoundInstance.java | 4 +-- .../dafuqs/spectrum/sound/package-info.java | 5 ++-- .../worldgen/features/ColumnsFeature.java | 2 +- .../worldgen/features/PillarFeature.java | 1 - .../worldgen/features/package-info.java | 2 +- .../structure_pool_elements/package-info.java | 2 +- .../worldgen/structures/package-info.java | 2 +- .../tree_decorators/package-info.java | 2 +- 909 files changed, 703 insertions(+), 1360 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java index 32ae7250fb..32610366b9 100644 --- a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java +++ b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java @@ -35,7 +35,7 @@ import net.neoforged.neoforge.event.tick.*; import net.neoforged.neoforge.network.event.*; import net.neoforged.neoforge.network.registration.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import org.slf4j.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/block/ColorableBlock.java b/src/main/java/de/dafuqs/spectrum/api/block/ColorableBlock.java index 4023919c27..11b228cca4 100644 --- a/src/main/java/de/dafuqs/spectrum/api/block/ColorableBlock.java +++ b/src/main/java/de/dafuqs/spectrum/api/block/ColorableBlock.java @@ -7,7 +7,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/block/FilterConfigurable.java b/src/main/java/de/dafuqs/spectrum/api/block/FilterConfigurable.java index 4849deff80..06c8292fa0 100644 --- a/src/main/java/de/dafuqs/spectrum/api/block/FilterConfigurable.java +++ b/src/main/java/de/dafuqs/spectrum/api/block/FilterConfigurable.java @@ -19,7 +19,7 @@ import net.minecraft.world.item.*; import net.neoforged.neoforge.network.*; import org.apache.commons.lang3.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/block/ImplementedInventory.java b/src/main/java/de/dafuqs/spectrum/api/block/ImplementedInventory.java index f743803254..f415a71b68 100644 --- a/src/main/java/de/dafuqs/spectrum/api/block/ImplementedInventory.java +++ b/src/main/java/de/dafuqs/spectrum/api/block/ImplementedInventory.java @@ -4,7 +4,6 @@ import net.minecraft.world.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; -import javax.annotation.*; /** * A simple {@code Inventory} implementation with only default methods + an item list getter. diff --git a/src/main/java/de/dafuqs/spectrum/api/block/InkColorSelectedPacketReceiver.java b/src/main/java/de/dafuqs/spectrum/api/block/InkColorSelectedPacketReceiver.java index 6398651e72..08f5cdb7ec 100644 --- a/src/main/java/de/dafuqs/spectrum/api/block/InkColorSelectedPacketReceiver.java +++ b/src/main/java/de/dafuqs/spectrum/api/block/InkColorSelectedPacketReceiver.java @@ -3,7 +3,7 @@ import de.dafuqs.spectrum.api.ink.color.*; import net.minecraft.core.*; import net.minecraft.world.level.block.entity.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/block/MoonstoneStrikeableBlock.java b/src/main/java/de/dafuqs/spectrum/api/block/MoonstoneStrikeableBlock.java index db43150e79..7f93759110 100644 --- a/src/main/java/de/dafuqs/spectrum/api/block/MoonstoneStrikeableBlock.java +++ b/src/main/java/de/dafuqs/spectrum/api/block/MoonstoneStrikeableBlock.java @@ -3,7 +3,7 @@ import net.minecraft.core.*; import net.minecraft.world.entity.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public interface MoonstoneStrikeableBlock { diff --git a/src/main/java/de/dafuqs/spectrum/api/block/MultiblockCrafter.java b/src/main/java/de/dafuqs/spectrum/api/block/MultiblockCrafter.java index 5cb73c061b..8080527f77 100644 --- a/src/main/java/de/dafuqs/spectrum/api/block/MultiblockCrafter.java +++ b/src/main/java/de/dafuqs/spectrum/api/block/MultiblockCrafter.java @@ -13,7 +13,7 @@ import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public interface MultiblockCrafter extends Upgradeable, PlayerOwned { diff --git a/src/main/java/de/dafuqs/spectrum/api/block/PlayerOwned.java b/src/main/java/de/dafuqs/spectrum/api/block/PlayerOwned.java index 848dc82b70..d37d439aee 100644 --- a/src/main/java/de/dafuqs/spectrum/api/block/PlayerOwned.java +++ b/src/main/java/de/dafuqs/spectrum/api/block/PlayerOwned.java @@ -1,11 +1,10 @@ package de.dafuqs.spectrum.api.block; -import de.dafuqs.spectrum.*; import net.minecraft.nbt.*; import net.minecraft.server.level.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/block/StrippableDrop.java b/src/main/java/de/dafuqs/spectrum/api/block/StrippableDrop.java index c3aad19234..de3eaaba65 100644 --- a/src/main/java/de/dafuqs/spectrum/api/block/StrippableDrop.java +++ b/src/main/java/de/dafuqs/spectrum/api/block/StrippableDrop.java @@ -13,7 +13,7 @@ import net.minecraft.world.level.storage.loot.*; import net.minecraft.world.level.storage.loot.parameters.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/block/package-info.java b/src/main/java/de/dafuqs/spectrum/api/block/package-info.java index 65c133c2f8..cd1d120d58 100644 --- a/src/main/java/de/dafuqs/spectrum/api/block/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/api/block/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.api.block; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/color/package-info.java b/src/main/java/de/dafuqs/spectrum/api/color/package-info.java index b91f6deb31..1181ad754a 100644 --- a/src/main/java/de/dafuqs/spectrum/api/color/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/api/color/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.api.color; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/damage_type/package-info.java b/src/main/java/de/dafuqs/spectrum/api/damage_type/package-info.java index 9a9dce56b5..72fc1ae4b2 100644 --- a/src/main/java/de/dafuqs/spectrum/api/damage_type/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/api/damage_type/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.api.damage_type; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/entity/POIMemorized.java b/src/main/java/de/dafuqs/spectrum/api/entity/POIMemorized.java index 8c8142928d..6fea00bffd 100644 --- a/src/main/java/de/dafuqs/spectrum/api/entity/POIMemorized.java +++ b/src/main/java/de/dafuqs/spectrum/api/entity/POIMemorized.java @@ -6,7 +6,7 @@ import net.minecraft.server.level.*; import net.minecraft.tags.*; import net.minecraft.world.entity.ai.village.poi.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/entity/PackEntity.java b/src/main/java/de/dafuqs/spectrum/api/entity/PackEntity.java index 7a4a32614a..cdeaa79648 100644 --- a/src/main/java/de/dafuqs/spectrum/api/entity/PackEntity.java +++ b/src/main/java/de/dafuqs/spectrum/api/entity/PackEntity.java @@ -2,7 +2,7 @@ import net.minecraft.world.entity.*; import net.minecraft.world.entity.ai.goal.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/entity/package-info.java b/src/main/java/de/dafuqs/spectrum/api/entity/package-info.java index 0eb66afcaa..cafe0bcb13 100644 --- a/src/main/java/de/dafuqs/spectrum/api/entity/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/api/entity/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.api.entity; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/fluid/SpectrumFluidTank.java b/src/main/java/de/dafuqs/spectrum/api/fluid/SpectrumFluidTank.java index 0f3a0cf559..b2d4f79c0f 100644 --- a/src/main/java/de/dafuqs/spectrum/api/fluid/SpectrumFluidTank.java +++ b/src/main/java/de/dafuqs/spectrum/api/fluid/SpectrumFluidTank.java @@ -2,7 +2,6 @@ import net.neoforged.neoforge.fluids.*; import net.neoforged.neoforge.fluids.capability.templates.*; -import javax.annotation.*; public class SpectrumFluidTank extends FluidTank { private final Callback updateCallback; diff --git a/src/main/java/de/dafuqs/spectrum/api/fluid/package-info.java b/src/main/java/de/dafuqs/spectrum/api/fluid/package-info.java index 34ee035307..2f670fafa5 100644 --- a/src/main/java/de/dafuqs/spectrum/api/fluid/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/api/fluid/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.api.fluid; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/gui/SpectrumTooltipComponent.java b/src/main/java/de/dafuqs/spectrum/api/gui/SpectrumTooltipComponent.java index 18f92b0774..91df3695b5 100644 --- a/src/main/java/de/dafuqs/spectrum/api/gui/SpectrumTooltipComponent.java +++ b/src/main/java/de/dafuqs/spectrum/api/gui/SpectrumTooltipComponent.java @@ -6,7 +6,6 @@ import net.minecraft.client.gui.screens.inventory.tooltip.*; import net.minecraft.resources.*; import net.minecraft.world.item.*; -import javax.annotation.*; public interface SpectrumTooltipComponent extends ClientTooltipComponent { diff --git a/src/main/java/de/dafuqs/spectrum/api/gui/package-info.java b/src/main/java/de/dafuqs/spectrum/api/gui/package-info.java index b7de02e765..a07e0d063e 100644 --- a/src/main/java/de/dafuqs/spectrum/api/gui/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/api/gui/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.api.gui; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/InkPowered.java b/src/main/java/de/dafuqs/spectrum/api/ink/InkPowered.java index 8bd596e631..a5495caed8 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/InkPowered.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/InkPowered.java @@ -21,7 +21,7 @@ import net.minecraft.world.item.crafting.*; import net.minecraft.world.item.enchantment.*; import net.neoforged.api.distmarker.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import top.theillusivec4.curios.api.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/capability/ItemInkCapability.java b/src/main/java/de/dafuqs/spectrum/api/ink/capability/ItemInkCapability.java index 239de190aa..7ea6c2eef9 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/capability/ItemInkCapability.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/capability/ItemInkCapability.java @@ -1,9 +1,7 @@ package de.dafuqs.spectrum.api.ink.capability; import de.dafuqs.spectrum.api.ink.storage.*; -import net.minecraft.core.*; import net.minecraft.world.item.*; -import net.minecraft.world.level.*; import javax.annotation.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/color/InkColor.java b/src/main/java/de/dafuqs/spectrum/api/ink/color/InkColor.java index 8782560f7c..57a12fad82 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/color/InkColor.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/color/InkColor.java @@ -10,7 +10,7 @@ import net.minecraft.tags.*; import net.minecraft.world.item.*; import org.joml.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/color/package-info.java b/src/main/java/de/dafuqs/spectrum/api/ink/color/package-info.java index c416262c1b..1be76b1b04 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/color/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/color/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.api.energy.color; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/package-info.java b/src/main/java/de/dafuqs/spectrum/api/ink/package-info.java index f09a1b4a34..9f1becfa23 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.api.energy; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorageBlockEntity.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorageBlockEntity.java index b1ab0ad7d8..57fd5951cf 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorageBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorageBlockEntity.java @@ -2,7 +2,6 @@ import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.upgrade.*; -import javax.annotation.*; /** * Defines that an object holds a PigmentEnergyStorage diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/storage/package-info.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/package-info.java index 2d2cb404be..d9439ce159 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/storage/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.api.energy.storage; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/interaction/EntityColorProcessor.java b/src/main/java/de/dafuqs/spectrum/api/interaction/EntityColorProcessor.java index 48a03fc745..26e06f3922 100644 --- a/src/main/java/de/dafuqs/spectrum/api/interaction/EntityColorProcessor.java +++ b/src/main/java/de/dafuqs/spectrum/api/interaction/EntityColorProcessor.java @@ -3,7 +3,7 @@ import net.minecraft.world.entity.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/interaction/EntityColorProcessorRegistry.java b/src/main/java/de/dafuqs/spectrum/api/interaction/EntityColorProcessorRegistry.java index edc87c172f..2adcf20c6a 100644 --- a/src/main/java/de/dafuqs/spectrum/api/interaction/EntityColorProcessorRegistry.java +++ b/src/main/java/de/dafuqs/spectrum/api/interaction/EntityColorProcessorRegistry.java @@ -4,7 +4,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import org.apache.commons.lang3.function.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/interaction/ItemProjectileBehavior.java b/src/main/java/de/dafuqs/spectrum/api/interaction/ItemProjectileBehavior.java index b819c411da..1072eac861 100644 --- a/src/main/java/de/dafuqs/spectrum/api/interaction/ItemProjectileBehavior.java +++ b/src/main/java/de/dafuqs/spectrum/api/interaction/ItemProjectileBehavior.java @@ -23,7 +23,7 @@ import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/interaction/ItemProviderRegistry.java b/src/main/java/de/dafuqs/spectrum/api/interaction/ItemProviderRegistry.java index a3a079d7cf..276745c562 100644 --- a/src/main/java/de/dafuqs/spectrum/api/interaction/ItemProviderRegistry.java +++ b/src/main/java/de/dafuqs/spectrum/api/interaction/ItemProviderRegistry.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.api.interaction; import net.minecraft.world.item.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/interaction/OmniAcceleratorProjectile.java b/src/main/java/de/dafuqs/spectrum/api/interaction/OmniAcceleratorProjectile.java index 2cca547155..d151468f7e 100644 --- a/src/main/java/de/dafuqs/spectrum/api/interaction/OmniAcceleratorProjectile.java +++ b/src/main/java/de/dafuqs/spectrum/api/interaction/OmniAcceleratorProjectile.java @@ -10,7 +10,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/interaction/package-info.java b/src/main/java/de/dafuqs/spectrum/api/interaction/package-info.java index b18b4af8bb..8f2965fb84 100644 --- a/src/main/java/de/dafuqs/spectrum/api/interaction/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/api/interaction/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.api.interaction; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/item/ExpandedStatTooltip.java b/src/main/java/de/dafuqs/spectrum/api/item/ExpandedStatTooltip.java index e55563d468..7e4826e56b 100644 --- a/src/main/java/de/dafuqs/spectrum/api/item/ExpandedStatTooltip.java +++ b/src/main/java/de/dafuqs/spectrum/api/item/ExpandedStatTooltip.java @@ -3,7 +3,7 @@ import net.minecraft.network.chat.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/item/ExperienceStorageItem.java b/src/main/java/de/dafuqs/spectrum/api/item/ExperienceStorageItem.java index e02f68c7b4..2418fb4983 100644 --- a/src/main/java/de/dafuqs/spectrum/api/item/ExperienceStorageItem.java +++ b/src/main/java/de/dafuqs/spectrum/api/item/ExperienceStorageItem.java @@ -1,9 +1,7 @@ package de.dafuqs.spectrum.api.item; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; -import net.minecraft.util.*; import net.minecraft.world.item.*; public interface ExperienceStorageItem { diff --git a/src/main/java/de/dafuqs/spectrum/api/item/InkPoweredPotionFillable.java b/src/main/java/de/dafuqs/spectrum/api/item/InkPoweredPotionFillable.java index 81eadcc0b4..59b9e586ff 100644 --- a/src/main/java/de/dafuqs/spectrum/api/item/InkPoweredPotionFillable.java +++ b/src/main/java/de/dafuqs/spectrum/api/item/InkPoweredPotionFillable.java @@ -4,7 +4,6 @@ import net.minecraft.network.chat.*; import net.minecraft.world.effect.*; import net.minecraft.world.item.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/item/Preenchanted.java b/src/main/java/de/dafuqs/spectrum/api/item/Preenchanted.java index 0d6074cc6d..4fd113469b 100644 --- a/src/main/java/de/dafuqs/spectrum/api/item/Preenchanted.java +++ b/src/main/java/de/dafuqs/spectrum/api/item/Preenchanted.java @@ -7,7 +7,7 @@ import net.minecraft.resources.*; import net.minecraft.world.item.*; import net.minecraft.world.item.enchantment.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/item/SlotReservingItem.java b/src/main/java/de/dafuqs/spectrum/api/item/SlotReservingItem.java index 1769a4c4f9..60639320ef 100644 --- a/src/main/java/de/dafuqs/spectrum/api/item/SlotReservingItem.java +++ b/src/main/java/de/dafuqs/spectrum/api/item/SlotReservingItem.java @@ -2,7 +2,7 @@ import de.dafuqs.spectrum.registries.*; import net.minecraft.world.item.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/item/package-info.java b/src/main/java/de/dafuqs/spectrum/api/item/package-info.java index baa8894b4c..3876020e84 100644 --- a/src/main/java/de/dafuqs/spectrum/api/item/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/api/item/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.api.item; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/item_group/package-info.java b/src/main/java/de/dafuqs/spectrum/api/item_group/package-info.java index d77b3d4829..2967c73e98 100644 --- a/src/main/java/de/dafuqs/spectrum/api/item_group/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/api/item_group/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.api.item_group; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java b/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java index 3c66ba37a7..45a9d17cad 100644 --- a/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java +++ b/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java @@ -5,7 +5,6 @@ import net.minecraft.world.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; public final class PastelUpgradeSignature { diff --git a/src/main/java/de/dafuqs/spectrum/api/pastel_network/package-info.java b/src/main/java/de/dafuqs/spectrum/api/pastel_network/package-info.java index caebcc666c..33e048cf2b 100644 --- a/src/main/java/de/dafuqs/spectrum/api/pastel_network/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/api/pastel_network/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.api.pastel_network; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/predicate/block/package-info.java b/src/main/java/de/dafuqs/spectrum/api/predicate/block/package-info.java index 26154e8b8c..1a948e0dd0 100644 --- a/src/main/java/de/dafuqs/spectrum/api/predicate/block/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/api/predicate/block/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.api.predicate.block; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/predicate/item/BottomlessStackPredicate.java b/src/main/java/de/dafuqs/spectrum/api/predicate/item/BottomlessStackPredicate.java index 83dad01b2f..0937819af4 100644 --- a/src/main/java/de/dafuqs/spectrum/api/predicate/item/BottomlessStackPredicate.java +++ b/src/main/java/de/dafuqs/spectrum/api/predicate/item/BottomlessStackPredicate.java @@ -8,7 +8,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.core.component.*; import net.minecraft.world.item.*; -import javax.annotation.*; public record BottomlessStackPredicate(ItemPredicate template, LongRange count) implements SingleComponentItemPredicate { diff --git a/src/main/java/de/dafuqs/spectrum/api/predicate/item/InfusedBeveragePredicate.java b/src/main/java/de/dafuqs/spectrum/api/predicate/item/InfusedBeveragePredicate.java index f8020be546..9e300403ad 100644 --- a/src/main/java/de/dafuqs/spectrum/api/predicate/item/InfusedBeveragePredicate.java +++ b/src/main/java/de/dafuqs/spectrum/api/predicate/item/InfusedBeveragePredicate.java @@ -7,7 +7,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.core.component.*; import net.minecraft.world.item.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/predicate/item/StoredExperiencePredicate.java b/src/main/java/de/dafuqs/spectrum/api/predicate/item/StoredExperiencePredicate.java index 1f77231633..0bf1ab0f3f 100644 --- a/src/main/java/de/dafuqs/spectrum/api/predicate/item/StoredExperiencePredicate.java +++ b/src/main/java/de/dafuqs/spectrum/api/predicate/item/StoredExperiencePredicate.java @@ -5,7 +5,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.core.component.*; import net.minecraft.world.item.*; -import javax.annotation.*; public record StoredExperiencePredicate(MinMaxBounds.Ints experience) implements SingleComponentItemPredicate { diff --git a/src/main/java/de/dafuqs/spectrum/api/predicate/item/SweetenedPredicate.java b/src/main/java/de/dafuqs/spectrum/api/predicate/item/SweetenedPredicate.java index 72d56da4cd..af8bd00858 100644 --- a/src/main/java/de/dafuqs/spectrum/api/predicate/item/SweetenedPredicate.java +++ b/src/main/java/de/dafuqs/spectrum/api/predicate/item/SweetenedPredicate.java @@ -6,7 +6,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.core.component.*; import net.minecraft.world.item.*; -import javax.annotation.*; public record SweetenedPredicate(boolean sweetened) implements SingleComponentItemPredicate { diff --git a/src/main/java/de/dafuqs/spectrum/api/predicate/item/package-info.java b/src/main/java/de/dafuqs/spectrum/api/predicate/item/package-info.java index d6310bdaf1..bec5ae9c96 100644 --- a/src/main/java/de/dafuqs/spectrum/api/predicate/item/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/api/predicate/item/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.api.predicate.item; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/predicate/location/CommandPredicate.java b/src/main/java/de/dafuqs/spectrum/api/predicate/location/CommandPredicate.java index 9fb13b7d2b..e5f166cbbc 100644 --- a/src/main/java/de/dafuqs/spectrum/api/predicate/location/CommandPredicate.java +++ b/src/main/java/de/dafuqs/spectrum/api/predicate/location/CommandPredicate.java @@ -9,7 +9,6 @@ import net.minecraft.server.*; import net.minecraft.server.level.*; import net.minecraft.world.phys.*; -import javax.annotation.*; import java.util.concurrent.atomic.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/predicate/location/MoonPhasePredicate.java b/src/main/java/de/dafuqs/spectrum/api/predicate/location/MoonPhasePredicate.java index 714d984920..b8818c019f 100644 --- a/src/main/java/de/dafuqs/spectrum/api/predicate/location/MoonPhasePredicate.java +++ b/src/main/java/de/dafuqs/spectrum/api/predicate/location/MoonPhasePredicate.java @@ -6,7 +6,6 @@ import net.minecraft.network.codec.*; import net.minecraft.server.level.*; import net.minecraft.util.*; -import javax.annotation.*; public enum MoonPhasePredicate implements StringRepresentable { FULL_MOON, diff --git a/src/main/java/de/dafuqs/spectrum/api/predicate/location/TimeOfDayPredicate.java b/src/main/java/de/dafuqs/spectrum/api/predicate/location/TimeOfDayPredicate.java index e8eb5ea173..87a64b4125 100644 --- a/src/main/java/de/dafuqs/spectrum/api/predicate/location/TimeOfDayPredicate.java +++ b/src/main/java/de/dafuqs/spectrum/api/predicate/location/TimeOfDayPredicate.java @@ -7,7 +7,7 @@ import net.minecraft.network.codec.*; import net.minecraft.server.level.*; import net.minecraft.util.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public record TimeOfDayPredicate(TimeHelper.@Nullable TimeOfDay name, MinMaxBounds.Ints range) { diff --git a/src/main/java/de/dafuqs/spectrum/api/predicate/location/WeatherPredicate.java b/src/main/java/de/dafuqs/spectrum/api/predicate/location/WeatherPredicate.java index 38c0598e9b..5a4d5d7d69 100644 --- a/src/main/java/de/dafuqs/spectrum/api/predicate/location/WeatherPredicate.java +++ b/src/main/java/de/dafuqs/spectrum/api/predicate/location/WeatherPredicate.java @@ -7,7 +7,6 @@ import net.minecraft.server.level.*; import net.minecraft.util.*; import net.minecraft.world.level.*; -import javax.annotation.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/predicate/location/package-info.java b/src/main/java/de/dafuqs/spectrum/api/predicate/location/package-info.java index 8bf44321a6..ee672de772 100644 --- a/src/main/java/de/dafuqs/spectrum/api/predicate/location/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/api/predicate/location/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.api.predicate.location; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/recipe/FusionShrineRecipeWorldEffect.java b/src/main/java/de/dafuqs/spectrum/api/recipe/FusionShrineRecipeWorldEffect.java index abce0438cd..ad95a3b7d3 100644 --- a/src/main/java/de/dafuqs/spectrum/api/recipe/FusionShrineRecipeWorldEffect.java +++ b/src/main/java/de/dafuqs/spectrum/api/recipe/FusionShrineRecipeWorldEffect.java @@ -12,7 +12,6 @@ import net.minecraft.server.*; import net.minecraft.server.level.*; import net.minecraft.world.phys.*; -import javax.annotation.*; /** * Effects that are played when crafting with the fusion shrine diff --git a/src/main/java/de/dafuqs/spectrum/api/recipe/GatedRecipe.java b/src/main/java/de/dafuqs/spectrum/api/recipe/GatedRecipe.java index e24c448794..58aca80c68 100644 --- a/src/main/java/de/dafuqs/spectrum/api/recipe/GatedRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/api/recipe/GatedRecipe.java @@ -7,9 +7,8 @@ import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.crafting.*; -import net.neoforged.api.distmarker.*; import net.neoforged.fml.loading.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/recipe/IngredientStack.java b/src/main/java/de/dafuqs/spectrum/api/recipe/IngredientStack.java index 0f6e7ca717..384aff96e1 100644 --- a/src/main/java/de/dafuqs/spectrum/api/recipe/IngredientStack.java +++ b/src/main/java/de/dafuqs/spectrum/api/recipe/IngredientStack.java @@ -12,7 +12,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.neoforged.neoforge.common.crafting.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.stream.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/recipe/package-info.java b/src/main/java/de/dafuqs/spectrum/api/recipe/package-info.java index c7346bd18d..8c407132c2 100644 --- a/src/main/java/de/dafuqs/spectrum/api/recipe/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/api/recipe/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.api.recipe; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/render/DynamicRenderModel.java b/src/main/java/de/dafuqs/spectrum/api/render/DynamicRenderModel.java index a51b650c02..05c0d9689b 100644 --- a/src/main/java/de/dafuqs/spectrum/api/render/DynamicRenderModel.java +++ b/src/main/java/de/dafuqs/spectrum/api/render/DynamicRenderModel.java @@ -5,13 +5,13 @@ import net.minecraft.client.renderer.block.model.*; import net.minecraft.client.renderer.texture.*; import net.minecraft.client.resources.model.*; -import net.minecraft.core.Direction; +import net.minecraft.core.*; import net.minecraft.resources.*; -import net.minecraft.util.RandomSource; +import net.minecraft.util.*; import net.minecraft.world.entity.*; import net.minecraft.world.item.*; -import net.minecraft.world.level.block.state.BlockState; -import org.jspecify.annotations.Nullable; +import net.minecraft.world.level.block.state.*; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/render/ExtendedItemBarProvider.java b/src/main/java/de/dafuqs/spectrum/api/render/ExtendedItemBarProvider.java index b20f84901f..669cac5ece 100644 --- a/src/main/java/de/dafuqs/spectrum/api/render/ExtendedItemBarProvider.java +++ b/src/main/java/de/dafuqs/spectrum/api/render/ExtendedItemBarProvider.java @@ -2,7 +2,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public interface ExtendedItemBarProvider { diff --git a/src/main/java/de/dafuqs/spectrum/api/render/SlotBackgroundEffectProvider.java b/src/main/java/de/dafuqs/spectrum/api/render/SlotBackgroundEffectProvider.java index d791ea2947..4b6c983ed5 100644 --- a/src/main/java/de/dafuqs/spectrum/api/render/SlotBackgroundEffectProvider.java +++ b/src/main/java/de/dafuqs/spectrum/api/render/SlotBackgroundEffectProvider.java @@ -2,7 +2,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public interface SlotBackgroundEffectProvider { diff --git a/src/main/java/de/dafuqs/spectrum/api/render/package-info.java b/src/main/java/de/dafuqs/spectrum/api/render/package-info.java index 08aac97129..fea1ec8a13 100644 --- a/src/main/java/de/dafuqs/spectrum/api/render/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/api/render/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.api.render; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/attachment_types/AzureDikeAttachmentType.java b/src/main/java/de/dafuqs/spectrum/attachment_types/AzureDikeAttachmentType.java index 581f470f4e..8515ed4e9f 100644 --- a/src/main/java/de/dafuqs/spectrum/attachment_types/AzureDikeAttachmentType.java +++ b/src/main/java/de/dafuqs/spectrum/attachment_types/AzureDikeAttachmentType.java @@ -16,7 +16,6 @@ import net.neoforged.neoforge.attachment.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import top.theillusivec4.curios.api.*; import top.theillusivec4.curios.api.type.capability.*; diff --git a/src/main/java/de/dafuqs/spectrum/attachment_types/EverpromiseRibbonAttachmentType.java b/src/main/java/de/dafuqs/spectrum/attachment_types/EverpromiseRibbonAttachmentType.java index bf401a292e..be1553f582 100644 --- a/src/main/java/de/dafuqs/spectrum/attachment_types/EverpromiseRibbonAttachmentType.java +++ b/src/main/java/de/dafuqs/spectrum/attachment_types/EverpromiseRibbonAttachmentType.java @@ -9,7 +9,6 @@ import net.minecraft.world.level.*; import net.neoforged.neoforge.attachment.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/attachment_types/HardcoreDeathAttachmentType.java b/src/main/java/de/dafuqs/spectrum/attachment_types/HardcoreDeathAttachmentType.java index 45b201e392..0bac7ffd43 100644 --- a/src/main/java/de/dafuqs/spectrum/attachment_types/HardcoreDeathAttachmentType.java +++ b/src/main/java/de/dafuqs/spectrum/attachment_types/HardcoreDeathAttachmentType.java @@ -12,7 +12,6 @@ import net.minecraft.world.level.*; import net.neoforged.neoforge.attachment.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/attachment_types/LastKillAttachmentType.java b/src/main/java/de/dafuqs/spectrum/attachment_types/LastKillAttachmentType.java index f1f802ba2e..e39732086a 100644 --- a/src/main/java/de/dafuqs/spectrum/attachment_types/LastKillAttachmentType.java +++ b/src/main/java/de/dafuqs/spectrum/attachment_types/LastKillAttachmentType.java @@ -9,7 +9,6 @@ import net.minecraft.world.level.*; import net.neoforged.neoforge.attachment.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/attachment_types/MiscPlayerDataAttachmentType.java b/src/main/java/de/dafuqs/spectrum/attachment_types/MiscPlayerDataAttachmentType.java index 334432ce9f..e9187c1e7b 100644 --- a/src/main/java/de/dafuqs/spectrum/attachment_types/MiscPlayerDataAttachmentType.java +++ b/src/main/java/de/dafuqs/spectrum/attachment_types/MiscPlayerDataAttachmentType.java @@ -16,7 +16,7 @@ import net.minecraft.world.item.*; import net.neoforged.neoforge.attachment.*; import net.neoforged.neoforge.network.handling.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/attachment_types/PrimordialFireAttachmentType.java b/src/main/java/de/dafuqs/spectrum/attachment_types/PrimordialFireAttachmentType.java index 10d3eff6f2..f02b82f4fc 100644 --- a/src/main/java/de/dafuqs/spectrum/attachment_types/PrimordialFireAttachmentType.java +++ b/src/main/java/de/dafuqs/spectrum/attachment_types/PrimordialFireAttachmentType.java @@ -24,7 +24,6 @@ import net.neoforged.neoforge.common.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/attachment_types/package-info.java b/src/main/java/de/dafuqs/spectrum/attachment_types/package-info.java index d948227edb..2858c6ea41 100644 --- a/src/main/java/de/dafuqs/spectrum/attachment_types/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/attachment_types/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.attachment_types; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/BedrockAnvilBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/BedrockAnvilBlock.java index dbdf13bcb1..be80ec2be9 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/BedrockAnvilBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/BedrockAnvilBlock.java @@ -12,7 +12,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/BismuthBudBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/BismuthBudBlock.java index 5fb8650d9a..57b456a491 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/BismuthBudBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/BismuthBudBlock.java @@ -12,7 +12,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class BismuthBudBlock extends SpectrumClusterBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/BlockWithTooltip.java b/src/main/java/de/dafuqs/spectrum/blocks/BlockWithTooltip.java index 177838c26a..755355959f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/BlockWithTooltip.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/BlockWithTooltip.java @@ -4,7 +4,7 @@ import net.minecraft.network.chat.*; import net.minecraft.world.item.*; import net.minecraft.world.level.block.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/FluidLogging.java b/src/main/java/de/dafuqs/spectrum/blocks/FluidLogging.java index 44925eedbc..dd3da21c96 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/FluidLogging.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/FluidLogging.java @@ -14,7 +14,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.level.material.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/InWorldInteractionBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/InWorldInteractionBlockEntity.java index dfd7eb4d48..2163f1e68f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/InWorldInteractionBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/InWorldInteractionBlockEntity.java @@ -14,7 +14,7 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.storage.loot.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public abstract class InWorldInteractionBlockEntity extends BlockEntity implements RandomizableContainer, ImplementedInventory { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/PlacedItemBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/PlacedItemBlock.java index a6f72e7c05..df94664689 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/PlacedItemBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/PlacedItemBlock.java @@ -11,7 +11,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.storage.loot.*; import net.minecraft.world.level.storage.loot.parameters.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/PlacedItemBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/PlacedItemBlockEntity.java index cb3e774f9e..598f7776ee 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/PlacedItemBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/PlacedItemBlockEntity.java @@ -8,7 +8,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/PrimordialFireBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/PrimordialFireBlock.java index 7b94e5ad90..3020750e77 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/PrimordialFireBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/PrimordialFireBlock.java @@ -23,7 +23,7 @@ import net.minecraft.world.level.gameevent.*; import net.minecraft.world.level.pathfinder.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/TallCropBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/TallCropBlock.java index cdeb3a2552..6290425ea5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/TallCropBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/TallCropBlock.java @@ -15,7 +15,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; /** * A crop block that is two blocks tall. diff --git a/src/main/java/de/dafuqs/spectrum/blocks/amphora/AmphoraBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/amphora/AmphoraBlock.java index a7d52beaf6..3803bf3c0a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/amphora/AmphoraBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/amphora/AmphoraBlock.java @@ -16,7 +16,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class AmphoraBlock extends BaseEntityBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/amphora/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/amphora/package-info.java index 3432a05955..3785630e18 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/amphora/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/amphora/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.amphora; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/block_flooder/BlockFlooderBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/block_flooder/BlockFlooderBlock.java index 92c9195749..038582db0a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/block_flooder/BlockFlooderBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/block_flooder/BlockFlooderBlock.java @@ -15,7 +15,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/block_flooder/BlockFlooderBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/block_flooder/BlockFlooderBlockEntity.java index d805f108f1..291844287b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/block_flooder/BlockFlooderBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/block_flooder/BlockFlooderBlockEntity.java @@ -8,7 +8,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/block_flooder/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/block_flooder/package-info.java index 8a4fddddd8..075d7ade0e 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/block_flooder/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/block_flooder/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.block_flooder; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/boom/ExplosionWithStack.java b/src/main/java/de/dafuqs/spectrum/blocks/boom/ExplosionWithStack.java index ddd9d8af9a..8c2b919fbd 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/boom/ExplosionWithStack.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/boom/ExplosionWithStack.java @@ -11,7 +11,6 @@ import net.minecraft.tags.*; import net.minecraft.world.damagesource.*; import net.minecraft.world.entity.*; -import net.minecraft.world.entity.monster.*; import net.minecraft.world.item.*; import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; @@ -19,10 +18,9 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; import net.neoforged.neoforge.event.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; -import java.util.function.*; public class ExplosionWithStack extends Explosion { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/boom/IncandescentAmalgamBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/boom/IncandescentAmalgamBlock.java index ba59899a0a..caa5458273 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/boom/IncandescentAmalgamBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/boom/IncandescentAmalgamBlock.java @@ -20,7 +20,7 @@ import net.minecraft.world.level.material.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/boom/ParametricMiningDeviceBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/boom/ParametricMiningDeviceBlock.java index 33e0ec0fac..de6160a18c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/boom/ParametricMiningDeviceBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/boom/ParametricMiningDeviceBlock.java @@ -1,17 +1,11 @@ package de.dafuqs.spectrum.blocks.boom; -import appeng.entity.*; import com.mojang.serialization.*; import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; -import net.minecraft.core.particles.*; -import net.minecraft.core.registries.*; import net.minecraft.server.level.*; -import net.minecraft.sounds.*; import net.minecraft.world.*; -import net.minecraft.world.damagesource.*; import net.minecraft.world.entity.item.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; @@ -23,10 +17,7 @@ import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import net.neoforged.neoforge.event.*; -import org.jspecify.annotations.Nullable; - -import javax.annotation.*; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/boom/ParametricMiningDeviceItem.java b/src/main/java/de/dafuqs/spectrum/blocks/boom/ParametricMiningDeviceItem.java index 75cb64477c..f76ed6cd55 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/boom/ParametricMiningDeviceItem.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/boom/ParametricMiningDeviceItem.java @@ -5,7 +5,6 @@ import de.dafuqs.spectrum.registries.*; import net.minecraft.*; import net.minecraft.core.*; -import net.minecraft.core.component.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.sounds.*; @@ -15,7 +14,6 @@ import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/boom/ThreatConfluxBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/boom/ThreatConfluxBlock.java index d25dbe52ac..fcce9593c7 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/boom/ThreatConfluxBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/boom/ThreatConfluxBlock.java @@ -10,7 +10,6 @@ import net.minecraft.util.*; import net.minecraft.world.*; import net.minecraft.world.entity.*; -import net.minecraft.world.entity.item.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; @@ -19,8 +18,7 @@ import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.NullMarked; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; @NullMarked public class ThreatConfluxBlock extends PlacedItemBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/boom/ThreatConfluxItem.java b/src/main/java/de/dafuqs/spectrum/blocks/boom/ThreatConfluxItem.java index d8c638ec5a..4b1c746fb0 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/boom/ThreatConfluxItem.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/boom/ThreatConfluxItem.java @@ -9,7 +9,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.block.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/boom/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/boom/package-info.java index 2d0608502d..f71b7f53f3 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/boom/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/boom/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.boom; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleBlock.java index d732370504..7b6b7780ed 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleBlock.java @@ -21,7 +21,7 @@ import net.minecraft.world.level.storage.loot.parameters.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleBlockEntity.java index d2bbe03541..c9b20904ec 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleBlockEntity.java @@ -6,7 +6,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; /** * Forge-native replacement for the Fabric SingleVariantStorage-based block entity. diff --git a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleItem.java b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleItem.java index 18777008b6..0a3d23a458 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleItem.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleItem.java @@ -27,7 +27,6 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.neoforged.api.distmarker.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessComponent.java b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessComponent.java index 9814fff1cb..7584cba6c7 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessComponent.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessComponent.java @@ -9,7 +9,7 @@ import net.minecraft.network.codec.*; import net.minecraft.world.item.*; import net.minecraft.world.item.enchantment.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public record BottomlessComponent(BottomlessItemHandler handler) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessItemCapability.java b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessItemCapability.java index 4edc8d0f84..b3962e66ec 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessItemCapability.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessItemCapability.java @@ -3,7 +3,7 @@ import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.world.item.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public final class BottomlessItemCapability extends BottomlessItemHandler { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessItemHandler.java b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessItemHandler.java index 0884996853..44a5ae1d3d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessItemHandler.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessItemHandler.java @@ -1,14 +1,7 @@ package de.dafuqs.spectrum.blocks.bottomless_bundle; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.core.*; -import net.minecraft.core.component.*; -import net.minecraft.core.registries.*; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.enchantment.*; -import net.neoforged.neoforge.items.IItemHandler; -import javax.annotation.*; +import net.minecraft.world.item.*; +import net.neoforged.neoforge.items.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/package-info.java index 2929da16e5..ddcb2fbbef 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.bottomless_bundle; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlock.java index 3809d0aede..5e79eed9ed 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlock.java @@ -4,14 +4,13 @@ import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.server.level.*; -import net.minecraft.world.entity.player.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class BlackHoleChestBlock extends SpectrumChestBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlockEntityRenderer.java index 8dffee70f3..e2884284f3 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlockEntityRenderer.java @@ -14,7 +14,6 @@ import net.minecraft.world.inventory.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; @SuppressWarnings({"unused", "FieldCanBeLocal"}) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/CompactingChestBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/CompactingChestBlock.java index 98454cca31..364fa4368b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/CompactingChestBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/CompactingChestBlock.java @@ -3,12 +3,11 @@ import com.mojang.serialization.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; -import net.minecraft.world.entity.player.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class CompactingChestBlock extends SpectrumChestBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/CompactingChestBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/CompactingChestBlockEntity.java index d59221d922..4ade5adbc6 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/CompactingChestBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/CompactingChestBlockEntity.java @@ -21,7 +21,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; import net.neoforged.neoforge.items.wrapper.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/CompactingChestBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/CompactingChestBlockEntityRenderer.java index 58c3262251..a8133bfa4d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/CompactingChestBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/CompactingChestBlockEntityRenderer.java @@ -10,7 +10,6 @@ import net.minecraft.client.resources.model.*; import net.minecraft.world.inventory.*; import net.minecraft.world.level.block.*; -import javax.annotation.*; public class CompactingChestBlockEntityRenderer implements BlockEntityRenderer { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/FabricationChestBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/FabricationChestBlock.java index ebbceaafdc..8196514d79 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/FabricationChestBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/FabricationChestBlock.java @@ -3,13 +3,12 @@ import com.mojang.serialization.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; -import net.minecraft.world.entity.player.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class FabricationChestBlock extends SpectrumChestBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/FabricationChestBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/FabricationChestBlockEntity.java index 41d1b85554..7be49550f4 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/FabricationChestBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/FabricationChestBlockEntity.java @@ -15,7 +15,7 @@ import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.stream.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/FabricationChestBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/FabricationChestBlockEntityRenderer.java index 67a1d6646c..33b562e8ee 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/FabricationChestBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/FabricationChestBlockEntityRenderer.java @@ -17,7 +17,6 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; @SuppressWarnings({"unused", "FieldCanBeLocal"}) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/HeartboundChestBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/HeartboundChestBlock.java index 360c46a898..f175cec1cc 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/HeartboundChestBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/HeartboundChestBlock.java @@ -11,7 +11,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class HeartboundChestBlock extends SpectrumChestBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/HeartboundChestBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/HeartboundChestBlockEntity.java index dcef1622b3..8be645b468 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/HeartboundChestBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/HeartboundChestBlockEntity.java @@ -13,7 +13,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/HeartboundChestBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/HeartboundChestBlockEntityRenderer.java index de7f99b2f4..ca253440d4 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/HeartboundChestBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/HeartboundChestBlockEntityRenderer.java @@ -13,7 +13,6 @@ import net.minecraft.world.inventory.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; @SuppressWarnings({"unused", "FieldCanBeLocal"}) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/SpectrumChestBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/SpectrumChestBlockEntity.java index 9e0a5eb7fe..bd2ac01e44 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/SpectrumChestBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/SpectrumChestBlockEntity.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.blocks.chests; import de.dafuqs.spectrum.api.block.*; -import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.inventories.*; import net.minecraft.core.*; import net.minecraft.nbt.*; @@ -17,7 +16,7 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.neoforged.api.distmarker.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; @OnlyIn(value = Dist.CLIENT, _interface = LidBlockEntity.class) public abstract class SpectrumChestBlockEntity extends RandomizableContainerBlockEntity implements LidBlockEntity, ImplementedInventory { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/SpectrumChestBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/SpectrumChestBlockEntityRenderer.java index e588c63033..1fde21cdc8 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/SpectrumChestBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/SpectrumChestBlockEntityRenderer.java @@ -11,7 +11,6 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; public class SpectrumChestBlockEntityRenderer implements BlockEntityRenderer { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/package-info.java index 0982324f7a..26e1fa9875 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.chests; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/cinderhearth/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/cinderhearth/package-info.java index 578c3b91fe..7e0e9c2c0e 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/cinderhearth/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/cinderhearth/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.cinderhearth; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/MermaidsBrushBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/MermaidsBrushBlock.java index d057b460c5..45a0bc5800 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/MermaidsBrushBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/MermaidsBrushBlock.java @@ -20,7 +20,7 @@ import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.level.material.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/MermaidsGemItem.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/MermaidsGemItem.java index f2f858d929..ac91782214 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/MermaidsGemItem.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/MermaidsGemItem.java @@ -17,7 +17,6 @@ import net.neoforged.neoforge.capabilities.*; import net.neoforged.neoforge.fluids.*; import net.neoforged.neoforge.fluids.capability.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java index 6a80881168..f3c5bbe97a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java @@ -22,7 +22,7 @@ import net.minecraft.world.level.material.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.concurrent.atomic.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/StuckStormStoneBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/StuckStormStoneBlock.java index 27adb435fa..2be8375903 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/StuckStormStoneBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/StuckStormStoneBlock.java @@ -16,7 +16,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/amaranth/AmaranthBushelBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/amaranth/AmaranthBushelBlock.java index 68a0b46a07..792a739536 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/amaranth/AmaranthBushelBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/amaranth/AmaranthBushelBlock.java @@ -13,7 +13,7 @@ import net.minecraft.world.item.component.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/amaranth/AmaranthCropBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/amaranth/AmaranthCropBlock.java index f4d74684a0..0719b9cf4e 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/amaranth/AmaranthCropBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/amaranth/AmaranthCropBlock.java @@ -14,7 +14,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/amaranth/PottedAmaranthBushelBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/amaranth/PottedAmaranthBushelBlock.java index 41c76330f5..44d1236df5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/amaranth/PottedAmaranthBushelBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/amaranth/PottedAmaranthBushelBlock.java @@ -7,7 +7,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/amaranth/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/amaranth/package-info.java index e79fb8398a..3bd4f55ef9 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/amaranth/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/amaranth/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.conditional.amaranth; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/blood_orchid/BloodOrchidBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/blood_orchid/BloodOrchidBlock.java index 89df81d396..cdb0d19ef4 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/blood_orchid/BloodOrchidBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/blood_orchid/BloodOrchidBlock.java @@ -21,7 +21,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/blood_orchid/PottedBloodOrchidBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/blood_orchid/PottedBloodOrchidBlock.java index 876c883d7b..c496547352 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/blood_orchid/PottedBloodOrchidBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/blood_orchid/PottedBloodOrchidBlock.java @@ -6,7 +6,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/blood_orchid/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/blood_orchid/package-info.java index 375bb8fbd2..6f00f8bea8 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/blood_orchid/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/blood_orchid/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.conditional.blood_orchid; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredFenceBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredFenceBlock.java index 8c87586644..934a957085 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredFenceBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredFenceBlock.java @@ -3,7 +3,7 @@ import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.flammable.*; import it.unimi.dsi.fastutil.objects.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredFenceGateBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredFenceGateBlock.java index 06a86b8496..73aebbb55b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredFenceGateBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredFenceGateBlock.java @@ -4,7 +4,7 @@ import de.dafuqs.spectrum.blocks.flammable.*; import de.dafuqs.spectrum.registries.*; import it.unimi.dsi.fastutil.objects.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLeavesBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLeavesBlock.java index dcec1c8a6c..2b2290cbc1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLeavesBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLeavesBlock.java @@ -12,7 +12,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLightBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLightBlock.java index e7d1fc2eb7..5b6b93fc64 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLightBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLightBlock.java @@ -7,7 +7,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLogBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLogBlock.java index e0891564bc..9a69a11a5e 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLogBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredLogBlock.java @@ -4,7 +4,6 @@ import de.dafuqs.revelationary.api.revelations.*; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.deeper_down.*; -import de.dafuqs.spectrum.blocks.flammable.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.core.*; import net.minecraft.resources.*; @@ -15,7 +14,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.storage.loot.*; import net.neoforged.neoforge.common.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredPlankBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredPlankBlock.java index 9e02efe34b..d2be727ea2 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredPlankBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredPlankBlock.java @@ -5,7 +5,7 @@ import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.flammable.*; import it.unimi.dsi.fastutil.objects.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredPressurePlateBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredPressurePlateBlock.java index 116899d3b3..faafdfdf73 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredPressurePlateBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredPressurePlateBlock.java @@ -4,7 +4,7 @@ import de.dafuqs.spectrum.registries.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.world.level.block.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSaplingBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSaplingBlock.java index cf03e89b5c..620d5acaf0 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSaplingBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSaplingBlock.java @@ -11,7 +11,7 @@ import net.minecraft.world.level.block.grower.*; import net.minecraft.world.level.block.state.*; import org.apache.commons.lang3.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSlabBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSlabBlock.java index d3601dfc13..3c475cdf28 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSlabBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSlabBlock.java @@ -5,7 +5,7 @@ import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.flammable.*; import it.unimi.dsi.fastutil.objects.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSporeBlossomBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSporeBlossomBlock.java index 10ee5c1a03..bc96d2d660 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSporeBlossomBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredSporeBlossomBlock.java @@ -8,9 +8,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; - -import javax.annotation.*; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStairBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStairBlock.java index ffd9c80943..825d676cf8 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStairBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStairBlock.java @@ -6,7 +6,7 @@ import de.dafuqs.spectrum.blocks.flammable.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStrippedSpectrumLogBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStrippedSpectrumLogBlock.java index e7c825cdf3..019bb98ddb 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStrippedSpectrumLogBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStrippedSpectrumLogBlock.java @@ -12,7 +12,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStrippedWoodBlockSpectrum.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStrippedWoodBlockSpectrum.java index 7847d44c81..0dc9c705ba 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStrippedWoodBlockSpectrum.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredStrippedWoodBlockSpectrum.java @@ -12,7 +12,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java index bcc4856dbf..bbb4bcf360 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodBlock.java @@ -2,9 +2,8 @@ import com.mojang.serialization.*; import de.dafuqs.revelationary.api.revelations.*; -import de.dafuqs.spectrum.blocks.deeper_down.*; import de.dafuqs.spectrum.api.ink.color.*; -import de.dafuqs.spectrum.blocks.flammable.*; +import de.dafuqs.spectrum.blocks.deeper_down.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.core.*; import net.minecraft.resources.*; @@ -15,7 +14,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.storage.loot.*; import net.neoforged.neoforge.common.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodenButtonBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodenButtonBlock.java index b2e998dddc..6c591159f3 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodenButtonBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/ColoredWoodenButtonBlock.java @@ -4,7 +4,7 @@ import de.dafuqs.spectrum.registries.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.world.level.block.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/PottedColoredSaplingBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/PottedColoredSaplingBlock.java index a8e9ecfab9..e7d2355cbd 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/PottedColoredSaplingBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/PottedColoredSaplingBlock.java @@ -7,7 +7,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/package-info.java index 683aad6493..38e0e07fb9 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/colored_tree/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.conditional.colored_tree; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/package-info.java index 401249af1c..203cb55690 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.conditional; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/resonant_lily/PottedResonantLilyBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/resonant_lily/PottedResonantLilyBlock.java index 51510988e7..dee50892fd 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/resonant_lily/PottedResonantLilyBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/resonant_lily/PottedResonantLilyBlock.java @@ -6,7 +6,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/resonant_lily/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/resonant_lily/package-info.java index 2fc528032a..eaae70eead 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/resonant_lily/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/resonant_lily/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.conditional.resonant_lily; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decay/DecayAwayBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decay/DecayAwayBlock.java index 0d254f1bc3..1300d34d52 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decay/DecayAwayBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decay/DecayAwayBlock.java @@ -13,7 +13,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.level.dimension.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class DecayAwayBlock extends Block { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decay/DecayBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decay/DecayBlock.java index 74b8aa02fb..6216d5dc76 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decay/DecayBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decay/DecayBlock.java @@ -19,7 +19,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.ticks.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decay/FadingBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decay/FadingBlock.java index 3f21a2b918..d823d89da1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decay/FadingBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decay/FadingBlock.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.blocks.decay; import com.mojang.serialization.*; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.particle.effect.*; import de.dafuqs.spectrum.registries.*; @@ -14,7 +13,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class FadingBlock extends DecayBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decay/FailingBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decay/FailingBlock.java index cdb9393b8e..03384b2191 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decay/FailingBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decay/FailingBlock.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.blocks.decay; import com.mojang.serialization.*; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.particle.effect.*; import de.dafuqs.spectrum.registries.*; @@ -16,7 +15,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class FailingBlock extends DecayBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decay/ForfeitureBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decay/ForfeitureBlock.java index a46876c35c..394534b7d5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decay/ForfeitureBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decay/ForfeitureBlock.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.blocks.decay; import com.mojang.serialization.*; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.particle.effect.*; import de.dafuqs.spectrum.registries.*; @@ -14,7 +13,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class ForfeitureBlock extends DecayBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decay/RuinBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decay/RuinBlock.java index 16d571fc40..32cfae31f8 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decay/RuinBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decay/RuinBlock.java @@ -17,9 +17,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; - -import java.util.*; +import org.jspecify.annotations.*; public class RuinBlock extends DecayBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decay/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/decay/package-info.java index 5ae5128204..0d17e7fc25 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decay/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decay/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.decay; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/CloverBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/CloverBlock.java index 2ebf3235c8..9476c3d35f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/CloverBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/CloverBlock.java @@ -10,7 +10,6 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.shapes.*; -import javax.annotation.*; public class CloverBlock extends BushBlock implements BonemealableBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/CushionedCarpetBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/CushionedCarpetBlock.java index fe9f5f4b96..5b4dedf754 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/CushionedCarpetBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/CushionedCarpetBlock.java @@ -5,7 +5,6 @@ import net.minecraft.core.*; import net.minecraft.world.entity.*; import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; public class CushionedCarpetBlock extends FlammableCarpetBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/DecoStoneBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/DecoStoneBlock.java index 83c124f474..7d70baea67 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/DecoStoneBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/DecoStoneBlock.java @@ -13,7 +13,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class DecoStoneBlock extends Block { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/DiagonalBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/DiagonalBlock.java index aba8fa64eb..9614f7bc14 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/DiagonalBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/DiagonalBlock.java @@ -5,7 +5,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class DiagonalBlock extends Block { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/EtherealPlatformBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/EtherealPlatformBlock.java index 2789fb20b8..7c6955bb30 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/EtherealPlatformBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/EtherealPlatformBlock.java @@ -2,8 +2,6 @@ import com.mojang.serialization.*; import de.dafuqs.spectrum.particle.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.client.*; import net.minecraft.core.*; import net.minecraft.server.level.*; import net.minecraft.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/FlexLanternBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/FlexLanternBlock.java index 5341f6532f..e52c4f4ab7 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/FlexLanternBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/FlexLanternBlock.java @@ -9,7 +9,7 @@ import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.level.material.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class FlexLanternBlock extends DiagonalBlock implements SimpleWaterloggedBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/GemstoneChimeBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/GemstoneChimeBlock.java index 182df8e621..db0608fc11 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/GemstoneChimeBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/GemstoneChimeBlock.java @@ -10,7 +10,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.pathfinder.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class GemstoneChimeBlock extends Block { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/GemstoneGlassBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/GemstoneGlassBlock.java index 628ce0a4cf..9888cea26c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/GemstoneGlassBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/GemstoneGlassBlock.java @@ -8,7 +8,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class GemstoneGlassBlock extends TransparentBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/GlowBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/GlowBlock.java index 294343a63e..71e6b9f319 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/GlowBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/GlowBlock.java @@ -8,7 +8,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/PersistentLightBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/PersistentLightBlock.java index 5637a06614..136da265a2 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/PersistentLightBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/PersistentLightBlock.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.blocks.decoration; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.items.magic_items.*; import de.dafuqs.spectrum.particle.*; @@ -18,7 +17,6 @@ import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; import net.neoforged.api.distmarker.*; -import javax.annotation.*; public class PersistentLightBlock extends LightBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/PigmentBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/PigmentBlock.java index c9e5926a08..e255670d1b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/PigmentBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/PigmentBlock.java @@ -5,7 +5,7 @@ import de.dafuqs.spectrum.api.ink.color.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.world.level.block.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/ProjectorBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/ProjectorBlock.java index 6e92882ff8..7f57fbbf3f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/ProjectorBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/ProjectorBlock.java @@ -10,7 +10,7 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class ProjectorBlock extends Block implements EntityBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/PylonBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/PylonBlock.java index 2d5412555f..01543794a8 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/PylonBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/PylonBlock.java @@ -11,7 +11,7 @@ import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.level.material.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/SemiPermeableGemstoneGlassBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/SemiPermeableGemstoneGlassBlock.java index 400409f55e..7fbf999d6d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/SemiPermeableGemstoneGlassBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/SemiPermeableGemstoneGlassBlock.java @@ -5,8 +5,6 @@ import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.entity.player.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.pathfinder.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/SemiPermeableGlassBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/SemiPermeableGlassBlock.java index a58c032cd3..7a20f8e2c6 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/SemiPermeableGlassBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/SemiPermeableGlassBlock.java @@ -9,7 +9,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.pathfinder.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class SemiPermeableGlassBlock extends TransparentBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/ShimmerstoneLightBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/ShimmerstoneLightBlock.java index 2fe16f0f09..e86dbb0a11 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/ShimmerstoneLightBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/ShimmerstoneLightBlock.java @@ -11,7 +11,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class ShimmerstoneLightBlock extends DirectionalBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/SpectrumBedBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/SpectrumBedBlock.java index 6cd0bf7cfa..75174ac885 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/SpectrumBedBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/SpectrumBedBlock.java @@ -7,7 +7,7 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class SpectrumBedBlock extends BedBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decoration/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/decoration/package-info.java index f7eb384a76..fc5dbc9605 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decoration/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decoration/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.decoration; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/DragonboneBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/DragonboneBlock.java index 8d86e372dd..a3f210be91 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/DragonboneBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/DragonboneBlock.java @@ -14,7 +14,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/HummingstoneBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/HummingstoneBlock.java index 05064526b5..24205e0b18 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/HummingstoneBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/HummingstoneBlock.java @@ -20,7 +20,7 @@ import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class HummingstoneBlock extends BaseEntityBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/HummingstoneBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/HummingstoneBlockEntity.java index fd3733a500..1d52df02aa 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/HummingstoneBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/HummingstoneBlockEntity.java @@ -8,7 +8,6 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; -import javax.annotation.*; public class HummingstoneBlockEntity extends BlockEntity implements HummingstoneEventQueue.Callback { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/PyriteRipperBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/PyriteRipperBlock.java index 63ba493eef..5b91f21aa6 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/PyriteRipperBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/PyriteRipperBlock.java @@ -12,7 +12,7 @@ import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.level.pathfinder.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/SplinterspawnInfestedBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/SplinterspawnInfestedBlock.java index fe0eafa00d..c47d92c77a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/SplinterspawnInfestedBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/SplinterspawnInfestedBlock.java @@ -3,7 +3,6 @@ import com.google.common.collect.*; import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.entity.entity.*; @@ -23,7 +22,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/StrippingLootBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/StrippingLootBlock.java index fe022bc23f..6a3f66b144 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/StrippingLootBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/StrippingLootBlock.java @@ -8,7 +8,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.storage.loot.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class StrippingLootBlock extends Block implements StrippableDrop { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/StrippingLootPillarBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/StrippingLootPillarBlock.java index 4495d92261..f3205a742f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/StrippingLootPillarBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/StrippingLootPillarBlock.java @@ -9,7 +9,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.storage.loot.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/AbyssalVineBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/AbyssalVineBlock.java index ec4097d4f0..f61bbbc87d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/AbyssalVineBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/AbyssalVineBlock.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.blocks.deeper_down.flora; import com.mojang.serialization.*; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.server.level.*; @@ -16,7 +15,6 @@ import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; -import javax.annotation.*; public class AbyssalVineBlock extends TriStateVineBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/BristleSproutsBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/BristleSproutsBlock.java index c4b9216c6f..d76add2440 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/BristleSproutsBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/BristleSproutsBlock.java @@ -13,7 +13,7 @@ import net.minecraft.world.level.pathfinder.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class BristleSproutsBlock extends BushBlock implements BonemealableBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/DoomBloomBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/DoomBloomBlock.java index 3f39f592c7..ecbbe7105f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/DoomBloomBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/DoomBloomBlock.java @@ -25,7 +25,7 @@ import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; import net.neoforged.neoforge.common.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/GiantMossBallBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/GiantMossBallBlock.java index 2d4e3bc566..19313a9f98 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/GiantMossBallBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/GiantMossBallBlock.java @@ -4,11 +4,9 @@ import net.minecraft.core.*; import net.minecraft.world.entity.*; import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import javax.annotation.*; public class GiantMossBallBlock extends MossBallBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/SawbladeHollyBushBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/SawbladeHollyBushBlock.java index 26177cf68f..fec4c8e9e5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/SawbladeHollyBushBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/SawbladeHollyBushBlock.java @@ -20,7 +20,7 @@ import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; import net.neoforged.neoforge.common.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class SawbladeHollyBushBlock extends BushBlock implements BonemealableBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/SmallDragonjagBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/SmallDragonjagBlock.java index 165a3ff4ba..3b3098277a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/SmallDragonjagBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/SmallDragonjagBlock.java @@ -9,7 +9,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/TallDragonjagBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/TallDragonjagBlock.java index 7a1713dc4d..8ccd0ada81 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/TallDragonjagBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/TallDragonjagBlock.java @@ -15,7 +15,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/TriStateVineBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/TriStateVineBlock.java index 63fbf78fcb..e06b7f52bc 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/TriStateVineBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/TriStateVineBlock.java @@ -18,7 +18,7 @@ import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; import net.neoforged.neoforge.common.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public abstract class TriStateVineBlock extends BushBlock implements BonemealableBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/WeepingGalaFrondsTipBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/WeepingGalaFrondsTipBlock.java index c167049d75..ab69ef26b3 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/WeepingGalaFrondsTipBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/WeepingGalaFrondsTipBlock.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.blocks.deeper_down.flora; import com.mojang.serialization.*; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.resources.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/package-info.java index 47b3916a80..84ed41da02 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/flora/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.deeper_down.flora; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/groundcover/OvergrownSlushBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/groundcover/OvergrownSlushBlock.java index 72612ee7e2..612b0983c2 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/groundcover/OvergrownSlushBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/groundcover/OvergrownSlushBlock.java @@ -7,12 +7,9 @@ import net.minecraft.util.*; import net.minecraft.world.item.*; import net.minecraft.world.item.context.*; -import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import net.minecraft.world.level.lighting.*; import net.neoforged.neoforge.common.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class OvergrownSlushBlock extends BlackslagVegetationBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/groundcover/SlushBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/groundcover/SlushBlock.java index 3ebccd9618..d522ac95f1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/groundcover/SlushBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/groundcover/SlushBlock.java @@ -12,7 +12,7 @@ import net.minecraft.world.level.block.state.*; import net.neoforged.neoforge.common.*; import net.neoforged.neoforge.common.util.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class SlushBlock extends RotatedPillarBlock implements BonemealableBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/groundcover/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/groundcover/package-info.java index c326c5364c..66f5c5513c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/groundcover/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/groundcover/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.deeper_down.groundcover; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/package-info.java index b8ea99c934..8a314928d8 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.blocks.deeper_down; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlock.java index d250639a52..bf46be8758 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlock.java @@ -20,7 +20,7 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlockEntity.java index 40dd4e8cb2..cac2afdcf6 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlockEntity.java @@ -21,8 +21,6 @@ import net.minecraft.core.*; import net.minecraft.core.component.*; import net.minecraft.nbt.*; -import net.minecraft.network.protocol.*; -import net.minecraft.network.protocol.game.*; import net.minecraft.server.level.*; import net.minecraft.sounds.*; import net.minecraft.stats.*; @@ -34,15 +32,13 @@ import net.minecraft.world.item.crafting.*; import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; import net.neoforged.api.distmarker.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; -import java.util.stream.*; public class EnchanterBlockEntity extends InWorldInteractionBlockEntity implements MultiblockCrafter, WorldlyContainer { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/enchanter/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/enchanter/package-info.java index b0c57adda8..9c628ff516 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/enchanter/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/enchanter/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.enchanter; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/end_portal/EndPortalShaper.java b/src/main/java/de/dafuqs/spectrum/blocks/end_portal/EndPortalShaper.java index e6d3fb2748..90c271e70d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/end_portal/EndPortalShaper.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/end_portal/EndPortalShaper.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.blocks.end_portal; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.config.*; import net.minecraft.core.*; import net.minecraft.world.level.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/end_portal/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/end_portal/package-info.java index 883074d640..d160cef385 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/end_portal/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/end_portal/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.end_portal; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ender/EnderDropperBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ender/EnderDropperBlock.java index b9556fe37f..45fcddda3d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ender/EnderDropperBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ender/EnderDropperBlock.java @@ -20,7 +20,7 @@ import net.minecraft.world.phys.*; import net.neoforged.neoforge.capabilities.*; import net.neoforged.neoforge.items.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class EnderDropperBlock extends DispenserBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ender/EnderDropperBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ender/EnderDropperBlockEntity.java index 6c65320d9a..1fc7996662 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ender/EnderDropperBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ender/EnderDropperBlockEntity.java @@ -14,7 +14,7 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.storage.loot.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ender/EnderHopperBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ender/EnderHopperBlock.java index 021a52492c..d1fe262e05 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ender/EnderHopperBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ender/EnderHopperBlock.java @@ -20,7 +20,7 @@ import net.minecraft.world.level.pathfinder.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import static net.minecraft.world.level.block.HopperBlock.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ender/EnderHopperBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ender/EnderHopperBlockEntity.java index 35ec3b4741..a460ec8ab5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ender/EnderHopperBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ender/EnderHopperBlockEntity.java @@ -17,7 +17,6 @@ import net.minecraft.world.phys.shapes.*; import net.neoforged.neoforge.capabilities.*; import net.neoforged.neoforge.items.*; -import javax.annotation.*; import java.util.*; import java.util.stream.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ender/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/ender/package-info.java index 169433074a..94d41e32d2 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ender/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ender/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.ender; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/farming/SpectrumFarmlandBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/farming/SpectrumFarmlandBlock.java index 9f18b8627d..908525ed83 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/farming/SpectrumFarmlandBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/farming/SpectrumFarmlandBlock.java @@ -10,7 +10,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.gameevent.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class SpectrumFarmlandBlock extends FarmBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/farming/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/farming/package-info.java index 2b952f51ce..b88f19a7a7 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/farming/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/farming/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.blocks.farming; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableBlock.java index 236a399c30..fc40196352 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableBlock.java @@ -4,7 +4,6 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; public class FlammableBlock extends Block { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableCarpetBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableCarpetBlock.java index cb3a3bd76d..d8479f405e 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableCarpetBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableCarpetBlock.java @@ -4,7 +4,6 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; public class FlammableCarpetBlock extends CarpetBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableFenceBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableFenceBlock.java index b13139354c..4db41824fd 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableFenceBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableFenceBlock.java @@ -1,10 +1,9 @@ package de.dafuqs.spectrum.blocks.flammable; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.level.BlockGetter; +import net.minecraft.core.*; +import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.*; public class FlammableFenceBlock extends FenceBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableFenceGateBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableFenceGateBlock.java index 8609f0ff03..37ce67514f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableFenceGateBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableFenceGateBlock.java @@ -1,10 +1,9 @@ package de.dafuqs.spectrum.blocks.flammable; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.level.BlockGetter; +import net.minecraft.core.*; +import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; public class FlammableFenceGateBlock extends FenceGateBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableFlowerBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableFlowerBlock.java index 07523c5ad1..a4e4341c2f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableFlowerBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableFlowerBlock.java @@ -5,7 +5,6 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; public class FlammableFlowerBlock extends FlowerBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableLeavesBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableLeavesBlock.java index 64fbdf0e5c..2820863c2a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableLeavesBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableLeavesBlock.java @@ -4,7 +4,6 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; public class FlammableLeavesBlock extends LeavesBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableLogBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableLogBlock.java index 2a18aa7dd9..93ba99e487 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableLogBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableLogBlock.java @@ -7,7 +7,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.neoforged.neoforge.common.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammablePlankBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammablePlankBlock.java index 1ae8b5cf60..86fb8febb9 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammablePlankBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammablePlankBlock.java @@ -4,7 +4,6 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; public class FlammablePlankBlock extends Block { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableRedstoneLampBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableRedstoneLampBlock.java index 976661bc0d..ed1fa61685 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableRedstoneLampBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableRedstoneLampBlock.java @@ -4,7 +4,6 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; public class FlammableRedstoneLampBlock extends RedstoneLampBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableRotatedPillarBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableRotatedPillarBlock.java index 37747ee4fe..59bfdb7952 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableRotatedPillarBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableRotatedPillarBlock.java @@ -1,13 +1,11 @@ package de.dafuqs.spectrum.blocks.flammable; -import com.mojang.serialization.MapCodec; +import com.mojang.serialization.*; import net.minecraft.core.*; import net.minecraft.world.level.*; -import net.minecraft.world.level.block.RotatedPillarBlock; -import net.minecraft.world.level.block.state.BlockState; -import org.jspecify.annotations.Nullable; - -import javax.annotation.*; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.state.*; +import org.jspecify.annotations.*; public class FlammableRotatedPillarBlock extends RotatedPillarBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableSlabBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableSlabBlock.java index 723a7cf880..39899796a6 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableSlabBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableSlabBlock.java @@ -1,10 +1,9 @@ package de.dafuqs.spectrum.blocks.flammable; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.level.BlockGetter; +import net.minecraft.core.*; +import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.*; public class FlammableSlabBlock extends SlabBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableStairBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableStairBlock.java index 9b971b90aa..61a8565fe5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableStairBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/flammable/FlammableStairBlock.java @@ -1,10 +1,9 @@ package de.dafuqs.spectrum.blocks.flammable; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.level.BlockGetter; +import net.minecraft.core.*; +import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.*; public class FlammableStairBlock extends StairBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/flammable/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/flammable/package-info.java index 7f647523a7..84d35790d1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/flammable/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/flammable/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.flammable; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/DragonrotFluid.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/DragonrotFluid.java index 08a6d22f25..eb1a1bd9f4 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fluid/DragonrotFluid.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fluid/DragonrotFluid.java @@ -19,7 +19,6 @@ import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.level.material.*; import net.neoforged.neoforge.fluids.*; -import javax.annotation.*; public abstract class DragonrotFluid extends SpectrumFluid { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/DragonrotFluidBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/DragonrotFluidBlock.java index 3610be49f3..8aeba74317 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fluid/DragonrotFluidBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fluid/DragonrotFluidBlock.java @@ -12,7 +12,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.material.*; import net.minecraft.world.level.pathfinder.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class DragonrotFluidBlock extends SpectrumFluidBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/LiquidCrystalFluid.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/LiquidCrystalFluid.java index f33278f335..a2be88501f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fluid/LiquidCrystalFluid.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fluid/LiquidCrystalFluid.java @@ -20,7 +20,6 @@ import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.level.material.*; import net.neoforged.neoforge.fluids.*; -import javax.annotation.*; public abstract class LiquidCrystalFluid extends SpectrumFluid { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/LiquidCrystalFluidBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/LiquidCrystalFluidBlock.java index e410912d98..0b87882531 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fluid/LiquidCrystalFluidBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fluid/LiquidCrystalFluidBlock.java @@ -11,7 +11,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.material.*; import net.minecraft.world.level.pathfinder.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class LiquidCrystalFluidBlock extends SpectrumFluidBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/MidnightSolutionFluid.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/MidnightSolutionFluid.java index 66526a550c..45dd3460c8 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fluid/MidnightSolutionFluid.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fluid/MidnightSolutionFluid.java @@ -27,7 +27,6 @@ import net.minecraft.world.level.material.*; import net.minecraft.world.phys.*; import net.neoforged.neoforge.fluids.*; -import javax.annotation.*; public abstract class MidnightSolutionFluid extends SpectrumFluid { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/MidnightSolutionFluidBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/MidnightSolutionFluidBlock.java index 08a29fbe9b..d76d6621a2 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fluid/MidnightSolutionFluidBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fluid/MidnightSolutionFluidBlock.java @@ -14,7 +14,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.material.*; import net.minecraft.world.level.pathfinder.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class MidnightSolutionFluidBlock extends SpectrumFluidBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumCauldronBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumCauldronBlock.java index 421c2d74ac..632d2c54f2 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumCauldronBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumCauldronBlock.java @@ -7,11 +7,6 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import net.minecraft.world.level.block.state.properties.*; -import net.minecraft.world.level.gameevent.*; -import net.minecraft.world.level.material.*; -import net.minecraft.world.phys.shapes.*; -import net.neoforged.neoforge.fluids.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumFluid.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumFluid.java index 5691d3c781..0a5269c81e 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumFluid.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumFluid.java @@ -17,7 +17,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.material.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumFluidBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumFluidBlock.java index 4b13ebe460..fab9993758 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumFluidBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumFluidBlock.java @@ -10,7 +10,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.material.*; import net.minecraft.world.level.pathfinder.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public abstract class SpectrumFluidBlock extends LiquidBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumFluidType.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumFluidType.java index 0461b82ac4..bb936fe6d2 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumFluidType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumFluidType.java @@ -1,22 +1,9 @@ package de.dafuqs.spectrum.blocks.fluid; -import de.dafuqs.spectrum.api.block.*; -import de.dafuqs.spectrum.progression.*; -import de.dafuqs.spectrum.recipe.fluid_converting.*; -import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; -import net.minecraft.server.level.*; -import net.minecraft.sounds.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.entity.item.*; -import net.minecraft.world.item.*; -import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; -import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.material.*; -import net.minecraft.world.phys.*; import net.neoforged.neoforge.fluids.*; -import org.jspecify.annotations.*; public abstract class SpectrumFluidType extends FluidType { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fluid/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/fluid/package-info.java index e879c1f6bf..e2387daa5f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fluid/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fluid/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.fluid; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlock.java index 25645cc314..8e8bd408a9 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlock.java @@ -32,7 +32,7 @@ import net.neoforged.neoforge.fluids.*; import net.neoforged.neoforge.fluids.capability.*; import net.neoforged.neoforge.fluids.capability.templates.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlockEntity.java index 6d405293e9..be37cbdbec 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlockEntity.java @@ -2,8 +2,8 @@ import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.color.*; -import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.fluid.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.recipe.*; import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.blocks.upgrade.*; @@ -30,7 +30,7 @@ import net.neoforged.neoforge.fluids.*; import net.neoforged.neoforge.fluids.capability.*; import net.neoforged.neoforge.fluids.capability.templates.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlockEntityRenderer.java index 21038da2fb..e47cd8d8f5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/FusionShrineBlockEntityRenderer.java @@ -12,7 +12,6 @@ import net.neoforged.neoforge.client.extensions.common.*; import net.neoforged.neoforge.client.textures.*; import net.neoforged.neoforge.fluids.*; -import javax.annotation.*; import org.joml.Math; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/package-info.java index 600e035554..6b4a1467d7 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/fusion_shrine/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.fusion_shrine; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/gemstone/SpectrumBuddingBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/gemstone/SpectrumBuddingBlock.java index 5c4973a28a..81cdb43048 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/gemstone/SpectrumBuddingBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/gemstone/SpectrumBuddingBlock.java @@ -8,7 +8,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.material.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class SpectrumBuddingBlock extends SpectrumGemstoneBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/gemstone/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/gemstone/package-info.java index 2c314ef1cf..5d27d6dba1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/gemstone/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/gemstone/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.gemstone; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/geology/AzuriteBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/geology/AzuriteBlock.java index 75f5869f01..546362a746 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/geology/AzuriteBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/geology/AzuriteBlock.java @@ -9,7 +9,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; import net.neoforged.api.distmarker.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class AzuriteBlock extends SpectrumFacingBlock implements AzureAuraEmitting { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/geology/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/geology/package-info.java index 8ddf2d3920..b5dba8bdac 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/geology/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/geology/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.geology; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/AoEStatusEffectIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/AoEStatusEffectIdolBlock.java index 41cace17e7..8dd3e6dd07 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/AoEStatusEffectIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/AoEStatusEffectIdolBlock.java @@ -10,7 +10,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/BonemealingIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/BonemealingIdolBlock.java index bdab80ac29..ac45f9bf8c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/BonemealingIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/BonemealingIdolBlock.java @@ -9,7 +9,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/EntitySummoningIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/EntitySummoningIdolBlock.java index 629cb55275..69b2010226 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/EntitySummoningIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/EntitySummoningIdolBlock.java @@ -8,7 +8,7 @@ import net.minecraft.world.entity.*; import net.minecraft.world.item.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/ExplosionIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/ExplosionIdolBlock.java index 6a314e0878..26e78a7540 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/ExplosionIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/ExplosionIdolBlock.java @@ -9,7 +9,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/FallDamageNegatingIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/FallDamageNegatingIdolBlock.java index 1f6eb741ad..3be693e069 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/FallDamageNegatingIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/FallDamageNegatingIdolBlock.java @@ -9,7 +9,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/FeedingIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/FeedingIdolBlock.java index 3dd66632ab..0f73a7c0d9 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/FeedingIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/FeedingIdolBlock.java @@ -13,7 +13,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/FirestarterIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/FirestarterIdolBlock.java index 38869dc5a8..62e299bd35 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/FirestarterIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/FirestarterIdolBlock.java @@ -17,7 +17,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.level.gameevent.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/FreezingIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/FreezingIdolBlock.java index 5ecd5c5ca8..c01c616071 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/FreezingIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/FreezingIdolBlock.java @@ -11,7 +11,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/IdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/IdolBlock.java index c6ac69793e..479358debe 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/IdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/IdolBlock.java @@ -18,7 +18,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/InsomniaIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/InsomniaIdolBlock.java index 20910a0467..3ecc0080de 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/InsomniaIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/InsomniaIdolBlock.java @@ -13,7 +13,7 @@ import net.minecraft.world.entity.monster.*; import net.minecraft.world.item.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/KnockbackIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/KnockbackIdolBlock.java index ae56dc43e0..9ddae713a8 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/KnockbackIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/KnockbackIdolBlock.java @@ -8,7 +8,7 @@ import net.minecraft.world.entity.*; import net.minecraft.world.item.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/LineTeleportingIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/LineTeleportingIdolBlock.java index 5b4b994cc8..a71b32da4f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/LineTeleportingIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/LineTeleportingIdolBlock.java @@ -9,7 +9,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/MilkingIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/MilkingIdolBlock.java index 29e57a4334..a46a835bc0 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/MilkingIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/MilkingIdolBlock.java @@ -16,7 +16,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/PiglinTradeIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/PiglinTradeIdolBlock.java index 88f36a6c4a..172b52f915 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/PiglinTradeIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/PiglinTradeIdolBlock.java @@ -14,7 +14,7 @@ import net.minecraft.world.level.storage.loot.*; import net.minecraft.world.level.storage.loot.parameters.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/ProjectileIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/ProjectileIdolBlock.java index d8d009d925..74ccb15448 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/ProjectileIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/ProjectileIdolBlock.java @@ -13,7 +13,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/RandomTeleportingIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/RandomTeleportingIdolBlock.java index ffb35c3b47..d9828b27d9 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/RandomTeleportingIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/RandomTeleportingIdolBlock.java @@ -10,7 +10,7 @@ import net.minecraft.world.entity.*; import net.minecraft.world.item.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/ShearingIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/ShearingIdolBlock.java index e63f047cc6..b4650c5c25 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/ShearingIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/ShearingIdolBlock.java @@ -10,7 +10,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/SilverfishInsertingIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/SilverfishInsertingIdolBlock.java index a571a2496e..256009c778 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/SilverfishInsertingIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/SilverfishInsertingIdolBlock.java @@ -9,7 +9,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/SlimeSizingIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/SlimeSizingIdolBlock.java index 7f1bc40b1b..7763815c56 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/SlimeSizingIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/SlimeSizingIdolBlock.java @@ -13,7 +13,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/StatusEffectIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/StatusEffectIdolBlock.java index 05ffb790f5..5639ee9f6d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/StatusEffectIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/StatusEffectIdolBlock.java @@ -9,7 +9,7 @@ import net.minecraft.world.entity.*; import net.minecraft.world.item.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/VillagerConvertingIdolBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/VillagerConvertingIdolBlock.java index c5f92805b4..35c54ce8e7 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/VillagerConvertingIdolBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/VillagerConvertingIdolBlock.java @@ -11,7 +11,7 @@ import net.minecraft.world.entity.npc.*; import net.minecraft.world.item.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/idols/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/idols/package-info.java index 09b9a875de..ae0de17291 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/idols/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/idols/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.blocks.idols; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlock.java index f6c24ccebd..1be3bbb57b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlock.java @@ -13,9 +13,6 @@ import net.minecraft.world.level.pathfinder.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; - -import java.util.*; public abstract class BaseInkBlock extends HorizontalDirectionalBlock implements EntityBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/CrystalApothecaryBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/CrystalApothecaryBlock.java index f849a37fbb..d8cbb67a6a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/CrystalApothecaryBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/CrystalApothecaryBlock.java @@ -18,7 +18,7 @@ import net.minecraft.world.level.gameevent.*; import net.minecraft.world.level.pathfinder.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/CrystalApothecaryBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/CrystalApothecaryBlockEntity.java index d2a26ee294..f2afb32ef5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/CrystalApothecaryBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/CrystalApothecaryBlockEntity.java @@ -25,7 +25,6 @@ import net.minecraft.world.level.storage.loot.*; import net.minecraft.world.level.storage.loot.parameters.*; import net.minecraft.world.phys.*; -import javax.annotation.*; import java.util.*; import java.util.stream.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/DawnbrushBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/DawnbrushBlock.java index 2ffd2d51c5..70f5e05ff5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/DawnbrushBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/DawnbrushBlock.java @@ -10,7 +10,7 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.Nullable; +import javax.annotation.*; import java.util.*; public class DawnbrushBlock extends InkGeneratorBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlock.java index 7d9b3a1696..5cb4c06b15 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlock.java @@ -10,7 +10,7 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.Nullable; +import javax.annotation.*; import java.util.*; public class TwillBlock extends InkGeneratorBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlockEntity.java index 7717cda8d1..232d731da5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/TwillBlockEntity.java @@ -2,7 +2,6 @@ import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.conditional.colored_tree.*; -import de.dafuqs.spectrum.blocks.decay.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.particle.effect.*; @@ -13,7 +12,6 @@ import net.minecraft.sounds.*; import net.minecraft.util.*; import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlock.java index 6a70b23b96..559133f355 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlock.java @@ -10,7 +10,7 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.Nullable; +import javax.annotation.*; import java.util.*; public class VantaclastBlock extends InkGeneratorBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlockEntity.java index 1da4335c6c..b32057b89d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/VantaclastBlockEntity.java @@ -2,14 +2,11 @@ import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.conditional.colored_tree.*; -import de.dafuqs.spectrum.blocks.decay.*; import de.dafuqs.spectrum.config.*; -import de.dafuqs.spectrum.events.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.particle.effect.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; -import net.minecraft.core.particles.*; import net.minecraft.network.chat.*; import net.minecraft.server.level.*; import net.minecraft.sounds.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/package-info.java index 651a7ad5b3..d35170bb79 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.energy; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlock.java index ba40ea25b0..b9c4a1c6e4 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlock.java @@ -25,7 +25,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java index 0584011c3d..78e4ba33ea 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java @@ -32,7 +32,7 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlock.java index ea34269e83..d93b0bd295 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlock.java @@ -19,7 +19,7 @@ import net.minecraft.world.phys.*; import net.neoforged.neoforge.fluids.*; import net.neoforged.neoforge.fluids.capability.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java index 7805377a89..6a8240039b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java @@ -1,8 +1,8 @@ package de.dafuqs.spectrum.blocks.ink.sink; import de.dafuqs.spectrum.api.block.*; -import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.api.fluid.*; +import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.helpers.*; @@ -23,7 +23,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; import net.neoforged.neoforge.fluids.capability.templates.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/ItemBowlBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/ItemBowlBlock.java index 9c6f651baa..0c3f2e6e16 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/ItemBowlBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/ItemBowlBlock.java @@ -2,8 +2,6 @@ import com.mojang.serialization.*; import de.dafuqs.spectrum.blocks.*; -import de.dafuqs.spectrum.blocks.enchanter.*; -import de.dafuqs.spectrum.blocks.spirit_instiller.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.world.*; @@ -15,7 +13,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/ItemBowlBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/ItemBowlBlockEntity.java index cb00af0b72..81932292a3 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/ItemBowlBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/ItemBowlBlockEntity.java @@ -3,7 +3,6 @@ import de.dafuqs.spectrum.api.color.*; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.blocks.*; -import de.dafuqs.spectrum.blocks.spirit_instiller.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.events.*; import de.dafuqs.spectrum.helpers.*; @@ -18,10 +17,8 @@ import net.minecraft.world.entity.item.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/package-info.java index 3244635911..9ac23977d9 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.item_bowl; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/item_roundel/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/item_roundel/package-info.java index 398f3b2304..09a496910b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/item_roundel/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/item_roundel/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.item_roundel; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVine.java b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVine.java index 832da42726..a3e636b1f0 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVine.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVine.java @@ -13,7 +13,6 @@ import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import javax.annotation.*; public interface JadeVine { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVineBulbBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVineBulbBlock.java index 13ada8c10a..b932871079 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVineBulbBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVineBulbBlock.java @@ -13,7 +13,6 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.shapes.*; -import javax.annotation.*; public class JadeVineBulbBlock extends Block implements JadeVine, NaturesStaffTriggered { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVinePetalBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVinePetalBlock.java index 56aae4a1bc..269ec6afdc 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVinePetalBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVinePetalBlock.java @@ -6,7 +6,6 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.shapes.*; -import javax.annotation.*; public class JadeVinePetalBlock extends Block { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVineRootsBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVineRootsBlock.java index afd013f67e..5657312280 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVineRootsBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVineRootsBlock.java @@ -16,7 +16,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class JadeVineRootsBlock extends BaseEntityBlock implements JadeVine, NaturesStaffTriggered { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVineRootsBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVineRootsBlockEntity.java index c3d3a25744..aff73c4f71 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVineRootsBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVineRootsBlockEntity.java @@ -12,7 +12,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class JadeVineRootsBlockEntity extends BlockEntity { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeiteLotusFlowerBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeiteLotusFlowerBlock.java index 1fd8372fc9..db2597cda1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeiteLotusFlowerBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeiteLotusFlowerBlock.java @@ -11,7 +11,6 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.shapes.*; -import javax.annotation.*; public class JadeiteLotusFlowerBlock extends SpectrumFacingBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeiteLotusStemBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeiteLotusStemBlock.java index d961816e28..fd6505bb51 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeiteLotusStemBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeiteLotusStemBlock.java @@ -18,7 +18,7 @@ import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; import net.neoforged.neoforge.common.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class JadeiteLotusStemBlock extends BushBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/NephriteBlossomStemBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/NephriteBlossomStemBlock.java index 9c04339659..c1a53869f9 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/NephriteBlossomStemBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/NephriteBlossomStemBlock.java @@ -18,7 +18,7 @@ import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; import net.neoforged.neoforge.common.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class NephriteBlossomStemBlock extends BushBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/package-info.java index e3b261346c..67c50bef8f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.jade_vines; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/lava_sponge/WetLavaSpongeItem.java b/src/main/java/de/dafuqs/spectrum/blocks/lava_sponge/WetLavaSpongeItem.java index 490695b9d3..835a31d6ca 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/lava_sponge/WetLavaSpongeItem.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/lava_sponge/WetLavaSpongeItem.java @@ -8,7 +8,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/lava_sponge/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/lava_sponge/package-info.java index 2a44665b82..04e14062b8 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/lava_sponge/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/lava_sponge/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.lava_sponge; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/memory/MemoryBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/memory/MemoryBlock.java index bdd3b54024..c2d1645173 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/memory/MemoryBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/memory/MemoryBlock.java @@ -16,7 +16,7 @@ import net.minecraft.world.level.storage.loot.*; import net.minecraft.world.level.storage.loot.parameters.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/memory/MemoryItem.java b/src/main/java/de/dafuqs/spectrum/blocks/memory/MemoryItem.java index 72020fe0da..e05d7b73ff 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/memory/MemoryItem.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/memory/MemoryItem.java @@ -16,7 +16,7 @@ import net.minecraft.world.item.CreativeModeTab.*; import net.minecraft.world.item.component.*; import net.minecraft.world.level.block.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/memory/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/memory/package-info.java index 6578dff3e8..b7045812a7 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/memory/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/memory/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.memory; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/mob_head/SpectrumSkullType.java b/src/main/java/de/dafuqs/spectrum/blocks/mob_head/SpectrumSkullType.java index 1d255ac8f4..180f67ccf7 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/mob_head/SpectrumSkullType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/mob_head/SpectrumSkullType.java @@ -8,7 +8,6 @@ import net.minecraft.util.*; import net.minecraft.world.entity.*; import net.minecraft.world.level.block.*; -import javax.annotation.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/mob_head/client/SpectrumSkullBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/mob_head/client/SpectrumSkullBlockEntityRenderer.java index 58520bf0e9..dd24e03bb8 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/mob_head/client/SpectrumSkullBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/mob_head/client/SpectrumSkullBlockEntityRenderer.java @@ -17,7 +17,7 @@ import net.minecraft.util.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/mob_head/client/models/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/mob_head/client/models/package-info.java index 6a5ac2e5e3..4b00efeb4d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/mob_head/client/models/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/mob_head/client/models/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.blocks.mob_head.client.models; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/mob_head/client/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/mob_head/client/package-info.java index 91ac740ad4..d21b9c9e83 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/mob_head/client/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/mob_head/client/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.mob_head.client; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/mob_head/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/mob_head/package-info.java index 46a248855f..b6a451031d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/mob_head/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/mob_head/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.mob_head; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/package-info.java index 0ed5ac687b..7a885b48d3 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/particle_spawner/AbstractParticleSpawnerBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/particle_spawner/AbstractParticleSpawnerBlock.java index a927651f80..672e5b8f74 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/particle_spawner/AbstractParticleSpawnerBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/particle_spawner/AbstractParticleSpawnerBlock.java @@ -10,7 +10,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public abstract class AbstractParticleSpawnerBlock extends BaseEntityBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/particle_spawner/ParticleSpawnerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/particle_spawner/ParticleSpawnerBlockEntity.java index 306c8c7f02..f164f3e9cd 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/particle_spawner/ParticleSpawnerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/particle_spawner/ParticleSpawnerBlockEntity.java @@ -17,7 +17,7 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class ParticleSpawnerBlockEntity extends BlockEntity implements MenuProvider { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/particle_spawner/ParticleSpawnerConfiguration.java b/src/main/java/de/dafuqs/spectrum/blocks/particle_spawner/ParticleSpawnerConfiguration.java index 8458c6f792..221f6e5f9f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/particle_spawner/ParticleSpawnerConfiguration.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/particle_spawner/ParticleSpawnerConfiguration.java @@ -12,7 +12,6 @@ import net.minecraft.util.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import javax.annotation.*; import org.joml.*; public record ParticleSpawnerConfiguration( diff --git a/src/main/java/de/dafuqs/spectrum/blocks/particle_spawner/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/particle_spawner/package-info.java index 9014821fbf..a816f0b221 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/particle_spawner/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/particle_spawner/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.particle_spawner; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmission.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmission.java index bed128347c..244bcb294b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmission.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmission.java @@ -3,14 +3,14 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; -import de.dafuqs.spectrum.blocks.pastel_network.payloads.PastelPayload; +import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; import de.dafuqs.spectrum.helpers.*; import net.minecraft.core.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; import net.minecraft.server.level.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index 818e918ed2..f28792b2c2 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -6,14 +6,10 @@ import de.dafuqs.spectrum.registries.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.core.*; -import net.minecraft.util.*; -import net.minecraft.world.item.*; -import net.neoforged.neoforge.items.*; import net.minecraft.resources.*; import net.neoforged.neoforge.registries.*; import org.jetbrains.annotations.*; import org.jgrapht.*; -import org.jgrapht.Graph; import org.jgrapht.alg.interfaces.*; import org.jgrapht.alg.shortestpath.*; import org.jgrapht.graph.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java index e3f85f0028..15d45509a5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetwork.java @@ -15,7 +15,7 @@ import net.minecraft.world.level.block.entity.*; import org.jgrapht.alg.connectivity.*; import org.jgrapht.graph.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.concurrent.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java index db40dc23ba..083a016053 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/ServerPastelNetworkManager.java @@ -7,7 +7,6 @@ import net.minecraft.nbt.*; import net.minecraft.server.level.*; import net.minecraft.world.level.saveddata.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/package-info.java index 32a4382825..f7e65ae8bf 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.pastel_network.network; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java index 050e38c214..612d5c3ff1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.blocks.pastel_network.nodes; import com.mojang.serialization.*; -import com.mojang.serialization.codecs.*; import de.dafuqs.revelationary.api.advancements.*; import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.blocks.decoration.*; @@ -28,7 +27,7 @@ import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntityRenderer.java index 8d99844b44..fca6d406f1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntityRenderer.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.blocks.pastel_network.nodes; -import com.mojang.authlib.minecraft.client.*; import com.mojang.blaze3d.vertex.*; import com.mojang.math.*; import de.dafuqs.spectrum.*; @@ -8,7 +7,6 @@ import de.dafuqs.spectrum.blocks.pastel_network.*; import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.registries.*; import net.minecraft.client.*; import net.minecraft.client.model.geom.*; import net.minecraft.client.model.geom.builders.*; @@ -19,8 +17,6 @@ import net.minecraft.client.resources.model.*; import net.minecraft.resources.*; import net.minecraft.util.*; -import net.minecraft.world.item.*; -import javax.annotation.*; public class PastelNodeBlockEntityRenderer implements BlockEntityRenderer { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeType.java index 0b19d9888b..8767e33eb7 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeType.java @@ -1,11 +1,7 @@ package de.dafuqs.spectrum.blocks.pastel_network.nodes; -import net.minecraft.*; -import net.minecraft.network.chat.*; import net.minecraft.util.*; -import java.util.*; - public enum PastelNodeType implements StringRepresentable { CONNECTION(false, false), STORAGE(true, true), diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/package-info.java index ff84a9c0ec..fd2b9c42e1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.pastel_network.nodes; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/package-info.java index f34540dc24..4c2d2e9565 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.pastel_network; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java index 1b7599ea02..1e2b349df2 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java @@ -4,7 +4,6 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.client.*; import net.minecraft.client.renderer.*; import net.minecraft.client.renderer.texture.*; @@ -13,10 +12,8 @@ import net.minecraft.network.codec.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import net.neoforged.neoforge.capabilities.*; import net.neoforged.neoforge.fluids.*; import net.neoforged.neoforge.fluids.capability.*; -import net.neoforged.neoforge.items.*; import org.jetbrains.annotations.*; public record FluidPastelPayload(FluidStack fluidStack) implements PastelPayload { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java index 73cb05af41..0b848578f4 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java @@ -1,22 +1,20 @@ package de.dafuqs.spectrum.blocks.pastel_network.payloads; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.serialization.MapCodec; -import com.mojang.serialization.codecs.RecordCodecBuilder; +import com.mojang.blaze3d.vertex.*; +import com.mojang.serialization.*; +import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.particle.client.PastelTransmissionParticle; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.core.BlockPos; -import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.world.item.ItemDisplayContext; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.neoforged.neoforge.items.IItemHandler; -import net.neoforged.neoforge.items.ItemHandlerHelper; -import org.jspecify.annotations.Nullable; +import de.dafuqs.spectrum.particle.client.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.texture.*; +import net.minecraft.core.*; +import net.minecraft.network.*; +import net.minecraft.network.codec.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; +import net.neoforged.neoforge.items.*; +import org.jspecify.annotations.*; public record ItemPastelPayload(ItemStack itemStack) implements PastelPayload { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java index c26cc3b547..79d6594ca1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java @@ -1,21 +1,19 @@ package de.dafuqs.spectrum.blocks.pastel_network.payloads; -import de.dafuqs.spectrum.SpectrumCommon; -import de.dafuqs.spectrum.blocks.pastel_network.network.PastelTransmission; -import de.dafuqs.spectrum.blocks.pastel_network.network.PastelTransmissionLogic; +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import net.minecraft.core.*; -import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.*; import net.minecraft.world.level.block.state.*; import net.neoforged.neoforge.capabilities.*; -import net.neoforged.neoforge.items.IItemHandler; -import net.neoforged.neoforge.items.ItemHandlerHelper; +import net.neoforged.neoforge.items.*; import net.neoforged.neoforge.registries.*; import org.jetbrains.annotations.*; -import org.jgrapht.GraphPath; -import org.jgrapht.graph.DefaultEdge; +import org.jgrapht.*; +import org.jgrapht.graph.*; -import java.util.function.Predicate; +import java.util.function.*; public class ItemPastelPayloadType extends PastelPayloadType { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java index 302bb66374..d816784b5e 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java @@ -2,8 +2,6 @@ import com.mojang.blaze3d.vertex.*; import com.mojang.serialization.*; -import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.particle.client.*; import de.dafuqs.spectrum.registries.*; @@ -11,11 +9,8 @@ import net.minecraft.core.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; -import net.minecraft.resources.*; import net.minecraft.world.level.*; -import net.neoforged.bus.api.*; -import net.neoforged.neoforge.registries.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public interface PastelPayload { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/package-info.java index 6319bdae35..1b0c55466f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.blocks.pastel_network.payloads; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pedestal/BuiltinGemstoneColor.java b/src/main/java/de/dafuqs/spectrum/blocks/pedestal/BuiltinGemstoneColor.java index b341b4af8a..42fe4ccd98 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pedestal/BuiltinGemstoneColor.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pedestal/BuiltinGemstoneColor.java @@ -7,7 +7,6 @@ import net.minecraft.core.*; import net.minecraft.util.*; import net.minecraft.world.item.*; -import javax.annotation.*; public enum BuiltinGemstoneColor implements GemstoneColor, StringRepresentable { CYAN("cyan", InkColors.CYAN_COLOR), diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pedestal/PedestalBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/pedestal/PedestalBlock.java index bc106bb9ed..486a65e5ef 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pedestal/PedestalBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pedestal/PedestalBlock.java @@ -8,8 +8,6 @@ import de.dafuqs.spectrum.blocks.upgrade.*; import de.dafuqs.spectrum.compat.modonomicon.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; -import de.dafuqs.spectrum.particle.effect.*; -import de.dafuqs.spectrum.recipe.pedestal.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.core.particles.*; @@ -30,7 +28,7 @@ import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; import org.joml.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pedestal/PedestalBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/pedestal/PedestalBlockEntityRenderer.java index ac98d90be8..5c447e4540 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pedestal/PedestalBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pedestal/PedestalBlockEntityRenderer.java @@ -13,7 +13,6 @@ import net.minecraft.resources.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; -import javax.annotation.*; public class PedestalBlockEntityRenderer implements BlockEntityRenderer { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pedestal/PedestalRecipeInput.java b/src/main/java/de/dafuqs/spectrum/blocks/pedestal/PedestalRecipeInput.java index 23cdf2bfb6..527cad3ff3 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pedestal/PedestalRecipeInput.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pedestal/PedestalRecipeInput.java @@ -5,7 +5,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pedestal/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/pedestal/package-info.java index 9d9f91c3df..f51c8117f8 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pedestal/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pedestal/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.pedestal; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/potion_workshop/PotionWorkshopBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/potion_workshop/PotionWorkshopBlock.java index 7f57df787d..6d0554cb73 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/potion_workshop/PotionWorkshopBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/potion_workshop/PotionWorkshopBlock.java @@ -17,7 +17,7 @@ import net.minecraft.world.level.pathfinder.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class PotionWorkshopBlock extends HorizontalDirectionalBlock implements EntityBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/potion_workshop/PotionWorkshopBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/potion_workshop/PotionWorkshopBlockEntity.java index 3f36502508..5553044a61 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/potion_workshop/PotionWorkshopBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/potion_workshop/PotionWorkshopBlockEntity.java @@ -30,7 +30,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.stream.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/potion_workshop/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/potion_workshop/package-info.java index 091d2eb578..a0682c8651 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/potion_workshop/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/potion_workshop/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.potion_workshop; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlock.java index d021758ed1..a20b861dac 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlock.java @@ -30,7 +30,7 @@ import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; import org.joml.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlockItem.java b/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlockItem.java index 2096c3ee03..15592c7203 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlockItem.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/present/PresentBlockItem.java @@ -20,7 +20,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.stream.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/present/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/present/package-info.java index 4b59b9acce..bc9a75137d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/present/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/present/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.present; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/redstone/BlockBreakerBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/redstone/BlockBreakerBlock.java index d66994cde8..522c7a1dc6 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/redstone/BlockBreakerBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/redstone/BlockBreakerBlock.java @@ -18,7 +18,7 @@ import net.minecraft.world.level.gameevent.*; import net.minecraft.world.level.material.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class BlockBreakerBlock extends RedstoneInteractionBlock implements EntityBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/redstone/BlockPlacerBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/redstone/BlockPlacerBlock.java index fc16c099e8..0149b67db8 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/redstone/BlockPlacerBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/redstone/BlockPlacerBlock.java @@ -21,7 +21,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class BlockPlacerBlock extends RedstoneInteractionBlock implements EntityBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/redstone/PlayerDetectorBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/redstone/PlayerDetectorBlock.java index 219b2cee33..fbeccce1cf 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/redstone/PlayerDetectorBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/redstone/PlayerDetectorBlock.java @@ -12,7 +12,7 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneCalculatorBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneCalculatorBlock.java index 60b2e967f3..0dca6a3370 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneCalculatorBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneCalculatorBlock.java @@ -16,7 +16,6 @@ import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.*; import net.minecraft.world.ticks.*; -import javax.annotation.*; public class RedstoneCalculatorBlock extends DiodeBlock implements EntityBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneSandBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneSandBlock.java index 2237a4f35a..7e9e9c788f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneSandBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneSandBlock.java @@ -9,7 +9,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class RedstoneSandBlock extends FallingBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneTimerBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneTimerBlock.java index a42e7ddbaf..b10d14091c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneTimerBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneTimerBlock.java @@ -17,9 +17,7 @@ import net.minecraft.world.level.levelgen.structure.*; import net.minecraft.world.phys.*; import net.minecraft.world.ticks.*; -import org.jspecify.annotations.Nullable; - -import javax.annotation.*; +import org.jspecify.annotations.*; public class RedstoneTimerBlock extends DiodeBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneTransceiverBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneTransceiverBlock.java index 86730d8631..4c9f0d8f0e 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneTransceiverBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneTransceiverBlock.java @@ -20,7 +20,7 @@ import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneTransceiverBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneTransceiverBlockEntity.java index d9bac2a401..6693078b0d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneTransceiverBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/redstone/RedstoneTransceiverBlockEntity.java @@ -12,7 +12,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class RedstoneTransceiverBlockEntity extends BlockEntity implements WirelessRedstoneSignalEventQueue.Callback { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/redstone/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/redstone/package-info.java index 2bc010cbd3..4559c3ada6 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/redstone/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/redstone/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.redstone; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStar.java b/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStar.java index f160516728..cbb9c3a682 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStar.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStar.java @@ -8,17 +8,12 @@ import net.minecraft.network.codec.*; import net.minecraft.resources.*; import net.minecraft.util.*; -import net.minecraft.world.item.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.storage.loot.*; -import javax.annotation.*; - import org.jetbrains.annotations.*; import org.joml.*; import java.util.*; -import java.util.function.*; -import java.util.stream.*; public interface ShootingStar { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStarDispenserBehavior.java b/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStarDispenserBehavior.java index e48b9a8e5f..c1cf54a62a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStarDispenserBehavior.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStarDispenserBehavior.java @@ -7,7 +7,6 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.phys.*; -import javax.annotation.*; public class ShootingStarDispenserBehavior extends DefaultDispenseItemBehavior { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStarItem.java b/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStarItem.java index 36996091d1..e7e716cc94 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStarItem.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStarItem.java @@ -13,7 +13,6 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/package-info.java index 735ec10c6e..cd32cc1782 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.shooting_star; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/SpiritInstillerBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/SpiritInstillerBlock.java index 873de3428b..1694d7bf5e 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/SpiritInstillerBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/SpiritInstillerBlock.java @@ -20,7 +20,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/SpiritInstillerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/SpiritInstillerBlockEntity.java index 2642b121d7..c1d69ff7fa 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/SpiritInstillerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/SpiritInstillerBlockEntity.java @@ -27,7 +27,6 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/package-info.java index 21a7e36df2..231a6610b7 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.spirit_instiller; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/spirit_sallow/OminousSaplingBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/spirit_sallow/OminousSaplingBlock.java index 01bfa02be4..ccf3177c17 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/spirit_sallow/OminousSaplingBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/spirit_sallow/OminousSaplingBlock.java @@ -15,7 +15,7 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/spirit_sallow/SpiritVinesPlantBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/spirit_sallow/SpiritVinesPlantBlock.java index 1b2685abf5..673a078294 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/spirit_sallow/SpiritVinesPlantBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/spirit_sallow/SpiritVinesPlantBlock.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import de.dafuqs.spectrum.api.item.*; -import de.dafuqs.spectrum.blocks.pedestal.BuiltinGemstoneColor; +import de.dafuqs.spectrum.blocks.pedestal.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.server.level.*; @@ -14,7 +14,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class SpiritVinesPlantBlock extends GrowingPlantBodyBlock implements SpiritVine { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/spirit_sallow/SpiritVinesPlantStemBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/spirit_sallow/SpiritVinesPlantStemBlock.java index 6703cf1565..401c1bc89f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/spirit_sallow/SpiritVinesPlantStemBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/spirit_sallow/SpiritVinesPlantStemBlock.java @@ -2,7 +2,7 @@ import com.mojang.serialization.*; import de.dafuqs.spectrum.api.item.*; -import de.dafuqs.spectrum.blocks.pedestal.BuiltinGemstoneColor; +import de.dafuqs.spectrum.blocks.pedestal.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.server.level.*; @@ -14,7 +14,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class SpiritVinesPlantStemBlock extends GrowingPlantHeadBlock implements SpiritVine { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/spirit_sallow/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/spirit_sallow/package-info.java index 0e369e6bb0..6341eb3a36 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/spirit_sallow/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/spirit_sallow/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.spirit_sallow; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/statues/GrotesqueBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/statues/GrotesqueBlock.java index f3c9b05c3a..7feb73c7dc 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/statues/GrotesqueBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/statues/GrotesqueBlock.java @@ -10,7 +10,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/statues/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/statues/package-info.java index 1ff145f53e..d9573f52e0 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/statues/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/statues/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.statues; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/structure/DeepLightBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/structure/DeepLightBlock.java index d6999682d6..61a35485f1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/structure/DeepLightBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/structure/DeepLightBlock.java @@ -6,7 +6,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class DeepLightBlock extends HorizontalDirectionalBlock implements EntityBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/structure/DreamGateBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/structure/DreamGateBlock.java index 7ec9cdd63a..86f65ec4ad 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/structure/DreamGateBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/structure/DreamGateBlock.java @@ -2,10 +2,10 @@ import com.mojang.serialization.*; import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.mob_effect.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.particle.*; import de.dafuqs.spectrum.registries.*; -import de.dafuqs.spectrum.mob_effect.*; import net.minecraft.core.*; import net.minecraft.server.level.*; import net.minecraft.sounds.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/structure/ManxiBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/structure/ManxiBlock.java index 6d08499298..9ddd126829 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/structure/ManxiBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/structure/ManxiBlock.java @@ -13,7 +13,7 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class ManxiBlock extends HorizontalDirectionalBlock implements EntityBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationBlockDetectorBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationBlockDetectorBlock.java index 619296cf19..f71f092d53 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationBlockDetectorBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationBlockDetectorBlock.java @@ -8,7 +8,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class PreservationBlockDetectorBlock extends SpectrumFacingBlock implements EntityBlock, GameMasterBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationBlockDetectorBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationBlockDetectorBlockEntity.java index 8ffc067e0c..a929b8b7a4 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationBlockDetectorBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationBlockDetectorBlockEntity.java @@ -13,7 +13,7 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.concurrent.atomic.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationChestBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationChestBlock.java index 1a303f0c74..2e616d91ed 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationChestBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationChestBlock.java @@ -6,13 +6,11 @@ import de.dafuqs.spectrum.registries.*; import net.minecraft.client.resources.model.*; import net.minecraft.core.*; -import net.minecraft.sounds.*; -import net.minecraft.world.entity.player.*; import net.minecraft.world.inventory.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class PreservationChestBlock extends SpectrumChestBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationChestBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationChestBlockEntity.java index e3a60e6dd8..934df19c8b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationChestBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationChestBlockEntity.java @@ -18,7 +18,7 @@ import net.minecraft.world.level.storage.loot.*; import net.minecraft.world.level.storage.loot.parameters.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class PreservationChestBlockEntity extends SpectrumChestBlockEntity { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationControllerBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationControllerBlock.java index 6fea2476e4..024be78d94 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationControllerBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationControllerBlock.java @@ -12,7 +12,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class PreservationControllerBlock extends BaseEntityBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationControllerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationControllerBlockEntity.java index 8e10c63503..b1368ea9be 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationControllerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationControllerBlockEntity.java @@ -20,9 +20,7 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; - -import javax.annotation.*; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationItemBowlBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationItemBowlBlock.java index 13561a61b3..1508e8f3d2 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationItemBowlBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/structure/PreservationItemBowlBlock.java @@ -12,7 +12,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class PreservationItemBowlBlock extends Block implements EntityBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/structure/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/structure/package-info.java index 6ba9fde54b..011b58acb5 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/structure/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/structure/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.structure; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlock.java index 16fc338fab..9738d6f0bc 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlock.java @@ -23,7 +23,7 @@ import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.*; import net.neoforged.neoforge.fluids.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlockEntity.java index 5f0b2b982f..f9149076bf 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlockEntity.java @@ -23,7 +23,7 @@ import net.minecraft.world.level.block.state.*; import net.neoforged.neoforge.fluids.*; import net.neoforged.neoforge.fluids.capability.templates.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/package-info.java index 501f5b65e8..a819c1ed3e 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.titration_barrel; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/upgrade/UpgradeBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/upgrade/UpgradeBlock.java index 89a9bc62a2..a2dbf8ff89 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/upgrade/UpgradeBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/upgrade/UpgradeBlock.java @@ -18,7 +18,7 @@ import net.minecraft.world.level.pathfinder.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/upgrade/UpgradeBlockBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/upgrade/UpgradeBlockBlockEntityRenderer.java index 0b3495a5f7..01e230e19a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/upgrade/UpgradeBlockBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/upgrade/UpgradeBlockBlockEntityRenderer.java @@ -10,7 +10,6 @@ import net.minecraft.world.inventory.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; -import javax.annotation.*; public class UpgradeBlockBlockEntityRenderer implements BlockEntityRenderer { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/upgrade/Upgradeable.java b/src/main/java/de/dafuqs/spectrum/blocks/upgrade/Upgradeable.java index 040e463a10..63e6d4e37c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/upgrade/Upgradeable.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/upgrade/Upgradeable.java @@ -8,7 +8,7 @@ import net.minecraft.server.level.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/upgrade/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/upgrade/package-info.java index 925a298c99..c2781b0452 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/upgrade/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/upgrade/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.upgrade; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/weathering/ShaleClayBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/weathering/ShaleClayBlock.java index d798764757..65047309e8 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/weathering/ShaleClayBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/weathering/ShaleClayBlock.java @@ -10,7 +10,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.neoforged.neoforge.common.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class ShaleClayBlock extends Block implements Weathering { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/weathering/Weathering.java b/src/main/java/de/dafuqs/spectrum/blocks/weathering/Weathering.java index 88da6fe074..ab5da4f302 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/weathering/Weathering.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/weathering/Weathering.java @@ -8,7 +8,6 @@ import net.minecraft.world.level.biome.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; import java.util.Optional; import java.util.function.Supplier; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/weathering/WeatheringSlabBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/weathering/WeatheringSlabBlock.java index dffc09e9ab..bbd92470e9 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/weathering/WeatheringSlabBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/weathering/WeatheringSlabBlock.java @@ -6,7 +6,7 @@ import net.minecraft.util.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class WeatheringSlabBlock extends SlabBlock implements Weathering { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/weathering/WeatheringStairsBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/weathering/WeatheringStairsBlock.java index 43b91865e7..8c5481113b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/weathering/WeatheringStairsBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/weathering/WeatheringStairsBlock.java @@ -6,7 +6,7 @@ import net.minecraft.util.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class WeatheringStairsBlock extends StairBlock implements Weathering { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/weathering/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/weathering/package-info.java index b2e43b2d37..be006d884c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/weathering/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/weathering/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.blocks.weathering; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java b/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java index 70d87b416a..561db93cb9 100644 --- a/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java +++ b/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java @@ -18,7 +18,6 @@ import net.neoforged.neoforge.capabilities.*; import net.neoforged.neoforge.fluids.capability.templates.*; import net.neoforged.neoforge.items.wrapper.*; -import javax.annotation.*; public class SpectrumCapabilities { diff --git a/src/main/java/de/dafuqs/spectrum/capabilities/package-info.java b/src/main/java/de/dafuqs/spectrum/capabilities/package-info.java index 0ebd6da48f..51c019e516 100644 --- a/src/main/java/de/dafuqs/spectrum/capabilities/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/capabilities/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.capabilities; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/commands/DumpRegistriesCommand.java b/src/main/java/de/dafuqs/spectrum/commands/DumpRegistriesCommand.java index d913fa4f17..8874dc75ca 100644 --- a/src/main/java/de/dafuqs/spectrum/commands/DumpRegistriesCommand.java +++ b/src/main/java/de/dafuqs/spectrum/commands/DumpRegistriesCommand.java @@ -6,7 +6,6 @@ import net.minecraft.resources.*; import net.neoforged.fml.loading.*; import org.apache.commons.io.output.*; -import org.spongepowered.include.com.google.common.base.*; import java.io.*; import java.nio.charset.*; diff --git a/src/main/java/de/dafuqs/spectrum/commands/ListItemTagsCommand.java b/src/main/java/de/dafuqs/spectrum/commands/ListItemTagsCommand.java index decb8c7e6d..77a85ade52 100644 --- a/src/main/java/de/dafuqs/spectrum/commands/ListItemTagsCommand.java +++ b/src/main/java/de/dafuqs/spectrum/commands/ListItemTagsCommand.java @@ -9,7 +9,7 @@ import net.minecraft.server.level.*; import net.minecraft.tags.*; import net.minecraft.world.item.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/commands/SanityCommand.java b/src/main/java/de/dafuqs/spectrum/commands/SanityCommand.java index 6943527e41..54d09642ae 100644 --- a/src/main/java/de/dafuqs/spectrum/commands/SanityCommand.java +++ b/src/main/java/de/dafuqs/spectrum/commands/SanityCommand.java @@ -14,7 +14,7 @@ import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.blocks.deeper_down.flora.*; import de.dafuqs.spectrum.blocks.gemstone.*; -import de.dafuqs.spectrum.blocks.pedestal.BuiltinGemstoneColor; +import de.dafuqs.spectrum.blocks.pedestal.*; import de.dafuqs.spectrum.items.*; import de.dafuqs.spectrum.items.trinkets.*; import de.dafuqs.spectrum.recipe.*; @@ -23,8 +23,8 @@ import de.dafuqs.spectrum.recipe.pedestal.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.advancements.*; -import net.minecraft.commands.Commands; import net.minecraft.commands.*; +import net.minecraft.commands.Commands; import net.minecraft.core.*; import net.minecraft.core.registries.*; import net.minecraft.locale.*; @@ -45,7 +45,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.storage.loot.*; import org.apache.commons.lang3.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/commands/package-info.java b/src/main/java/de/dafuqs/spectrum/commands/package-info.java index 9384a7050c..2e2615fd1b 100644 --- a/src/main/java/de/dafuqs/spectrum/commands/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/commands/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.commands; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/FluidIngredientREI.java b/src/main/java/de/dafuqs/spectrum/compat/REI/FluidIngredientREI.java index 76cc54f2bb..aac5bbd32b 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/FluidIngredientREI.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/FluidIngredientREI.java @@ -4,11 +4,7 @@ import me.shedaniel.rei.api.common.util.*; import net.neoforged.neoforge.fluids.*; import net.neoforged.neoforge.fluids.crafting.*; -import org.jspecify.annotations.NonNull; - -import javax.annotation.*; - -import java.util.*; +import org.jspecify.annotations.*; import static net.minecraft.world.level.material.Fluids.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/GatedRecipeDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/GatedRecipeDisplay.java index d28365e20c..afa3f12efd 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/GatedRecipeDisplay.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/GatedRecipeDisplay.java @@ -2,7 +2,7 @@ import me.shedaniel.rei.api.common.display.*; import net.minecraft.network.chat.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public interface GatedRecipeDisplay extends Display { diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/GatedSpectrumDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/GatedSpectrumDisplay.java index dae5cd2499..a82b03b84d 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/GatedSpectrumDisplay.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/GatedSpectrumDisplay.java @@ -10,7 +10,7 @@ import net.minecraft.resources.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/REIHelper.java b/src/main/java/de/dafuqs/spectrum/compat/REI/REIHelper.java index d95ea08378..83bb61ab60 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/REIHelper.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/REIHelper.java @@ -4,7 +4,6 @@ import me.shedaniel.rei.api.common.entry.*; import me.shedaniel.rei.api.common.util.*; import net.neoforged.neoforge.fluids.crafting.*; -import javax.annotation.*; import java.util.*; import java.util.stream.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/REI/package-info.java index 6386e0d0db..c4564d51ae 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.compat.REI; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/AnvilCrushingCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/AnvilCrushingCategory.java index 57bd878123..35b0dd30f7 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/AnvilCrushingCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/AnvilCrushingCategory.java @@ -12,7 +12,6 @@ import net.minecraft.resources.*; import net.minecraft.world.item.*; import net.minecraft.world.level.block.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/BlockToBlockWithChanceCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/BlockToBlockWithChanceCategory.java index 6a666783af..a5cdb6ce30 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/BlockToBlockWithChanceCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/BlockToBlockWithChanceCategory.java @@ -3,7 +3,6 @@ import me.shedaniel.math.*; import me.shedaniel.rei.api.client.gui.widgets.*; import net.minecraft.network.chat.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/BlockToBlockWithChanceDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/BlockToBlockWithChanceDisplay.java index 2c820ff688..91eba6e5e5 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/BlockToBlockWithChanceDisplay.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/BlockToBlockWithChanceDisplay.java @@ -7,7 +7,7 @@ import me.shedaniel.rei.api.common.util.*; import net.minecraft.network.chat.*; import net.minecraft.world.level.block.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchanterCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchanterCategory.java index 1bd524fa01..e8b0b21732 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchanterCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchanterCategory.java @@ -7,7 +7,6 @@ import me.shedaniel.rei.api.common.util.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; -import javax.annotation.*; public abstract class EnchanterCategory extends GatedDisplayCategory { diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchanterDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchanterDisplay.java index c34f8a61a1..3272453f8f 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchanterDisplay.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchanterDisplay.java @@ -4,7 +4,6 @@ import de.dafuqs.spectrum.recipe.*; import me.shedaniel.rei.api.common.entry.*; import net.minecraft.world.item.crafting.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchanterEnchantingCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchanterEnchantingCategory.java index f2de06df33..662d8555c3 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchanterEnchantingCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchanterEnchantingCategory.java @@ -6,7 +6,6 @@ import me.shedaniel.rei.api.common.category.*; import me.shedaniel.rei.api.common.entry.*; import net.minecraft.network.chat.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchanterEnchantingDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchanterEnchantingDisplay.java index 586ac87e35..2133b8f3ba 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchanterEnchantingDisplay.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchanterEnchantingDisplay.java @@ -10,7 +10,6 @@ import me.shedaniel.rei.api.common.util.*; import net.minecraft.client.*; import net.minecraft.world.item.crafting.*; -import javax.annotation.*; import java.util.*; import java.util.stream.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchantmentUpgradeCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchantmentUpgradeCategory.java index 468012da69..89c6da9458 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchantmentUpgradeCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchantmentUpgradeCategory.java @@ -11,7 +11,6 @@ import me.shedaniel.rei.api.common.entry.*; import net.minecraft.client.*; import net.minecraft.network.chat.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchantmentUpgradeDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchantmentUpgradeDisplay.java index 94e93e28dc..33c79048c6 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchantmentUpgradeDisplay.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/EnchantmentUpgradeDisplay.java @@ -1,29 +1,21 @@ package de.dafuqs.spectrum.compat.REI.plugins; -import com.google.common.collect.*; import de.dafuqs.revelationary.api.advancements.*; -import de.dafuqs.spectrum.api.recipe.*; import de.dafuqs.spectrum.compat.REI.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.items.magic_items.*; -import de.dafuqs.spectrum.recipe.*; import de.dafuqs.spectrum.recipe.enchanter.*; -import dev.emi.emi.api.stack.*; import me.shedaniel.rei.api.common.category.*; import me.shedaniel.rei.api.common.entry.*; import me.shedaniel.rei.api.common.util.*; import net.minecraft.client.*; import net.minecraft.core.*; -import net.minecraft.core.component.*; import net.minecraft.network.chat.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.item.enchantment.*; -import javax.annotation.*; import java.util.*; -import java.util.function.*; -import java.util.stream.*; public class EnchantmentUpgradeDisplay extends EnchanterDisplay { diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/FluidConvertingCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/FluidConvertingCategory.java index 886c381dec..b853968556 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/FluidConvertingCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/FluidConvertingCategory.java @@ -2,7 +2,6 @@ import me.shedaniel.math.*; import me.shedaniel.rei.api.client.gui.widgets.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/FusionShrineCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/FusionShrineCategory.java index acffad6c37..15fc1a162d 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/FusionShrineCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/FusionShrineCategory.java @@ -10,7 +10,6 @@ import me.shedaniel.rei.api.common.util.*; import net.minecraft.network.chat.*; import net.minecraft.world.level.material.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/FusionShrineDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/FusionShrineDisplay.java index 62b05d0040..266255eda7 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/FusionShrineDisplay.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/FusionShrineDisplay.java @@ -9,7 +9,6 @@ import net.minecraft.client.*; import net.minecraft.network.chat.*; import net.minecraft.world.item.crafting.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/GatedDisplayCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/GatedDisplayCategory.java index 4a6e0fdc92..2d69fcba73 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/GatedDisplayCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/GatedDisplayCategory.java @@ -6,7 +6,6 @@ import me.shedaniel.rei.api.client.gui.widgets.*; import me.shedaniel.rei.api.client.registry.display.*; import net.minecraft.network.chat.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/GatedItemInformationPageCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/GatedItemInformationPageCategory.java index 8fff4cc265..704cdfb9b7 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/GatedItemInformationPageCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/GatedItemInformationPageCategory.java @@ -6,7 +6,6 @@ import net.minecraft.client.*; import net.minecraft.util.*; import net.minecraft.world.item.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/InkConvertingCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/InkConvertingCategory.java index 5a657fea1d..04aa12930d 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/InkConvertingCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/InkConvertingCategory.java @@ -8,7 +8,6 @@ import me.shedaniel.rei.api.common.category.*; import me.shedaniel.rei.api.common.util.*; import net.minecraft.network.chat.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/InkConvertingDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/InkConvertingDisplay.java index e0d6ff9e21..77ce5cff37 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/InkConvertingDisplay.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/InkConvertingDisplay.java @@ -3,12 +3,11 @@ import de.dafuqs.revelationary.api.advancements.*; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.compat.REI.*; -import de.dafuqs.spectrum.recipe.color_picker.InkConvertingRecipe; +import de.dafuqs.spectrum.recipe.color_picker.*; import me.shedaniel.rei.api.common.category.*; import me.shedaniel.rei.api.common.util.*; import net.minecraft.client.*; import net.minecraft.world.item.crafting.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/NaturesStaffConversionsCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/NaturesStaffConversionsCategory.java index 2ffa8b7288..ab797723f1 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/NaturesStaffConversionsCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/NaturesStaffConversionsCategory.java @@ -8,7 +8,6 @@ import me.shedaniel.rei.api.common.category.*; import me.shedaniel.rei.api.common.util.*; import net.minecraft.network.chat.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/NaturesStaffConversionsDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/NaturesStaffConversionsDisplay.java index a2d41d52e3..c4e0be3a13 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/NaturesStaffConversionsDisplay.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/NaturesStaffConversionsDisplay.java @@ -9,7 +9,7 @@ import net.minecraft.client.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PedestalCraftingCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PedestalCraftingCategory.java index 071387a03b..eece444958 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PedestalCraftingCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PedestalCraftingCategory.java @@ -13,7 +13,6 @@ import me.shedaniel.rei.api.common.util.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PedestalCraftingDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PedestalCraftingDisplay.java index 4e0494e6c3..e0adf0309b 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PedestalCraftingDisplay.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PedestalCraftingDisplay.java @@ -2,7 +2,7 @@ import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.recipe.*; -import de.dafuqs.spectrum.blocks.pedestal.BuiltinGemstoneColor; +import de.dafuqs.spectrum.blocks.pedestal.*; import de.dafuqs.spectrum.compat.REI.*; import de.dafuqs.spectrum.recipe.pedestal.*; import me.shedaniel.rei.api.common.category.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PotionWorkshopCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PotionWorkshopCategory.java index 1d0632d057..1378fcc461 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PotionWorkshopCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PotionWorkshopCategory.java @@ -9,7 +9,6 @@ import me.shedaniel.rei.api.common.util.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PrimordialFireBurningCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PrimordialFireBurningCategory.java index e18d57616d..d188743766 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PrimordialFireBurningCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PrimordialFireBurningCategory.java @@ -11,7 +11,6 @@ import me.shedaniel.rei.api.common.util.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/ScrollableTextWidget.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/ScrollableTextWidget.java index 27e4e28ff5..ab7844eb57 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/ScrollableTextWidget.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/ScrollableTextWidget.java @@ -9,7 +9,7 @@ import net.minecraft.client.gui.*; import net.minecraft.client.gui.components.events.*; import net.minecraft.util.*; -import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/SpiritInstillingCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/SpiritInstillingCategory.java index 9b9a732230..c9c6ff1079 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/SpiritInstillingCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/SpiritInstillingCategory.java @@ -10,7 +10,6 @@ import me.shedaniel.rei.api.common.entry.*; import me.shedaniel.rei.api.common.util.*; import net.minecraft.network.chat.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/SpiritInstillingDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/SpiritInstillingDisplay.java index d78795eed0..d6c3acc0e6 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/SpiritInstillingDisplay.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/SpiritInstillingDisplay.java @@ -12,7 +12,6 @@ import net.minecraft.client.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/TitrationBarrelCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/TitrationBarrelCategory.java index 249a57154d..4fe3780b93 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/TitrationBarrelCategory.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/TitrationBarrelCategory.java @@ -10,7 +10,6 @@ import me.shedaniel.rei.api.common.entry.*; import me.shedaniel.rei.api.common.util.*; import net.minecraft.network.chat.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/TitrationBarrelDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/TitrationBarrelDisplay.java index f604682d61..6ea8ebfdf2 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/TitrationBarrelDisplay.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/TitrationBarrelDisplay.java @@ -10,9 +10,7 @@ import net.minecraft.client.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; -import net.minecraft.world.level.material.*; import net.neoforged.neoforge.fluids.crafting.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/package-info.java index 2d51ae68b3..8ebb1404ce 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.compat.REI.plugins; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/AnimatedTexturedWidget.java b/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/AnimatedTexturedWidget.java index f6b7f019b2..5914ac5da3 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/AnimatedTexturedWidget.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/AnimatedTexturedWidget.java @@ -7,7 +7,7 @@ import net.minecraft.client.gui.components.events.*; import net.minecraft.resources.*; import net.minecraft.util.*; -import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/IndexedEntryWidget.java b/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/IndexedEntryWidget.java index d7a6b2be4b..ee62e4b668 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/IndexedEntryWidget.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/IndexedEntryWidget.java @@ -4,9 +4,7 @@ import me.shedaniel.rei.api.client.gui.widgets.*; import me.shedaniel.rei.api.common.entry.*; import me.shedaniel.rei.impl.client.gui.widget.*; -import me.shedaniel.rei.impl.client.util.*; -import java.util.*; import java.util.function.*; public class IndexedEntryWidget extends EntryWidget { diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/OffsetEntryWidget.java b/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/OffsetEntryWidget.java index b6054e91d8..c2bdcd765f 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/OffsetEntryWidget.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/OffsetEntryWidget.java @@ -4,7 +4,6 @@ import me.shedaniel.rei.api.client.gui.widgets.*; import me.shedaniel.rei.api.common.entry.*; import me.shedaniel.rei.impl.client.gui.widget.*; -import me.shedaniel.rei.impl.client.util.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/package-info.java index 48416b9257..67aa2c0c71 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/widgets/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.compat.REI.widgets; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/SpectrumIntegrationPacks.java b/src/main/java/de/dafuqs/spectrum/compat/SpectrumIntegrationPacks.java index 77ee41a131..fcbcf80d75 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/SpectrumIntegrationPacks.java +++ b/src/main/java/de/dafuqs/spectrum/compat/SpectrumIntegrationPacks.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.compat; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.compat.ae2.*; import de.dafuqs.spectrum.compat.alloy_forgery.*; import de.dafuqs.spectrum.compat.botania.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/ae2/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/ae2/package-info.java index 5202c678d8..af22a99bb3 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/ae2/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/ae2/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.compat.ae2; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/alloy_forgery/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/alloy_forgery/package-info.java index 67757c9360..d973f73f3f 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/alloy_forgery/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/alloy_forgery/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.compat.alloy_forgery; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/botania/BlackestLotusItem.java b/src/main/java/de/dafuqs/spectrum/compat/botania/BlackestLotusItem.java index d1dd91118f..482fec63f9 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/botania/BlackestLotusItem.java +++ b/src/main/java/de/dafuqs/spectrum/compat/botania/BlackestLotusItem.java @@ -9,7 +9,6 @@ import vazkii.botania.api.mana.*; import vazkii.botania.common.handler.*; import vazkii.botania.common.helper.*; -import vazkii.botania.network.*; import vazkii.botania.network.clientbound.*; import vazkii.botania.xplat.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/botania/BotaniaCompat.java b/src/main/java/de/dafuqs/spectrum/compat/botania/BotaniaCompat.java index 7dc0b1b707..58f69e11bf 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/botania/BotaniaCompat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/botania/BotaniaCompat.java @@ -1,26 +1,16 @@ package de.dafuqs.spectrum.compat.botania; -import com.mojang.datafixers.util.*; import de.dafuqs.fractal.api.*; -import de.dafuqs.spectrum.api.color.*; -import de.dafuqs.spectrum.api.interaction.*; import de.dafuqs.spectrum.api.item_group.*; import de.dafuqs.spectrum.compat.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.resources.*; -import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; -import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; import net.neoforged.bus.api.*; import net.neoforged.fml.event.lifecycle.*; import net.neoforged.neoforge.common.*; import net.neoforged.neoforge.registries.*; -import vazkii.botania.common.item.*; -import java.util.function.*; - -import static de.dafuqs.spectrum.registries.SpectrumBlocks.simple; import static de.dafuqs.spectrum.registries.SpectrumItems.*; @SuppressWarnings("unused") diff --git a/src/main/java/de/dafuqs/spectrum/compat/botania/LeastBlackLotusItem.java b/src/main/java/de/dafuqs/spectrum/compat/botania/LeastBlackLotusItem.java index 8db1279177..2e568641a8 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/botania/LeastBlackLotusItem.java +++ b/src/main/java/de/dafuqs/spectrum/compat/botania/LeastBlackLotusItem.java @@ -9,7 +9,6 @@ import vazkii.botania.api.mana.*; import vazkii.botania.common.handler.*; import vazkii.botania.common.helper.*; -import vazkii.botania.network.*; import vazkii.botania.network.clientbound.*; import vazkii.botania.xplat.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/claims/GenericClaimModsCompat.java b/src/main/java/de/dafuqs/spectrum/compat/claims/GenericClaimModsCompat.java index 9e716e436d..81edec2271 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/claims/GenericClaimModsCompat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/claims/GenericClaimModsCompat.java @@ -3,7 +3,7 @@ import net.minecraft.core.*; import net.minecraft.world.entity.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class GenericClaimModsCompat { diff --git a/src/main/java/de/dafuqs/spectrum/compat/claims/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/claims/package-info.java index e49498373a..f2f9b001a1 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/claims/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/claims/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.compat.claims; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/create/CreateCompat.java b/src/main/java/de/dafuqs/spectrum/compat/create/CreateCompat.java index eda01dc18e..0313846490 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/create/CreateCompat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/create/CreateCompat.java @@ -21,7 +21,7 @@ import net.neoforged.fml.event.lifecycle.*; import net.neoforged.neoforge.common.*; import net.neoforged.neoforge.registries.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import static de.dafuqs.spectrum.registries.SpectrumBlocks.*; import static de.dafuqs.spectrum.registries.SpectrumItems.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/create/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/create/package-info.java index 06e841da2b..a09d66b6d4 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/create/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/create/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.compat.create; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/GatedSpectrumEmiRecipe.java b/src/main/java/de/dafuqs/spectrum/compat/emi/GatedSpectrumEmiRecipe.java index 7dc55bb357..e47da61a57 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/GatedSpectrumEmiRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/GatedSpectrumEmiRecipe.java @@ -6,7 +6,7 @@ import dev.emi.emi.api.widget.*; import net.minecraft.network.chat.*; import net.minecraft.world.item.crafting.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiRecipe.java b/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiRecipe.java index 1563bebac2..3662b31357 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiRecipe.java @@ -9,7 +9,7 @@ import net.minecraft.core.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/handlers/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/emi/handlers/package-info.java index f9e7ed11a1..b36acd2faf 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/handlers/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/handlers/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.compat.emi.handlers; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/emi/package-info.java index 1d8b33757f..98a6dd1f8a 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.compat.emi; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java index fe973c339d..8a29185bb1 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CrystallarieumEmiRecipeGated.java @@ -12,10 +12,8 @@ import net.minecraft.resources.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.state.*; import java.util.*; -import java.util.function.*; import java.util.stream.*; public class CrystallarieumEmiRecipeGated extends GatedSpectrumEmiRecipe { diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/EnchantmentUpgradeEmiRecipeGated.java b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/EnchantmentUpgradeEmiRecipeGated.java index f87d3267fe..430c7d2431 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/EnchantmentUpgradeEmiRecipeGated.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/EnchantmentUpgradeEmiRecipeGated.java @@ -15,11 +15,9 @@ import dev.emi.emi.api.widget.*; import net.minecraft.client.*; import net.minecraft.core.*; -import net.minecraft.core.component.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.util.*; -import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.item.enchantment.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/InkConvertingEmiRecipeGated.java b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/InkConvertingEmiRecipeGated.java index 4cb66187ed..d45d7158e4 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/InkConvertingEmiRecipeGated.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/InkConvertingEmiRecipeGated.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.compat.emi.recipes; import de.dafuqs.spectrum.compat.emi.*; -import de.dafuqs.spectrum.recipe.color_picker.InkConvertingRecipe; +import de.dafuqs.spectrum.recipe.color_picker.*; import dev.emi.emi.api.render.*; import dev.emi.emi.api.stack.*; import dev.emi.emi.api.widget.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/PedestalCraftingEmiRecipeGated.java b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/PedestalCraftingEmiRecipeGated.java index 98f42a504a..3c9da30711 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/PedestalCraftingEmiRecipeGated.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/PedestalCraftingEmiRecipeGated.java @@ -3,7 +3,7 @@ import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.recipe.*; -import de.dafuqs.spectrum.blocks.pedestal.BuiltinGemstoneColor; +import de.dafuqs.spectrum.blocks.pedestal.*; import de.dafuqs.spectrum.compat.emi.*; import de.dafuqs.spectrum.inventories.*; import de.dafuqs.spectrum.recipe.pedestal.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/TitrationBarrelEmiRecipeGated.java b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/TitrationBarrelEmiRecipeGated.java index 696c84d228..d3486fd557 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/TitrationBarrelEmiRecipeGated.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/TitrationBarrelEmiRecipeGated.java @@ -10,9 +10,7 @@ import net.minecraft.network.chat.*; import net.minecraft.world.item.crafting.*; import net.neoforged.api.distmarker.*; -import net.neoforged.neoforge.fluids.crafting.*; -import org.jspecify.annotations.Nullable; -import net.minecraft.world.level.material.*; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/package-info.java index cc4bf4fb09..2a887ff488 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.compat.emi.recipes; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/widgets/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/emi/widgets/package-info.java index 14742de057..e6155cbb4e 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/widgets/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/widgets/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.compat.emi.widgets; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/exclusions_lib/ExclusionsLibCompat.java b/src/main/java/de/dafuqs/spectrum/compat/exclusions_lib/ExclusionsLibCompat.java index 4683803c41..afd1574d27 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/exclusions_lib/ExclusionsLibCompat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/exclusions_lib/ExclusionsLibCompat.java @@ -1,18 +1,13 @@ package de.dafuqs.spectrum.compat.exclusions_lib; import com.mojang.serialization.*; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.compat.*; import net.minecraft.core.*; import net.minecraft.core.registries.*; -import net.minecraft.resources.*; import net.minecraft.world.level.*; import net.minecraft.world.level.levelgen.blockpredicates.*; import net.neoforged.bus.api.*; import net.neoforged.neoforge.registries.*; -import javax.annotation.*; - -import java.util.function.*; /** * Loaded when Exclusions Lib is *not* present diff --git a/src/main/java/de/dafuqs/spectrum/compat/exclusions_lib/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/exclusions_lib/package-info.java index bd58fb19bb..b703ace244 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/exclusions_lib/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/exclusions_lib/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.compat.exclusions_lib; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/gobber/GobberCompat.java b/src/main/java/de/dafuqs/spectrum/compat/gobber/GobberCompat.java index 64e959370d..8b4525a5d1 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/gobber/GobberCompat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/gobber/GobberCompat.java @@ -18,8 +18,7 @@ import net.neoforged.neoforge.common.*; import net.neoforged.neoforge.registries.*; -import static de.dafuqs.spectrum.registries.SpectrumBlocks.blockWithItem; -import static de.dafuqs.spectrum.registries.SpectrumBlocks.cluster; +import static de.dafuqs.spectrum.registries.SpectrumBlocks.*; public class GobberCompat extends SpectrumIntegrationPacks.ModIntegrationPack { diff --git a/src/main/java/de/dafuqs/spectrum/compat/gobber/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/gobber/package-info.java index 29d623a389..c1a453d30a 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/gobber/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/gobber/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.compat.gobber; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/malum/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/malum/package-info.java index 2d51bdc7c4..ef2832811b 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/malum/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/malum/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.compat.malum; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/ModonomiconCompat.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/ModonomiconCompat.java index 07c14f789d..a4d9ca29cf 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/ModonomiconCompat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/ModonomiconCompat.java @@ -12,7 +12,7 @@ import de.dafuqs.spectrum.compat.modonomicon.unlock_conditions.*; import de.dafuqs.spectrum.recipe.anvil_crushing.*; import de.dafuqs.spectrum.recipe.cinderhearth.*; -import de.dafuqs.spectrum.recipe.color_picker.InkConvertingRecipe; +import de.dafuqs.spectrum.recipe.color_picker.*; import de.dafuqs.spectrum.recipe.crystallarieum.*; import de.dafuqs.spectrum.recipe.enchanter.*; import de.dafuqs.spectrum.recipe.fluid_converting.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/ModonomiconHelper.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/ModonomiconHelper.java index 20a58fb6ec..4b39e0ddcd 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/ModonomiconHelper.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/ModonomiconHelper.java @@ -9,7 +9,7 @@ import net.minecraft.network.chat.*; import net.minecraft.world.item.*; import net.minecraft.world.level.block.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCinderhearthSmeltingPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCinderhearthSmeltingPageRenderer.java index a222b0d0ac..d2b4722e29 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCinderhearthSmeltingPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCinderhearthSmeltingPageRenderer.java @@ -14,7 +14,7 @@ import net.minecraft.resources.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java index 8fb83babe0..2902043f4c 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookCrystallarieumGrowingPageRenderer.java @@ -17,7 +17,7 @@ import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookEnchanterUpgradingPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookEnchanterUpgradingPageRenderer.java index dce7540c45..d6806820b1 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookEnchanterUpgradingPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookEnchanterUpgradingPageRenderer.java @@ -16,8 +16,6 @@ import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; -import java.util.*; - public class BookEnchanterUpgradingPageRenderer extends BookGatedRecipePageRenderer> { private static final ResourceLocation BACKGROUND_TEXTURE = SpectrumCommon.locate("textures/gui/modonomicon/enchanter_crafting.png"); diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookFusionShrineCraftingPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookFusionShrineCraftingPageRenderer.java index cc87b8dcda..cbbb75126a 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookFusionShrineCraftingPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookFusionShrineCraftingPageRenderer.java @@ -12,7 +12,6 @@ import net.minecraft.resources.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookHintPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookHintPageRenderer.java index 94b899ef53..797988f15a 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookHintPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookHintPageRenderer.java @@ -15,7 +15,7 @@ import net.minecraft.network.chat.*; import net.minecraft.sounds.*; import net.neoforged.neoforge.network.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookInkConvertingPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookInkConvertingPageRenderer.java index 700cdef244..51fc3d8e92 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookInkConvertingPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookInkConvertingPageRenderer.java @@ -6,7 +6,7 @@ import com.mojang.blaze3d.systems.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.compat.modonomicon.pages.*; -import de.dafuqs.spectrum.recipe.color_picker.InkConvertingRecipe; +import de.dafuqs.spectrum.recipe.color_picker.*; import net.minecraft.client.*; import net.minecraft.client.gui.*; import net.minecraft.network.chat.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookLinkPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookLinkPageRenderer.java index 35c88c3b41..96a191cb93 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookLinkPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookLinkPageRenderer.java @@ -5,7 +5,7 @@ import de.dafuqs.spectrum.compat.modonomicon.pages.*; import net.minecraft.client.gui.components.*; import net.minecraft.network.chat.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class BookLinkPageRenderer extends BookTextPageRenderer { diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookPedestalCraftingPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookPedestalCraftingPageRenderer.java index 0137a14ee7..7530060c64 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookPedestalCraftingPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookPedestalCraftingPageRenderer.java @@ -15,8 +15,6 @@ import net.minecraft.world.level.*; import org.jetbrains.annotations.*; -import javax.annotation.*; - import java.util.*; public class BookPedestalCraftingPageRenderer extends BookGatedRecipePageRenderer> { diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookSnippetPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookSnippetPageRenderer.java index 897585a357..0470d8225b 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookSnippetPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookSnippetPageRenderer.java @@ -9,7 +9,7 @@ import net.minecraft.client.gui.*; import net.minecraft.network.chat.*; import net.minecraft.util.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class BookSnippetPageRenderer extends BookPageRenderer implements PageWithTextRenderer { diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookStatusEffectPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookStatusEffectPageRenderer.java index 53b4631128..ad7fbba9c5 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookStatusEffectPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookStatusEffectPageRenderer.java @@ -8,7 +8,6 @@ import net.minecraft.client.renderer.texture.*; import net.minecraft.core.*; import net.minecraft.core.registries.*; -import net.minecraft.resources.*; import net.minecraft.world.effect.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookTitrationBarrelFermentingPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookTitrationBarrelFermentingPageRenderer.java index 04e092868c..d7defb343b 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookTitrationBarrelFermentingPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookTitrationBarrelFermentingPageRenderer.java @@ -17,7 +17,7 @@ import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; import net.neoforged.neoforge.fluids.crafting.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/package-info.java index 6b31172090..010256384c 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.compat.modonomicon.client.pages; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/package-info.java index 432d1c95db..fec564e90b 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.compat.modonomicon; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/page_types/WebLinkEntry.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/page_types/WebLinkEntry.java index 98d123c6af..4d4a3abad7 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/page_types/WebLinkEntry.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/page_types/WebLinkEntry.java @@ -10,7 +10,7 @@ import net.minecraft.network.*; import net.minecraft.resources.*; import net.minecraft.util.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; /** * A node that is a link to another existing entry diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/page_types/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/page_types/package-info.java index 8758b50173..5eb0b56cb4 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/page_types/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/page_types/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.compat.modonomicon.page_types; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/pages/BookGatedRecipePage.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/pages/BookGatedRecipePage.java index 5d9b14686b..041c38ece6 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/pages/BookGatedRecipePage.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/pages/BookGatedRecipePage.java @@ -15,7 +15,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/pages/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/pages/package-info.java index 6d21e358e2..ece95d8aa9 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/pages/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/pages/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.compat.modonomicon.pages; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/unlock_conditions/EnchantmentRegisteredCondition.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/unlock_conditions/EnchantmentRegisteredCondition.java index e3cb269038..c01da91fa9 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/unlock_conditions/EnchantmentRegisteredCondition.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/unlock_conditions/EnchantmentRegisteredCondition.java @@ -14,7 +14,7 @@ import net.minecraft.util.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.enchantment.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/unlock_conditions/RecipesLoadedAndUnlockedCondition.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/unlock_conditions/RecipesLoadedAndUnlockedCondition.java index 94be25f40d..a323b0fdd9 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/unlock_conditions/RecipesLoadedAndUnlockedCondition.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/unlock_conditions/RecipesLoadedAndUnlockedCondition.java @@ -13,7 +13,7 @@ import net.minecraft.util.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.crafting.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/unlock_conditions/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/unlock_conditions/package-info.java index a887fcaebe..a87b205bc6 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/unlock_conditions/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/unlock_conditions/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.compat.modonomicon.unlock_conditions; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/package-info.java index c2df6479c8..94618bcbfc 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.compat; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/travelersbackpack/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/travelersbackpack/package-info.java index 56c80f1e03..ebafc9c154 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/travelersbackpack/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/compat/travelersbackpack/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.compat.travelersbackpack; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/components/BeverageComponent.java b/src/main/java/de/dafuqs/spectrum/components/BeverageComponent.java index 5f7d1733c4..595c0f08b3 100644 --- a/src/main/java/de/dafuqs/spectrum/components/BeverageComponent.java +++ b/src/main/java/de/dafuqs/spectrum/components/BeverageComponent.java @@ -8,7 +8,6 @@ import net.minecraft.network.codec.*; import net.minecraft.world.item.*; import net.minecraft.world.item.component.*; -import javax.annotation.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/components/CustomPotionDataComponent.java b/src/main/java/de/dafuqs/spectrum/components/CustomPotionDataComponent.java index e6dcb48caa..128998f060 100644 --- a/src/main/java/de/dafuqs/spectrum/components/CustomPotionDataComponent.java +++ b/src/main/java/de/dafuqs/spectrum/components/CustomPotionDataComponent.java @@ -7,7 +7,6 @@ import net.minecraft.network.codec.*; import net.minecraft.world.item.*; import net.minecraft.world.item.component.*; -import javax.annotation.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/components/InfusedBeverageComponent.java b/src/main/java/de/dafuqs/spectrum/components/InfusedBeverageComponent.java index 598663757b..b404f82721 100644 --- a/src/main/java/de/dafuqs/spectrum/components/InfusedBeverageComponent.java +++ b/src/main/java/de/dafuqs/spectrum/components/InfusedBeverageComponent.java @@ -9,7 +9,6 @@ import net.minecraft.network.codec.*; import net.minecraft.world.item.*; import net.minecraft.world.item.component.*; -import javax.annotation.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/components/JadeWineComponent.java b/src/main/java/de/dafuqs/spectrum/components/JadeWineComponent.java index a30361e6cc..a2042d0eaf 100644 --- a/src/main/java/de/dafuqs/spectrum/components/JadeWineComponent.java +++ b/src/main/java/de/dafuqs/spectrum/components/JadeWineComponent.java @@ -8,7 +8,6 @@ import net.minecraft.network.codec.*; import net.minecraft.world.item.*; import net.minecraft.world.item.component.*; -import javax.annotation.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/components/WithMilkComponent.java b/src/main/java/de/dafuqs/spectrum/components/WithMilkComponent.java index 9b74b217b5..6f21f122f1 100644 --- a/src/main/java/de/dafuqs/spectrum/components/WithMilkComponent.java +++ b/src/main/java/de/dafuqs/spectrum/components/WithMilkComponent.java @@ -6,7 +6,6 @@ import net.minecraft.network.codec.*; import net.minecraft.world.item.*; import net.minecraft.world.item.component.*; -import javax.annotation.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/components/package-info.java b/src/main/java/de/dafuqs/spectrum/components/package-info.java index dda28c6173..99cfa64724 100644 --- a/src/main/java/de/dafuqs/spectrum/components/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/components/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.components; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java b/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java index 95bc73a9dd..70f8749b32 100644 --- a/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java +++ b/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.config; import net.minecraft.resources.*; -import net.minecraft.world.level.*; import net.neoforged.neoforge.common.*; import org.apache.commons.lang3.tuple.*; diff --git a/src/main/java/de/dafuqs/spectrum/config/package-info.java b/src/main/java/de/dafuqs/spectrum/config/package-info.java index 7269d5e808..40a2ce7d1c 100644 --- a/src/main/java/de/dafuqs/spectrum/config/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/config/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.config; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/data/package-info.java b/src/main/java/de/dafuqs/spectrum/data/package-info.java index 7639bfb46a..b59b2f594e 100644 --- a/src/main/java/de/dafuqs/spectrum/data/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/data/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.data; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/data_loaders/ColorMappingDataLoader.java b/src/main/java/de/dafuqs/spectrum/data_loaders/ColorMappingDataLoader.java index d60e502ac4..a9193d1b49 100644 --- a/src/main/java/de/dafuqs/spectrum/data_loaders/ColorMappingDataLoader.java +++ b/src/main/java/de/dafuqs/spectrum/data_loaders/ColorMappingDataLoader.java @@ -8,7 +8,6 @@ import net.minecraft.resources.*; import net.minecraft.server.packs.resources.*; import net.minecraft.util.profiling.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/data_loaders/CrystalApothecarySimulationsDataLoader.java b/src/main/java/de/dafuqs/spectrum/data_loaders/CrystalApothecarySimulationsDataLoader.java index 1d0763b0fb..4eaa8dc14a 100644 --- a/src/main/java/de/dafuqs/spectrum/data_loaders/CrystalApothecarySimulationsDataLoader.java +++ b/src/main/java/de/dafuqs/spectrum/data_loaders/CrystalApothecarySimulationsDataLoader.java @@ -5,7 +5,6 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.registries.*; import net.minecraft.core.registries.*; import net.minecraft.resources.*; import net.minecraft.server.packs.resources.*; diff --git a/src/main/java/de/dafuqs/spectrum/data_loaders/EntityFishingDataLoader.java b/src/main/java/de/dafuqs/spectrum/data_loaders/EntityFishingDataLoader.java index f1295fe4df..08d52772a6 100644 --- a/src/main/java/de/dafuqs/spectrum/data_loaders/EntityFishingDataLoader.java +++ b/src/main/java/de/dafuqs/spectrum/data_loaders/EntityFishingDataLoader.java @@ -17,7 +17,6 @@ import net.minecraft.world.entity.*; import net.minecraft.world.level.*; import net.minecraft.world.level.material.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/data_loaders/GeodeOreDefinition.java b/src/main/java/de/dafuqs/spectrum/data_loaders/GeodeOreDefinition.java index 38323510c6..1f2c839a77 100644 --- a/src/main/java/de/dafuqs/spectrum/data_loaders/GeodeOreDefinition.java +++ b/src/main/java/de/dafuqs/spectrum/data_loaders/GeodeOreDefinition.java @@ -3,9 +3,6 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.api.predicate.block.*; -import net.minecraft.core.*; -import net.minecraft.core.registries.*; -import net.minecraft.world.level.block.*; import net.minecraft.world.level.levelgen.feature.configurations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/data_loaders/NaturesStaffConversionDataLoader.java b/src/main/java/de/dafuqs/spectrum/data_loaders/NaturesStaffConversionDataLoader.java index 060efb52eb..d09fb4e34c 100644 --- a/src/main/java/de/dafuqs/spectrum/data_loaders/NaturesStaffConversionDataLoader.java +++ b/src/main/java/de/dafuqs/spectrum/data_loaders/NaturesStaffConversionDataLoader.java @@ -10,7 +10,7 @@ import net.minecraft.util.profiling.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/data_loaders/client/BiomeRenderingDataLoader.java b/src/main/java/de/dafuqs/spectrum/data_loaders/client/BiomeRenderingDataLoader.java index 139ba5a880..7412a4e4d2 100644 --- a/src/main/java/de/dafuqs/spectrum/data_loaders/client/BiomeRenderingDataLoader.java +++ b/src/main/java/de/dafuqs/spectrum/data_loaders/client/BiomeRenderingDataLoader.java @@ -6,18 +6,14 @@ import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.render.biome_rendering.*; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.resources.ResourceManager; -import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener; -import net.minecraft.util.profiling.ProfilerFiller; -import net.minecraft.world.level.biome.Biome; +import net.minecraft.core.registries.*; +import net.minecraft.resources.*; +import net.minecraft.server.packs.resources.*; +import net.minecraft.util.profiling.*; +import net.minecraft.world.level.biome.*; import net.neoforged.neoforge.common.conditions.*; -import javax.annotation.*; import java.util.*; -import java.util.function.*; public class BiomeRenderingDataLoader extends SimpleJsonResourceReloadListener { diff --git a/src/main/java/de/dafuqs/spectrum/data_loaders/client/ParticleSpawnerParticlesDataLoader.java b/src/main/java/de/dafuqs/spectrum/data_loaders/client/ParticleSpawnerParticlesDataLoader.java index 0be54ef469..5686481440 100644 --- a/src/main/java/de/dafuqs/spectrum/data_loaders/client/ParticleSpawnerParticlesDataLoader.java +++ b/src/main/java/de/dafuqs/spectrum/data_loaders/client/ParticleSpawnerParticlesDataLoader.java @@ -10,7 +10,7 @@ import net.minecraft.util.*; import net.minecraft.util.profiling.*; import net.minecraft.world.entity.player.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/data_loaders/client/package-info.java b/src/main/java/de/dafuqs/spectrum/data_loaders/client/package-info.java index 9ca69412d9..5d0afcd89f 100644 --- a/src/main/java/de/dafuqs/spectrum/data_loaders/client/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/data_loaders/client/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.data_loaders.client; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/data_loaders/package-info.java b/src/main/java/de/dafuqs/spectrum/data_loaders/package-info.java index dc5e9cd790..4e0dd38aae 100644 --- a/src/main/java/de/dafuqs/spectrum/data_loaders/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/data_loaders/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.data_loaders; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/data_loaders/resonance_processors/package-info.java b/src/main/java/de/dafuqs/spectrum/data_loaders/resonance_processors/package-info.java index 8b5f2054cf..9a465590e3 100644 --- a/src/main/java/de/dafuqs/spectrum/data_loaders/resonance_processors/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/data_loaders/resonance_processors/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.data_loaders.resonance_processors; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/deeper_down/client/DeeperDownDimensionEffects.java b/src/main/java/de/dafuqs/spectrum/deeper_down/client/DeeperDownDimensionEffects.java index 3a9b71bca3..231a85921d 100644 --- a/src/main/java/de/dafuqs/spectrum/deeper_down/client/DeeperDownDimensionEffects.java +++ b/src/main/java/de/dafuqs/spectrum/deeper_down/client/DeeperDownDimensionEffects.java @@ -2,7 +2,7 @@ import net.minecraft.client.renderer.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class DeeperDownDimensionEffects extends DimensionSpecialEffects { diff --git a/src/main/java/de/dafuqs/spectrum/deeper_down/client/HowlingSpireEffects.java b/src/main/java/de/dafuqs/spectrum/deeper_down/client/HowlingSpireEffects.java index ac5de9e0e1..7edd036190 100644 --- a/src/main/java/de/dafuqs/spectrum/deeper_down/client/HowlingSpireEffects.java +++ b/src/main/java/de/dafuqs/spectrum/deeper_down/client/HowlingSpireEffects.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.deeper_down.client; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.particle.*; import de.dafuqs.spectrum.particle.client.*; diff --git a/src/main/java/de/dafuqs/spectrum/deeper_down/client/package-info.java b/src/main/java/de/dafuqs/spectrum/deeper_down/client/package-info.java index d352770801..31e5b01801 100644 --- a/src/main/java/de/dafuqs/spectrum/deeper_down/client/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/deeper_down/client/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.deeper_down.client; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/deeper_down/package-info.java b/src/main/java/de/dafuqs/spectrum/deeper_down/package-info.java index 1bb0636824..e5d291cadb 100644 --- a/src/main/java/de/dafuqs/spectrum/deeper_down/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/deeper_down/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.deeper_down; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/SpectrumEntitySubPredicateTypes.java b/src/main/java/de/dafuqs/spectrum/entity/SpectrumEntitySubPredicateTypes.java index 8171e7db17..92fb24ed46 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/SpectrumEntitySubPredicateTypes.java +++ b/src/main/java/de/dafuqs/spectrum/entity/SpectrumEntitySubPredicateTypes.java @@ -4,7 +4,6 @@ import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.entity.predicates.*; import net.minecraft.advancements.critereon.*; -import net.minecraft.core.*; import net.minecraft.core.registries.*; import net.neoforged.bus.api.*; import net.neoforged.neoforge.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/ai/package-info.java b/src/main/java/de/dafuqs/spectrum/entity/ai/package-info.java index c67a7aa98f..76ac53f94d 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/ai/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/entity/ai/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.entity.ai; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/animation/package-info.java b/src/main/java/de/dafuqs/spectrum/entity/animation/package-info.java index 5dea428471..d7c0cca2fc 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/animation/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/entity/animation/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.entity.animation; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/BidentBaseEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/BidentBaseEntity.java index 7fa1229e87..98aa3671e4 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/BidentBaseEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/BidentBaseEntity.java @@ -7,7 +7,6 @@ import net.minecraft.world.entity.projectile.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import javax.annotation.*; public abstract class BidentBaseEntity extends ThrownTrident { diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/BidentEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/BidentEntity.java index b6aa1fd99f..c5fd3fc385 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/BidentEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/BidentEntity.java @@ -4,7 +4,6 @@ import net.minecraft.world.entity.*; import net.minecraft.world.entity.projectile.*; import net.minecraft.world.level.*; -import net.minecraft.world.phys.*; public class BidentEntity extends BidentBaseEntity { diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/BidentMirrorImageEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/BidentMirrorImageEntity.java index 0a453ab3bc..850358691f 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/BidentMirrorImageEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/BidentMirrorImageEntity.java @@ -2,9 +2,9 @@ import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.magic.*; import de.dafuqs.spectrum.particle.*; import de.dafuqs.spectrum.registries.*; -import de.dafuqs.spectrum.magic.*; import net.minecraft.sounds.*; import net.minecraft.util.valueproviders.*; import net.minecraft.world.entity.*; @@ -12,7 +12,7 @@ import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class BidentMirrorImageEntity extends BidentBaseEntity { public BidentMirrorImageEntity(Level world) { diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/DraconicTwinswordEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/DraconicTwinswordEntity.java index 863c1af4a1..bc5d82856d 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/DraconicTwinswordEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/DraconicTwinswordEntity.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.entity.entity; -import de.dafuqs.spectrum.api.entity.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.helpers.*; @@ -31,7 +30,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.phys.*; import org.apache.commons.lang3.mutable.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/DragonTalonEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/DragonTalonEntity.java index 73138e70f2..7be4f47186 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/DragonTalonEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/DragonTalonEntity.java @@ -25,7 +25,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.phys.*; import org.apache.commons.lang3.mutable.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/EggLayingWoolyPigEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/EggLayingWoolyPigEntity.java index d561a4039b..287199d0e8 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/EggLayingWoolyPigEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/EggLayingWoolyPigEntity.java @@ -26,7 +26,7 @@ import net.minecraft.world.level.storage.loot.*; import net.minecraft.world.level.storage.loot.parameters.*; import net.neoforged.neoforge.common.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/EraserEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/EraserEntity.java index dcbc2e4d09..48d3b755c6 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/EraserEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/EraserEntity.java @@ -24,7 +24,7 @@ import net.minecraft.world.item.component.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/FloatBlockEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/FloatBlockEntity.java index 0773468628..f23c98b56f 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/FloatBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/FloatBlockEntity.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.entity.entity; -import de.dafuqs.spectrum.blocks.FloatBlock; +import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.recipe.anvil_crushing.*; import de.dafuqs.spectrum.registries.*; @@ -27,7 +27,7 @@ import net.minecraft.world.level.material.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/GlassArrowEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/GlassArrowEntity.java index aaa81a012c..09d9e542f2 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/GlassArrowEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/GlassArrowEntity.java @@ -2,8 +2,8 @@ import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.items.tools.*; -import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.magic.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.core.particles.*; import net.minecraft.nbt.*; import net.minecraft.network.syncher.*; @@ -18,7 +18,7 @@ import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class GlassArrowEntity extends AbstractArrow { diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/KindlingEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/KindlingEntity.java index c8a4a1f444..387e6051b1 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/KindlingEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/KindlingEntity.java @@ -39,7 +39,7 @@ import net.minecraft.world.level.storage.loot.parameters.*; import net.minecraft.world.phys.*; import net.neoforged.neoforge.common.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/LightMineEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/LightMineEntity.java index e3278e0bb6..f536253c48 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/LightMineEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/LightMineEntity.java @@ -15,7 +15,7 @@ import net.minecraft.world.item.alchemy.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/LightShardBaseEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/LightShardBaseEntity.java index 043e46ce1a..65fe1efd23 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/LightShardBaseEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/LightShardBaseEntity.java @@ -17,7 +17,7 @@ import net.minecraft.world.entity.projectile.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/LightShardEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/LightShardEntity.java index 0465bf50ff..6f23bab8a0 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/LightShardEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/LightShardEntity.java @@ -8,7 +8,7 @@ import net.minecraft.world.entity.projectile.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/LightSpearEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/LightSpearEntity.java index ea5f3d19d5..8972b1591e 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/LightSpearEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/LightSpearEntity.java @@ -9,7 +9,7 @@ import net.minecraft.world.entity.projectile.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/LizardEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/LizardEntity.java index 1fe00965e3..17d0b004b6 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/LizardEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/LizardEntity.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.entity.entity; -import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.entity.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.entity.variants.*; import de.dafuqs.spectrum.registries.*; @@ -25,7 +25,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/MagicProjectileEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/MagicProjectileEntity.java index e12613abed..f5a7710c08 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/MagicProjectileEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/MagicProjectileEntity.java @@ -11,7 +11,7 @@ import net.minecraft.world.entity.projectile.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public abstract class MagicProjectileEntity extends Projectile { diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/Marrow.java b/src/main/java/de/dafuqs/spectrum/entity/entity/Marrow.java index 18b9eddb0e..96d9702581 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/Marrow.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/Marrow.java @@ -10,7 +10,7 @@ import net.minecraft.world.entity.projectile.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class Marrow extends AbstractSkeleton { diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/MiningProjectileEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/MiningProjectileEntity.java index 4203855296..739d0a7a91 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/MiningProjectileEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/MiningProjectileEntity.java @@ -3,8 +3,8 @@ import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.particle.effect.*; import de.dafuqs.spectrum.magic.*; +import de.dafuqs.spectrum.particle.effect.*; import net.minecraft.network.syncher.*; import net.minecraft.world.entity.*; import net.minecraft.world.entity.player.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/MonstrosityEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/MonstrosityEntity.java index ec5aca58d9..fcc7294114 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/MonstrosityEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/MonstrosityEntity.java @@ -20,7 +20,6 @@ import net.minecraft.tags.*; import net.minecraft.util.*; import net.minecraft.util.valueproviders.*; -import net.minecraft.world.*; import net.minecraft.world.damagesource.*; import net.minecraft.world.effect.*; import net.minecraft.world.entity.*; @@ -36,7 +35,6 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import javax.annotation.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/ParametricMiningDeviceEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/ParametricMiningDeviceEntity.java index 2bc12fd1a3..84a1fc591b 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/ParametricMiningDeviceEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/ParametricMiningDeviceEntity.java @@ -15,7 +15,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import javax.annotation.*; public class ParametricMiningDeviceEntity extends ThrowableItemProjectile { diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/PhantomFrameEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/PhantomFrameEntity.java index b015190429..a2a4c34928 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/PhantomFrameEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/PhantomFrameEntity.java @@ -12,7 +12,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import javax.annotation.*; public class PhantomFrameEntity extends ItemFrame { diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/PhantomGlowFrameEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/PhantomGlowFrameEntity.java index 9658b1044d..ea07872acf 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/PhantomGlowFrameEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/PhantomGlowFrameEntity.java @@ -8,7 +8,6 @@ import net.minecraft.world.entity.decoration.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import javax.annotation.*; public class PhantomGlowFrameEntity extends PhantomFrameEntity { diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/PreservationTurretEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/PreservationTurretEntity.java index 7ae5bfe5e3..e988a59695 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/PreservationTurretEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/PreservationTurretEntity.java @@ -31,10 +31,8 @@ import net.minecraft.world.level.gameevent.*; import net.minecraft.world.level.gameevent.vibrations.*; import net.minecraft.world.phys.*; - -import org.jetbrains.annotations.*; import org.joml.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.lang.Math; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/SeatEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/SeatEntity.java index 286f3c7904..16f781da15 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/SeatEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/SeatEntity.java @@ -11,7 +11,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/ShootingStarEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/ShootingStarEntity.java index 132f17eeaa..251d891abd 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/ShootingStarEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/ShootingStarEntity.java @@ -27,7 +27,6 @@ import net.minecraft.world.level.storage.loot.*; import net.minecraft.world.level.storage.loot.parameters.*; import net.minecraft.world.phys.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/SpectrumBossEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/SpectrumBossEntity.java index 5146256e27..834fbe50c2 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/SpectrumBossEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/SpectrumBossEntity.java @@ -17,7 +17,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class SpectrumBossEntity extends FlyingMob { diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/SpectrumFishingHook.java b/src/main/java/de/dafuqs/spectrum/entity/entity/SpectrumFishingHook.java index 77d8e83d80..4e0c110bea 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/SpectrumFishingHook.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/SpectrumFishingHook.java @@ -1,10 +1,8 @@ package de.dafuqs.spectrum.entity.entity; -import com.mojang.logging.*; import de.dafuqs.spectrum.blocks.fluid.*; import de.dafuqs.spectrum.data_loaders.*; import de.dafuqs.spectrum.data_loaders.EntityFishingDataLoader.*; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.helpers.enchantments.*; import de.dafuqs.spectrum.items.tools.*; import de.dafuqs.spectrum.loot.*; @@ -35,8 +33,7 @@ import net.minecraft.world.level.storage.loot.*; import net.minecraft.world.level.storage.loot.parameters.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; -import org.slf4j.*; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/package-info.java b/src/main/java/de/dafuqs/spectrum/entity/entity/package-info.java index edc09c9296..2601cd064e 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.entity.entity; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/models/PreservationTurretEntityModel.java b/src/main/java/de/dafuqs/spectrum/entity/models/PreservationTurretEntityModel.java index 6fb33dabcd..d4691c663d 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/models/PreservationTurretEntityModel.java +++ b/src/main/java/de/dafuqs/spectrum/entity/models/PreservationTurretEntityModel.java @@ -7,7 +7,6 @@ import net.minecraft.client.model.geom.builders.*; import net.minecraft.client.renderer.*; import net.minecraft.util.*; -import javax.annotation.*; public class PreservationTurretEntityModel extends ListModel { diff --git a/src/main/java/de/dafuqs/spectrum/entity/models/package-info.java b/src/main/java/de/dafuqs/spectrum/entity/models/package-info.java index 4aed6245e0..21e68f65ee 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/models/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/entity/models/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.entity.models; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/package-info.java b/src/main/java/de/dafuqs/spectrum/entity/package-info.java index 2eb907b5d6..def77cfe80 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/entity/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.entity; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/predicates/EggLayingWoolyPigPredicate.java b/src/main/java/de/dafuqs/spectrum/entity/predicates/EggLayingWoolyPigPredicate.java index 221088481d..d9743f3214 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/predicates/EggLayingWoolyPigPredicate.java +++ b/src/main/java/de/dafuqs/spectrum/entity/predicates/EggLayingWoolyPigPredicate.java @@ -9,7 +9,7 @@ import net.minecraft.world.entity.*; import net.minecraft.world.item.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/predicates/KindlingPredicate.java b/src/main/java/de/dafuqs/spectrum/entity/predicates/KindlingPredicate.java index 5c87f336b4..ee28c29c44 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/predicates/KindlingPredicate.java +++ b/src/main/java/de/dafuqs/spectrum/entity/predicates/KindlingPredicate.java @@ -10,7 +10,7 @@ import net.minecraft.server.level.*; import net.minecraft.world.entity.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/predicates/LizardPredicate.java b/src/main/java/de/dafuqs/spectrum/entity/predicates/LizardPredicate.java index c950927714..ec72af93a5 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/predicates/LizardPredicate.java +++ b/src/main/java/de/dafuqs/spectrum/entity/predicates/LizardPredicate.java @@ -11,7 +11,7 @@ import net.minecraft.server.level.*; import net.minecraft.world.entity.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/predicates/ShulkerPredicate.java b/src/main/java/de/dafuqs/spectrum/entity/predicates/ShulkerPredicate.java index 4b4163c0c4..068151e249 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/predicates/ShulkerPredicate.java +++ b/src/main/java/de/dafuqs/spectrum/entity/predicates/ShulkerPredicate.java @@ -9,7 +9,7 @@ import net.minecraft.world.entity.monster.*; import net.minecraft.world.item.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/predicates/package-info.java b/src/main/java/de/dafuqs/spectrum/entity/predicates/package-info.java index b96a3237a9..3c71f4c2ae 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/predicates/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/entity/predicates/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.entity.predicates; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/render/KindlingEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/entity/render/KindlingEntityRenderer.java index 1210722381..59401acdea 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/render/KindlingEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/entity/render/KindlingEntityRenderer.java @@ -10,7 +10,6 @@ import net.minecraft.client.renderer.entity.*; import net.minecraft.client.renderer.entity.layers.*; import net.minecraft.resources.*; -import javax.annotation.*; public class KindlingEntityRenderer extends MobRenderer { diff --git a/src/main/java/de/dafuqs/spectrum/entity/render/MarrowRenderer.java b/src/main/java/de/dafuqs/spectrum/entity/render/MarrowRenderer.java index 77dc009f80..2b9ea674f4 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/render/MarrowRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/entity/render/MarrowRenderer.java @@ -7,7 +7,6 @@ import net.minecraft.client.renderer.entity.layers.*; import net.minecraft.resources.*; import net.neoforged.api.distmarker.*; -import javax.annotation.*; @OnlyIn(Dist.CLIENT) public class MarrowRenderer extends SkeletonRenderer { diff --git a/src/main/java/de/dafuqs/spectrum/entity/render/MonstrosityEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/entity/render/MonstrosityEntityRenderer.java index 7476d56394..5a205a2186 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/render/MonstrosityEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/entity/render/MonstrosityEntityRenderer.java @@ -3,8 +3,6 @@ import com.mojang.blaze3d.vertex.*; import de.dafuqs.spectrum.entity.entity.*; import net.minecraft.client.gui.*; -import de.dafuqs.spectrum.entity.models.*; -import de.dafuqs.spectrum.registries.client.*; import net.minecraft.client.renderer.*; import net.minecraft.client.renderer.entity.*; import net.minecraft.client.renderer.texture.*; @@ -12,7 +10,6 @@ import net.minecraft.resources.*; import net.minecraft.util.*; import net.neoforged.api.distmarker.*; -import javax.annotation.*; import org.joml.*; import java.lang.Math; diff --git a/src/main/java/de/dafuqs/spectrum/entity/render/ShootingStarEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/entity/render/ShootingStarEntityRenderer.java index e25b3343be..ed34a8fab9 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/render/ShootingStarEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/entity/render/ShootingStarEntityRenderer.java @@ -9,7 +9,6 @@ import net.minecraft.client.renderer.texture.*; import net.minecraft.core.*; import net.minecraft.resources.*; -import net.minecraft.util.*; import net.minecraft.world.inventory.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/render/SplinterspawnRenderer.java b/src/main/java/de/dafuqs/spectrum/entity/render/SplinterspawnRenderer.java index 356c086de1..f02f6c7296 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/render/SplinterspawnRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/entity/render/SplinterspawnRenderer.java @@ -5,7 +5,6 @@ import net.minecraft.resources.*; import net.minecraft.world.entity.monster.*; import net.neoforged.api.distmarker.*; -import javax.annotation.*; @OnlyIn(Dist.CLIENT) public class SplinterspawnRenderer extends SilverfishRenderer { diff --git a/src/main/java/de/dafuqs/spectrum/entity/render/package-info.java b/src/main/java/de/dafuqs/spectrum/entity/render/package-info.java index d1d8871c88..557cdd9f6b 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/render/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/entity/render/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.entity.render; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/spawners/ShootingStarSpawner.java b/src/main/java/de/dafuqs/spectrum/entity/spawners/ShootingStarSpawner.java index bf07436729..857e7fab51 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/spawners/ShootingStarSpawner.java +++ b/src/main/java/de/dafuqs/spectrum/entity/spawners/ShootingStarSpawner.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.entity.spawners; import de.dafuqs.revelationary.api.advancements.*; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.blocks.shooting_star.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.entity.entity.*; @@ -14,7 +13,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import javax.annotation.*; public class ShootingStarSpawner implements CustomSpawner { diff --git a/src/main/java/de/dafuqs/spectrum/entity/spawners/package-info.java b/src/main/java/de/dafuqs/spectrum/entity/spawners/package-info.java index 380e9d4ee9..06c8c97910 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/spawners/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/entity/spawners/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.entity.spawners; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/variants/package-info.java b/src/main/java/de/dafuqs/spectrum/entity/variants/package-info.java index ba3d84c8b0..cb17e47165 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/variants/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/entity/variants/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.entity.variants; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/events/ExactPositionSource.java b/src/main/java/de/dafuqs/spectrum/events/ExactPositionSource.java index a48ff6bb47..1194d086fc 100644 --- a/src/main/java/de/dafuqs/spectrum/events/ExactPositionSource.java +++ b/src/main/java/de/dafuqs/spectrum/events/ExactPositionSource.java @@ -8,7 +8,6 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/events/SpectrumPositionSources.java b/src/main/java/de/dafuqs/spectrum/events/SpectrumPositionSources.java index 8f483aa920..641eff91c9 100644 --- a/src/main/java/de/dafuqs/spectrum/events/SpectrumPositionSources.java +++ b/src/main/java/de/dafuqs/spectrum/events/SpectrumPositionSources.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.events; import de.dafuqs.spectrum.*; -import net.minecraft.core.*; import net.minecraft.core.registries.*; import net.minecraft.world.level.gameevent.*; import net.neoforged.bus.api.*; diff --git a/src/main/java/de/dafuqs/spectrum/events/listeners/ItemAndExperienceEventQueue.java b/src/main/java/de/dafuqs/spectrum/events/listeners/ItemAndExperienceEventQueue.java index 14de9d3432..512109afe7 100644 --- a/src/main/java/de/dafuqs/spectrum/events/listeners/ItemAndExperienceEventQueue.java +++ b/src/main/java/de/dafuqs/spectrum/events/listeners/ItemAndExperienceEventQueue.java @@ -8,7 +8,6 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; -import javax.annotation.*; /** * Since Sucking chests can react to both spawned items and experience diff --git a/src/main/java/de/dafuqs/spectrum/events/listeners/package-info.java b/src/main/java/de/dafuqs/spectrum/events/listeners/package-info.java index 6a91100585..ccfdab0f3f 100644 --- a/src/main/java/de/dafuqs/spectrum/events/listeners/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/events/listeners/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.events.listeners; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/events/package-info.java b/src/main/java/de/dafuqs/spectrum/events/package-info.java index d5adbc76a7..90bac3afb5 100644 --- a/src/main/java/de/dafuqs/spectrum/events/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/events/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.events; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/AoEHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/AoEHelper.java index 70da2fd760..9d10e9c498 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/AoEHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/AoEHelper.java @@ -9,7 +9,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/BuildingHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/BuildingHelper.java index 1ed63912bc..c2b059bdde 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/BuildingHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/BuildingHelper.java @@ -9,7 +9,6 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.shapes.*; -import javax.annotation.*; import oshi.util.tuples.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/CodecHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/CodecHelper.java index 74fe08d04f..55a7ec6744 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/CodecHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/CodecHelper.java @@ -9,8 +9,7 @@ import net.minecraft.nbt.*; import net.minecraft.resources.*; import net.minecraft.util.*; -import org.apache.commons.lang3.math.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/EntityHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/EntityHelper.java index b40c99c843..0b01647377 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/EntityHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/EntityHelper.java @@ -7,7 +7,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.entity.projectile.*; import net.neoforged.neoforge.common.util.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/FakePlayerHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/FakePlayerHelper.java index 9f70755af1..ae3c09ee19 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/FakePlayerHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/FakePlayerHelper.java @@ -6,7 +6,7 @@ import net.minecraft.server.level.*; import net.minecraft.world.entity.player.*; import net.neoforged.neoforge.common.util.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/InWorldInteractionHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/InWorldInteractionHelper.java index ac291f2f8b..e57a10b4ea 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/InWorldInteractionHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/InWorldInteractionHelper.java @@ -1,13 +1,11 @@ package de.dafuqs.spectrum.helpers; import net.minecraft.server.level.*; -import net.minecraft.tags.*; import net.minecraft.world.*; import net.minecraft.world.entity.item.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/InventoryHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/InventoryHelper.java index ee92b07753..4d3efa9b67 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/InventoryHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/InventoryHelper.java @@ -9,10 +9,9 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.neoforged.neoforge.items.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; -import java.util.function.*; public class InventoryHelper { diff --git a/src/main/java/de/dafuqs/spectrum/helpers/LoreHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/LoreHelper.java index 1bb8920e04..457620156b 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/LoreHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/LoreHelper.java @@ -4,7 +4,7 @@ import net.minecraft.network.chat.*; import net.minecraft.world.item.*; import net.minecraft.world.item.component.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/MobEffectHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/MobEffectHelper.java index f395ca8853..bfa8618cb1 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/MobEffectHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/MobEffectHelper.java @@ -9,10 +9,10 @@ import net.minecraft.server.level.*; import net.minecraft.world.effect.*; import net.minecraft.world.entity.*; -import net.minecraft.world.level.Level; +import net.minecraft.world.level.*; import java.util.*; -import java.util.function.Predicate; +import java.util.function.*; public class MobEffectHelper { diff --git a/src/main/java/de/dafuqs/spectrum/helpers/ParticleHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/ParticleHelper.java index 225d2da5db..6ee8468936 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/ParticleHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/ParticleHelper.java @@ -6,7 +6,6 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/SchedulerMap.java b/src/main/java/de/dafuqs/spectrum/helpers/SchedulerMap.java index 14e2dae416..cab433e5d7 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/SchedulerMap.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/SchedulerMap.java @@ -2,7 +2,6 @@ import com.mojang.datafixers.util.*; import com.mojang.serialization.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/SpectrumColorHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/SpectrumColorHelper.java index 2c078b5f9d..04590eb220 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/SpectrumColorHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/SpectrumColorHelper.java @@ -1,17 +1,15 @@ package de.dafuqs.spectrum.helpers; import com.mojang.serialization.*; -import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.items.*; import net.minecraft.util.*; import net.minecraft.world.item.*; -import javax.annotation.*; import org.joml.*; import java.awt.*; import java.lang.Math; -import java.util.List; import java.util.*; +import java.util.List; import java.util.regex.*; public class SpectrumColorHelper { diff --git a/src/main/java/de/dafuqs/spectrum/helpers/SpectrumEnchantmentHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/SpectrumEnchantmentHelper.java index bd93b23d4c..23181819d1 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/SpectrumEnchantmentHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/SpectrumEnchantmentHelper.java @@ -14,7 +14,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.item.enchantment.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.concurrent.atomic.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/TimeHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/TimeHelper.java index 096e3a85ee..ff7e4054d0 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/TimeHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/TimeHelper.java @@ -2,7 +2,6 @@ import net.minecraft.util.*; import net.minecraft.world.level.*; -import javax.annotation.*; public class TimeHelper { diff --git a/src/main/java/de/dafuqs/spectrum/helpers/enchantments/CloversFavorHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/enchantments/CloversFavorHelper.java index 07633e3c47..e350274a3a 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/enchantments/CloversFavorHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/enchantments/CloversFavorHelper.java @@ -3,7 +3,7 @@ import de.dafuqs.additionalentityattributes.*; import net.minecraft.world.entity.*; import net.minecraft.world.entity.player.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class CloversFavorHelper { diff --git a/src/main/java/de/dafuqs/spectrum/helpers/enchantments/FoundryHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/enchantments/FoundryHelper.java index e24662e234..9513a19522 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/enchantments/FoundryHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/enchantments/FoundryHelper.java @@ -3,7 +3,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/enchantments/package-info.java b/src/main/java/de/dafuqs/spectrum/helpers/enchantments/package-info.java index c82b78340f..44e6fe4d42 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/enchantments/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/enchantments/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.helpers.enchantments; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/package-info.java b/src/main/java/de/dafuqs/spectrum/helpers/package-info.java index f9dd344d21..f4ea731752 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.helpers; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/injectors/package-info.java b/src/main/java/de/dafuqs/spectrum/injectors/package-info.java index 5278ca4b9b..b1f99f75ce 100644 --- a/src/main/java/de/dafuqs/spectrum/injectors/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/injectors/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.injectors; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/BagOfHoldingScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/BagOfHoldingScreenHandler.java index 9c2d64ce9b..5779eb30bb 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/BagOfHoldingScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/BagOfHoldingScreenHandler.java @@ -5,7 +5,6 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; -import javax.annotation.*; public class BagOfHoldingScreenHandler extends ChestMenu { diff --git a/src/main/java/de/dafuqs/spectrum/inventories/BedrockAnvilScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/BedrockAnvilScreen.java index 53ae152fb8..3fd8c4a599 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/BedrockAnvilScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/BedrockAnvilScreen.java @@ -15,7 +15,6 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; -import net.neoforged.api.distmarker.*; import net.neoforged.neoforge.network.*; import org.lwjgl.glfw.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java index dab3d03ca7..3c43e6b2e0 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreenHandler.java @@ -11,7 +11,7 @@ import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class CinderhearthScreenHandler extends AbstractContainerMenu { diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CompactingChestScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/CompactingChestScreen.java index c63c9df774..fd713b3d04 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CompactingChestScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CompactingChestScreen.java @@ -8,7 +8,6 @@ import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; -import javax.annotation.*; public class CompactingChestScreen extends AbstractContainerScreen { diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CraftingTabletScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/CraftingTabletScreenHandler.java index 22b5c0378c..df63a71c0a 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CraftingTabletScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CraftingTabletScreenHandler.java @@ -15,7 +15,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/FilteringScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/FilteringScreenHandler.java index 16a6daa457..6e95d29133 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/FilteringScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/FilteringScreenHandler.java @@ -9,7 +9,7 @@ import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreen.java index 388d9b20c1..4e8284ceb9 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreen.java @@ -8,7 +8,7 @@ import net.minecraft.sounds.*; import net.minecraft.world.entity.player.*; import net.neoforged.neoforge.network.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreenHandler.java index 7340047bd7..4fb217b112 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/PaintbrushScreenHandler.java @@ -8,7 +8,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.block.entity.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/ParticleSpawnerScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/ParticleSpawnerScreen.java index 685076e1b8..ac073503e4 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/ParticleSpawnerScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/ParticleSpawnerScreen.java @@ -3,7 +3,7 @@ import com.mojang.blaze3d.systems.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.blocks.particle_spawner.*; -import de.dafuqs.spectrum.data_loaders.client.ParticleSpawnerParticlesDataLoader; +import de.dafuqs.spectrum.data_loaders.client.*; import de.dafuqs.spectrum.mixin.client.accessors.*; import de.dafuqs.spectrum.networking.c2s_payloads.*; import net.minecraft.*; @@ -18,7 +18,6 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.phys.*; import net.neoforged.neoforge.network.*; -import javax.annotation.*; import org.lwjgl.glfw.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/PedestalScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/PedestalScreen.java index fea78c5fc9..0d808ed254 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/PedestalScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/PedestalScreen.java @@ -16,8 +16,6 @@ import net.minecraft.world.level.block.*; import org.jetbrains.annotations.*; -import javax.annotation.*; - public class PedestalScreen extends AbstractContainerScreen { public static final ResourceLocation BACKGROUND1 = SpectrumCommon.locate("textures/gui/container/pedestal1.png"); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/QuickNavigationGridScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/QuickNavigationGridScreen.java index 60479a6591..77955ff8c3 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/QuickNavigationGridScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/QuickNavigationGridScreen.java @@ -16,7 +16,7 @@ import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; import org.joml.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/QuickNavigationGridScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/QuickNavigationGridScreenHandler.java index 0e33beb4ec..b1fc4cc9f4 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/QuickNavigationGridScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/QuickNavigationGridScreenHandler.java @@ -3,7 +3,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public abstract class QuickNavigationGridScreenHandler extends AbstractContainerMenu { diff --git a/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreen.java index 5a7d210d63..9bf863af01 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreen.java @@ -8,8 +8,6 @@ import net.minecraft.world.entity.player.*; import org.jetbrains.annotations.*; -import javax.annotation.*; - public class Spectrum3x3ContainerScreen extends AbstractContainerScreen { private static final ResourceLocation TIER_1_TEXTURE_3x3 = SpectrumCommon.locate("textures/gui/container/generic_3x3_tier_1.png"); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreenHandler.java index 66b9cdd63f..bd03303f00 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreenHandler.java @@ -7,8 +7,6 @@ import net.minecraft.world.item.*; import org.jetbrains.annotations.*; -import javax.annotation.*; - public class Spectrum3x3ContainerScreenHandler extends AbstractContainerMenu { private final ScreenBackgroundVariant tier; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumGenericContainerScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumGenericContainerScreen.java index 6d68ccf25a..29017ae87f 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumGenericContainerScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumGenericContainerScreen.java @@ -9,8 +9,6 @@ import net.minecraft.world.entity.player.*; import org.jetbrains.annotations.*; -import javax.annotation.*; - public class SpectrumGenericContainerScreen extends AbstractContainerScreen { private static final ResourceLocation TIER_1_TEXTURE_6x9 = SpectrumCommon.locate("textures/gui/container/generic_54_tier_1.png"); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java index 84f1dc182d..ce1957b800 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumMenuTypes.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.*; -import net.minecraft.client.gui.screens.*; import net.minecraft.client.gui.screens.inventory.*; import net.minecraft.core.registries.*; import net.minecraft.resources.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/WorkstaffScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/WorkstaffScreen.java index 619a1ac9d6..820406e8f9 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/WorkstaffScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/WorkstaffScreen.java @@ -10,7 +10,6 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.item.enchantment.*; -import net.neoforged.api.distmarker.*; import net.neoforged.neoforge.network.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/package-info.java b/src/main/java/de/dafuqs/spectrum/inventories/package-info.java index 02696ac791..524dd3efa4 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.inventories; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/slots/ColorPickerInputSlot.java b/src/main/java/de/dafuqs/spectrum/inventories/slots/ColorPickerInputSlot.java index e433f896b3..69eb86c163 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/slots/ColorPickerInputSlot.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/slots/ColorPickerInputSlot.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.inventories.slots; -import de.dafuqs.spectrum.recipe.color_picker.InkConvertingRecipe; +import de.dafuqs.spectrum.recipe.color_picker.*; import net.minecraft.world.*; import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/slots/ExtractOnlySlot.java b/src/main/java/de/dafuqs/spectrum/inventories/slots/ExtractOnlySlot.java index 37a80d89c7..c4247f7b7b 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/slots/ExtractOnlySlot.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/slots/ExtractOnlySlot.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.inventories.slots; import net.minecraft.world.*; -import net.minecraft.world.entity.player.*; import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/slots/PedestalPreviewSlot.java b/src/main/java/de/dafuqs/spectrum/inventories/slots/PedestalPreviewSlot.java index 0775c789d7..2275640972 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/slots/PedestalPreviewSlot.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/slots/PedestalPreviewSlot.java @@ -8,7 +8,6 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; -import javax.annotation.*; public class PedestalPreviewSlot extends NonInteractiveResultSlot implements SlotWithOnClickAction { public PedestalPreviewSlot(Container inventory, int index, int x, int y) { diff --git a/src/main/java/de/dafuqs/spectrum/inventories/slots/package-info.java b/src/main/java/de/dafuqs/spectrum/inventories/slots/package-info.java index d77a40f75b..94bd9cf391 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/slots/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/slots/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.inventories.slots; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java index 10ee42c418..a97263a335 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.inventories.widgets.ink; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.helpers.*; @@ -8,7 +7,6 @@ import net.minecraft.client.gui.components.*; import net.minecraft.client.gui.narration.*; import net.minecraft.network.chat.*; -import net.minecraft.resources.*; import org.jetbrains.annotations.*; import javax.annotation.Nullable; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkPieWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkPieWidget.java index c204174d45..af0d7b6cb8 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkPieWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkPieWidget.java @@ -6,7 +6,7 @@ import net.minecraft.client.gui.*; import net.minecraft.client.gui.components.*; import net.minecraft.client.gui.narration.*; -import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.*; import org.jetbrains.annotations.*; import javax.annotation.Nullable; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/package-info.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/package-info.java index 2781b3d3e5..65702bee92 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.inventories.widgets; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/ConcealingOilsItem.java b/src/main/java/de/dafuqs/spectrum/items/ConcealingOilsItem.java index 23663acee3..c306f01379 100644 --- a/src/main/java/de/dafuqs/spectrum/items/ConcealingOilsItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ConcealingOilsItem.java @@ -2,7 +2,6 @@ import de.dafuqs.spectrum.api.ink.*; import de.dafuqs.spectrum.api.item.*; -import de.dafuqs.spectrum.items.food.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; import net.minecraft.core.component.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/CookbookItem.java b/src/main/java/de/dafuqs/spectrum/items/CookbookItem.java index c5f748a7ef..332936172a 100644 --- a/src/main/java/de/dafuqs/spectrum/items/CookbookItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/CookbookItem.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.items; import com.klikli_dev.modonomicon.client.gui.book.*; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; import net.minecraft.network.chat.*; @@ -10,7 +9,6 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/MidnightAberrationItem.java b/src/main/java/de/dafuqs/spectrum/items/MidnightAberrationItem.java index f4932c51e9..e8e67a6b70 100644 --- a/src/main/java/de/dafuqs/spectrum/items/MidnightAberrationItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/MidnightAberrationItem.java @@ -13,7 +13,7 @@ import net.minecraft.world.entity.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/MysteriousCompassItem.java b/src/main/java/de/dafuqs/spectrum/items/MysteriousCompassItem.java index e0637c0685..2cb23b3fff 100644 --- a/src/main/java/de/dafuqs/spectrum/items/MysteriousCompassItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/MysteriousCompassItem.java @@ -8,7 +8,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class MysteriousCompassItem extends StructureCompassItem implements SlotBackgroundEffectProvider { diff --git a/src/main/java/de/dafuqs/spectrum/items/armor/package-info.java b/src/main/java/de/dafuqs/spectrum/items/armor/package-info.java index 5cf3d0e60c..311b0c9619 100644 --- a/src/main/java/de/dafuqs/spectrum/items/armor/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/items/armor/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.items.armor; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/conditional/package-info.java b/src/main/java/de/dafuqs/spectrum/items/conditional/package-info.java index 7ab3040e3d..0c890c4d36 100644 --- a/src/main/java/de/dafuqs/spectrum/items/conditional/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/items/conditional/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.items.conditional; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/food/ClottedCreamItem.java b/src/main/java/de/dafuqs/spectrum/items/food/ClottedCreamItem.java index 0e4620dc72..6f771c96c5 100644 --- a/src/main/java/de/dafuqs/spectrum/items/food/ClottedCreamItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/food/ClottedCreamItem.java @@ -5,7 +5,6 @@ import net.minecraft.server.level.*; import net.minecraft.stats.*; import net.minecraft.world.entity.*; -import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.neoforged.neoforge.common.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/food/DrinkItem.java b/src/main/java/de/dafuqs/spectrum/items/food/DrinkItem.java index 093184177a..1010bc764b 100644 --- a/src/main/java/de/dafuqs/spectrum/items/food/DrinkItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/food/DrinkItem.java @@ -10,7 +10,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/food/NectardewBurgeonItem.java b/src/main/java/de/dafuqs/spectrum/items/food/NectardewBurgeonItem.java index dfe8813b3f..893bcbab02 100644 --- a/src/main/java/de/dafuqs/spectrum/items/food/NectardewBurgeonItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/food/NectardewBurgeonItem.java @@ -8,7 +8,7 @@ import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/food/RockCandyItem.java b/src/main/java/de/dafuqs/spectrum/items/food/RockCandyItem.java index 4cdcb35279..209f4ffda9 100644 --- a/src/main/java/de/dafuqs/spectrum/items/food/RockCandyItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/food/RockCandyItem.java @@ -1,24 +1,16 @@ package de.dafuqs.spectrum.items.food; -import de.dafuqs.spectrum.api.item.*; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.effect.*; import de.dafuqs.spectrum.registries.*; -import net.minecraft.core.component.*; -import net.minecraft.core.particles.*; -import net.minecraft.network.chat.*; import net.minecraft.sounds.*; import net.minecraft.util.*; import net.minecraft.world.entity.item.*; import net.minecraft.world.item.*; -import net.minecraft.world.item.component.*; -import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; -import java.util.function.*; public class RockCandyItem extends Item { diff --git a/src/main/java/de/dafuqs/spectrum/items/food/SedativesItem.java b/src/main/java/de/dafuqs/spectrum/items/food/SedativesItem.java index eaf98cd07f..39cbb104eb 100644 --- a/src/main/java/de/dafuqs/spectrum/items/food/SedativesItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/food/SedativesItem.java @@ -5,7 +5,6 @@ import net.minecraft.advancements.*; import net.minecraft.server.level.*; import net.minecraft.stats.*; -import net.minecraft.world.effect.*; import net.minecraft.world.entity.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/food/StarCandyItem.java b/src/main/java/de/dafuqs/spectrum/items/food/StarCandyItem.java index f8da415464..9dc955f5cd 100644 --- a/src/main/java/de/dafuqs/spectrum/items/food/StarCandyItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/food/StarCandyItem.java @@ -2,10 +2,8 @@ import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.items.trinkets.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; -import net.minecraft.core.component.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/food/package-info.java b/src/main/java/de/dafuqs/spectrum/items/food/package-info.java index 6db9ef0cdb..c3d1307970 100644 --- a/src/main/java/de/dafuqs/spectrum/items/food/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/items/food/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.items.food; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/ink/ArtistsPaletteItem.java b/src/main/java/de/dafuqs/spectrum/items/ink/ArtistsPaletteItem.java index 60e47e0edd..8267e24d25 100644 --- a/src/main/java/de/dafuqs/spectrum/items/ink/ArtistsPaletteItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ink/ArtistsPaletteItem.java @@ -15,7 +15,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.block.entity.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/ink/CreativeInkAssortmentItem.java b/src/main/java/de/dafuqs/spectrum/items/ink/CreativeInkAssortmentItem.java index 1cc2f51ff0..85e957d372 100644 --- a/src/main/java/de/dafuqs/spectrum/items/ink/CreativeInkAssortmentItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ink/CreativeInkAssortmentItem.java @@ -13,7 +13,7 @@ import net.minecraft.world.item.context.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.entity.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/ink/InkAssortmentItem.java b/src/main/java/de/dafuqs/spectrum/items/ink/InkAssortmentItem.java index 93115e053a..e91ca82e47 100644 --- a/src/main/java/de/dafuqs/spectrum/items/ink/InkAssortmentItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ink/InkAssortmentItem.java @@ -9,7 +9,7 @@ import net.minecraft.network.chat.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/ink/InkFlaskItem.java b/src/main/java/de/dafuqs/spectrum/items/ink/InkFlaskItem.java index 6d48bad126..eda4409816 100644 --- a/src/main/java/de/dafuqs/spectrum/items/ink/InkFlaskItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ink/InkFlaskItem.java @@ -11,7 +11,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.block.entity.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/ink/PigmentPaletteItem.java b/src/main/java/de/dafuqs/spectrum/items/ink/PigmentPaletteItem.java index 59661ba30d..d97c238300 100644 --- a/src/main/java/de/dafuqs/spectrum/items/ink/PigmentPaletteItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ink/PigmentPaletteItem.java @@ -15,7 +15,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.block.entity.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/ink/package-info.java b/src/main/java/de/dafuqs/spectrum/items/ink/package-info.java index d5ff0a9b13..bd007e343d 100644 --- a/src/main/java/de/dafuqs/spectrum/items/ink/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/items/ink/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.items.energy; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/item_frame/package-info.java b/src/main/java/de/dafuqs/spectrum/items/item_frame/package-info.java index e84a42087d..aaa2211a26 100644 --- a/src/main/java/de/dafuqs/spectrum/items/item_frame/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/items/item_frame/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.items.item_frame; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/BuildingStaffItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/BuildingStaffItem.java index 524277ffb2..6cbdf53d34 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/BuildingStaffItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/BuildingStaffItem.java @@ -15,7 +15,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import oshi.util.tuples.*; public abstract class BuildingStaffItem extends Item implements PrioritizedBlockInteraction, InkPowered { diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/CelestialPocketWatchItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/CelestialPocketWatchItem.java index 61272d939a..1b863bf590 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/CelestialPocketWatchItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/CelestialPocketWatchItem.java @@ -12,7 +12,6 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/ConstructorsStaffItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/ConstructorsStaffItem.java index ff6791c478..a6214254d3 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/ConstructorsStaffItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/ConstructorsStaffItem.java @@ -19,7 +19,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; import net.neoforged.api.distmarker.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import oshi.util.tuples.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/CraftingTabletItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/CraftingTabletItem.java index f909c6c897..053701a133 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/CraftingTabletItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/CraftingTabletItem.java @@ -21,7 +21,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.entity.*; import net.neoforged.api.distmarker.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/EnchantmentCanvasItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/EnchantmentCanvasItem.java index e669a4138d..9a820c9e46 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/EnchantmentCanvasItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/EnchantmentCanvasItem.java @@ -9,7 +9,7 @@ import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; import net.minecraft.world.item.enchantment.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/EnderSpliceItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/EnderSpliceItem.java index cfa8ff4c83..54bd0ece11 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/EnderSpliceItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/EnderSpliceItem.java @@ -27,7 +27,6 @@ import net.minecraft.world.phys.*; import net.neoforged.api.distmarker.*; import net.neoforged.neoforge.network.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/ExchangeStaffItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/ExchangeStaffItem.java index f0f55d93b2..85c1c05f92 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/ExchangeStaffItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/ExchangeStaffItem.java @@ -27,7 +27,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; import net.neoforged.api.distmarker.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import oshi.util.tuples.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/GildedBookItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/GildedBookItem.java index ef0546907e..96a9c3308d 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/GildedBookItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/GildedBookItem.java @@ -3,7 +3,6 @@ import net.minecraft.*; import net.minecraft.network.chat.*; import net.minecraft.world.item.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/KnowledgeGemItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/KnowledgeGemItem.java index 758c497406..5ee179ded0 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/KnowledgeGemItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/KnowledgeGemItem.java @@ -17,7 +17,6 @@ import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.entity.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/NaturesStaffItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/NaturesStaffItem.java index 29a91054e5..3f38f8e256 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/NaturesStaffItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/NaturesStaffItem.java @@ -28,7 +28,6 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; import net.neoforged.api.distmarker.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java index a07a7caf9d..290d09f3d0 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/PaintbrushItem.java @@ -27,7 +27,7 @@ import net.minecraft.world.level.block.state.*; import net.neoforged.api.distmarker.*; import net.neoforged.fml.loading.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/PipeBombItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/PipeBombItem.java index cccd2f2d58..51394fcf4f 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/PipeBombItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/PipeBombItem.java @@ -20,7 +20,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.phys.*; import net.neoforged.api.distmarker.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/RadianceStaffItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/RadianceStaffItem.java index 0a8da35dda..a83b114bd0 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/RadianceStaffItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/RadianceStaffItem.java @@ -24,7 +24,6 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; import net.neoforged.api.distmarker.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/StructureCompassItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/StructureCompassItem.java index 1d2919d741..ba81bca059 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/StructureCompassItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/StructureCompassItem.java @@ -10,7 +10,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.level.levelgen.structure.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/AzuriteGlassAmpouleItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/AzuriteGlassAmpouleItem.java index 54896118e5..15e2e81394 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/AzuriteGlassAmpouleItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/AzuriteGlassAmpouleItem.java @@ -10,7 +10,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/BloodstoneGlassAmpouleItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/BloodstoneGlassAmpouleItem.java index e7af3cffaa..20651f9b5c 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/BloodstoneGlassAmpouleItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/BloodstoneGlassAmpouleItem.java @@ -15,7 +15,7 @@ import net.minecraft.world.item.component.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/GlassAmpouleItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/GlassAmpouleItem.java index 35f21f2411..1999e2fb00 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/GlassAmpouleItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/GlassAmpouleItem.java @@ -6,7 +6,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public abstract class GlassAmpouleItem extends Item { diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/MalachiteGlassAmpouleItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/MalachiteGlassAmpouleItem.java index cd3eeb0562..611c33d855 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/MalachiteGlassAmpouleItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/MalachiteGlassAmpouleItem.java @@ -14,7 +14,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/package-info.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/package-info.java index 05b3d95296..4ebef7dd5a 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.items.magic_items.ampoules; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/package-info.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/package-info.java index 642273cca5..f13f87756d 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.items.magic_items; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/map/ArtisansAtlasItem.java b/src/main/java/de/dafuqs/spectrum/items/map/ArtisansAtlasItem.java index 9871aa1307..f53f7b95f9 100644 --- a/src/main/java/de/dafuqs/spectrum/items/map/ArtisansAtlasItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/map/ArtisansAtlasItem.java @@ -2,7 +2,6 @@ import com.mojang.datafixers.util.*; import de.dafuqs.spectrum.registries.*; -import net.minecraft.client.*; import net.minecraft.core.*; import net.minecraft.core.component.*; import net.minecraft.network.chat.*; @@ -22,9 +21,8 @@ import net.minecraft.world.level.material.*; import net.minecraft.world.level.saveddata.maps.*; import net.minecraft.world.phys.*; -import net.neoforged.api.distmarker.*; import net.neoforged.neoforge.common.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/map/ArtisansAtlasState.java b/src/main/java/de/dafuqs/spectrum/items/map/ArtisansAtlasState.java index 05c417f6ee..c5ef3d8e22 100644 --- a/src/main/java/de/dafuqs/spectrum/items/map/ArtisansAtlasState.java +++ b/src/main/java/de/dafuqs/spectrum/items/map/ArtisansAtlasState.java @@ -15,7 +15,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.levelgen.structure.*; import net.minecraft.world.level.saveddata.maps.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/map/package-info.java b/src/main/java/de/dafuqs/spectrum/items/map/package-info.java index 6d94bf0f61..99b90fa97a 100644 --- a/src/main/java/de/dafuqs/spectrum/items/map/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/items/map/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.items.map; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/misc/AetherVestigesItem.java b/src/main/java/de/dafuqs/spectrum/items/misc/AetherVestigesItem.java index daf8258536..11804b3fde 100644 --- a/src/main/java/de/dafuqs/spectrum/items/misc/AetherVestigesItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/misc/AetherVestigesItem.java @@ -4,7 +4,7 @@ import de.dafuqs.spectrum.items.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class AetherVestigesItem extends ItemWithTooltip implements SlotBackgroundEffectProvider { diff --git a/src/main/java/de/dafuqs/spectrum/items/misc/AshItem.java b/src/main/java/de/dafuqs/spectrum/items/misc/AshItem.java index 349423d2fa..9d2393a020 100644 --- a/src/main/java/de/dafuqs/spectrum/items/misc/AshItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/misc/AshItem.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.items.misc; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.sounds.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/misc/package-info.java b/src/main/java/de/dafuqs/spectrum/items/misc/package-info.java index 40f1d9ebcb..25603846a5 100644 --- a/src/main/java/de/dafuqs/spectrum/items/misc/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/items/misc/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.items.misc; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/package-info.java b/src/main/java/de/dafuqs/spectrum/items/package-info.java index 729c862bd1..94f1a1a654 100644 --- a/src/main/java/de/dafuqs/spectrum/items/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/items/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.items; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/DraconicTwinswordItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/DraconicTwinswordItem.java index d07a08622a..afc89101fa 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/DraconicTwinswordItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/DraconicTwinswordItem.java @@ -8,7 +8,6 @@ import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; -import net.minecraft.advancements.critereon.*; import net.minecraft.core.*; import net.minecraft.core.component.*; import net.minecraft.network.chat.*; @@ -25,7 +24,7 @@ import net.minecraft.world.item.component.*; import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/DragonTalonItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/DragonTalonItem.java index 363b75468e..455c784d85 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/DragonTalonItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/DragonTalonItem.java @@ -21,7 +21,7 @@ import net.minecraft.world.item.component.*; import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/DreamflayerItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/DreamflayerItem.java index 28e160fbe1..59136045fd 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/DreamflayerItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/DreamflayerItem.java @@ -20,7 +20,7 @@ import net.minecraft.world.item.component.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/FerociousBidentItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/FerociousBidentItem.java index 1b217b5cf1..73a59c61a2 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/FerociousBidentItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/FerociousBidentItem.java @@ -14,7 +14,7 @@ import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; import net.minecraft.world.level.entity.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/FractalBidentItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/FractalBidentItem.java index 42dca9c129..2a38ff81b2 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/FractalBidentItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/FractalBidentItem.java @@ -12,7 +12,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.item.enchantment.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/GlassArrowItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/GlassArrowItem.java index 59d67ac8e3..d3a52d5fd7 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/GlassArrowItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/GlassArrowItem.java @@ -9,7 +9,7 @@ import net.minecraft.world.entity.projectile.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/GlassArrowVariant.java b/src/main/java/de/dafuqs/spectrum/items/tools/GlassArrowVariant.java index 947cd694bf..8ad2818392 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/GlassArrowVariant.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/GlassArrowVariant.java @@ -4,7 +4,7 @@ import net.minecraft.core.*; import net.minecraft.core.particles.*; import net.minecraft.world.item.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class GlassArrowVariant { diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestCrossbowItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestCrossbowItem.java index 939aacfdfb..c83f13324f 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestCrossbowItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestCrossbowItem.java @@ -18,7 +18,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.neoforged.api.distmarker.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestGreatswordItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestGreatswordItem.java index 62dd216790..130674ed67 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestGreatswordItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestGreatswordItem.java @@ -5,9 +5,9 @@ import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.magic.*; import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.sound.*; -import de.dafuqs.spectrum.magic.*; import net.minecraft.client.*; import net.minecraft.core.*; import net.minecraft.core.particles.*; @@ -25,7 +25,7 @@ import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; import net.neoforged.api.distmarker.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestWorkstaffItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestWorkstaffItem.java index 287650b29c..35f31973a6 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestWorkstaffItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/GlassCrestWorkstaffItem.java @@ -16,7 +16,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/MalachiteBidentItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/MalachiteBidentItem.java index 2c0ed564ab..2d0175afc6 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/MalachiteBidentItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/MalachiteBidentItem.java @@ -20,13 +20,12 @@ import net.minecraft.world.entity.ai.attributes.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.entity.projectile.*; -import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; import net.minecraft.world.item.component.*; import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/MalachiteCrossbowItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/MalachiteCrossbowItem.java index 7bda8b16bb..eb365cce8e 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/MalachiteCrossbowItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/MalachiteCrossbowItem.java @@ -10,7 +10,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.component.*; import net.minecraft.world.item.enchantment.*; -import javax.annotation.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/MultiToolItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/MultiToolItem.java index 1e9a7a80c6..a6d1c345ac 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/MultiToolItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/MultiToolItem.java @@ -7,7 +7,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.context.*; import net.neoforged.neoforge.common.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/NectarLanceItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/NectarLanceItem.java index 02213909eb..86d4e316b3 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/NectarLanceItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/NectarLanceItem.java @@ -2,8 +2,8 @@ import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.render.*; -import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.mob_effect.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.server.level.*; import net.minecraft.tags.*; @@ -14,7 +14,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.item.enchantment.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class NectarLanceItem extends LightGreatswordItem implements SlotBackgroundEffectProvider { diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/NightSaltsItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/NightSaltsItem.java index 273334292a..a9ef2f816b 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/NightSaltsItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/NightSaltsItem.java @@ -1,21 +1,15 @@ package de.dafuqs.spectrum.items.tools; -import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.attachment_types.*; import de.dafuqs.spectrum.items.food.*; import de.dafuqs.spectrum.registries.*; -import net.minecraft.*; -import net.minecraft.network.chat.*; import net.minecraft.sounds.*; -import net.minecraft.world.*; import net.minecraft.world.effect.*; import net.minecraft.world.entity.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import java.util.*; - public class NightSaltsItem extends DrinkItem { public NightSaltsItem(Properties settings) { diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/NightfallsBladeItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/NightfallsBladeItem.java index 88d572b6ac..2ce562b386 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/NightfallsBladeItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/NightfallsBladeItem.java @@ -19,7 +19,7 @@ import net.minecraft.world.item.alchemy.*; import net.minecraft.world.item.component.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/OmniAcceleratorItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/OmniAcceleratorItem.java index 83d1834e7a..248e96bfe2 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/OmniAcceleratorItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/OmniAcceleratorItem.java @@ -22,7 +22,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.component.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/ParryingSwordItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/ParryingSwordItem.java index 3a3b11db8a..dbb1f39983 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/ParryingSwordItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/ParryingSwordItem.java @@ -14,7 +14,7 @@ import net.minecraft.world.item.component.*; import net.minecraft.world.level.*; import net.neoforged.neoforge.common.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public abstract class ParryingSwordItem extends SwordItem implements ExtendedItemBarProvider { diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/PrimordialLighterItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/PrimordialLighterItem.java index 9d270d4b14..c4eb739362 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/PrimordialLighterItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/PrimordialLighterItem.java @@ -19,7 +19,6 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.gameevent.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/SoothingBouquetItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/SoothingBouquetItem.java index d651db7ea4..b1787918b8 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/SoothingBouquetItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/SoothingBouquetItem.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.items.tools; -import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.attachment_types.*; import de.dafuqs.spectrum.registries.*; @@ -13,7 +12,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/SpectrumFishingRodItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/SpectrumFishingRodItem.java index 371ee4dac1..002ce6a952 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/SpectrumFishingRodItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/SpectrumFishingRodItem.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.items.tools; -import de.dafuqs.spectrum.api.entity.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/package-info.java b/src/main/java/de/dafuqs/spectrum/items/tools/package-info.java index 79798f292f..0171eb4a23 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.items.tools; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tooltip/BottomlessBundleTooltipComponent.java b/src/main/java/de/dafuqs/spectrum/items/tooltip/BottomlessBundleTooltipComponent.java index 12d14f2cdb..3beebad4d9 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tooltip/BottomlessBundleTooltipComponent.java +++ b/src/main/java/de/dafuqs/spectrum/items/tooltip/BottomlessBundleTooltipComponent.java @@ -5,7 +5,6 @@ import net.minecraft.client.gui.*; import net.minecraft.core.*; import net.minecraft.world.item.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/tooltip/BottomlessBundleTooltipData.java b/src/main/java/de/dafuqs/spectrum/items/tooltip/BottomlessBundleTooltipData.java index 5b54a3c4f0..d225bff033 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tooltip/BottomlessBundleTooltipData.java +++ b/src/main/java/de/dafuqs/spectrum/items/tooltip/BottomlessBundleTooltipData.java @@ -2,7 +2,6 @@ import de.dafuqs.spectrum.blocks.bottomless_bundle.*; import net.minecraft.world.inventory.tooltip.*; -import net.minecraft.world.item.*; public record BottomlessBundleTooltipData(BottomlessItemHandler itemHandler) implements TooltipComponent { } diff --git a/src/main/java/de/dafuqs/spectrum/items/tooltip/package-info.java b/src/main/java/de/dafuqs/spectrum/items/tooltip/package-info.java index 4ed7b5980e..d70296258d 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tooltip/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/items/tooltip/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.items.tooltip; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/AetherGracedNectarGlovesItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/AetherGracedNectarGlovesItem.java index 417f5bf4d0..460b1e569b 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/AetherGracedNectarGlovesItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/AetherGracedNectarGlovesItem.java @@ -13,7 +13,7 @@ import net.minecraft.world.entity.ai.attributes.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import top.theillusivec4.curios.api.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/AshenCircletItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/AshenCircletItem.java index 40d54ffcb8..56be2456ba 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/AshenCircletItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/AshenCircletItem.java @@ -15,7 +15,6 @@ import net.minecraft.world.entity.ai.attributes.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import javax.annotation.*; import top.theillusivec4.curios.api.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/AttackRingItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/AttackRingItem.java index 8db0e4c1ee..22a326f675 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/AttackRingItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/AttackRingItem.java @@ -10,7 +10,7 @@ import net.minecraft.world.entity.ai.attributes.*; import net.minecraft.world.item.*; import net.neoforged.api.distmarker.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import top.theillusivec4.curios.api.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/AzureDikeCurioItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/AzureDikeCurioItem.java index bb415e1967..0e72077545 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/AzureDikeCurioItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/AzureDikeCurioItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items.trinkets; import de.dafuqs.spectrum.api.item.*; -import de.dafuqs.spectrum.attachment_types.AzureDikeAttachmentType; +import de.dafuqs.spectrum.attachment_types.*; import de.dafuqs.spectrum.progression.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/CircletOfArroganceItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/CircletOfArroganceItem.java index 4240becd52..75fc517c1b 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/CircletOfArroganceItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/CircletOfArroganceItem.java @@ -1,9 +1,9 @@ package de.dafuqs.spectrum.items.trinkets; import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.mob_effect.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.registries.*; -import de.dafuqs.spectrum.mob_effect.*; import net.minecraft.*; import net.minecraft.network.chat.*; import net.minecraft.server.level.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/GleamingPinItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/GleamingPinItem.java index aa920ab59c..7839d97b5c 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/GleamingPinItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/GleamingPinItem.java @@ -13,7 +13,6 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.phys.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/InkDrainCurioItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/InkDrainCurioItem.java index a37304ab7f..675e762273 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/InkDrainCurioItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/InkDrainCurioItem.java @@ -13,7 +13,7 @@ import net.minecraft.util.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/SevenLeagueBootsItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/SevenLeagueBootsItem.java index f18cf9409f..6da14d5571 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/SevenLeagueBootsItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/SevenLeagueBootsItem.java @@ -8,7 +8,6 @@ import net.minecraft.world.entity.ai.attributes.*; import net.minecraft.world.item.*; import net.minecraft.world.item.enchantment.*; -import javax.annotation.*; import top.theillusivec4.curios.api.*; public class SevenLeagueBootsItem extends SpectrumCurioItem { diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/TakeOffBeltItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/TakeOffBeltItem.java index 93264b85ac..4687810a24 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/TakeOffBeltItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/TakeOffBeltItem.java @@ -18,7 +18,6 @@ import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import javax.annotation.*; import top.theillusivec4.curios.api.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/WeepingCircletItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/WeepingCircletItem.java index 6ff9ed08c3..78872b1a8c 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/WeepingCircletItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/WeepingCircletItem.java @@ -13,7 +13,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import javax.annotation.*; import top.theillusivec4.curios.api.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/WhispyCircletItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/WhispyCircletItem.java index b6120d0ff0..c4378fccbd 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/WhispyCircletItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/WhispyCircletItem.java @@ -15,7 +15,7 @@ import net.minecraft.world.entity.ai.attributes.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; import top.theillusivec4.curios.api.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/package-info.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/package-info.java index 9d85e4afe1..86256910ad 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.items.trinkets; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/loot/functions/DyeRandomlyLootFunction.java b/src/main/java/de/dafuqs/spectrum/loot/functions/DyeRandomlyLootFunction.java index 0d42259245..ed7076de21 100644 --- a/src/main/java/de/dafuqs/spectrum/loot/functions/DyeRandomlyLootFunction.java +++ b/src/main/java/de/dafuqs/spectrum/loot/functions/DyeRandomlyLootFunction.java @@ -12,7 +12,6 @@ import net.minecraft.world.level.storage.loot.*; import net.minecraft.world.level.storage.loot.functions.*; import net.minecraft.world.level.storage.loot.predicates.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/loot/functions/FermentRandomlyLootFunction.java b/src/main/java/de/dafuqs/spectrum/loot/functions/FermentRandomlyLootFunction.java index b53cbfb1af..625f7f93d6 100644 --- a/src/main/java/de/dafuqs/spectrum/loot/functions/FermentRandomlyLootFunction.java +++ b/src/main/java/de/dafuqs/spectrum/loot/functions/FermentRandomlyLootFunction.java @@ -19,7 +19,6 @@ import net.minecraft.world.level.storage.loot.predicates.*; import net.minecraft.world.level.storage.loot.providers.number.*; import net.minecraft.world.phys.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/loot/functions/FillPotionFillableLootFunction.java b/src/main/java/de/dafuqs/spectrum/loot/functions/FillPotionFillableLootFunction.java index 93d6974192..523a4674e2 100644 --- a/src/main/java/de/dafuqs/spectrum/loot/functions/FillPotionFillableLootFunction.java +++ b/src/main/java/de/dafuqs/spectrum/loot/functions/FillPotionFillableLootFunction.java @@ -15,7 +15,6 @@ import net.minecraft.world.level.storage.loot.functions.*; import net.minecraft.world.level.storage.loot.predicates.*; import net.minecraft.world.level.storage.loot.providers.number.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/loot/functions/GrantAdvancementLootFunction.java b/src/main/java/de/dafuqs/spectrum/loot/functions/GrantAdvancementLootFunction.java index 82bfd1fe98..f13e51367c 100644 --- a/src/main/java/de/dafuqs/spectrum/loot/functions/GrantAdvancementLootFunction.java +++ b/src/main/java/de/dafuqs/spectrum/loot/functions/GrantAdvancementLootFunction.java @@ -14,7 +14,6 @@ import net.minecraft.world.level.storage.loot.functions.*; import net.minecraft.world.level.storage.loot.parameters.*; import net.minecraft.world.level.storage.loot.predicates.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/loot/functions/SetComponentsRandomlyLootFunction.java b/src/main/java/de/dafuqs/spectrum/loot/functions/SetComponentsRandomlyLootFunction.java index 2453ac4e29..a6eeaaea82 100644 --- a/src/main/java/de/dafuqs/spectrum/loot/functions/SetComponentsRandomlyLootFunction.java +++ b/src/main/java/de/dafuqs/spectrum/loot/functions/SetComponentsRandomlyLootFunction.java @@ -8,7 +8,6 @@ import net.minecraft.world.level.storage.loot.*; import net.minecraft.world.level.storage.loot.functions.*; import net.minecraft.world.level.storage.loot.predicates.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/loot/functions/package-info.java b/src/main/java/de/dafuqs/spectrum/loot/functions/package-info.java index 3b9ea541b9..d609a63dc8 100644 --- a/src/main/java/de/dafuqs/spectrum/loot/functions/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/loot/functions/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.loot.functions; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/loot/modifiers/SnifferDiggingAdditionsLootModifier.java b/src/main/java/de/dafuqs/spectrum/loot/modifiers/SnifferDiggingAdditionsLootModifier.java index 94f4626278..0322fbea6f 100644 --- a/src/main/java/de/dafuqs/spectrum/loot/modifiers/SnifferDiggingAdditionsLootModifier.java +++ b/src/main/java/de/dafuqs/spectrum/loot/modifiers/SnifferDiggingAdditionsLootModifier.java @@ -11,7 +11,6 @@ import net.minecraft.world.level.storage.loot.*; import net.minecraft.world.level.storage.loot.predicates.*; import net.neoforged.neoforge.common.loot.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/loot/modifiers/TreasureHunterLootModifier.java b/src/main/java/de/dafuqs/spectrum/loot/modifiers/TreasureHunterLootModifier.java index 1c387835ec..2b6ef5d9a3 100644 --- a/src/main/java/de/dafuqs/spectrum/loot/modifiers/TreasureHunterLootModifier.java +++ b/src/main/java/de/dafuqs/spectrum/loot/modifiers/TreasureHunterLootModifier.java @@ -1,14 +1,13 @@ package de.dafuqs.spectrum.loot.modifiers; -import com.mojang.serialization.Codec; -import com.mojang.serialization.MapCodec; -import com.mojang.serialization.codecs.RecordCodecBuilder; +import com.mojang.serialization.*; +import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.progression.*; import de.dafuqs.spectrum.registries.*; -import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import it.unimi.dsi.fastutil.objects.*; import net.minecraft.advancements.critereon.*; import net.minecraft.core.registries.*; import net.minecraft.server.level.*; @@ -17,13 +16,12 @@ import net.minecraft.world.entity.*; import net.minecraft.world.entity.monster.*; import net.minecraft.world.entity.player.*; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.item.*; +import net.minecraft.world.level.storage.loot.*; import net.minecraft.world.level.storage.loot.parameters.*; -import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; +import net.minecraft.world.level.storage.loot.predicates.*; import net.minecraft.world.phys.*; -import net.neoforged.neoforge.common.loot.IGlobalLootModifier; -import net.neoforged.neoforge.common.loot.LootModifier; +import net.neoforged.neoforge.common.loot.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/loot/modifiers/package-info.java b/src/main/java/de/dafuqs/spectrum/loot/modifiers/package-info.java index 6387a44c21..e6752dece5 100644 --- a/src/main/java/de/dafuqs/spectrum/loot/modifiers/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/loot/modifiers/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.loot.modifiers; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/loot/package-info.java b/src/main/java/de/dafuqs/spectrum/loot/package-info.java index 07fbb1688d..29724cef7e 100644 --- a/src/main/java/de/dafuqs/spectrum/loot/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/loot/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.loot; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/magic/MoonstoneStrike.java b/src/main/java/de/dafuqs/spectrum/magic/MoonstoneStrike.java index 96312e9e83..a7bdd76e9f 100644 --- a/src/main/java/de/dafuqs/spectrum/magic/MoonstoneStrike.java +++ b/src/main/java/de/dafuqs/spectrum/magic/MoonstoneStrike.java @@ -20,7 +20,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/magic/package-info.java b/src/main/java/de/dafuqs/spectrum/magic/package-info.java index fdd18d8419..8b32dd4f1d 100644 --- a/src/main/java/de/dafuqs/spectrum/magic/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/magic/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.magic; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java index 72b2994a2a..a4119c6c79 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java @@ -5,7 +5,6 @@ import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.server.level.*; -import net.minecraft.tags.*; import net.minecraft.world.item.*; import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; @@ -17,8 +16,6 @@ import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; -import javax.swing.text.html.*; - @Mixin(BlockBehaviour.BlockStateBase.class) public abstract class AbstractBlockStateMixin { diff --git a/src/main/java/de/dafuqs/spectrum/mixin/BlockBehaviorMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/BlockBehaviorMixin.java index c0ec60cc7a..5e35116fa8 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/BlockBehaviorMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/BlockBehaviorMixin.java @@ -5,7 +5,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/BlockMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/BlockMixin.java index 5003a66179..5856848939 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/BlockMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/BlockMixin.java @@ -13,14 +13,11 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.item.enchantment.*; -import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; -import org.spongepowered.asm.mixin.injection.callback.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/BrainMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/BrainMixin.java index 146633a564..e71e0cf31f 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/BrainMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/BrainMixin.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.mixin; -import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.mob_effect.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.server.level.*; import net.minecraft.world.entity.*; import net.minecraft.world.entity.ai.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/DamageSourceMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/DamageSourceMixin.java index d64ef062dc..07f82419bf 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/DamageSourceMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/DamageSourceMixin.java @@ -3,7 +3,7 @@ import de.dafuqs.spectrum.api.damage_type.*; import net.minecraft.world.damagesource.*; import net.minecraft.world.item.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import org.spongepowered.asm.mixin.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/EndermanEntityMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/EndermanEntityMixin.java index 57a38d6bf7..4ba732e78d 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/EndermanEntityMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/EndermanEntityMixin.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.mixin; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.server.level.*; @@ -8,7 +7,7 @@ import net.minecraft.world.entity.monster.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/GeodesGenerateWithGemstoneOresMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/GeodesGenerateWithGemstoneOresMixin.java index efe282d946..e6c596ca58 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/GeodesGenerateWithGemstoneOresMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/GeodesGenerateWithGemstoneOresMixin.java @@ -3,21 +3,16 @@ import de.dafuqs.spectrum.data_loaders.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; -import net.minecraft.resources.*; -import net.minecraft.tags.*; import net.minecraft.util.*; import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.levelgen.feature.*; import net.minecraft.world.level.levelgen.feature.configurations.*; -import org.jspecify.annotations.Nullable; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.*; import java.util.*; -import java.util.function.*; @Mixin(GeodeFeature.class) public abstract class GeodesGenerateWithGemstoneOresMixin { diff --git a/src/main/java/de/dafuqs/spectrum/mixin/GlassBottleItemMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/GlassBottleItemMixin.java index eda2c1c327..45ca50adc3 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/GlassBottleItemMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/GlassBottleItemMixin.java @@ -2,8 +2,6 @@ import com.llamalad7.mixinextras.sugar.*; import de.dafuqs.revelationary.api.advancements.*; -import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.blocks.decay.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/ItemEntityMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/ItemEntityMixin.java index 3457c0d27a..7d1a5ca437 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/ItemEntityMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/ItemEntityMixin.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.mixin; import de.dafuqs.spectrum.api.item.*; -import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.recipe.primordial_fire_burning.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/ItemStackMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/ItemStackMixin.java index 533d7c16fc..8d814643be 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/ItemStackMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/ItemStackMixin.java @@ -8,14 +8,11 @@ import de.dafuqs.spectrum.registries.*; import net.minecraft.core.component.*; import net.minecraft.network.chat.*; -import net.minecraft.world.effect.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; -import net.minecraft.world.item.alchemy.*; -import net.minecraft.world.item.component.*; import net.minecraft.world.item.enchantment.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/LightningEntityMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/LightningEntityMixin.java index b2ee31ecee..130b5d4915 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/LightningEntityMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/LightningEntityMixin.java @@ -8,7 +8,6 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityMixin.java index a8d96144d0..d01355d377 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityMixin.java @@ -13,8 +13,8 @@ import de.dafuqs.spectrum.helpers.enchantments.*; import de.dafuqs.spectrum.items.tools.*; import de.dafuqs.spectrum.items.trinkets.*; -import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.mob_effect.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.nbt.*; import net.minecraft.server.level.*; @@ -32,7 +32,7 @@ import net.minecraft.world.level.material.*; import net.minecraft.world.phys.*; import net.neoforged.neoforge.common.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityPreventStatusClearMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityPreventStatusClearMixin.java index 5fb921594b..aa28d71b4a 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityPreventStatusClearMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityPreventStatusClearMixin.java @@ -1,14 +1,9 @@ package de.dafuqs.spectrum.mixin; import com.llamalad7.mixinextras.injector.v2.*; -import com.llamalad7.mixinextras.injector.wrapoperation.*; import com.llamalad7.mixinextras.sugar.*; import com.llamalad7.mixinextras.sugar.ref.*; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; -import net.minecraft.core.*; -import net.minecraft.network.protocol.game.*; -import net.minecraft.server.level.*; import net.minecraft.world.effect.*; import net.minecraft.world.entity.*; import org.spongepowered.asm.mixin.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/MapStateMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/MapStateMixin.java index 07f0ffd05d..5245fac0bc 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/MapStateMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/MapStateMixin.java @@ -7,7 +7,7 @@ import net.minecraft.resources.*; import net.minecraft.world.level.*; import net.minecraft.world.level.saveddata.maps.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/MobEntityMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/MobEntityMixin.java index 385c06dec9..9e418eddd3 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/MobEntityMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/MobEntityMixin.java @@ -1,9 +1,9 @@ package de.dafuqs.spectrum.mixin; -import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.mob_effect.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.world.entity.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/PlayerEntityMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/PlayerEntityMixin.java index f50dcd2333..7bc7fa85dd 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/PlayerEntityMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/PlayerEntityMixin.java @@ -6,14 +6,11 @@ import de.dafuqs.spectrum.api.entity.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.attachment_types.*; -import de.dafuqs.spectrum.components.*; -import de.dafuqs.spectrum.entity.entity.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.items.tools.*; import de.dafuqs.spectrum.items.trinkets.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; -import net.minecraft.core.component.*; import net.minecraft.core.particles.*; import net.minecraft.server.level.*; import net.minecraft.sounds.*; @@ -23,11 +20,8 @@ import net.minecraft.world.entity.ai.attributes.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; -import net.minecraft.world.item.component.*; import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; -import net.minecraft.world.level.block.state.*; -import javax.annotation.*; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/PlayerInventoryMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/PlayerInventoryMixin.java index 2899973641..bcbce20e44 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/PlayerInventoryMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/PlayerInventoryMixin.java @@ -5,7 +5,6 @@ import net.minecraft.world.item.*; import net.neoforged.neoforge.capabilities.*; import net.neoforged.neoforge.items.*; -import org.jspecify.annotations.Nullable; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/accessors/FoxEntityAccessor.java b/src/main/java/de/dafuqs/spectrum/mixin/accessors/FoxEntityAccessor.java index b7f0344a17..2ed823d76f 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/accessors/FoxEntityAccessor.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/accessors/FoxEntityAccessor.java @@ -2,7 +2,7 @@ import net.minecraft.world.entity.animal.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.gen.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/accessors/SimpleCriterionAccessor.java b/src/main/java/de/dafuqs/spectrum/mixin/accessors/SimpleCriterionAccessor.java index 4d519eaf6b..af1d71bda7 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/accessors/SimpleCriterionAccessor.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/accessors/SimpleCriterionAccessor.java @@ -2,7 +2,7 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; -import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.gen.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/accessors/TridentEntityAccessor.java b/src/main/java/de/dafuqs/spectrum/mixin/accessors/TridentEntityAccessor.java index 26a361a211..4427b09b8a 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/accessors/TridentEntityAccessor.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/accessors/TridentEntityAccessor.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.mixin.accessors; -import net.minecraft.network.syncher.*; import net.minecraft.world.entity.projectile.*; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.gen.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/client/GameRendererMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/client/GameRendererMixin.java index 71a100c7ce..4278b951e2 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/client/GameRendererMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/client/GameRendererMixin.java @@ -2,7 +2,7 @@ import com.llamalad7.mixinextras.injector.*; import com.mojang.blaze3d.systems.*; -import de.dafuqs.spectrum.render.SpectrumShaders; +import de.dafuqs.spectrum.render.*; import de.dafuqs.spectrum.render.biome_rendering.*; import net.minecraft.client.*; import net.minecraft.client.renderer.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/client/InGameHudMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/client/InGameHudMixin.java index f5d4456350..0da4e19b08 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/client/InGameHudMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/client/InGameHudMixin.java @@ -3,8 +3,8 @@ import com.llamalad7.mixinextras.injector.*; import com.llamalad7.mixinextras.sugar.*; import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.mob_effect.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.client.*; import net.minecraft.client.gui.*; import net.minecraft.resources.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/client/ItemRendererMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/client/ItemRendererMixin.java index ed5d5e2836..e403544791 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/client/ItemRendererMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/client/ItemRendererMixin.java @@ -1,19 +1,16 @@ package de.dafuqs.spectrum.mixin.client; import com.llamalad7.mixinextras.injector.wrapoperation.*; -import com.llamalad7.mixinextras.sugar.*; import com.mojang.blaze3d.vertex.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.registries.client.*; -import net.minecraft.client.multiplayer.*; import net.minecraft.client.renderer.*; import net.minecraft.client.renderer.entity.*; import net.minecraft.client.resources.model.*; import net.minecraft.world.entity.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/client/SkinManagerMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/client/SkinManagerMixin.java index 4313792759..e9501cdc9d 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/client/SkinManagerMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/client/SkinManagerMixin.java @@ -1,10 +1,6 @@ package de.dafuqs.spectrum.mixin.client; -import com.llamalad7.mixinextras.injector.*; -import com.mojang.authlib.*; -import com.mojang.authlib.minecraft.*; import de.dafuqs.spectrum.render.*; -import net.minecraft.*; import net.minecraft.client.resources.*; import net.minecraft.resources.*; import org.spongepowered.asm.mixin.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/client/SoundSystemMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/client/SoundSystemMixin.java index 6500a1ba0d..75251799b6 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/client/SoundSystemMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/client/SoundSystemMixin.java @@ -1,16 +1,14 @@ package de.dafuqs.spectrum.mixin.client; -import com.llamalad7.mixinextras.sugar.Local; +import com.llamalad7.mixinextras.sugar.*; import de.dafuqs.spectrum.mixin.client.accessors.*; import de.dafuqs.spectrum.sound.*; -import net.minecraft.client.resources.sounds.SoundInstance; -import net.minecraft.client.sounds.ChannelAccess; -import net.minecraft.client.sounds.SoundEngine; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.At.Shift; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import net.minecraft.client.resources.sounds.*; +import net.minecraft.client.sounds.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.At.*; +import org.spongepowered.asm.mixin.injection.callback.*; @Mixin(SoundEngine.class) public abstract class SoundSystemMixin { diff --git a/src/main/java/de/dafuqs/spectrum/mixin/compat/Plugin.java b/src/main/java/de/dafuqs/spectrum/mixin/compat/Plugin.java index 77f3ca5d1b..766d376347 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/compat/Plugin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/compat/Plugin.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.mixin.compat; import net.neoforged.fml.loading.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import org.objectweb.asm.tree.*; import org.spongepowered.asm.mixin.extensibility.*; diff --git a/src/main/java/de/dafuqs/spectrum/mob_effect/AscensionMobEffect.java b/src/main/java/de/dafuqs/spectrum/mob_effect/AscensionMobEffect.java index ed48c5ce61..e42ad20a4d 100644 --- a/src/main/java/de/dafuqs/spectrum/mob_effect/AscensionMobEffect.java +++ b/src/main/java/de/dafuqs/spectrum/mob_effect/AscensionMobEffect.java @@ -9,7 +9,6 @@ import net.minecraft.world.effect.*; import net.minecraft.world.entity.*; import net.neoforged.neoforge.common.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/mob_effect/DeadlyPoisonMobEffect.java b/src/main/java/de/dafuqs/spectrum/mob_effect/DeadlyPoisonMobEffect.java index 432a5ae77c..566e965d70 100644 --- a/src/main/java/de/dafuqs/spectrum/mob_effect/DeadlyPoisonMobEffect.java +++ b/src/main/java/de/dafuqs/spectrum/mob_effect/DeadlyPoisonMobEffect.java @@ -4,7 +4,6 @@ import net.minecraft.world.effect.*; import net.minecraft.world.entity.*; import net.neoforged.neoforge.common.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/mob_effect/DivinityMobEffect.java b/src/main/java/de/dafuqs/spectrum/mob_effect/DivinityMobEffect.java index 74620fcd08..ebbe32740f 100644 --- a/src/main/java/de/dafuqs/spectrum/mob_effect/DivinityMobEffect.java +++ b/src/main/java/de/dafuqs/spectrum/mob_effect/DivinityMobEffect.java @@ -9,11 +9,9 @@ import net.minecraft.server.level.*; import net.minecraft.world.effect.*; import net.minecraft.world.entity.*; -import net.minecraft.world.entity.ai.attributes.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.level.*; import net.neoforged.neoforge.common.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/mob_effect/FrenzyMobEffect.java b/src/main/java/de/dafuqs/spectrum/mob_effect/FrenzyMobEffect.java index f5477d73c6..591022a230 100644 --- a/src/main/java/de/dafuqs/spectrum/mob_effect/FrenzyMobEffect.java +++ b/src/main/java/de/dafuqs/spectrum/mob_effect/FrenzyMobEffect.java @@ -6,7 +6,6 @@ import net.minecraft.world.entity.*; import net.minecraft.world.entity.ai.attributes.*; import net.neoforged.neoforge.common.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/mob_effect/ImmunityMobEffect.java b/src/main/java/de/dafuqs/spectrum/mob_effect/ImmunityMobEffect.java index 49e4ef1fe7..37591d658f 100644 --- a/src/main/java/de/dafuqs/spectrum/mob_effect/ImmunityMobEffect.java +++ b/src/main/java/de/dafuqs/spectrum/mob_effect/ImmunityMobEffect.java @@ -5,7 +5,6 @@ import net.minecraft.world.effect.*; import net.minecraft.world.entity.*; import net.neoforged.neoforge.common.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/mob_effect/LifeDrainMobEffect.java b/src/main/java/de/dafuqs/spectrum/mob_effect/LifeDrainMobEffect.java index 296b955bdd..13ed9bfef6 100644 --- a/src/main/java/de/dafuqs/spectrum/mob_effect/LifeDrainMobEffect.java +++ b/src/main/java/de/dafuqs/spectrum/mob_effect/LifeDrainMobEffect.java @@ -7,7 +7,6 @@ import net.minecraft.world.entity.*; import net.minecraft.world.entity.ai.attributes.*; import net.minecraft.world.entity.player.*; -import javax.annotation.*; public class LifeDrainMobEffect extends MobEffect { diff --git a/src/main/java/de/dafuqs/spectrum/mob_effect/NourishingMobEffect.java b/src/main/java/de/dafuqs/spectrum/mob_effect/NourishingMobEffect.java index c238ddabaa..945ca9a659 100644 --- a/src/main/java/de/dafuqs/spectrum/mob_effect/NourishingMobEffect.java +++ b/src/main/java/de/dafuqs/spectrum/mob_effect/NourishingMobEffect.java @@ -5,7 +5,6 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.food.*; import net.minecraft.world.level.*; -import javax.annotation.*; public class NourishingMobEffect extends MobEffect { diff --git a/src/main/java/de/dafuqs/spectrum/mob_effect/ScarredMobEffect.java b/src/main/java/de/dafuqs/spectrum/mob_effect/ScarredMobEffect.java index 1cbbf03c88..258a554796 100644 --- a/src/main/java/de/dafuqs/spectrum/mob_effect/ScarredMobEffect.java +++ b/src/main/java/de/dafuqs/spectrum/mob_effect/ScarredMobEffect.java @@ -2,7 +2,6 @@ import net.minecraft.world.effect.*; import net.minecraft.world.entity.*; -import javax.annotation.*; public class ScarredMobEffect extends MobEffect { diff --git a/src/main/java/de/dafuqs/spectrum/mob_effect/SleepMobEffect.java b/src/main/java/de/dafuqs/spectrum/mob_effect/SleepMobEffect.java index 6f6a324f79..caf7f2abb9 100644 --- a/src/main/java/de/dafuqs/spectrum/mob_effect/SleepMobEffect.java +++ b/src/main/java/de/dafuqs/spectrum/mob_effect/SleepMobEffect.java @@ -8,7 +8,7 @@ import net.minecraft.world.entity.ai.attributes.*; import net.minecraft.world.entity.player.*; import net.neoforged.neoforge.common.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/mob_effect/package-info.java b/src/main/java/de/dafuqs/spectrum/mob_effect/package-info.java index ff0981e1a4..20fafba475 100644 --- a/src/main/java/de/dafuqs/spectrum/mob_effect/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/mob_effect/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.mob_effect; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/AddLoreBedrockAnvilPayload.java b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/AddLoreBedrockAnvilPayload.java index ac4c4622a5..d6e9d09330 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/AddLoreBedrockAnvilPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/AddLoreBedrockAnvilPayload.java @@ -7,7 +7,6 @@ import net.minecraft.network.codec.*; import net.minecraft.network.protocol.common.custom.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record AddLoreBedrockAnvilPayload(String lore) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/BindEnderSpliceToPlayerPayload.java b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/BindEnderSpliceToPlayerPayload.java index 36965c3879..d4cb208923 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/BindEnderSpliceToPlayerPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/BindEnderSpliceToPlayerPayload.java @@ -9,7 +9,6 @@ import net.minecraft.server.level.*; import net.minecraft.world.entity.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record BindEnderSpliceToPlayerPayload(int entityId) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/ChangeCompactingChestSettingsPayload.java b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/ChangeCompactingChestSettingsPayload.java index 3385a273e9..08d5a000a5 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/ChangeCompactingChestSettingsPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/ChangeCompactingChestSettingsPayload.java @@ -9,7 +9,6 @@ import net.minecraft.network.protocol.common.custom.*; import net.minecraft.world.level.block.entity.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record ChangeCompactingChestSettingsPayload(AutoCraftingMode mode) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/GuidebookConfirmationButtonPressedPayload.java b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/GuidebookConfirmationButtonPressedPayload.java index 1bc180a1a9..3eefe29ced 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/GuidebookConfirmationButtonPressedPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/GuidebookConfirmationButtonPressedPayload.java @@ -8,7 +8,6 @@ import net.minecraft.server.level.*; import net.minecraft.sounds.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record GuidebookConfirmationButtonPressedPayload(String confirmationString) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/InkColorSelectedC2SPayload.java b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/InkColorSelectedC2SPayload.java index 1cc45474c5..3b3bf328a4 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/InkColorSelectedC2SPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/InkColorSelectedC2SPayload.java @@ -12,7 +12,6 @@ import net.minecraft.server.level.*; import net.minecraft.world.inventory.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/ParticleSpawnerConfigurationC2SPayload.java b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/ParticleSpawnerConfigurationC2SPayload.java index 1253e2ceb7..66b08e3370 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/ParticleSpawnerConfigurationC2SPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/ParticleSpawnerConfigurationC2SPayload.java @@ -11,7 +11,6 @@ import net.minecraft.world.level.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record ParticleSpawnerConfigurationC2SPayload(ParticleSpawnerConfiguration configuration) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/RenameItemInBedrockAnvilPayload.java b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/RenameItemInBedrockAnvilPayload.java index 88ff1e11dd..e910bb6bd7 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/RenameItemInBedrockAnvilPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/RenameItemInBedrockAnvilPayload.java @@ -7,7 +7,6 @@ import net.minecraft.network.protocol.common.custom.*; import net.minecraft.util.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record RenameItemInBedrockAnvilPayload(String name) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/SetShadowSlotPayload.java b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/SetShadowSlotPayload.java index 114a1030b5..65757606ee 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/SetShadowSlotPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/SetShadowSlotPayload.java @@ -10,7 +10,6 @@ import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record SetShadowSlotPayload(int screenHandlerSyncId, int slotId, ItemStack shadowStack) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/WorkstaffToggleSelectedPayload.java b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/WorkstaffToggleSelectedPayload.java index fa99ce1469..e8becae664 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/WorkstaffToggleSelectedPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/WorkstaffToggleSelectedPayload.java @@ -9,7 +9,6 @@ import net.minecraft.server.level.*; import net.minecraft.world.inventory.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record WorkstaffToggleSelectedPayload(int index) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/package-info.java b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/package-info.java index 44e98c88b6..74f4e20c92 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/networking/c2s_payloads/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.networking.c2s_payloads; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/package-info.java b/src/main/java/de/dafuqs/spectrum/networking/package-info.java index 9e0b1c909c..a149f225f3 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/networking/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.networking; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/BlackHoleChestStatusUpdatePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/BlackHoleChestStatusUpdatePayload.java index 7713b12573..2575257e20 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/BlackHoleChestStatusUpdatePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/BlackHoleChestStatusUpdatePayload.java @@ -12,7 +12,6 @@ import net.minecraft.world.level.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/ColorTransmissionPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/ColorTransmissionPayload.java index c68c1c371a..e4c4f34443 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/ColorTransmissionPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/ColorTransmissionPayload.java @@ -10,7 +10,6 @@ import net.minecraft.world.level.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record ColorTransmissionPayload(BlockPos pos, ColoredTransmission transmission) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/CompactingChestStatusUpdatePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/CompactingChestStatusUpdatePayload.java index ded6f64ba6..cedc5a7c32 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/CompactingChestStatusUpdatePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/CompactingChestStatusUpdatePayload.java @@ -11,7 +11,6 @@ import net.minecraft.world.level.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/FabricationChestStatusUpdatePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/FabricationChestStatusUpdatePayload.java index 38b617a4c3..dc40bcd7f5 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/FabricationChestStatusUpdatePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/FabricationChestStatusUpdatePayload.java @@ -12,7 +12,6 @@ import net.minecraft.world.level.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/InkColorSelectedS2CPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/InkColorSelectedS2CPayload.java index d796c74020..d46bf99275 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/InkColorSelectedS2CPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/InkColorSelectedS2CPayload.java @@ -12,7 +12,6 @@ import net.minecraft.world.inventory.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/MoonstoneStrikePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/MoonstoneStrikePayload.java index c408cf1b15..0e34b4d4ea 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/MoonstoneStrikePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/MoonstoneStrikePayload.java @@ -1,8 +1,8 @@ package de.dafuqs.spectrum.networking.s2c_payloads; import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.networking.*; import de.dafuqs.spectrum.magic.*; +import de.dafuqs.spectrum.networking.*; import net.minecraft.core.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; @@ -13,7 +13,6 @@ import net.minecraft.world.phys.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record MoonstoneStrikePayload(double x, double y, double z, float power, float knockbackMod, Vec3 playerVelocity) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/ParticleSpawnerConfigurationS2CPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/ParticleSpawnerConfigurationS2CPayload.java index 798989f0a8..eb9f67b2d4 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/ParticleSpawnerConfigurationS2CPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/ParticleSpawnerConfigurationS2CPayload.java @@ -7,7 +7,6 @@ import net.minecraft.network.codec.*; import net.minecraft.network.protocol.common.custom.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record ParticleSpawnerConfigurationS2CPayload(BlockPos pos, ParticleSpawnerConfiguration configuration) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelNetworkEdgeSyncPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelNetworkEdgeSyncPayload.java index f0534f51f3..169c2684f4 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelNetworkEdgeSyncPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelNetworkEdgeSyncPayload.java @@ -11,7 +11,6 @@ import net.minecraft.world.level.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import org.jgrapht.*; import org.jgrapht.graph.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelNetworkRemovedPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelNetworkRemovedPayload.java index 96f9c58fe5..c4b59ec401 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelNetworkRemovedPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelNetworkRemovedPayload.java @@ -9,7 +9,6 @@ import net.minecraft.network.protocol.common.custom.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelNodeStatusUpdatePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelNodeStatusUpdatePayload.java index 52eb5c3548..d968d3ad75 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelNodeStatusUpdatePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelNodeStatusUpdatePayload.java @@ -12,7 +12,6 @@ import net.minecraft.world.level.block.entity.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelTransmissionPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelTransmissionPayload.java index 07e570bdb5..866d4a40ec 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelTransmissionPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelTransmissionPayload.java @@ -12,7 +12,6 @@ import net.minecraft.server.level.*; import net.minecraft.world.level.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayAscensionAppliedEffectsPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayAscensionAppliedEffectsPayload.java index 1616fa64af..e7495fb460 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayAscensionAppliedEffectsPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayAscensionAppliedEffectsPayload.java @@ -10,13 +10,10 @@ import net.minecraft.server.level.*; import net.minecraft.sounds.*; import net.minecraft.world.entity.player.*; -import net.minecraft.world.level.Level; +import net.minecraft.world.level.*; import net.neoforged.api.distmarker.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; - -import java.util.logging.*; public record PlayAscensionAppliedEffectsPayload() implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayBlockBoundSoundInstancePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayBlockBoundSoundInstancePayload.java index cc1051b559..0b2df022bf 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayBlockBoundSoundInstancePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayBlockBoundSoundInstancePayload.java @@ -13,7 +13,6 @@ import net.minecraft.world.level.block.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; // MaxDurationTicks of <1 means "stop playing" public record PlayBlockBoundSoundInstancePayload(SoundEvent soundEvent, BlockPos pos, Holder block, int maxDurationTicks) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayDivinityAppliedEffectsPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayDivinityAppliedEffectsPayload.java index 2f0de8b7c3..131d5c0bd7 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayDivinityAppliedEffectsPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayDivinityAppliedEffectsPayload.java @@ -13,10 +13,8 @@ import net.minecraft.sounds.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.level.*; -import net.neoforged.api.distmarker.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record PlayDivinityAppliedEffectsPayload() implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingFinishedParticlePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingFinishedParticlePayload.java index 56a71ee8b4..6b7f5ccfd7 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingFinishedParticlePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingFinishedParticlePayload.java @@ -15,7 +15,6 @@ import net.minecraft.world.phys.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import org.joml.*; public record PlayFusionCraftingFinishedParticlePayload(BlockPos pos, InkColor color) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingInProgressParticlePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingInProgressParticlePayload.java index f97906b44a..b261feb7f7 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingInProgressParticlePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingInProgressParticlePayload.java @@ -11,7 +11,6 @@ import net.minecraft.world.level.block.entity.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record PlayFusionCraftingInProgressParticlePayload(BlockPos pos) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayMemoryManifestingParticlesPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayMemoryManifestingParticlesPayload.java index 2079df05de..13f95c02e7 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayMemoryManifestingParticlesPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayMemoryManifestingParticlesPayload.java @@ -15,7 +15,6 @@ import net.minecraft.world.level.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import org.joml.*; public record PlayMemoryManifestingParticlesPayload(BlockPos pos, int eggColor1, int eggColor2, int amount) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleAroundBlockSidesPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleAroundBlockSidesPayload.java index f96d31c334..0188c85063 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleAroundBlockSidesPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleAroundBlockSidesPayload.java @@ -13,7 +13,6 @@ import net.minecraft.world.level.*; import net.minecraft.world.phys.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithExactVelocityPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithExactVelocityPayload.java index d1a543b782..1a4df601f0 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithExactVelocityPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithExactVelocityPayload.java @@ -12,7 +12,6 @@ import net.minecraft.world.phys.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record PlayParticleWithExactVelocityPayload(Vec3 pos, ParticleOptions particle, int amount, Vec3 velocity) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithPatternAndVelocityPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithPatternAndVelocityPayload.java index 1d0397cea4..2375c1a57b 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithPatternAndVelocityPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithPatternAndVelocityPayload.java @@ -15,7 +15,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.phys.*; import net.neoforged.neoforge.network.handling.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public record PlayParticleWithPatternAndVelocityPayload(Vec3 pos, ParticleOptions effect, VectorPattern pattern, double velocity) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithRandomOffsetAndVelocityPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithRandomOffsetAndVelocityPayload.java index 481dd61a9f..c449acf1e3 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithRandomOffsetAndVelocityPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithRandomOffsetAndVelocityPayload.java @@ -13,7 +13,6 @@ import net.minecraft.world.phys.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record PlayParticleWithRandomOffsetAndVelocityPayload(Vec3 pos, ParticleOptions effect, int amount, Vec3 randomOffset, Vec3 randomVelocity) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalCraftingFinishedParticlePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalCraftingFinishedParticlePayload.java index 29b5a94e11..329cc9f942 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalCraftingFinishedParticlePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalCraftingFinishedParticlePayload.java @@ -12,7 +12,6 @@ import net.minecraft.world.level.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record PlayPedestalCraftingFinishedParticlePayload(BlockPos pedestalPos, ItemStack craftedStack) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalStartCraftingParticlePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalStartCraftingParticlePayload.java index 577c9b1982..5e0c7d1df2 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalStartCraftingParticlePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalStartCraftingParticlePayload.java @@ -10,7 +10,6 @@ import net.minecraft.world.level.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record PlayPedestalStartCraftingParticlePayload(BlockPos pedestalPos) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalUpgradedParticlePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalUpgradedParticlePayload.java index 020a29b7f7..5e3ffd060a 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalUpgradedParticlePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalUpgradedParticlePayload.java @@ -15,7 +15,6 @@ import net.minecraft.world.level.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record PlayPedestalUpgradedParticlePayload(BlockPos pedestalPos, PedestalRecipeTier newTier) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPresentOpeningParticlesPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPresentOpeningParticlesPayload.java index ec20418496..10de606576 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPresentOpeningParticlesPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPresentOpeningParticlesPayload.java @@ -12,7 +12,6 @@ import net.minecraft.world.level.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayShootingStarParticlesPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayShootingStarParticlesPayload.java index b6abeb86f0..54c9000f59 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayShootingStarParticlesPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayShootingStarParticlesPayload.java @@ -12,7 +12,6 @@ import net.minecraft.world.phys.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record PlayShootingStarParticlesPayload(Vec3 shootingStarPos, ShootingStar.Variant variant) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayTakeOffBeltSoundInstancePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayTakeOffBeltSoundInstancePayload.java index ff22b9de51..8d2482ffcc 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayTakeOffBeltSoundInstancePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayTakeOffBeltSoundInstancePayload.java @@ -8,7 +8,6 @@ import net.minecraft.server.level.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record PlayTakeOffBeltSoundInstancePayload() implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/StartSkyLerpingPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/StartSkyLerpingPayload.java index b68d0e2ece..2b0e4a9d13 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/StartSkyLerpingPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/StartSkyLerpingPayload.java @@ -13,7 +13,6 @@ import net.minecraft.world.level.dimension.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record StartSkyLerpingPayload(long startTime, long endTime) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncArtisansAtlasPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncArtisansAtlasPayload.java index 004f2b046e..ea462ad692 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncArtisansAtlasPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncArtisansAtlasPayload.java @@ -14,7 +14,6 @@ import net.minecraft.world.level.saveddata.maps.*; import net.neoforged.api.distmarker.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncMentalPresencePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncMentalPresencePayload.java index acac904687..f4a3d3eb46 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncMentalPresencePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncMentalPresencePayload.java @@ -9,7 +9,6 @@ import net.minecraft.world.entity.player.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; // TODO: Why tf is that a packet and not handled in the synced component instead? public record SyncMentalPresencePayload(double value) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/TypedTransmissionPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/TypedTransmissionPayload.java index 5244da9c11..67e411f10f 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/TypedTransmissionPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/TypedTransmissionPayload.java @@ -11,7 +11,6 @@ import net.minecraft.world.level.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; public record TypedTransmissionPayload(TypedTransmission transmission) implements CustomPacketPayload { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/UpdateBlockEntityInkPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/UpdateBlockEntityInkPayload.java index ff4efeaef0..375955a3d5 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/UpdateBlockEntityInkPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/UpdateBlockEntityInkPayload.java @@ -12,7 +12,6 @@ import net.minecraft.world.level.block.entity.*; import net.neoforged.neoforge.network.*; import net.neoforged.neoforge.network.handling.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/package-info.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/package-info.java index 02757e32d1..5ee3b74af4 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.networking.s2c_payloads; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/package-info.java b/src/main/java/de/dafuqs/spectrum/package-info.java index a1c95367ee..3daf4fecd4 100644 --- a/src/main/java/de/dafuqs/spectrum/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/particle/SpectrumParticleFactories.java b/src/main/java/de/dafuqs/spectrum/particle/SpectrumParticleFactories.java index c0bb651d4b..13ff53710b 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/SpectrumParticleFactories.java +++ b/src/main/java/de/dafuqs/spectrum/particle/SpectrumParticleFactories.java @@ -8,7 +8,6 @@ import net.minecraft.core.particles.*; import net.minecraft.util.*; import net.minecraft.world.level.material.*; -import net.neoforged.api.distmarker.*; import net.neoforged.neoforge.client.event.*; // See ParticleManager for vanilla diff --git a/src/main/java/de/dafuqs/spectrum/particle/client/ColoredCraftingParticle.java b/src/main/java/de/dafuqs/spectrum/particle/client/ColoredCraftingParticle.java index 1c700e645a..e284cd33bc 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/client/ColoredCraftingParticle.java +++ b/src/main/java/de/dafuqs/spectrum/particle/client/ColoredCraftingParticle.java @@ -5,7 +5,7 @@ import net.minecraft.client.particle.*; import net.minecraft.util.*; import org.joml.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class ColoredCraftingParticle extends TextureSheetParticle { diff --git a/src/main/java/de/dafuqs/spectrum/particle/client/ColoredExplosionParticle.java b/src/main/java/de/dafuqs/spectrum/particle/client/ColoredExplosionParticle.java index a079540ed1..6a89e64d36 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/client/ColoredExplosionParticle.java +++ b/src/main/java/de/dafuqs/spectrum/particle/client/ColoredExplosionParticle.java @@ -4,7 +4,7 @@ import net.minecraft.client.multiplayer.*; import net.minecraft.client.particle.*; import org.joml.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class ColoredExplosionParticle extends HugeExplosionParticle { diff --git a/src/main/java/de/dafuqs/spectrum/particle/client/DynamicParticle.java b/src/main/java/de/dafuqs/spectrum/particle/client/DynamicParticle.java index 4c8db794ed..232e7d53e1 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/client/DynamicParticle.java +++ b/src/main/java/de/dafuqs/spectrum/particle/client/DynamicParticle.java @@ -8,7 +8,6 @@ import net.minecraft.client.particle.*; import net.minecraft.client.renderer.*; import net.minecraft.core.registries.*; -import javax.annotation.*; public class DynamicParticle extends TextureSheetParticle { diff --git a/src/main/java/de/dafuqs/spectrum/particle/client/MoonstoneStrikeParticle.java b/src/main/java/de/dafuqs/spectrum/particle/client/MoonstoneStrikeParticle.java index 2e800e9883..d241f339a6 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/client/MoonstoneStrikeParticle.java +++ b/src/main/java/de/dafuqs/spectrum/particle/client/MoonstoneStrikeParticle.java @@ -7,7 +7,6 @@ import net.minecraft.client.particle.*; import net.minecraft.core.particles.*; import net.minecraft.world.phys.*; -import net.neoforged.api.distmarker.*; public class MoonstoneStrikeParticle extends NoRenderParticle { diff --git a/src/main/java/de/dafuqs/spectrum/particle/client/PastelTransmissionParticle.java b/src/main/java/de/dafuqs/spectrum/particle/client/PastelTransmissionParticle.java index 08e3912546..f8aba59755 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/client/PastelTransmissionParticle.java +++ b/src/main/java/de/dafuqs/spectrum/particle/client/PastelTransmissionParticle.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.particle.client; import com.mojang.blaze3d.vertex.*; -import de.dafuqs.spectrum.blocks.pastel_network.payloads.PastelPayload; +import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.render.*; diff --git a/src/main/java/de/dafuqs/spectrum/particle/client/package-info.java b/src/main/java/de/dafuqs/spectrum/particle/client/package-info.java index f5264df3e8..4d3e97fd0c 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/client/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/particle/client/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.particle.client; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredFluidRisingParticleEffect.java b/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredFluidRisingParticleEffect.java index 81a9766b05..556d42a04d 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredFluidRisingParticleEffect.java +++ b/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredFluidRisingParticleEffect.java @@ -9,7 +9,6 @@ import net.minecraft.network.*; import net.minecraft.network.codec.*; import net.minecraft.util.*; -import javax.annotation.*; import org.joml.*; public class ColoredFluidRisingParticleEffect implements ParticleOptions { diff --git a/src/main/java/de/dafuqs/spectrum/particle/effect/PastelTransmissionParticleEffect.java b/src/main/java/de/dafuqs/spectrum/particle/effect/PastelTransmissionParticleEffect.java index 287183d957..5f53787071 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/effect/PastelTransmissionParticleEffect.java +++ b/src/main/java/de/dafuqs/spectrum/particle/effect/PastelTransmissionParticleEffect.java @@ -2,14 +2,13 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.blocks.pastel_network.payloads.PastelPayload; +import de.dafuqs.spectrum.blocks.pastel_network.payloads.*; import de.dafuqs.spectrum.particle.*; import net.minecraft.core.*; import net.minecraft.core.particles.*; import net.minecraft.core.registries.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/particle/effect/package-info.java b/src/main/java/de/dafuqs/spectrum/particle/effect/package-info.java index 27099a2db3..083281d39a 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/effect/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/particle/effect/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.particle.effect; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/particle/package-info.java b/src/main/java/de/dafuqs/spectrum/particle/package-info.java index 7b558027af..5f7a91ff1a 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/particle/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.particle; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/particle/render/package-info.java b/src/main/java/de/dafuqs/spectrum/particle/render/package-info.java index 63f87b84d0..d376276fb0 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/render/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/particle/render/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.particle.render; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/ToggleableBlockColorProvider.java b/src/main/java/de/dafuqs/spectrum/progression/ToggleableBlockColorProvider.java index 02403c0c10..252755e882 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/ToggleableBlockColorProvider.java +++ b/src/main/java/de/dafuqs/spectrum/progression/ToggleableBlockColorProvider.java @@ -4,7 +4,7 @@ import net.minecraft.core.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class ToggleableBlockColorProvider implements BlockColor { diff --git a/src/main/java/de/dafuqs/spectrum/progression/ToggleableItemColorProvider.java b/src/main/java/de/dafuqs/spectrum/progression/ToggleableItemColorProvider.java index a149af10ca..faf1336b3e 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/ToggleableItemColorProvider.java +++ b/src/main/java/de/dafuqs/spectrum/progression/ToggleableItemColorProvider.java @@ -2,7 +2,6 @@ import net.minecraft.client.color.item.*; import net.minecraft.world.item.*; -import net.minecraft.world.level.block.*; import net.neoforged.neoforge.client.event.*; public class ToggleableItemColorProvider implements ItemColor { diff --git a/src/main/java/de/dafuqs/spectrum/progression/UnlockToastManager.java b/src/main/java/de/dafuqs/spectrum/progression/UnlockToastManager.java index ca8e4d414e..61b482f0c7 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/UnlockToastManager.java +++ b/src/main/java/de/dafuqs/spectrum/progression/UnlockToastManager.java @@ -13,7 +13,6 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; -import javax.annotation.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/AzureDikeChargeCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/AzureDikeChargeCriterion.java index c9afe6ff6a..5416f5c15d 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/AzureDikeChargeCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/AzureDikeChargeCriterion.java @@ -4,7 +4,6 @@ import com.mojang.serialization.codecs.*; import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/BlockBrokenCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/BlockBrokenCriterion.java index 1e087d04e7..c963c24370 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/BlockBrokenCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/BlockBrokenCriterion.java @@ -6,7 +6,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/BloodOrchidPluckingCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/BloodOrchidPluckingCriterion.java index c82fa625e8..6265e7852d 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/BloodOrchidPluckingCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/BloodOrchidPluckingCriterion.java @@ -4,7 +4,6 @@ import com.mojang.serialization.codecs.*; import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/CinderhearthSmeltingCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/CinderhearthSmeltingCriterion.java index 126bdbd8de..72a8b55690 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/CinderhearthSmeltingCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/CinderhearthSmeltingCriterion.java @@ -6,7 +6,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; import net.minecraft.world.item.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/CompletedMultiblockCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/CompletedMultiblockCriterion.java index 62a06336d0..7bc6c9dd8a 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/CompletedMultiblockCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/CompletedMultiblockCriterion.java @@ -3,11 +3,9 @@ import com.klikli_dev.modonomicon.api.multiblock.*; import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.*; import net.minecraft.advancements.critereon.*; import net.minecraft.resources.*; import net.minecraft.server.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/ConsumedPairedFoodCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/ConsumedPairedFoodCriterion.java index 7bd9a2bfd0..734bd98ac5 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/ConsumedPairedFoodCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/ConsumedPairedFoodCriterion.java @@ -5,7 +5,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; import net.minecraft.world.item.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/CrystallarieumGrownCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/CrystallarieumGrownCriterion.java index 23a90768ee..f83664d19b 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/CrystallarieumGrownCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/CrystallarieumGrownCriterion.java @@ -6,7 +6,6 @@ import net.minecraft.core.*; import net.minecraft.server.level.*; import net.minecraft.world.item.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/DeeperDownPortalOpeningCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/DeeperDownPortalOpeningCriterion.java index 35418c8ede..76df4bc981 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/DeeperDownPortalOpeningCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/DeeperDownPortalOpeningCriterion.java @@ -4,7 +4,6 @@ import com.mojang.serialization.codecs.*; import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/DivinityTickCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/DivinityTickCriterion.java index 4762844151..7ff7ab4387 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/DivinityTickCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/DivinityTickCriterion.java @@ -4,7 +4,6 @@ import com.mojang.serialization.codecs.*; import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/EnchanterCraftingCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/EnchanterCraftingCriterion.java index b3232f62dd..7eb8ed288f 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/EnchanterCraftingCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/EnchanterCraftingCriterion.java @@ -5,7 +5,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; import net.minecraft.world.item.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/EnchantmentUpgradedCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/EnchantmentUpgradedCriterion.java index 5f360e4b3d..d0a0b98de5 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/EnchantmentUpgradedCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/EnchantmentUpgradedCriterion.java @@ -5,7 +5,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; import net.minecraft.world.item.enchantment.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/FluidDippingCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/FluidDippingCriterion.java index e9bc415acf..086feeb63a 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/FluidDippingCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/FluidDippingCriterion.java @@ -6,7 +6,6 @@ import net.minecraft.core.*; import net.minecraft.server.level.*; import net.minecraft.world.item.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/FusionShrineCraftingCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/FusionShrineCraftingCriterion.java index 7051962377..483fbe1bc9 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/FusionShrineCraftingCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/FusionShrineCraftingCriterion.java @@ -6,7 +6,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; import net.minecraft.world.item.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/HummingstoneHymnCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/HummingstoneHymnCriterion.java index 98bda96897..b7c04c1fa1 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/HummingstoneHymnCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/HummingstoneHymnCriterion.java @@ -5,7 +5,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.core.*; import net.minecraft.server.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/InertiaUsedCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/InertiaUsedCriterion.java index 36e2368167..cd453c218f 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/InertiaUsedCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/InertiaUsedCriterion.java @@ -7,7 +7,6 @@ import net.minecraft.server.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/InkContainerInteractionCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/InkContainerInteractionCriterion.java index 4f42c22b12..f59318dfa2 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/InkContainerInteractionCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/InkContainerInteractionCriterion.java @@ -9,7 +9,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; import net.minecraft.world.item.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/InkProjectileKillingCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/InkProjectileKillingCriterion.java index 06a1705f24..3e6d6e6b46 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/InkProjectileKillingCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/InkProjectileKillingCriterion.java @@ -8,7 +8,6 @@ import net.minecraft.server.level.*; import net.minecraft.world.entity.*; import net.minecraft.world.level.storage.loot.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/JeopardantKillCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/JeopardantKillCriterion.java index 0a2df0aee5..a647cc2d87 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/JeopardantKillCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/JeopardantKillCriterion.java @@ -6,7 +6,6 @@ import net.minecraft.server.level.*; import net.minecraft.world.entity.*; import net.minecraft.world.level.storage.loot.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/LootFunctionTriggerCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/LootFunctionTriggerCriterion.java index aebbbe6383..7178ebea6f 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/LootFunctionTriggerCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/LootFunctionTriggerCriterion.java @@ -5,7 +5,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.resources.*; import net.minecraft.server.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/MemoryManifestingCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/MemoryManifestingCriterion.java index 1a15ff0363..08a14cbdab 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/MemoryManifestingCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/MemoryManifestingCriterion.java @@ -6,7 +6,6 @@ import net.minecraft.server.level.*; import net.minecraft.world.entity.*; import net.minecraft.world.level.storage.loot.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/NaturesStaffConversionCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/NaturesStaffConversionCriterion.java index bd386d4f1c..fef08db87d 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/NaturesStaffConversionCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/NaturesStaffConversionCriterion.java @@ -7,7 +7,6 @@ import net.minecraft.server.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/PastelNetworkCreationCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/PastelNetworkCreationCriterion.java index 2273cd1c17..06a35923db 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/PastelNetworkCreationCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/PastelNetworkCreationCriterion.java @@ -2,13 +2,10 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import net.minecraft.advancements.critereon.*; -import net.minecraft.resources.*; import net.minecraft.server.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/PastelNodeUpgradeCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/PastelNodeUpgradeCriterion.java index ec6394eb9b..8427620be2 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/PastelNodeUpgradeCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/PastelNodeUpgradeCriterion.java @@ -5,7 +5,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; import net.minecraft.world.item.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/PedestalCraftingCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/PedestalCraftingCriterion.java index cf90183d6f..17fc1795c3 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/PedestalCraftingCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/PedestalCraftingCriterion.java @@ -5,7 +5,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; import net.minecraft.world.item.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/PotionWorkshopBrewingCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/PotionWorkshopBrewingCriterion.java index 90fdc0ecf9..aa25075ada 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/PotionWorkshopBrewingCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/PotionWorkshopBrewingCriterion.java @@ -2,19 +2,16 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.blocks.potion_workshop.*; import de.dafuqs.spectrum.recipe.potion_workshop.*; import net.minecraft.advancements.critereon.*; import net.minecraft.core.*; import net.minecraft.core.component.*; -import net.minecraft.resources.*; import net.minecraft.server.level.*; import net.minecraft.world.effect.*; import net.minecraft.world.item.*; import net.minecraft.world.item.alchemy.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/PotionWorkshopCraftingCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/PotionWorkshopCraftingCriterion.java index fef68241d2..426bb2633e 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/PotionWorkshopCraftingCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/PotionWorkshopCraftingCriterion.java @@ -6,7 +6,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; import net.minecraft.world.item.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/PreservationCheckCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/PreservationCheckCriterion.java index 34248bd56f..db8f1ad91b 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/PreservationCheckCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/PreservationCheckCriterion.java @@ -4,7 +4,6 @@ import com.mojang.serialization.codecs.*; import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/SlimeSizingCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/SlimeSizingCriterion.java index 8553f50467..b6efd41ac9 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/SlimeSizingCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/SlimeSizingCriterion.java @@ -4,7 +4,6 @@ import com.mojang.serialization.codecs.*; import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/SpectrumFishingRodHookedCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/SpectrumFishingRodHookedCriterion.java index 25f17f2bec..cafe27a230 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/SpectrumFishingRodHookedCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/SpectrumFishingRodHookedCriterion.java @@ -13,7 +13,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.storage.loot.*; import net.minecraft.world.level.storage.loot.parameters.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/SpiritInstillerCraftingCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/SpiritInstillerCraftingCriterion.java index f3ac51eadf..4624a0c69a 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/SpiritInstillerCraftingCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/SpiritInstillerCraftingCriterion.java @@ -4,7 +4,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; import net.minecraft.world.item.*; -import javax.annotation.*; public class SpiritInstillerCraftingCriterion extends SimpleCriterionTrigger { diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/TakeOffBeltJumpCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/TakeOffBeltJumpCriterion.java index 365456fcaf..67225cb698 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/TakeOffBeltJumpCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/TakeOffBeltJumpCriterion.java @@ -7,7 +7,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; import net.minecraft.world.item.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/TitrationBarrelTappingCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/TitrationBarrelTappingCriterion.java index 60b737b1d9..ec41723e92 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/TitrationBarrelTappingCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/TitrationBarrelTappingCriterion.java @@ -6,7 +6,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; import net.minecraft.world.item.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/TrinketChangeCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/TrinketChangeCriterion.java index a1f5f3a3e2..417169d0cd 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/TrinketChangeCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/TrinketChangeCriterion.java @@ -2,15 +2,12 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.items.trinkets.*; import de.dafuqs.spectrum.registries.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.advancements.critereon.*; import net.minecraft.server.level.*; -import net.minecraft.util.*; import net.minecraft.world.item.*; import net.neoforged.neoforge.items.*; -import javax.annotation.*; import top.theillusivec4.curios.api.*; import top.theillusivec4.curios.api.type.capability.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/UpgradePlacingCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/UpgradePlacingCriterion.java index d1b4bdc458..4ffb54aa2f 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/UpgradePlacingCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/UpgradePlacingCriterion.java @@ -6,7 +6,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.core.*; import net.minecraft.server.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/package-info.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/package-info.java index 673688dfe4..8d3dc2a4ab 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.progression.advancement; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/package-info.java b/src/main/java/de/dafuqs/spectrum/progression/package-info.java index e004b6ee93..21dee506db 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/progression/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.progression; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/toast/UnlockedRecipeToast.java b/src/main/java/de/dafuqs/spectrum/progression/toast/UnlockedRecipeToast.java index 23a79a55c0..18fe3bcec2 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/toast/UnlockedRecipeToast.java +++ b/src/main/java/de/dafuqs/spectrum/progression/toast/UnlockedRecipeToast.java @@ -18,7 +18,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.alchemy.*; import net.minecraft.world.item.enchantment.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/toast/package-info.java b/src/main/java/de/dafuqs/spectrum/progression/toast/package-info.java index 4c2a670c96..1b213d19a0 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/toast/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/progression/toast/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.progression.toast; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/EmptyRecipeSerializer.java b/src/main/java/de/dafuqs/spectrum/recipe/EmptyRecipeSerializer.java index 776308f1f1..3dbccba016 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/EmptyRecipeSerializer.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/EmptyRecipeSerializer.java @@ -5,7 +5,6 @@ import net.minecraft.network.*; import net.minecraft.network.codec.*; import net.minecraft.world.item.crafting.*; -import javax.annotation.*; import java.util.function.Supplier; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/GatedSpectrumRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/GatedSpectrumRecipe.java index 0d88c52056..fe41f2ef80 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/GatedSpectrumRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/GatedSpectrumRecipe.java @@ -6,7 +6,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.item.enchantment.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/GatedStackSpectrumRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/GatedStackSpectrumRecipe.java index 8615b8fe25..62b8a486fc 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/GatedStackSpectrumRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/GatedStackSpectrumRecipe.java @@ -6,7 +6,6 @@ import net.minecraft.resources.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/SimpleRecipeInput.java b/src/main/java/de/dafuqs/spectrum/recipe/SimpleRecipeInput.java index 5ba8fe3cf1..fd61ea279f 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/SimpleRecipeInput.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/SimpleRecipeInput.java @@ -2,7 +2,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/anvil_crushing/AnvilCrushingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/anvil_crushing/AnvilCrushingRecipe.java index 4d8d7ee0bf..a6ed2e4d6e 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/anvil_crushing/AnvilCrushingRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/anvil_crushing/AnvilCrushingRecipe.java @@ -16,7 +16,7 @@ import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/anvil_crushing/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/anvil_crushing/package-info.java index 67d53bfc5d..6f5664fee5 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/anvil_crushing/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/anvil_crushing/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.recipe.anvil_crushing; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/cinderhearth/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/cinderhearth/package-info.java index c3682e8d3a..c738b5aa3f 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/cinderhearth/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/cinderhearth/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.recipe.cinderhearth; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/color_picker/InkConvertingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/color_picker/InkConvertingRecipe.java index 5e4541b3f1..b1f2c63fc9 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/color_picker/InkConvertingRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/color_picker/InkConvertingRecipe.java @@ -4,7 +4,7 @@ import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.ink.color.*; -import de.dafuqs.spectrum.recipe.GatedSpectrumRecipe; +import de.dafuqs.spectrum.recipe.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.network.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/color_picker/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/color_picker/package-info.java index e3c848f7c2..40fe3e12c1 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/color_picker/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/color_picker/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.recipe.color_picker; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/WrapPresentRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/WrapPresentRecipe.java index c9cb84adcb..706d8d571f 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/WrapPresentRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/WrapPresentRecipe.java @@ -9,7 +9,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/package-info.java index af37f8c25c..a2d739439c 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.recipe.crafting.dynamic; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java index 1877d631dc..fcf57743bc 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java @@ -17,7 +17,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; import net.neoforged.neoforge.fluids.crafting.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/package-info.java index 6e1942eea3..9b078a6793 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.recipe.crystallarieum; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/enchanter/EnchantmentUpgradeRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/enchanter/EnchantmentUpgradeRecipe.java index 6ed12e598c..44c33e41ee 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/enchanter/EnchantmentUpgradeRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/enchanter/EnchantmentUpgradeRecipe.java @@ -4,7 +4,6 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.api.item.*; -import de.dafuqs.spectrum.api.pastel_network.*; import de.dafuqs.spectrum.api.recipe.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.recipe.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/enchanter/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/enchanter/package-info.java index b2dda5a585..9a4bdd442d 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/enchanter/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/enchanter/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.recipe.enchanter; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/DragonrotConvertingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/DragonrotConvertingRecipe.java index ffc44b77be..5ead7af4ef 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/DragonrotConvertingRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/DragonrotConvertingRecipe.java @@ -5,7 +5,6 @@ import net.minecraft.resources.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/FluidConvertingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/FluidConvertingRecipe.java index 08884c7bee..3420f594de 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/FluidConvertingRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/FluidConvertingRecipe.java @@ -11,7 +11,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/LiquidCrystalConvertingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/LiquidCrystalConvertingRecipe.java index bdf23712d1..3cb188c3ba 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/LiquidCrystalConvertingRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/LiquidCrystalConvertingRecipe.java @@ -5,7 +5,6 @@ import net.minecraft.resources.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/MidnightSolutionConvertingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/MidnightSolutionConvertingRecipe.java index 708023c879..9dab29e21d 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/MidnightSolutionConvertingRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/MidnightSolutionConvertingRecipe.java @@ -5,7 +5,6 @@ import net.minecraft.resources.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/package-info.java index bd492698c1..eb418ed9cd 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/fluid_converting/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.recipe.fluid_converting; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/fusion_shrine/FusionShrineRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/fusion_shrine/FusionShrineRecipe.java index 1f8f6b6e09..673b8ba97e 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/fusion_shrine/FusionShrineRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/fusion_shrine/FusionShrineRecipe.java @@ -19,11 +19,10 @@ import net.minecraft.server.level.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; -import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; import net.neoforged.neoforge.fluids.capability.templates.*; import net.neoforged.neoforge.fluids.crafting.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/fusion_shrine/dynamic/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/fusion_shrine/dynamic/package-info.java index 1d04e4bcbf..666531585e 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/fusion_shrine/dynamic/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/fusion_shrine/dynamic/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.recipe.fusion_shrine.dynamic; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/fusion_shrine/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/fusion_shrine/package-info.java index 589705325a..8d136cf27b 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/fusion_shrine/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/fusion_shrine/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.recipe.fusion_shrine; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/package-info.java index a4ee4f8aa2..b06b64a2bb 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.recipe; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/pedestal/PedestalRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/pedestal/PedestalRecipe.java index d57152dc2f..0d95b4a20c 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/pedestal/PedestalRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/pedestal/PedestalRecipe.java @@ -19,7 +19,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/pedestal/dynamic/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/pedestal/dynamic/package-info.java index 715ace25d6..07f50b466e 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/pedestal/dynamic/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/pedestal/dynamic/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.recipe.pedestal.dynamic; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/pedestal/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/pedestal/package-info.java index 1f6442e65f..f036b2cee4 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/pedestal/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/pedestal/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.recipe.pedestal; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionRecipeEffect.java b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionRecipeEffect.java index f28c0f42bc..8c0e98658f 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionRecipeEffect.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionRecipeEffect.java @@ -14,7 +14,7 @@ import net.minecraft.util.*; import net.minecraft.world.effect.*; import net.minecraft.world.item.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public record PotionRecipeEffect( boolean applicableToPotions, diff --git a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java index 74dfb03323..b8eee9f567 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java @@ -20,7 +20,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.alchemy.*; import net.minecraft.world.item.crafting.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopCraftingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopCraftingRecipe.java index 55227ba2df..b44cd48fa7 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopCraftingRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopCraftingRecipe.java @@ -14,7 +14,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopReactingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopReactingRecipe.java index f8f1a9a0fa..fe6f062ef0 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopReactingRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopReactingRecipe.java @@ -17,7 +17,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopRecipe.java index eafc3a1720..08c2664ddf 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopRecipe.java @@ -11,7 +11,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/package-info.java index 610fef27be..8acdc898a2 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.recipe.potion_workshop; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/primordial_fire_burning/PrimordialFireBurningRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/primordial_fire_burning/PrimordialFireBurningRecipe.java index 91e2389ffa..6f7e693abd 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/primordial_fire_burning/PrimordialFireBurningRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/primordial_fire_burning/PrimordialFireBurningRecipe.java @@ -17,7 +17,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/primordial_fire_burning/dynamic/EnchantedBookUnsoulingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/primordial_fire_burning/dynamic/EnchantedBookUnsoulingRecipe.java index e4aa34cc28..53da102ae3 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/primordial_fire_burning/dynamic/EnchantedBookUnsoulingRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/primordial_fire_burning/dynamic/EnchantedBookUnsoulingRecipe.java @@ -13,7 +13,6 @@ import net.minecraft.world.item.crafting.*; import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/primordial_fire_burning/dynamic/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/primordial_fire_burning/dynamic/package-info.java index cfe46f5fd5..aa540b60ad 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/primordial_fire_burning/dynamic/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/primordial_fire_burning/dynamic/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.recipe.primordial_fire_burning.dynamic; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/primordial_fire_burning/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/primordial_fire_burning/package-info.java index 2e7c9da559..a518cf2be2 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/primordial_fire_burning/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/primordial_fire_burning/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.recipe.primordial_fire_burning; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/SpiritInstillerRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/SpiritInstillerRecipe.java index 5e765e60e7..34235355ab 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/SpiritInstillerRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/SpiritInstillerRecipe.java @@ -19,7 +19,6 @@ import net.minecraft.server.level.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; -import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/HardcorePlayerRevivalRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/HardcorePlayerRevivalRecipe.java index 22401785ce..02ed47aa1e 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/HardcorePlayerRevivalRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/HardcorePlayerRevivalRecipe.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.recipe.spirit_instiller.dynamic; import com.mojang.authlib.*; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.recipe.*; import de.dafuqs.spectrum.attachment_types.*; import de.dafuqs.spectrum.blocks.spirit_instiller.*; @@ -16,7 +15,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.block.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/package-info.java index 96b083f68d..36163ad2fb 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.recipe.spirit_instiller.dynamic; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerCreatureChangeRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerCreatureChangeRecipe.java index e463d0b0a6..3d5cedd815 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerCreatureChangeRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerCreatureChangeRecipe.java @@ -16,7 +16,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.component.*; import net.minecraft.world.item.crafting.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/package-info.java index 1a41cc349d..39b2cb8198 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.recipe.spirit_instiller; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/TitrationBarrelRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/TitrationBarrelRecipe.java index 2e70f460c7..544a9eee14 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/TitrationBarrelRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/TitrationBarrelRecipe.java @@ -23,7 +23,6 @@ import net.minecraft.world.level.*; import net.neoforged.neoforge.fluids.capability.templates.*; import net.neoforged.neoforge.fluids.crafting.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/AquaRegiaRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/AquaRegiaRecipe.java index e7b15c9340..4c143306b9 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/AquaRegiaRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/AquaRegiaRecipe.java @@ -14,7 +14,6 @@ import net.minecraft.world.level.material.*; import net.neoforged.neoforge.fluids.capability.templates.*; import net.neoforged.neoforge.fluids.crafting.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/CheongRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/CheongRecipe.java index 219c8c7b90..c645f7abce 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/CheongRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/CheongRecipe.java @@ -8,7 +8,6 @@ import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.material.*; import net.neoforged.neoforge.fluids.crafting.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/JadeWineRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/JadeWineRecipe.java index 1dfe229a13..b3ac09e9e4 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/JadeWineRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/JadeWineRecipe.java @@ -14,7 +14,6 @@ import net.minecraft.world.level.material.*; import net.neoforged.neoforge.fluids.capability.templates.*; import net.neoforged.neoforge.fluids.crafting.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/NecteredViognierRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/NecteredViognierRecipe.java index a37e59d149..2ed932e516 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/NecteredViognierRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/NecteredViognierRecipe.java @@ -14,7 +14,6 @@ import net.minecraft.world.level.material.*; import net.neoforged.neoforge.fluids.capability.templates.*; import net.neoforged.neoforge.fluids.crafting.*; -import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/SuspiciousBrewRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/SuspiciousBrewRecipe.java index 311453757e..68418cb834 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/SuspiciousBrewRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/SuspiciousBrewRecipe.java @@ -22,7 +22,7 @@ import net.minecraft.world.level.material.*; import net.neoforged.neoforge.fluids.capability.templates.*; import net.neoforged.neoforge.fluids.crafting.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/package-info.java index b1e3708ecc..b601adcef0 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/dynamic/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.recipe.titration_barrel.dynamic; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/package-info.java index bb9eb5fbaf..ddfa750399 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/titration_barrel/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.recipe.titration_barrel; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index a7e716ded8..99d22ab515 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -30,7 +30,6 @@ import de.dafuqs.spectrum.blocks.idols.*; import de.dafuqs.spectrum.blocks.ink.gen.*; import de.dafuqs.spectrum.blocks.ink.sink.*; -import de.dafuqs.spectrum.blocks.ink.sink.CrystallarieumBlock; import de.dafuqs.spectrum.blocks.item_bowl.*; import de.dafuqs.spectrum.blocks.item_roundel.*; import de.dafuqs.spectrum.blocks.jade_vines.*; @@ -95,7 +94,7 @@ import net.neoforged.fml.*; import net.neoforged.fml.event.lifecycle.*; import net.neoforged.neoforge.registries.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumConfiguredFeatureKeys.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumConfiguredFeatureKeys.java index 16b1d1faf1..8e53e85284 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumConfiguredFeatureKeys.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumConfiguredFeatureKeys.java @@ -5,7 +5,6 @@ import net.minecraft.core.registries.*; import net.minecraft.resources.*; import net.minecraft.world.level.levelgen.feature.*; -import net.neoforged.neoforge.registries.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumDamageTypes.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumDamageTypes.java index 663fe2eb55..eb8edd5ddc 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumDamageTypes.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumDamageTypes.java @@ -9,7 +9,7 @@ import net.minecraft.world.entity.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import static de.dafuqs.spectrum.SpectrumCommon.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumDispenserBehaviors.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumDispenserBehaviors.java index 4894bd2ddd..76a5263397 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumDispenserBehaviors.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumDispenserBehaviors.java @@ -14,7 +14,6 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import javax.annotation.*; public class SpectrumDispenserBehaviors { diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityColorProcessors.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityColorProcessors.java index 55c7bd57b4..e37e1c2808 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityColorProcessors.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityColorProcessors.java @@ -5,7 +5,7 @@ import de.dafuqs.spectrum.entity.*; import net.minecraft.world.entity.*; import net.minecraft.world.item.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index 7958f50926..e8918ba466 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.registries; -import com.simibubi.create.content.fluids.*; import de.dafuqs.arrowhead.api.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.block.*; @@ -24,7 +23,6 @@ import de.dafuqs.spectrum.particle.*; import de.dafuqs.spectrum.particle.effect.*; import de.dafuqs.spectrum.progression.*; -import de.dafuqs.spectrum.recipe.potion_workshop.*; import de.dafuqs.spectrum.registries.client.*; import net.minecraft.advancements.*; import net.minecraft.client.resources.model.*; @@ -37,7 +35,6 @@ import net.minecraft.sounds.*; import net.minecraft.stats.*; import net.minecraft.tags.*; -import net.minecraft.util.*; import net.minecraft.world.*; import net.minecraft.world.damagesource.*; import net.minecraft.world.effect.*; @@ -71,10 +68,9 @@ import net.neoforged.neoforge.fluids.*; import net.neoforged.neoforge.items.*; import net.neoforged.neoforge.items.wrapper.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import top.theillusivec4.curios.api.*; import top.theillusivec4.curios.api.type.capability.*; -import top.theillusivec4.curios.api.type.inventory.*; import java.util.*; import java.util.concurrent.atomic.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java index 24ba0a9ff5..7791bb0da2 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumFluids.java @@ -7,17 +7,12 @@ import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.*; -import de.dafuqs.spectrum.recipe.fluid_converting.*; import net.minecraft.client.*; import net.minecraft.client.renderer.*; import net.minecraft.core.*; import net.minecraft.core.registries.*; import net.minecraft.resources.*; import net.minecraft.sounds.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.item.crafting.*; -import net.minecraft.world.level.*; -import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.material.*; import net.minecraft.world.level.pathfinder.*; import net.neoforged.bus.api.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumIngredientTypes.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumIngredientTypes.java index fd4d2efede..0406200ce2 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumIngredientTypes.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumIngredientTypes.java @@ -2,11 +2,6 @@ import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.recipe.*; -import de.dafuqs.spectrum.deeper_down.*; -import de.dafuqs.spectrum.mixin.accessors.*; -import net.minecraft.core.registries.*; -import net.minecraft.resources.*; -import net.minecraft.world.level.*; import net.neoforged.bus.api.*; import net.neoforged.neoforge.common.crafting.*; import net.neoforged.neoforge.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java index 9d64159f58..aaf9b296ff 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java @@ -10,10 +10,6 @@ import de.dafuqs.spectrum.blocks.bottomless_bundle.*; import de.dafuqs.spectrum.blocks.memory.*; import de.dafuqs.spectrum.blocks.mob_head.*; -import de.dafuqs.spectrum.compat.*; -import de.dafuqs.spectrum.compat.ae2.*; -import de.dafuqs.spectrum.compat.create.*; -import de.dafuqs.spectrum.compat.gobber.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.recipe.titration_barrel.*; import net.minecraft.core.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemProjectileBehaviors.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemProjectileBehaviors.java index 1c9fdc2474..81f6ca174b 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemProjectileBehaviors.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemProjectileBehaviors.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.registries; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.interaction.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.attachment_types.*; @@ -13,14 +12,10 @@ import de.dafuqs.spectrum.items.magic_items.*; import de.dafuqs.spectrum.items.magic_items.ampoules.*; import de.dafuqs.spectrum.items.tools.*; -import de.dafuqs.spectrum.sound.*; -import net.minecraft.advancements.*; import net.minecraft.advancements.critereon.*; import net.minecraft.core.*; import net.minecraft.server.level.*; import net.minecraft.sounds.*; -import net.minecraft.util.*; -import net.minecraft.world.*; import net.minecraft.world.effect.*; import net.minecraft.world.entity.*; import net.minecraft.world.entity.player.*; @@ -33,11 +28,9 @@ import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; import net.neoforged.neoforge.common.*; -import org.jspecify.annotations.Nullable; -import vazkii.botania.common.helper.*; +import org.jspecify.annotations.*; import java.util.*; -import java.util.function.*; public class SpectrumItemProjectileBehaviors { diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java index f47fac3350..d5d6bf14fd 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java @@ -12,8 +12,8 @@ import de.dafuqs.spectrum.items.*; import de.dafuqs.spectrum.items.armor.*; import de.dafuqs.spectrum.items.conditional.*; -import de.dafuqs.spectrum.items.ink.*; import de.dafuqs.spectrum.items.food.*; +import de.dafuqs.spectrum.items.ink.*; import de.dafuqs.spectrum.items.item_frame.*; import de.dafuqs.spectrum.items.magic_items.*; import de.dafuqs.spectrum.items.magic_items.ampoules.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumLootConditionTypes.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumLootConditionTypes.java index b714543773..69bca7cac1 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumLootConditionTypes.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumLootConditionTypes.java @@ -13,7 +13,6 @@ import net.minecraft.world.phys.*; import net.neoforged.bus.api.*; import net.neoforged.neoforge.registries.*; -import javax.annotation.*; public class SpectrumLootConditionTypes { diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumMultiblocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumMultiblocks.java index 179551bc3c..21a9d8fcdc 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumMultiblocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumMultiblocks.java @@ -5,7 +5,7 @@ import de.dafuqs.spectrum.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class SpectrumMultiblocks { diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumOmniAcceleratorProjectiles.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumOmniAcceleratorProjectiles.java index cfc3dad6af..e22bcbda31 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumOmniAcceleratorProjectiles.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumOmniAcceleratorProjectiles.java @@ -6,7 +6,6 @@ import net.minecraft.advancements.critereon.*; import net.minecraft.sounds.*; import net.minecraft.tags.*; -import net.minecraft.world.*; import net.minecraft.world.entity.*; import net.minecraft.world.entity.item.*; import net.minecraft.world.entity.player.*; @@ -16,9 +15,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; - -import java.util.function.*; +import org.jspecify.annotations.*; public class SpectrumOmniAcceleratorProjectiles { diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeSerializers.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeSerializers.java index 6bdaef6c43..46b22fd80d 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeSerializers.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeSerializers.java @@ -21,14 +21,11 @@ import de.dafuqs.spectrum.recipe.spirit_instiller.dynamic.spawner_manipulation.*; import de.dafuqs.spectrum.recipe.titration_barrel.*; import de.dafuqs.spectrum.recipe.titration_barrel.dynamic.*; -import net.minecraft.core.*; import net.minecraft.core.registries.*; import net.minecraft.world.item.crafting.*; import net.neoforged.bus.api.*; import net.neoforged.neoforge.registries.*; -import java.util.function.*; - public class SpectrumRecipeSerializers { private static final DeferredRegister> REGISTRAR = DeferredRegister.create(Registries.RECIPE_SERIALIZER, SpectrumCommon.MOD_ID); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipes.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipes.java index b77832f03c..2f51a96c48 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipes.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipes.java @@ -3,8 +3,6 @@ import de.dafuqs.spectrum.*; import net.minecraft.resources.*; -import static de.dafuqs.spectrum.SpectrumCommon.*; - @SuppressWarnings("unused") public class SpectrumRecipes { diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java index ca22767268..63468442cf 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java @@ -10,13 +10,10 @@ import de.dafuqs.spectrum.data_loaders.*; import de.dafuqs.spectrum.entity.variants.*; import de.dafuqs.spectrum.items.tools.*; -import de.dafuqs.spectrum.recipe.*; import net.minecraft.core.*; import net.minecraft.resources.*; import net.minecraft.tags.*; import net.minecraft.util.*; -import net.minecraft.world.level.block.state.predicate.*; -import net.minecraft.world.level.levelgen.feature.configurations.*; import net.neoforged.neoforge.registries.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java index be46b86ca0..15dbc9ae91 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistryKeys.java @@ -11,7 +11,6 @@ import de.dafuqs.spectrum.data_loaders.*; import de.dafuqs.spectrum.entity.variants.*; import de.dafuqs.spectrum.items.tools.*; -import de.dafuqs.spectrum.recipe.*; import net.minecraft.core.*; import net.minecraft.resources.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumResourceConditions.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumResourceConditions.java index f823bb0d61..67dfb3a856 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumResourceConditions.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumResourceConditions.java @@ -4,15 +4,10 @@ import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.compat.*; -import net.minecraft.core.registries.*; -import net.minecraft.resources.*; -import net.minecraft.world.item.enchantment.*; import net.neoforged.bus.api.*; import net.neoforged.neoforge.common.conditions.*; import net.neoforged.neoforge.registries.*; -import java.util.*; - public class SpectrumResourceConditions { public static final DeferredRegister> REGISTRAR = DeferredRegister.create(NeoForgeRegistries.CONDITION_SERIALIZERS, SpectrumCommon.MOD_ID); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumWoodTypes.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumWoodTypes.java index 7707bfd15b..133221034f 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumWoodTypes.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumWoodTypes.java @@ -2,8 +2,6 @@ import net.minecraft.world.level.block.state.properties.*; -import static de.dafuqs.spectrum.SpectrumCommon.*; - public class SpectrumWoodTypes { public static final WoodType SLATE_NOXWOOD = new WoodType("slate_noxwood", SpectrumBlockSetTypes.NOXWOOD); public static final WoodType EBONY_NOXWOOD = new WoodType("ebony_noxwood", SpectrumBlockSetTypes.NOXWOOD); diff --git a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java index 5cc351bd4d..a33866c40c 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java @@ -10,15 +10,15 @@ import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.data_loaders.client.*; import de.dafuqs.spectrum.deeper_down.client.*; -import de.dafuqs.spectrum.items.tooltip.*; -import de.dafuqs.spectrum.render.armor.*; -import de.dafuqs.spectrum.render.biome_rendering.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.items.magic_items.*; +import de.dafuqs.spectrum.items.tooltip.*; import de.dafuqs.spectrum.mixin.accessors.*; import de.dafuqs.spectrum.particle.render.*; import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.render.*; +import de.dafuqs.spectrum.render.armor.*; +import de.dafuqs.spectrum.render.biome_rendering.*; import de.dafuqs.spectrum.sound.*; import it.unimi.dsi.fastutil.objects.*; import net.minecraft.*; @@ -33,11 +33,10 @@ import net.minecraft.core.particles.*; import net.minecraft.core.registries.*; import net.minecraft.network.chat.*; -import net.minecraft.util.*; import net.minecraft.server.packs.resources.*; +import net.minecraft.util.*; import net.minecraft.world.entity.*; import net.minecraft.world.entity.player.*; -import net.minecraft.world.inventory.tooltip.*; import net.minecraft.world.item.*; import net.minecraft.world.level.biome.*; import net.minecraft.world.level.block.*; @@ -50,7 +49,7 @@ import net.neoforged.neoforge.client.event.*; import net.neoforged.neoforge.client.extensions.common.*; import net.neoforged.neoforge.event.entity.player.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import oshi.util.tuples.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumEnvironmentalDataOverrides.java b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumEnvironmentalDataOverrides.java index 5b5ef4109f..6e5d7f5af6 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumEnvironmentalDataOverrides.java +++ b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumEnvironmentalDataOverrides.java @@ -1,14 +1,12 @@ package de.dafuqs.spectrum.registries.client; -import de.dafuqs.spectrum.render.biome_rendering.EnvironmentalData; -import de.dafuqs.spectrum.render.biome_rendering.EnvironmentalDataOverride; import de.dafuqs.spectrum.registries.*; -import net.minecraft.core.Holder; -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; +import de.dafuqs.spectrum.render.biome_rendering.*; +import net.minecraft.core.*; +import net.minecraft.world.effect.*; +import net.minecraft.world.entity.*; -import java.util.function.Predicate; +import java.util.function.*; public class SpectrumEnvironmentalDataOverrides { diff --git a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumRenderLayers.java b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumRenderLayers.java index 9b152fd3c2..24e4214647 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumRenderLayers.java +++ b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumRenderLayers.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.registries.client; import com.mojang.blaze3d.vertex.*; -import de.dafuqs.spectrum.mixin.client.accessors.*; import net.minecraft.client.renderer.*; import net.minecraft.resources.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/client/package-info.java b/src/main/java/de/dafuqs/spectrum/registries/client/package-info.java index 4304e93249..0be3d0408c 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/client/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/registries/client/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.registries.client; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/package-info.java b/src/main/java/de/dafuqs/spectrum/registries/package-info.java index 52b2bc18de..a63e1dd48c 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/registries/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.registries; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/render/HudRenderers.java b/src/main/java/de/dafuqs/spectrum/render/HudRenderers.java index 2e12a52ce8..88f3d90eb4 100644 --- a/src/main/java/de/dafuqs/spectrum/render/HudRenderers.java +++ b/src/main/java/de/dafuqs/spectrum/render/HudRenderers.java @@ -12,7 +12,7 @@ import net.minecraft.world.item.*; import net.neoforged.neoforge.client.event.*; import net.neoforged.neoforge.client.gui.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class HudRenderers { diff --git a/src/main/java/de/dafuqs/spectrum/render/SkyLerper.java b/src/main/java/de/dafuqs/spectrum/render/SkyLerper.java index 4012459201..742ac8881e 100644 --- a/src/main/java/de/dafuqs/spectrum/render/SkyLerper.java +++ b/src/main/java/de/dafuqs/spectrum/render/SkyLerper.java @@ -2,7 +2,7 @@ import net.minecraft.util.*; import net.minecraft.world.level.dimension.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class SkyLerper { diff --git a/src/main/java/de/dafuqs/spectrum/render/SpectrumShaders.java b/src/main/java/de/dafuqs/spectrum/render/SpectrumShaders.java index aae2ca05b8..49dd137f53 100644 --- a/src/main/java/de/dafuqs/spectrum/render/SpectrumShaders.java +++ b/src/main/java/de/dafuqs/spectrum/render/SpectrumShaders.java @@ -1,9 +1,9 @@ package de.dafuqs.spectrum.render; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.registries.SpectrumDimensionKeys; -import de.dafuqs.spectrum.render.biome_rendering.*; import de.dafuqs.spectrum.entity.entity.*; +import de.dafuqs.spectrum.registries.*; +import de.dafuqs.spectrum.render.biome_rendering.*; import net.minecraft.client.*; import net.minecraft.client.multiplayer.*; import net.minecraft.client.renderer.*; diff --git a/src/main/java/de/dafuqs/spectrum/render/animation/DataSignature.java b/src/main/java/de/dafuqs/spectrum/render/animation/DataSignature.java index 9a4671c4f2..92a59b1738 100644 --- a/src/main/java/de/dafuqs/spectrum/render/animation/DataSignature.java +++ b/src/main/java/de/dafuqs/spectrum/render/animation/DataSignature.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.render.animation; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.lang.reflect.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/render/animation/FlowAnimator.java b/src/main/java/de/dafuqs/spectrum/render/animation/FlowAnimator.java index aef1be4218..4675558252 100644 --- a/src/main/java/de/dafuqs/spectrum/render/animation/FlowAnimator.java +++ b/src/main/java/de/dafuqs/spectrum/render/animation/FlowAnimator.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.render.animation; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/render/animation/FlowData.java b/src/main/java/de/dafuqs/spectrum/render/animation/FlowData.java index bbd3291f13..3f026ecd78 100644 --- a/src/main/java/de/dafuqs/spectrum/render/animation/FlowData.java +++ b/src/main/java/de/dafuqs/spectrum/render/animation/FlowData.java @@ -1,7 +1,5 @@ package de.dafuqs.spectrum.render.animation; -import javax.annotation.*; - import java.util.*; /** diff --git a/src/main/java/de/dafuqs/spectrum/render/animation/package-info.java b/src/main/java/de/dafuqs/spectrum/render/animation/package-info.java index 998f102bd9..977e1df671 100644 --- a/src/main/java/de/dafuqs/spectrum/render/animation/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/render/animation/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.render.animation; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/render/armor/BedrockCapeRenderer.java b/src/main/java/de/dafuqs/spectrum/render/armor/BedrockCapeRenderer.java index be51412496..cb75bad0fa 100644 --- a/src/main/java/de/dafuqs/spectrum/render/armor/BedrockCapeRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/render/armor/BedrockCapeRenderer.java @@ -3,8 +3,6 @@ import com.mojang.blaze3d.vertex.*; import com.mojang.math.*; import de.dafuqs.spectrum.items.armor.*; -import de.dafuqs.spectrum.registries.*; -import de.dafuqs.spectrum.registries.client.*; import de.dafuqs.spectrum.render.*; import net.minecraft.client.model.*; import net.minecraft.client.renderer.*; @@ -18,7 +16,7 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.neoforged.neoforge.client.event.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class BedrockCapeRenderer { diff --git a/src/main/java/de/dafuqs/spectrum/render/armor/package-info.java b/src/main/java/de/dafuqs/spectrum/render/armor/package-info.java index b36aea3968..548947b29a 100644 --- a/src/main/java/de/dafuqs/spectrum/render/armor/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/render/armor/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.render.armor; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/render/biome_rendering/ColorGrading.java b/src/main/java/de/dafuqs/spectrum/render/biome_rendering/ColorGrading.java index 0dfc3d3b8d..04cd2c3e42 100644 --- a/src/main/java/de/dafuqs/spectrum/render/biome_rendering/ColorGrading.java +++ b/src/main/java/de/dafuqs/spectrum/render/biome_rendering/ColorGrading.java @@ -1,12 +1,9 @@ package de.dafuqs.spectrum.render.biome_rendering; -import com.mojang.serialization.Codec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.util.*; +import com.mojang.serialization.*; +import com.mojang.serialization.codecs.*; -import java.util.*; - -import static net.minecraft.util.Mth.lerp; +import static net.minecraft.util.Mth.*; public record ColorGrading(float saturation, float rubedo, float colorTemperature, float threshold, float bloom) { diff --git a/src/main/java/de/dafuqs/spectrum/render/biome_rendering/EnvironmentalData.java b/src/main/java/de/dafuqs/spectrum/render/biome_rendering/EnvironmentalData.java index f0a593959e..ecd0d4b202 100644 --- a/src/main/java/de/dafuqs/spectrum/render/biome_rendering/EnvironmentalData.java +++ b/src/main/java/de/dafuqs/spectrum/render/biome_rendering/EnvironmentalData.java @@ -1,8 +1,7 @@ package de.dafuqs.spectrum.render.biome_rendering; -import com.mojang.serialization.Codec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import de.dafuqs.spectrum.*; +import com.mojang.serialization.*; +import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.config.*; import net.minecraft.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/render/biome_rendering/EnvironmentalRendering.java b/src/main/java/de/dafuqs/spectrum/render/biome_rendering/EnvironmentalRendering.java index db318b3f79..7a2a1f77b6 100644 --- a/src/main/java/de/dafuqs/spectrum/render/biome_rendering/EnvironmentalRendering.java +++ b/src/main/java/de/dafuqs/spectrum/render/biome_rendering/EnvironmentalRendering.java @@ -3,19 +3,18 @@ import com.mojang.datafixers.util.*; import de.dafuqs.spectrum.data_loaders.client.*; import de.dafuqs.spectrum.registries.*; -import net.minecraft.client.Minecraft; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Cursor3D; -import net.minecraft.resources.ResourceKey; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.biome.Biome; +import net.minecraft.client.*; +import net.minecraft.core.*; +import net.minecraft.resources.*; +import net.minecraft.util.*; +import net.minecraft.world.entity.*; +import net.minecraft.world.level.biome.*; import net.neoforged.neoforge.client.event.*; import org.joml.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.lang.Math; -import java.util.function.Supplier; +import java.util.function.*; public class EnvironmentalRendering { diff --git a/src/main/java/de/dafuqs/spectrum/render/biome_rendering/package-info.java b/src/main/java/de/dafuqs/spectrum/render/biome_rendering/package-info.java index 0764f8ae67..e0715a4483 100644 --- a/src/main/java/de/dafuqs/spectrum/render/biome_rendering/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/render/biome_rendering/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.render.biome_rendering; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/render/package-info.java b/src/main/java/de/dafuqs/spectrum/render/package-info.java index b57a42c8a2..e92a5fadb2 100644 --- a/src/main/java/de/dafuqs/spectrum/render/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/render/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.render; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/sound/BiomeAttenuatingSoundInstance.java b/src/main/java/de/dafuqs/spectrum/sound/BiomeAttenuatingSoundInstance.java index 9cb3a6caa2..c85f1a5248 100644 --- a/src/main/java/de/dafuqs/spectrum/sound/BiomeAttenuatingSoundInstance.java +++ b/src/main/java/de/dafuqs/spectrum/sound/BiomeAttenuatingSoundInstance.java @@ -10,7 +10,7 @@ import net.minecraft.world.entity.*; import net.minecraft.world.level.*; import net.minecraft.world.level.biome.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class BiomeAttenuatingSoundInstance extends AbstractSoundInstance implements TickableSoundInstance { diff --git a/src/main/java/de/dafuqs/spectrum/sound/BlockAuraSoundInstance.java b/src/main/java/de/dafuqs/spectrum/sound/BlockAuraSoundInstance.java index 12c02f0367..1916a5bb9a 100644 --- a/src/main/java/de/dafuqs/spectrum/sound/BlockAuraSoundInstance.java +++ b/src/main/java/de/dafuqs/spectrum/sound/BlockAuraSoundInstance.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.sound; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.helpers.*; @@ -14,7 +13,7 @@ import net.minecraft.world.entity.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/sound/CraftingBlockSoundInstance.java b/src/main/java/de/dafuqs/spectrum/sound/CraftingBlockSoundInstance.java index fd7ddd83b0..99450d7b0a 100644 --- a/src/main/java/de/dafuqs/spectrum/sound/CraftingBlockSoundInstance.java +++ b/src/main/java/de/dafuqs/spectrum/sound/CraftingBlockSoundInstance.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.sound; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.config.*; import net.minecraft.client.*; import net.minecraft.client.resources.sounds.*; diff --git a/src/main/java/de/dafuqs/spectrum/sound/DimensionReverb.java b/src/main/java/de/dafuqs/spectrum/sound/DimensionReverb.java index d8df77c6cd..c526eff48f 100644 --- a/src/main/java/de/dafuqs/spectrum/sound/DimensionReverb.java +++ b/src/main/java/de/dafuqs/spectrum/sound/DimensionReverb.java @@ -6,7 +6,6 @@ import net.minecraft.client.*; import net.minecraft.client.multiplayer.*; import net.minecraft.client.resources.sounds.*; -import net.minecraft.resources.*; import net.minecraft.util.*; import org.lwjgl.openal.*; diff --git a/src/main/java/de/dafuqs/spectrum/sound/DivinitySoundInstance.java b/src/main/java/de/dafuqs/spectrum/sound/DivinitySoundInstance.java index 82082af654..d4d39678fe 100644 --- a/src/main/java/de/dafuqs/spectrum/sound/DivinitySoundInstance.java +++ b/src/main/java/de/dafuqs/spectrum/sound/DivinitySoundInstance.java @@ -1,13 +1,13 @@ package de.dafuqs.spectrum.sound; -import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.mob_effect.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.client.*; import net.minecraft.client.resources.sounds.*; import net.minecraft.sounds.*; import net.minecraft.world.entity.player.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; public class DivinitySoundInstance extends AbstractSoundInstance implements TickableSoundInstance { diff --git a/src/main/java/de/dafuqs/spectrum/sound/package-info.java b/src/main/java/de/dafuqs/spectrum/sound/package-info.java index 1b17f5a25f..8919141387 100644 --- a/src/main/java/de/dafuqs/spectrum/sound/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/sound/package-info.java @@ -3,6 +3,5 @@ @FieldsAreNonnullByDefault package de.dafuqs.spectrum.sound; -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; -import org.jspecify.annotations.NullMarked; +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/worldgen/features/ColumnsFeature.java b/src/main/java/de/dafuqs/spectrum/worldgen/features/ColumnsFeature.java index e884c320cd..a51e308661 100644 --- a/src/main/java/de/dafuqs/spectrum/worldgen/features/ColumnsFeature.java +++ b/src/main/java/de/dafuqs/spectrum/worldgen/features/ColumnsFeature.java @@ -9,7 +9,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.levelgen.feature.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/worldgen/features/PillarFeature.java b/src/main/java/de/dafuqs/spectrum/worldgen/features/PillarFeature.java index 8cb7526e52..d51bab0877 100644 --- a/src/main/java/de/dafuqs/spectrum/worldgen/features/PillarFeature.java +++ b/src/main/java/de/dafuqs/spectrum/worldgen/features/PillarFeature.java @@ -6,7 +6,6 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.levelgen.feature.*; -import javax.annotation.*; // a version of BasaltPillarFeature with configurable block state public class PillarFeature extends Feature { diff --git a/src/main/java/de/dafuqs/spectrum/worldgen/features/package-info.java b/src/main/java/de/dafuqs/spectrum/worldgen/features/package-info.java index 0b5545ccae..2598bc0580 100644 --- a/src/main/java/de/dafuqs/spectrum/worldgen/features/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/worldgen/features/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.worldgen.features; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/worldgen/structure_pool_elements/package-info.java b/src/main/java/de/dafuqs/spectrum/worldgen/structure_pool_elements/package-info.java index cc10935efe..37f73cf917 100644 --- a/src/main/java/de/dafuqs/spectrum/worldgen/structure_pool_elements/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/worldgen/structure_pool_elements/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.worldgen.structure_pool_elements; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/worldgen/structures/package-info.java b/src/main/java/de/dafuqs/spectrum/worldgen/structures/package-info.java index c79bc698e1..9d9c6b3aed 100644 --- a/src/main/java/de/dafuqs/spectrum/worldgen/structures/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/worldgen/structures/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.worldgen.structures; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/worldgen/tree_decorators/package-info.java b/src/main/java/de/dafuqs/spectrum/worldgen/tree_decorators/package-info.java index ff2eae8055..34e98446d1 100644 --- a/src/main/java/de/dafuqs/spectrum/worldgen/tree_decorators/package-info.java +++ b/src/main/java/de/dafuqs/spectrum/worldgen/tree_decorators/package-info.java @@ -4,4 +4,4 @@ package de.dafuqs.spectrum.worldgen.tree_decorators; import net.minecraft.*; -import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.*; From d2a0d92fdd7b90b9704293836c6924d9aa920611 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 18:16:22 +0200 Subject: [PATCH 107/477] blazing cinderhearth --- .../{cinderhearth_ash.json => cinderhearth_blazing.json} | 2 +- .../modonomicon/books/guidebook/entries/ink/cinderhearth.json | 2 +- .../{cinderhearth_ash.json => cinderhearth_blazing.json} | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) rename src/main/resources/data/spectrum/advancement/unlocks/blocks/{cinderhearth_ash.json => cinderhearth_blazing.json} (80%) rename src/main/resources/data/spectrum/recipe/pedestal/tier3/{cinderhearth_ash.json => cinderhearth_blazing.json} (81%) diff --git a/src/main/resources/data/spectrum/advancement/unlocks/blocks/cinderhearth_ash.json b/src/main/resources/data/spectrum/advancement/unlocks/blocks/cinderhearth_blazing.json similarity index 80% rename from src/main/resources/data/spectrum/advancement/unlocks/blocks/cinderhearth_ash.json rename to src/main/resources/data/spectrum/advancement/unlocks/blocks/cinderhearth_blazing.json index a7c52cf387..615ec2d171 100644 --- a/src/main/resources/data/spectrum/advancement/unlocks/blocks/cinderhearth_ash.json +++ b/src/main/resources/data/spectrum/advancement/unlocks/blocks/cinderhearth_blazing.json @@ -9,7 +9,7 @@ "collected_ash": { "trigger": "revelationary:advancement_gotten", "conditions": { - "advancement_identifier": "spectrum:hidden/collect_ash" + "advancement_identifier": "spectrum:hidden/collect_blazing_crystal" } } } diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/ink/cinderhearth.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/ink/cinderhearth.json index c92b47b571..453968085c 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/ink/cinderhearth.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/ink/cinderhearth.json @@ -36,7 +36,7 @@ { "type": "spectrum:pedestal_crafting", "title": "container.spectrum.rei.pedestal_recipe", - "recipe_id": "spectrum:pedestal/tier3/cinderhearth_ash" + "recipe_id": "spectrum:pedestal/tier3/cinderhearth_blazing.json" }, { "type": "modonomicon:text", diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/cinderhearth_ash.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/cinderhearth_blazing.json similarity index 81% rename from src/main/resources/data/spectrum/recipe/pedestal/tier3/cinderhearth_ash.json rename to src/main/resources/data/spectrum/recipe/pedestal/tier3/cinderhearth_blazing.json index d2ebbde2a1..eed6ffdc78 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/cinderhearth_ash.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/cinderhearth_blazing.json @@ -19,11 +19,11 @@ "C": "spectrum:polished_calcite", "B": "spectrum:polished_basalt", "G": "minecraft:diamond", - "F": "spectrum:ash" + "F": "spectrum:blazing_crystal" }, "result": { "id": "spectrum:cinderhearth", "count": 1 }, - "required_advancement": "spectrum:unlocks/blocks/cinderhearth" + "required_advancement": "spectrum:unlocks/blocks/cinderhearth_blazing" } \ No newline at end of file From 55ee49fc542ae4464d4f8e0d2e2379f509db8470 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 18:27:30 +0200 Subject: [PATCH 108/477] fix spirit instillers deleting items thrown on top when already full --- .../blocks/InWorldInteractionBlock.java | 2 +- .../SpiritInstillerBlockEntity.java | 19 ++++++++++++++++++- .../capabilities/SpectrumCapabilities.java | 2 +- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/InWorldInteractionBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/InWorldInteractionBlock.java index befe3c3658..33ad114de2 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/InWorldInteractionBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/InWorldInteractionBlock.java @@ -72,7 +72,7 @@ public ItemStack inputStack(Level world, BlockPos pos, ItemStack itemStack) { BlockEntity blockEntity = world.getBlockEntity(pos); if (blockEntity instanceof InWorldInteractionBlockEntity inWorldInteractionBlockEntity) { int previousCount = itemStack.getCount(); - ItemStack remainingStack = InventoryHelper.smartAddToInventory(itemStack, inWorldInteractionBlockEntity, null); + ItemStack remainingStack = InventoryHelper.smartAddToInventory(itemStack, inWorldInteractionBlockEntity, Direction.DOWN); if (remainingStack.getCount() != previousCount) { inWorldInteractionBlockEntity.inventoryChanged(); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/SpiritInstillerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/SpiritInstillerBlockEntity.java index c1d69ff7fa..b8211efe86 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/SpiritInstillerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/SpiritInstillerBlockEntity.java @@ -19,6 +19,7 @@ import net.minecraft.server.level.*; import net.minecraft.sounds.*; import net.minecraft.util.*; +import net.minecraft.world.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; @@ -27,10 +28,11 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; +import org.jspecify.annotations.*; import java.util.*; -public class SpiritInstillerBlockEntity extends InWorldInteractionBlockEntity implements MultiblockCrafter { +public class SpiritInstillerBlockEntity extends InWorldInteractionBlockEntity implements MultiblockCrafter, WorldlyContainer { private static final FlowAnimator.Factory FACTORY; private static final KeyFrame platformPos = (tickDelta, time) -> (float) (Math.sin((time + tickDelta + 15) / 23) + 6F) * 2F; @@ -534,4 +536,19 @@ public void inventoryChanged() { FACTORY = builder.build(); } + + @Override + public int[] getSlotsForFace(Direction side) { + return new int[]{0}; + } + + @Override + public boolean canPlaceItemThroughFace(int index, ItemStack itemStack, @Nullable Direction direction) { + return true; + } + + @Override + public boolean canTakeItemThroughFace(int index, ItemStack stack, Direction direction) { + return true; + } } diff --git a/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java b/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java index 561db93cb9..ceb8e8708e 100644 --- a/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java +++ b/src/main/java/de/dafuqs/spectrum/capabilities/SpectrumCapabilities.java @@ -25,7 +25,7 @@ public static void register(RegisterCapabilitiesEvent event) { // ItemHandler.BLOCK event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, SpectrumBlockEntities.FUSION_SHRINE.get(), (FusionShrineBlockEntity blockEntity, Direction direction) -> new InvWrapper(blockEntity));; event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, SpectrumBlockEntities.PEDESTAL.get(), (PedestalBlockEntity blockEntity, Direction direction) -> new SidedInvWrapper(blockEntity, direction)); - event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, SpectrumBlockEntities.SPIRIT_INSTILLER.get(), (SpiritInstillerBlockEntity blockEntity, Direction direction) -> new InvWrapper(blockEntity)); + event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, SpectrumBlockEntities.SPIRIT_INSTILLER.get(), (SpiritInstillerBlockEntity blockEntity, Direction direction) -> new SidedInvWrapper(blockEntity, direction)); event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, SpectrumBlockEntities.ENCHANTER.get(), (EnchanterBlockEntity blockEntity, Direction direction) -> new SidedInvWrapper(blockEntity, direction)); event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, SpectrumBlockEntities.CINDERHEARTH.get(), (CinderhearthBlockEntity blockEntity, Direction direction) -> new SidedInvWrapper(blockEntity, direction)); event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, SpectrumBlockEntities.CRYSTALLARIEUM.get(), (CrystallarieumBlockEntity blockEntity, Direction direction) -> new InvWrapper(blockEntity)); From 9317d38e5000b3d8bd4604e3d4ca8befcf6d65fb Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 18:40:53 +0200 Subject: [PATCH 109/477] fixed crash with citrine glass arrows fired from dispensers --- .../spectrum/entity/entity/GlassArrowEntity.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/GlassArrowEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/GlassArrowEntity.java index 09d9e542f2..89f082aa71 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/GlassArrowEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/GlassArrowEntity.java @@ -156,10 +156,20 @@ public GlassArrowVariant getVariant() { return this.entityData.get(VARIANT); } + // Null when shot from a dispenser + @Override + public @Nullable ItemStack getWeaponItem() { + return super.getWeaponItem(); + } + @Override protected void doKnockback(LivingEntity target, DamageSource source) { double punch = getVariant() == GlassArrowVariant.CITRINE ? 5 : 0; - punch += this.level() instanceof ServerLevel serverWorld ? EnchantmentHelper.modifyKnockback(serverWorld, getWeaponItem(), target, source, 0.0F) : 0.0F; + if(this.level() instanceof ServerLevel serverWorld) { + ItemStack weapon = getWeaponItem(); + punch += weapon != null ? EnchantmentHelper.modifyKnockback(serverWorld, weapon, target, source, 0.0F) : 0.0F; + } + if (punch > 0.0) { double e = Math.max(0.0, 1.0 - target.getAttributeValue(Attributes.KNOCKBACK_RESISTANCE)); Vec3 vec3d = this.getDeltaMovement().multiply(1.0, 0.0, 1.0).normalize().scale(punch * 0.6 * e); From 09023e157153423f96846abbbaf4621e34dd192e Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 18:51:04 +0200 Subject: [PATCH 110/477] curse of the void can be crafted without visiting the end (like end skip) --- .../advancement/unlocks/enchantments/voiding_crafting.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/resources/data/spectrum/advancement/unlocks/enchantments/voiding_crafting.json b/src/main/resources/data/spectrum/advancement/unlocks/enchantments/voiding_crafting.json index b6c860426b..680561b6e9 100644 --- a/src/main/resources/data/spectrum/advancement/unlocks/enchantments/voiding_crafting.json +++ b/src/main/resources/data/spectrum/advancement/unlocks/enchantments/voiding_crafting.json @@ -6,12 +6,6 @@ "advancement_identifier": "spectrum:midgame/build_enchanting_structure" } }, - "entered_end": { - "trigger": "revelationary:advancement_gotten", - "conditions": { - "advancement_identifier": "minecraft:end/root" - } - }, "has_chorus_flower": { "trigger": "minecraft:inventory_changed", "conditions": { From cc43b72b095abfebac5171c756e91f63d94a7783 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 18:51:20 +0200 Subject: [PATCH 111/477] quitoxic tweaks --- .../dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java | 2 +- .../data/spectrum/tags/block/quitoxic_reeds_plantable.json | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java index f3c5bbe97a..bf0f70da5f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java @@ -163,7 +163,7 @@ public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random BlockState replacement = switch (loggingState) { case FluidLogging.State.LIQUID_CRYSTAL -> SpectrumBlocks.SLUSH.get().defaultBlockState(); case FluidLogging.State.DRAGONROT -> SpectrumBlocks.ROTTEN_GROUND.get().defaultBlockState(); - default -> Blocks.CLAY.defaultBlockState(); + default -> Blocks.COARSE_DIRT.defaultBlockState(); }; world.setBlockAndUpdate(posToConsumeBlock.get(), replacement); world.playSound(null, posToConsumeBlock.get(), SoundEvents.GRAVEL_BREAK, SoundSource.BLOCKS, 1.0F, 1.0F); diff --git a/src/main/resources/data/spectrum/tags/block/quitoxic_reeds_plantable.json b/src/main/resources/data/spectrum/tags/block/quitoxic_reeds_plantable.json index d0d3a85b88..d65bbd7e67 100644 --- a/src/main/resources/data/spectrum/tags/block/quitoxic_reeds_plantable.json +++ b/src/main/resources/data/spectrum/tags/block/quitoxic_reeds_plantable.json @@ -1,6 +1,8 @@ { "values": [ "#spectrum:quitoxic_reeds_consumable", + "minecraft:coarse_dirt" "spectrum:slush" + "spectrum:rotten_ground" ] } \ No newline at end of file From 68a35d5a363d3d3ac838d3a0a49d92bb6864244e Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 18:53:10 +0200 Subject: [PATCH 112/477] fixed primordial fire sometimes continuing burning forever after entering water --- .../spectrum/attachment_types/PrimordialFireAttachmentType.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/de/dafuqs/spectrum/attachment_types/PrimordialFireAttachmentType.java b/src/main/java/de/dafuqs/spectrum/attachment_types/PrimordialFireAttachmentType.java index f02b82f4fc..f56b780b9f 100644 --- a/src/main/java/de/dafuqs/spectrum/attachment_types/PrimordialFireAttachmentType.java +++ b/src/main/java/de/dafuqs/spectrum/attachment_types/PrimordialFireAttachmentType.java @@ -122,6 +122,7 @@ protected static void serverTick(LivingEntity entity, long primordialFireTicks) } primordialFireTicks -= entity.getFluidHeight(FluidTags.WATER) > 0 ? 3 : 1; + primordialFireTicks = Math.max(0, primordialFireTicks); entity.setData(ATTACHMENT_TYPE, primordialFireTicks); // was on fire, but is not any longer From 0ec051b4f988b981faf3b32d576a000d324500eb Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 18:54:33 +0200 Subject: [PATCH 113/477] fixed 'collect dragon head using treasure hunter' advancement not triggering --- .../collect_ender_dragon_head_using_treasure_hunter.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/data/spectrum/advancement/midgame/collect_ender_dragon_head_using_treasure_hunter.json b/src/main/resources/data/spectrum/advancement/midgame/collect_ender_dragon_head_using_treasure_hunter.json index 4c622c4d82..b8d669fd85 100644 --- a/src/main/resources/data/spectrum/advancement/midgame/collect_ender_dragon_head_using_treasure_hunter.json +++ b/src/main/resources/data/spectrum/advancement/midgame/collect_ender_dragon_head_using_treasure_hunter.json @@ -16,7 +16,7 @@ "trigger": "spectrum:loot_function_trigger", "conditions": { "tags": [ - "spectrum:dragon_head" + "minecraft:dragon_head" ] } }, From 677c3acb1dc9b0578a14fdb3047c610fd772555f Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 19:19:09 +0200 Subject: [PATCH 114/477] bottomless bundle dupe fix --- .../bottomless_bundle/BottomlessItemHandler.java | 13 +++++++------ .../dafuqs/spectrum/mixin/PlayerInventoryMixin.java | 6 +++++- .../tags/block/quitoxic_reeds_plantable.json | 4 ++-- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessItemHandler.java b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessItemHandler.java index 44a5ae1d3d..9fbc3bf288 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessItemHandler.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessItemHandler.java @@ -53,10 +53,7 @@ private long insert(ItemStack insertedVariant, long maxAmount, boolean simulate) long space = capacity - this.count; if (!deletesOverflow && space <= 0L) return 0L; long toInsert = Math.min(space, maxAmount); - if (this.variant.isEmpty()) { - // Lock template to one copy of the item - this.variant = insertedVariant.copyWithCount(1); - } + this.variant = insertedVariant.copyWithCount(1); if(!simulate) { this.count += toInsert; } @@ -128,8 +125,12 @@ public boolean isItemValid(int slot, ItemStack toInsert) { if (toInsert.isEmpty()) return false; if (!toInsert.canFitInsideContainerItems()) return false; - if (!this.locked()) { - if (this.isEmpty()) return true; + if(this.locked()) { + return ItemStack.isSameItemSameComponents(this.variant, toInsert); + } else { + if(this.isEmpty()) { + return true; + } } return ItemStack.isSameItemSameComponents(this.variant, toInsert); } diff --git a/src/main/java/de/dafuqs/spectrum/mixin/PlayerInventoryMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/PlayerInventoryMixin.java index bcbce20e44..56f87938af 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/PlayerInventoryMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/PlayerInventoryMixin.java @@ -44,9 +44,13 @@ private void offer(ItemStack stack, boolean notifiesClient, CallbackInfo ci) { IItemHandler itemHandler = inventoryStack.getCapability(Capabilities.ItemHandler.ITEM); if(itemHandler != null) { - if(!itemHandler.isItemValid(0, stackToAdd)) { + // This is a very Bottomless Bundle specific check + // but that is the only item with the 'stores items' tag + ItemStack firstStack = itemHandler.getStackInSlot(0); + if(firstStack.isEmpty() || !ItemStack.isSameItemSameComponents(firstStack, stackToAdd)) { continue; } + ItemStack remainder = itemHandler.insertItem(i, stackToAdd, false); stackToAdd.setCount(remainder.getCount()); if (remainder.isEmpty()) { diff --git a/src/main/resources/data/spectrum/tags/block/quitoxic_reeds_plantable.json b/src/main/resources/data/spectrum/tags/block/quitoxic_reeds_plantable.json index d65bbd7e67..ac33506c57 100644 --- a/src/main/resources/data/spectrum/tags/block/quitoxic_reeds_plantable.json +++ b/src/main/resources/data/spectrum/tags/block/quitoxic_reeds_plantable.json @@ -1,8 +1,8 @@ { "values": [ "#spectrum:quitoxic_reeds_consumable", - "minecraft:coarse_dirt" - "spectrum:slush" + "minecraft:coarse_dirt", + "spectrum:slush", "spectrum:rotten_ground" ] } \ No newline at end of file From d1071cf13a98a4a2cffb19b3cef17af105d7b54a Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 19:34:37 +0200 Subject: [PATCH 115/477] invalidate spirit instiller recipes when craft is finished --- .../SpiritInstillerBlockEntity.java | 69 +++++++++++-------- 1 file changed, 39 insertions(+), 30 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/SpiritInstillerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/SpiritInstillerBlockEntity.java index b8211efe86..674246fecd 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/SpiritInstillerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/SpiritInstillerBlockEntity.java @@ -48,15 +48,15 @@ public class SpiritInstillerBlockEntity extends InWorldInteractionBlockEntity im }}; private boolean inventoryChanged; - private UUID ownerUUID; - private UpgradeHolder upgrades; + private @Nullable UUID ownerUUID; + private @Nullable UpgradeHolder upgrades; private Rotation multiblockRotation = Rotation.NONE; - private RecipeHolder currentRecipe; + private @Nullable RecipeHolder currentRecipe; private int craftingTime; private int craftingTimeTotal; private boolean validStructure; - protected FlowAnimator animator; + protected @Nullable FlowAnimator animator; protected FlowData _platformY = FlowData.NULL(), _haloY = FlowData.NULL(), _platformSpin = FlowData.NULL(), _haloSpin = FlowData.NULL(), _haloAlpha = FlowData.NULL(), _blossomAlpha = FlowData.NULL(); @@ -158,41 +158,50 @@ public static void serverTick(Level world, BlockPos blockPos, BlockState blockSt } private static void calculateCurrentRecipe(Level world, SpiritInstillerBlockEntity spiritInstillerBlockEntity) { + ItemStack instillerStack = spiritInstillerBlockEntity.getItem(SpiritInstillerRecipe.CENTER_INGREDIENT); + if (instillerStack.isEmpty()) { + spiritInstillerBlockEntity.craftingTime = 0; + spiritInstillerBlockEntity.currentRecipe = null; + spiritInstillerBlockEntity.updateInClientWorld(); + return; + } + + // fetch item bowl stacks + spiritInstillerBlockEntity.setItem(SpiritInstillerRecipe.CENTER_INGREDIENT, instillerStack); + + // left item bowl + if (world.getBlockEntity(getItemBowlPos(spiritInstillerBlockEntity, false)) instanceof ItemBowlBlockEntity itemBowlBlockEntity) { + spiritInstillerBlockEntity.setItem(SpiritInstillerRecipe.FIRST_INGREDIENT, itemBowlBlockEntity.getItem(0)); + } else { + spiritInstillerBlockEntity.setItem(SpiritInstillerRecipe.FIRST_INGREDIENT, ItemStack.EMPTY); + } + // right item bowl + if (world.getBlockEntity(getItemBowlPos(spiritInstillerBlockEntity, true)) instanceof ItemBowlBlockEntity itemBowlBlockEntity) { + spiritInstillerBlockEntity.setItem(SpiritInstillerRecipe.SECOND_INGREDIENT, itemBowlBlockEntity.getItem(0)); + } else { + spiritInstillerBlockEntity.setItem(SpiritInstillerRecipe.SECOND_INGREDIENT, ItemStack.EMPTY); + } + // test the cached recipe => faster if (spiritInstillerBlockEntity.currentRecipe != null && !spiritInstillerBlockEntity.isEmpty()) { if (spiritInstillerBlockEntity.currentRecipe.value().matches(spiritInstillerBlockEntity.getRecipeInput(), world)) { + spiritInstillerBlockEntity.updateInClientWorld(); return; } } - // cached recipe did not match => calculate new - spiritInstillerBlockEntity.craftingTime = 0; - spiritInstillerBlockEntity.currentRecipe = null; - - ItemStack instillerStack = spiritInstillerBlockEntity.getItem(SpiritInstillerRecipe.CENTER_INGREDIENT); - if (!instillerStack.isEmpty()) { - spiritInstillerBlockEntity.setItem(SpiritInstillerRecipe.CENTER_INGREDIENT, instillerStack); - - // left item bowl - if (world.getBlockEntity(getItemBowlPos(spiritInstillerBlockEntity, false)) instanceof ItemBowlBlockEntity itemBowlBlockEntity) { - spiritInstillerBlockEntity.setItem(SpiritInstillerRecipe.FIRST_INGREDIENT, itemBowlBlockEntity.getItem(0)); - } else { - spiritInstillerBlockEntity.setItem(SpiritInstillerRecipe.FIRST_INGREDIENT, ItemStack.EMPTY); - } - // right item bowl - if (world.getBlockEntity(getItemBowlPos(spiritInstillerBlockEntity, true)) instanceof ItemBowlBlockEntity itemBowlBlockEntity) { - spiritInstillerBlockEntity.setItem(SpiritInstillerRecipe.SECOND_INGREDIENT, itemBowlBlockEntity.getItem(0)); - } else { - spiritInstillerBlockEntity.setItem(SpiritInstillerRecipe.SECOND_INGREDIENT, ItemStack.EMPTY); - } - - RecipeHolder spiritInstillerRecipe = world.getRecipeManager().getRecipeFor(SpectrumRecipeTypes.SPIRIT_INSTILLING, spiritInstillerBlockEntity.getRecipeInput(), world).orElse(null); - if (spiritInstillerRecipe != null) { - spiritInstillerBlockEntity.currentRecipe = spiritInstillerRecipe; - spiritInstillerBlockEntity.craftingTimeTotal = (int) Math.ceil(spiritInstillerRecipe.value().getCraftingTime() / spiritInstillerBlockEntity.upgrades.getEffectiveValue(Upgradeable.UpgradeType.SPEED)); - } + // dies abitger recipe match? + RecipeHolder spiritInstillerRecipe = world.getRecipeManager().getRecipeFor(SpectrumRecipeTypes.SPIRIT_INSTILLING, spiritInstillerBlockEntity.getRecipeInput(), world).orElse(null); + if (spiritInstillerRecipe != null) { + spiritInstillerBlockEntity.currentRecipe = spiritInstillerRecipe; + spiritInstillerBlockEntity.craftingTimeTotal = (int) Math.ceil(spiritInstillerRecipe.value().getCraftingTime() / spiritInstillerBlockEntity.upgrades.getEffectiveValue(Upgradeable.UpgradeType.SPEED)); + spiritInstillerBlockEntity.updateInClientWorld(); + return; } + // no matching recipe found + spiritInstillerBlockEntity.craftingTime = 0; + spiritInstillerBlockEntity.currentRecipe = null; spiritInstillerBlockEntity.updateInClientWorld(); } From 007180e72c651ed843e90aef21dd3c2fa0dea7b0 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 19:45:36 +0200 Subject: [PATCH 116/477] - fix eternal slumber not being eternal - erasers not being immune to deadly poison - the special divinity status effect border not being applied --- .../java/de/dafuqs/spectrum/entity/entity/EraserEntity.java | 2 +- .../java/de/dafuqs/spectrum/helpers/MobEffectHelper.java | 4 ++-- .../items/trinkets/AetherGracedNectarGlovesItem.java | 2 +- .../java/de/dafuqs/spectrum/mixin/LivingEntityMixin.java | 6 ++++-- .../de/dafuqs/spectrum/mixin/StatusEffectUtilMixin.java | 4 ++-- .../java/de/dafuqs/spectrum/mob_effect/SleepMobEffect.java | 2 +- .../dafuqs/spectrum/registries/SpectrumEventListeners.java | 2 +- 7 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/EraserEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/EraserEntity.java index 48d3b755c6..2ffe4e8cfa 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/EraserEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/EraserEntity.java @@ -81,7 +81,7 @@ protected void playStepSound(BlockPos pos, BlockState state) { @Override public boolean canBeAffected(MobEffectInstance effect) { - return super.canBeAffected(effect) && effect.getEffect() != SpectrumMobEffects.DEADLY_POISON; + return super.canBeAffected(effect) && !effect.getEffect().is(SpectrumMobEffects.DEADLY_POISON); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/helpers/MobEffectHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/MobEffectHelper.java index bfa8618cb1..b9d453871c 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/MobEffectHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/MobEffectHelper.java @@ -105,9 +105,9 @@ public ResourceLocation get(RenderType type) { private static final StatusEffectBackground NIGHT_ALCHEMY = new StatusEffectBackground("night_alchemy"); public static ResourceLocation getTextureLocation(ResourceLocation original, MobEffectInstance effect, RenderType renderType) { - var type = effect.getEffect(); + Holder type = effect.getEffect(); - if (type == SpectrumMobEffects.DIVINITY) + if (type.is(SpectrumMobEffects.DIVINITY)) return DIVINITY.get(renderType); if (type.is(SpectrumMobEffectTags.NIGHT_ALCHEMY)) diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/AetherGracedNectarGlovesItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/AetherGracedNectarGlovesItem.java index 460b1e569b..b594ce2d2c 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/AetherGracedNectarGlovesItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/AetherGracedNectarGlovesItem.java @@ -53,7 +53,7 @@ public static boolean testEffectFor(LivingEntity entity, Holder effec if (effect.is(SpectrumMobEffectTags.BYPASSES_NECTAR_GLOVES)) return false; - return hasEquipped(entity, SpectrumItems.AETHER_GRACED_NECTAR_GLOVES.get()) && (effect.value().getCategory() == MobEffectCategory.HARMFUL || effect == SpectrumMobEffects.FRENZY); + return hasEquipped(entity, SpectrumItems.AETHER_GRACED_NECTAR_GLOVES.get()) && (effect.value().getCategory() == MobEffectCategory.HARMFUL || effect.is(SpectrumMobEffects.FRENZY)); } public static boolean tryBlockEffect(LivingEntity entity, int cost) { diff --git a/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityMixin.java index d01355d377..eba51849bb 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityMixin.java @@ -306,6 +306,7 @@ public abstract class LivingEntityMixin { return false; } + // TODO: move to event @Inject(method = "addEffect(Lnet/minecraft/world/effect/MobEffectInstance;Lnet/minecraft/world/entity/Entity;)Z", at = @At("HEAD"), cancellable = true) private void spectrum$addEffect(MobEffectInstance effect, Entity source, CallbackInfoReturnable cir) { @@ -332,13 +333,13 @@ public abstract class LivingEntityMixin { } float resistanceModifier = Mth.clamp(SleepMobEffect.getSleepResistance(effect, entity), 0.1F, 10F); - if (effectType == SpectrumMobEffects.ETERNAL_SLUMBER) { + if (effectType.is(SpectrumMobEffects.ETERNAL_SLUMBER)) { if (SleepMobEffect.isImmuneish(entity)) { effect.spectrum$setDuration(Math.round(effect.getDuration() / resistanceModifier)); } else if (!entity.getType().is(SpectrumEntityTypeTags.SLEEP_RESISTANT)) { effect.spectrum$setDuration(MobEffectInstance.INFINITE_DURATION); } - } else if (effectType == SpectrumMobEffects.FATAL_SLUMBER) { + } else if (effectType.is(SpectrumMobEffects.FATAL_SLUMBER)) { if (SleepMobEffect.isImmuneish(entity) && entity.getType().is(Tags.EntityTypes.BOSSES)) { effect.spectrum$setDuration(20 * 60); } else { @@ -346,6 +347,7 @@ public abstract class LivingEntityMixin { } } } + // TODO: move to event @Inject(method = "hurt", at = @At("HEAD"), cancellable = true) private void spectrum$applyBonusDamage(DamageSource source, float amount, CallbackInfoReturnable cir) { diff --git a/src/main/java/de/dafuqs/spectrum/mixin/StatusEffectUtilMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/StatusEffectUtilMixin.java index 287c99ec3b..72e283da72 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/StatusEffectUtilMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/StatusEffectUtilMixin.java @@ -14,7 +14,7 @@ public class StatusEffectUtilMixin { @WrapOperation(method = "formatDuration", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/chat/Component;literal(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;")) private static MutableComponent spectrum$modifyDurationText(String string, Operation original, @Local int i, @Local(argsOnly = true) MobEffectInstance effect, @Local(argsOnly = true, ordinal = 0) float multiplier, @Local(argsOnly = true, ordinal = 1) float tickRate) { - if (effect.getEffect() == SpectrumMobEffects.ETERNAL_SLUMBER) { + if (effect.getEffect().is(SpectrumMobEffects.ETERNAL_SLUMBER)) { return Component.translatable("effect.spectrum.eternal_slumber.duration", StringUtil.formatTickDuration(i, tickRate)); } return original.call(string); @@ -22,7 +22,7 @@ public class StatusEffectUtilMixin { @WrapOperation(method = "formatDuration", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/chat/Component;translatable(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;")) private static MutableComponent spectrum$modifyDurationTextInfinite(String string, Operation original, @Local(argsOnly = true) MobEffectInstance effect) { - if (effect.getEffect() == SpectrumMobEffects.ETERNAL_SLUMBER) { + if (effect.getEffect().is(SpectrumMobEffects.ETERNAL_SLUMBER)) { return Component.translatable("effect.spectrum.eternal_slumber.duration_inf"); } return original.call(string); diff --git a/src/main/java/de/dafuqs/spectrum/mob_effect/SleepMobEffect.java b/src/main/java/de/dafuqs/spectrum/mob_effect/SleepMobEffect.java index caf7f2abb9..df3e56d97d 100644 --- a/src/main/java/de/dafuqs/spectrum/mob_effect/SleepMobEffect.java +++ b/src/main/java/de/dafuqs/spectrum/mob_effect/SleepMobEffect.java @@ -103,7 +103,7 @@ private static boolean isConstruct(EntityType type) { public void fillEffectCures(Set cures, MobEffectInstance effectInstance) { Holder holder = effectInstance.getEffect(); - if (holder.equals(SpectrumMobEffects.SOMNOLENCE) || holder.equals(SpectrumMobEffects.CALMING)) { + if (holder.is(SpectrumMobEffects.SOMNOLENCE) || holder.is(SpectrumMobEffects.CALMING)) { cures.add(SpectrumEffectCures.SEDATIVES); } } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index e8918ba466..ca4185b4b1 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -139,7 +139,7 @@ public static void resetColorProviders(TagsUpdatedEvent event) { @SubscribeEvent public static void fatalSlumberKill(MobEffectEvent.Expired event) { MobEffectInstance effectInstance = event.getEffectInstance(); - if (effectInstance.getEffect().value() == SpectrumMobEffects.FATAL_SLUMBER.value()) { + if (effectInstance.getEffect().is(SpectrumMobEffects.FATAL_SLUMBER)) { LivingEntity entity = event.getEntity(); if (entity.level().isClientSide()) From 7df4bf8175771afce4f88d82d0e751f27ac55af6 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 19:57:21 +0200 Subject: [PATCH 117/477] Fixed crash when omni accelerating endermen with damaging projectiles --- .../spectrum/api/interaction/ItemProjectileBehavior.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/api/interaction/ItemProjectileBehavior.java b/src/main/java/de/dafuqs/spectrum/api/interaction/ItemProjectileBehavior.java index 1072eac861..e97e22daec 100644 --- a/src/main/java/de/dafuqs/spectrum/api/interaction/ItemProjectileBehavior.java +++ b/src/main/java/de/dafuqs/spectrum/api/interaction/ItemProjectileBehavior.java @@ -178,14 +178,14 @@ public ItemStack onEntityHit(ItemProjectileEntity projectile, ItemStack stack, E livingOwner.setLastHurtMob(target); } - if (dealDamage(projectile, owner, target)) { + if (dealDamage(projectile, owner, target) && target.getType() != EntityType.ENDERMAN) { int targetFireTicks = target.getRemainingFireTicks(); if (projectile.isOnFire()) { target.setRemainingFireTicks(targetFireTicks); } if (target instanceof LivingEntity livingTarget) { - if (owner.level() instanceof ServerLevel serverWorld) { + if (owner.level() instanceof ServerLevel serverWorld && livingTarget.getLastDamageSource() != null) { EnchantmentHelper.doPostAttackEffectsWithItemSource(serverWorld, target, livingTarget.getLastDamageSource(), stack); } if (target != owner && target instanceof Player && owner instanceof ServerPlayer serverPlayerOwner && !projectile.isSilent()) { From 1a4e4b374c897f2b0f5638e418cdc8a0d5aaedf7 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 20:07:35 +0200 Subject: [PATCH 118/477] fix preservation hint entry formatting --- src/main/resources/assets/spectrum/lang/en_us.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 4fa1980ce9..d2667fcf15 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -2821,7 +2821,7 @@ "book.spectrum.guidebook.ideas.preservation_ruins.page0.text": "A villager told me they found different types of structures made from unbreakable stone hidden near the upper Deepslate layer in the Overworld in every biome.", "book.spectrum.guidebook.ideas.preservation_ruins.page1.text": "The entrance seems to be blocked by a powerful force field. However, whoever built it was kind enough to leave me some clues! The hearts on the sides of the force field indicate that I need to have [#](2c2e8e)Azure Dike[#]() active.", "book.spectrum.guidebook.ideas.preservation_ruins.page1.title": "Blue Hearts", - "book.spectrum.guidebook.ideas.preservation_ruins.page2.text": "The Colored Spore Blossoms on the ceiling and the engravings on the walls behind them hint at the solution. The powder engraving hints at $(l:general/color_mixing)the mixing of Gemstone Powder$() I figured out earlier.", + "book.spectrum.guidebook.ideas.preservation_ruins.page2.text": "The Colored Spore Blossoms on the ceiling and the engravings on the walls behind them hint at the solution. The powder engraving hints at [the mixing of Gemstone Powder](entry://general/color_mixing_cmy) I figured out earlier.", "book.spectrum.guidebook.ideas.preservation_ruins.page2.title": "Colored Spore Blossoms", "book.spectrum.guidebook.ideas.preservation_ruins.page3.text": "Is there a way to crack the Bedrock?\\\nOnce I am inside, it is best to look at the relevant pages in my book for the blocks I find there.", "book.spectrum.guidebook.ideas.preservation_ruins.page3.title": "Bedrock Seal", From 9cef314d9f7c06b8d2df5eb2bfd821f1471aba97 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 20:14:03 +0200 Subject: [PATCH 119/477] do not hint at the rgb fusion recipe (troll recipe). The copper is now extra shiny, though --- src/main/resources/assets/spectrum/lang/en_us.json | 1 - src/main/resources/assets/spectrum/lang/ko_kr.json | 1 - src/main/resources/assets/spectrum/lang/ru_ru.json | 5 ++--- src/main/resources/assets/spectrum/lang/zh_cn.json | 1 - .../data/spectrum/recipe/fusion_shrine/no_rgb.json | 6 +++++- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index d2667fcf15..3659829065 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -5117,7 +5117,6 @@ "multiblock.spectrum.alloy_forgery.pyrite_alloy_forge": "Pyrite Alloy Forge", "multiblock.spectrum.alloy_forgery.shale_clay_alloy_forge": "Shale Clay Alloy Forge", - "recipe.spectrum.fusion_shrine.no_rgb.hint": "Ditch your CMYK ways", "recipe.spectrum.liquid_crystal.liquid_crystal_converting.hint": "", "recipe.spectrum.pedestal.tier1.food.salted_jaramel_tart.hint": "A very salty tart", "recipe.spectrum.pedestal.tier1.food.salted_jaramel_trifle.hint": "A very salty trifle", diff --git a/src/main/resources/assets/spectrum/lang/ko_kr.json b/src/main/resources/assets/spectrum/lang/ko_kr.json index 1da21cd3d6..6a540d8578 100644 --- a/src/main/resources/assets/spectrum/lang/ko_kr.json +++ b/src/main/resources/assets/spectrum/lang/ko_kr.json @@ -5115,7 +5115,6 @@ "multiblock.spectrum.alloy_forgery.pyrite_alloy_forge": "황철석 합금 용광로", "multiblock.spectrum.alloy_forgery.shale_clay_alloy_forge": "셰일 점토 합금 용광로", - "recipe.spectrum.fusion_shrine.no_rgb.hint": "CMYK 방식에서 벗어나세요", "recipe.spectrum.liquid_crystal.liquid_crystal_converting.hint": "", "recipe.spectrum.pedestal.tier1.food.salted_jaramel_tart.hint": "아주 짠 타르트", "recipe.spectrum.pedestal.tier1.food.salted_jaramel_trifle.hint": "아주 짠 트라이플", diff --git a/src/main/resources/assets/spectrum/lang/ru_ru.json b/src/main/resources/assets/spectrum/lang/ru_ru.json index 46943fae6b..637d6a91f4 100644 --- a/src/main/resources/assets/spectrum/lang/ru_ru.json +++ b/src/main/resources/assets/spectrum/lang/ru_ru.json @@ -5111,9 +5111,8 @@ "multiblock.spectrum.alloy_forgery.bone_ash_alloy_forge": "Костяная кузня", "multiblock.spectrum.alloy_forgery.calcite_alloy_forge": "Кальцитовая кузня", "multiblock.spectrum.alloy_forgery.pyrite_alloy_forge": "Пиритовая кузня", - "multiblock.spectrum.alloy_forgery.shale_clay_alloy_forge": "Глиносланцевая кузня", - - "recipe.spectrum.fusion_shrine.no_rgb.hint": "Откажитесь от своих методов CMYK", + "multiblock.spectrum.alloy_forgery.shale_clay_alloy_forge": "Глиносланцевая кузня", + "recipe.spectrum.liquid_crystal.liquid_crystal_converting.hint": "", "recipe.spectrum.pedestal.tier1.food.salted_jaramel_tart.hint": "Очень солёный пирог", "recipe.spectrum.pedestal.tier1.food.salted_jaramel_trifle.hint": "Очень солёный трайфл", diff --git a/src/main/resources/assets/spectrum/lang/zh_cn.json b/src/main/resources/assets/spectrum/lang/zh_cn.json index 97ae325981..d33a25cc8e 100644 --- a/src/main/resources/assets/spectrum/lang/zh_cn.json +++ b/src/main/resources/assets/spectrum/lang/zh_cn.json @@ -2443,7 +2443,6 @@ "gui.spectrum.quick_navigation.controls1": "使用移动键来移动", "gui.spectrum.quick_navigation.controls2": "使用丢弃/背包键进行选择", - "recipe.spectrum.fusion_shrine.no_rgb.hint": "抛弃你的 CMYK 合成方式", "recipe.spectrum.liquid_crystal.liquid_crystal_converting.hint": "", "recipe.spectrum.pedestal.tier1.food.salted_jaramel_tart.hint": "齁咸的蛋挞", "recipe.spectrum.pedestal.tier1.food.salted_jaramel_trifle.hint": "齁咸的松糕", diff --git a/src/main/resources/data/spectrum/recipe/fusion_shrine/no_rgb.json b/src/main/resources/data/spectrum/recipe/fusion_shrine/no_rgb.json index b1411918b0..54556a94b7 100644 --- a/src/main/resources/data/spectrum/recipe/fusion_shrine/no_rgb.json +++ b/src/main/resources/data/spectrum/recipe/fusion_shrine/no_rgb.json @@ -12,7 +12,11 @@ "spectrum:pure_bloodstone" ], "result": { - "id": "minecraft:raw_copper" + "id": "minecraft:raw_copper", + "components": { + "minecraft:enchantment_glint_override": true, + "minecraft:rarity": "epic" + } }, "start_crafting_effect": "nothing", "during_crafting_effects": [ From 6cc6ddee7086b862eb87a0810bac57f4691e3404 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 20:48:27 +0200 Subject: [PATCH 120/477] arcane charges are encahntable with steadfast (so they do not burn in lava) --- .../data/spectrum/tags/enchantment/on_arcane_charges.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/resources/data/spectrum/tags/enchantment/on_arcane_charges.json b/src/main/resources/data/spectrum/tags/enchantment/on_arcane_charges.json index 007e728bcb..2777470718 100644 --- a/src/main/resources/data/spectrum/tags/enchantment/on_arcane_charges.json +++ b/src/main/resources/data/spectrum/tags/enchantment/on_arcane_charges.json @@ -14,6 +14,7 @@ "spectrum:treasure_hunter", "spectrum:pest_control", "spectrum:disarming", - "spectrum:voiding" + "spectrum:voiding", + "spectrum:steadfast" ] } \ No newline at end of file From f7c1f01abf9c8d406557ab8b39ca88449d2a34a3 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sat, 1 Aug 2026 21:00:59 +0200 Subject: [PATCH 121/477] Radiance Staff & Bedrock Shears are now enchantable in the Enchanter --- .../spectrum/commands/SanityCommand.java | 25 +++++++++++++++++++ .../spectrum/config/SpectrumConfig.java | 2 +- .../items/magic_items/RadianceStaffItem.java | 6 +++++ .../items/tools/BedrockShearsItem.java | 6 +++++ 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/commands/SanityCommand.java b/src/main/java/de/dafuqs/spectrum/commands/SanityCommand.java index 54d09642ae..12f4f0a5b2 100644 --- a/src/main/java/de/dafuqs/spectrum/commands/SanityCommand.java +++ b/src/main/java/de/dafuqs/spectrum/commands/SanityCommand.java @@ -269,6 +269,31 @@ private static int execute(CommandSourceStack source, String modId) { testIngredientsAndOutputInColorRegistry(SpectrumRecipeTypes.ENCHANTMENT_UPGRADE, "Enchantment Upgrade", recipeManager, registryManager); testIngredientsAndOutputInColorRegistry(SpectrumRecipeTypes.SPIRIT_INSTILLING, "Spirit Instiller", recipeManager, registryManager); + // Items that are meant to be enchantable but not really + for (Map.Entry, Item> item : BuiltInRegistries.ITEM.entrySet()) { + if (!item.getKey().location().getNamespace().equals(modId)) { + continue; + } + + Item i = item.getValue(); + + ItemStack defaultStack = i.getDefaultInstance(); + boolean isEnchantable = i.isEnchantable(defaultStack); + int enchantmentValue = i.getEnchantmentValue(defaultStack); + if(isEnchantable) { + if(enchantmentValue <= 0) { + SpectrumCommon.logWarning("[SANITY: Enchantability] " + item.getValue().getDescriptionId() + " is enchantable, but has an enchantment value of " + enchantmentValue); + } + } + if(enchantmentValue > 0) { + if(!isEnchantable) { + if(i == SpectrumItems.GILDED_BOOK.get()) { + continue; + } + SpectrumCommon.logWarning("[SANITY: Enchantability] " + item.getValue().getDescriptionId() + " is has a positive enchantment value, but its default instance is not enchantable"); + } + } + } // Impossible to unlock block cloaks for (Map.Entry> cloaks : RevelationRegistry.getBlockStateEntries().entrySet()) { diff --git a/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java b/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java index 70f8749b32..1a1766249d 100644 --- a/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java +++ b/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java @@ -621,7 +621,7 @@ private SpectrumConfig(ModConfigSpec.Builder builder) { NightfallsBladeEnchantability = builder .translation("config.spectrum.nightfalls_blade_enchantability") - .define("nightfalls_blade_enchantability", 0); + .define("nightfalls_blade_enchantability", 1); MaxLevelForEffectsInLesserPotionPendant = builder .translation("config.spectrum.max_level_for_effects_in_lesser_potion_pendant") diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/RadianceStaffItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/RadianceStaffItem.java index a83b114bd0..46fa110b87 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/RadianceStaffItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/RadianceStaffItem.java @@ -8,6 +8,7 @@ import de.dafuqs.spectrum.particle.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; +import net.minecraft.core.component.*; import net.minecraft.network.chat.*; import net.minecraft.server.level.*; import net.minecraft.sounds.*; @@ -188,6 +189,11 @@ public void usage(Level world, ServerPlayer user, ItemStack radianceStaff) { } } } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getMaxStackSize() == 1; + } @Override public int getEnchantmentValue(ItemStack stack) { diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/BedrockShearsItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/BedrockShearsItem.java index 80c5842df0..f859ee17f0 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/BedrockShearsItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/BedrockShearsItem.java @@ -1,6 +1,7 @@ package de.dafuqs.spectrum.items.tools; import de.dafuqs.spectrum.api.item.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.resources.*; import net.minecraft.world.item.*; import net.minecraft.world.item.enchantment.*; @@ -22,4 +23,9 @@ public Map, Integer> getDefaultEnchantments() { public boolean isEnchantable(ItemStack stack) { return true; } + + @Override + public int getEnchantmentValue(ItemStack stack) { + return SpectrumToolTiers.BEDROCK.getEnchantmentValue(); + } } \ No newline at end of file From b52b9ca247dd609c239648125f6cb70c5df62198 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 2 Aug 2026 08:12:01 +0200 Subject: [PATCH 122/477] update mod compat enchant upgrade recipes --- .../create/enchantment_upgrade/capacity.json | 50 +++++++++++++------ .../enchantment_upgrade/potato_recovery.json | 50 +++++++++++++------ .../enchantment_upgrade/backstabbing.json | 42 +++++++++++----- .../malum/enchantment_upgrade/haunted.json | 28 ++++++----- .../malum/enchantment_upgrade/rebound.json | 42 +++++++++++----- .../enchantment_upgrade/replenishing.json | 42 +++++++++++----- .../enchantment_upgrade/spirit_plunder.json | 35 ++++++++----- 7 files changed, 197 insertions(+), 92 deletions(-) diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/enchantment_upgrade/capacity.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/enchantment_upgrade/capacity.json index 8af9fecad0..5b46fabd64 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/enchantment_upgrade/capacity.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/enchantment_upgrade/capacity.json @@ -1,23 +1,41 @@ { + + "type": "spectrum:enchantment_upgrade", + "enchantment": "create:capacity", + "levels": [ + { + "ingredient": { + "item": "spectrum:cyan_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:cyan_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:cyan_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:cyan_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 3200 + } + ], "neoforge:conditions": [ { "type": "neoforge:mod_loaded", "modid": "create" } - ], - - "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:cyan_pigment" - }, - "enchantment": "create:capacity", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 8 - }, - "level_cap": 5, - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_value": 400 - } + ] } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/create/enchantment_upgrade/potato_recovery.json b/src/main/resources/data/spectrum/recipe/mod_integration/create/enchantment_upgrade/potato_recovery.json index bef547a9d4..99da426d9b 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/create/enchantment_upgrade/potato_recovery.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/create/enchantment_upgrade/potato_recovery.json @@ -1,23 +1,41 @@ { + + "type": "spectrum:enchantment_upgrade", + "enchantment": "create:potato_recovery", + "levels": [ + { + "ingredient": { + "item": "spectrum:purple_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:purple_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:purple_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:purple_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 3200 + } + ], "neoforge:conditions": [ { "type": "neoforge:mod_loaded", "modid": "create" } - ], - - "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:purple_pigment" - }, - "enchantment": "create:potato_recovery", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 8 - }, - "level_cap": 5, - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_value": 400 - } + ] } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/enchantment_upgrade/backstabbing.json b/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/enchantment_upgrade/backstabbing.json index f132e8a796..1b232b2c2a 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/enchantment_upgrade/backstabbing.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/farmersdelight/enchantment_upgrade/backstabbing.json @@ -1,18 +1,36 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:red_pigment" - }, "enchantment": "minecraft:sharpness", - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 8 - }, - "level_cap": 5, - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_value": 50 - }, + "levels": [ + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 100 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:red_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + } + ], "neoforge:conditions": [ { "type": "neoforge:mod_loaded", diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/malum/enchantment_upgrade/haunted.json b/src/main/resources/data/spectrum/recipe/mod_integration/malum/enchantment_upgrade/haunted.json index 2f35eb93ef..736fee9b23 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/malum/enchantment_upgrade/haunted.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/malum/enchantment_upgrade/haunted.json @@ -1,18 +1,22 @@ { "type": "spectrum:enchantment_upgrade", - "bulk_item": { - "item": "spectrum:purple_pigment" - }, - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 16 - }, - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_value": 200 - }, "enchantment": "malum:haunted", - "level_cap": 3, + "levels": [ + { + "ingredient": { + "item": "spectrum:purple_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:purple_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + } + ], "required_advancement": "spectrum:unlocks/enchantments/vanilla_damage", "neoforge:conditions": [ { diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/malum/enchantment_upgrade/rebound.json b/src/main/resources/data/spectrum/recipe/mod_integration/malum/enchantment_upgrade/rebound.json index 85f810a512..092541e767 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/malum/enchantment_upgrade/rebound.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/malum/enchantment_upgrade/rebound.json @@ -1,18 +1,36 @@ { "type": "spectrum:enchantment_upgrade", "enchantment": "malum:rebound", - "bulk_item": { - "item": "spectrum:green_pigment" - }, - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 8 - }, - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_value": 100 - }, - "level_cap": 5, + "levels": [ + { + "ingredient": { + "item": "spectrum:green_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 100 + }, + { + "ingredient": { + "item": "spectrum:green_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:green_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:green_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + } + ], "required_advancement": "spectrum:midgame/build_enchanting_structure", "neoforge:conditions": [ { diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/malum/enchantment_upgrade/replenishing.json b/src/main/resources/data/spectrum/recipe/mod_integration/malum/enchantment_upgrade/replenishing.json index 3685ad13aa..0057418c9e 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/malum/enchantment_upgrade/replenishing.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/malum/enchantment_upgrade/replenishing.json @@ -1,18 +1,36 @@ { "type": "spectrum:enchantment_upgrade", "enchantment": "malum:replenishing", - "bulk_item": { - "item": "spectrum:black_pigment" - }, - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 8 - }, - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_value": 400 - }, - "level_cap": 5, + "levels": [ + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 1, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 800 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 1600 + }, + { + "ingredient": { + "item": "spectrum:black_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 3200 + } + ], "required_advancement": "spectrum:mod_integration/malum/replenishing", "neoforge:conditions": [ { diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/malum/enchantment_upgrade/spirit_plunder.json b/src/main/resources/data/spectrum/recipe/mod_integration/malum/enchantment_upgrade/spirit_plunder.json index a4b5929d40..3c0984ba25 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/malum/enchantment_upgrade/spirit_plunder.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/malum/enchantment_upgrade/spirit_plunder.json @@ -1,18 +1,29 @@ { "type": "spectrum:enchantment_upgrade", "enchantment": "malum:spirit_plunder", - "bulk_item": { - "item": "spectrum:light_blue_pigment" - }, - "item_scaling": { - "type": "spectrum:doubling", - "scaling_value": 16 - }, - "xp_scaling": { - "type": "spectrum:doubling", - "scaling_value": 200 - }, - "level_cap": 4, + "levels": [ + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 2, + "experience": 200 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 4, + "experience": 400 + }, + { + "ingredient": { + "item": "spectrum:light_blue_pigment" + }, + "ingredient_count_per_bowl": 8, + "experience": 800 + } + ], "required_advancement": "spectrum:unlocks/enchantments/clovers_favor", "neoforge:conditions": [ { From f58aa29909556de93e8a5d974be55f494df6ed64 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 2 Aug 2026 08:50:47 +0200 Subject: [PATCH 123/477] quitoxic reeds are able to consume the block they are growing on --- .../blocks/conditional/QuitoxicReedsBlock.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java index bf0f70da5f..1c547103e1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/QuitoxicReedsBlock.java @@ -154,7 +154,7 @@ public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random // consume 1 block close to the reed when growing. // if the quitoxic reeds are growing in liquid crystal: 1/4 chance to consume // search for block it could be planted on. 1 block => 1 quitoxic reed - Optional posToConsumeBlock = searchConsumableBlock(world, pos.below(height), SpectrumBlockTags.QUITOXIC_REEDS_CONSUMABLE, random); + Optional posToConsumeBlock = searchConsumableBlock(world, pos.below(height), SpectrumBlockTags.QUITOXIC_REEDS_PLANTABLE, SpectrumBlockTags.QUITOXIC_REEDS_CONSUMABLE, random); if (posToConsumeBlock.isEmpty()) { return; } @@ -182,23 +182,25 @@ public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random } } - private Optional searchConsumableBlock(Level world, BlockPos origin, TagKey searchTag, RandomSource random) { + private Optional searchConsumableBlock(Level world, BlockPos origin, TagKey continueTag, TagKey searchTag, RandomSource random) { Direction direction = Direction.Plane.HORIZONTAL.getRandomDirection(random); AtomicReference lastFoundPos = new AtomicReference<>(origin); BlockPos.breadthFirstTraversal(origin, MAX_CONSUMABLE_BLOCK_SEARCH_DISTANCE, 100, (pos, blockPosConsumer) -> { - lastFoundPos.set(pos); + if(world.getBlockState(pos).is(searchTag)) { + lastFoundPos.set(pos); + } blockPosConsumer.accept(pos.relative(direction)); blockPosConsumer.accept(pos.relative(Direction.DOWN)); blockPosConsumer.accept(pos.relative(Direction.UP)); }, - pos -> world.getBlockState(pos).is(searchTag) + pos -> world.getBlockState(pos).is(continueTag) ); - if (lastFoundPos.get().equals(origin)) { - return Optional.empty(); - } else { + if (world.getBlockState(lastFoundPos.get()).is(searchTag)) { return Optional.of(lastFoundPos.get()); + } else { + return Optional.empty(); } } From 5242df845865bc6c66ecfe6c208cdefd4ea472b4 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 2 Aug 2026 08:51:41 +0200 Subject: [PATCH 124/477] loot tables, mineable tags --- .../tags/block/mineable/pickaxe.json | 5 +++++ .../spectrum/loot_table/blocks/dawnbrush.json | 20 +++++++++++++++++ .../loot_table/blocks/fluid_gather_node.json | 20 +++++++++++++++++ .../blocks/fluid_provider_node.json | 20 +++++++++++++++++ .../loot_table/blocks/fluid_sender_node.json | 20 +++++++++++++++++ .../loot_table/blocks/fluid_storage_node.json | 20 +++++++++++++++++ .../spectrum/loot_table/blocks/ink_node.json | 20 +++++++++++++++++ .../loot_table/blocks/omni_gather_node.json | 20 +++++++++++++++++ .../loot_table/blocks/omni_provider_node.json | 20 +++++++++++++++++ .../loot_table/blocks/omni_sender_node.json | 20 +++++++++++++++++ .../loot_table/blocks/omni_storage_node.json | 20 +++++++++++++++++ .../loot_table/blocks/tinting_station.json | 20 +++++++++++++++++ .../spectrum/loot_table/blocks/twill.json | 20 +++++++++++++++++ .../loot_table/blocks/vantaclast.json | 20 +++++++++++++++++ .../tier3/pastel_network/connection_node.json | 8 +------ .../connection_node_refined.json | 8 +------ .../tier3/pastel_network/gather_node.json | 6 +---- .../pastel_network/gather_node_refined.json | 6 +---- .../tier3/pastel_network/provider_node.json | 6 +---- .../pastel_network/provider_node_refined.json | 6 +---- .../tier3/pastel_network/sender_node.json | 6 +---- .../pastel_network/sender_node_refined.json | 6 +---- .../tier3/pastel_network/storage_node.json | 6 +---- .../pastel_network/storage_node_refined.json | 6 +---- .../exempt_from_mineable_debug_check.json | 2 +- .../tags/block/pastel_network_nodes.json | 9 -------- .../spectrum/tags/block/pastel_nodes.json | 22 +++++++++++++++++++ 27 files changed, 298 insertions(+), 64 deletions(-) create mode 100644 src/main/resources/data/spectrum/loot_table/blocks/dawnbrush.json create mode 100644 src/main/resources/data/spectrum/loot_table/blocks/fluid_gather_node.json create mode 100644 src/main/resources/data/spectrum/loot_table/blocks/fluid_provider_node.json create mode 100644 src/main/resources/data/spectrum/loot_table/blocks/fluid_sender_node.json create mode 100644 src/main/resources/data/spectrum/loot_table/blocks/fluid_storage_node.json create mode 100644 src/main/resources/data/spectrum/loot_table/blocks/ink_node.json create mode 100644 src/main/resources/data/spectrum/loot_table/blocks/omni_gather_node.json create mode 100644 src/main/resources/data/spectrum/loot_table/blocks/omni_provider_node.json create mode 100644 src/main/resources/data/spectrum/loot_table/blocks/omni_sender_node.json create mode 100644 src/main/resources/data/spectrum/loot_table/blocks/omni_storage_node.json create mode 100644 src/main/resources/data/spectrum/loot_table/blocks/tinting_station.json create mode 100644 src/main/resources/data/spectrum/loot_table/blocks/twill.json create mode 100644 src/main/resources/data/spectrum/loot_table/blocks/vantaclast.json delete mode 100644 src/main/resources/data/spectrum/tags/block/pastel_network_nodes.json create mode 100644 src/main/resources/data/spectrum/tags/block/pastel_nodes.json diff --git a/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json b/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json index 1d3c6cafb3..4eb5f73470 100644 --- a/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -33,6 +33,11 @@ "#spectrum:alloy_forges", "#spectrum:basal_marbles", + "spectrum:twill", + "spectrum:vantaclast", + "spectrum:dawnbrush", + "spectrum:tinting_station", + "spectrum:topaz_cluster", "spectrum:citrine_cluster", "spectrum:onyx_cluster", diff --git a/src/main/resources/data/spectrum/loot_table/blocks/dawnbrush.json b/src/main/resources/data/spectrum/loot_table/blocks/dawnbrush.json new file mode 100644 index 0000000000..5b00193743 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/blocks/dawnbrush.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:dawnbrush" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/blocks/fluid_gather_node.json b/src/main/resources/data/spectrum/loot_table/blocks/fluid_gather_node.json new file mode 100644 index 0000000000..3062fb3209 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/blocks/fluid_gather_node.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:fluid_gather_node" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/blocks/fluid_provider_node.json b/src/main/resources/data/spectrum/loot_table/blocks/fluid_provider_node.json new file mode 100644 index 0000000000..086d110ef7 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/blocks/fluid_provider_node.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:fluid_provider_node" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/blocks/fluid_sender_node.json b/src/main/resources/data/spectrum/loot_table/blocks/fluid_sender_node.json new file mode 100644 index 0000000000..a6e3ba7ea5 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/blocks/fluid_sender_node.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:fluid_sender_node" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/blocks/fluid_storage_node.json b/src/main/resources/data/spectrum/loot_table/blocks/fluid_storage_node.json new file mode 100644 index 0000000000..7f3d905267 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/blocks/fluid_storage_node.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:fluid_storage_node" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/blocks/ink_node.json b/src/main/resources/data/spectrum/loot_table/blocks/ink_node.json new file mode 100644 index 0000000000..a8e215eed0 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/blocks/ink_node.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:ink_node" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/blocks/omni_gather_node.json b/src/main/resources/data/spectrum/loot_table/blocks/omni_gather_node.json new file mode 100644 index 0000000000..b587254b41 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/blocks/omni_gather_node.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:omni_gather_node" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/blocks/omni_provider_node.json b/src/main/resources/data/spectrum/loot_table/blocks/omni_provider_node.json new file mode 100644 index 0000000000..1bbfc8936e --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/blocks/omni_provider_node.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:omni_provider_node" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/blocks/omni_sender_node.json b/src/main/resources/data/spectrum/loot_table/blocks/omni_sender_node.json new file mode 100644 index 0000000000..37fc5e7cbc --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/blocks/omni_sender_node.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:omni_sender_node" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/blocks/omni_storage_node.json b/src/main/resources/data/spectrum/loot_table/blocks/omni_storage_node.json new file mode 100644 index 0000000000..6d25f2a78b --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/blocks/omni_storage_node.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:omni_storage_node" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/blocks/tinting_station.json b/src/main/resources/data/spectrum/loot_table/blocks/tinting_station.json new file mode 100644 index 0000000000..2e2571a33c --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/blocks/tinting_station.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:tinting_station" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/blocks/twill.json b/src/main/resources/data/spectrum/loot_table/blocks/twill.json new file mode 100644 index 0000000000..634688e6c4 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/blocks/twill.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:twill" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_table/blocks/vantaclast.json b/src/main/resources/data/spectrum/loot_table/blocks/vantaclast.json new file mode 100644 index 0000000000..f60fbef413 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_table/blocks/vantaclast.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "spectrum:vantaclast" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/connection_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/connection_node.json index 97240e1532..b979d4f71d 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/connection_node.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/connection_node.json @@ -3,13 +3,7 @@ "group": "pastel_network", "time": 80, "tier": "advanced", - "colors": { - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:cyan": 0, - "spectrum:black": 0, - "spectrum:white": 0 - }, + "colors": {}, "experience": 1.0, "pattern": [ " A ", diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/connection_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/connection_node_refined.json index 9a23e8d84a..333b0b4ab8 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/connection_node_refined.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/connection_node_refined.json @@ -3,13 +3,7 @@ "group": "pure_pastel_network", "time": 80, "tier": "advanced", - "colors": { - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:cyan": 0, - "spectrum:black": 0, - "spectrum:white": 0 - }, + "colors": {}, "experience": 4.0, "pattern": [ " A ", diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/gather_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/gather_node.json index 0a2ee1d7fb..5d4c4b457a 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/gather_node.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/gather_node.json @@ -4,11 +4,7 @@ "time": 80, "tier": "advanced", "colors": { - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:cyan": 0, - "spectrum:black": 1, - "spectrum:white": 0 + "spectrum:black": 1 }, "experience": 1.0, "pattern": [ diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/gather_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/gather_node_refined.json index 96df381c6d..3af09b77a1 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/gather_node_refined.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/gather_node_refined.json @@ -4,11 +4,7 @@ "time": 80, "tier": "advanced", "colors": { - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:cyan": 0, - "spectrum:black": 4, - "spectrum:white": 0 + "spectrum:black": 4 }, "experience": 4.0, "pattern": [ diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/provider_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/provider_node.json index eadf46c412..dcb2bdb404 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/provider_node.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/provider_node.json @@ -4,11 +4,7 @@ "time": 80, "tier": "advanced", "colors": { - "spectrum:magenta": 1, - "spectrum:yellow": 0, - "spectrum:cyan": 0, - "spectrum:black": 0, - "spectrum:white": 0 + "spectrum:magenta": 1 }, "experience": 1.0, "pattern": [ diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/provider_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/provider_node_refined.json index cb0978f644..817925a615 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/provider_node_refined.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/provider_node_refined.json @@ -4,11 +4,7 @@ "time": 80, "tier": "advanced", "colors": { - "spectrum:magenta": 4, - "spectrum:yellow": 0, - "spectrum:cyan": 0, - "spectrum:black": 0, - "spectrum:white": 0 + "spectrum:magenta": 4 }, "experience": 4.0, "pattern": [ diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/sender_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/sender_node.json index 7e058cfde7..6ca64a15b7 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/sender_node.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/sender_node.json @@ -4,11 +4,7 @@ "time": 80, "tier": "advanced", "colors": { - "spectrum:magenta": 0, - "spectrum:yellow": 1, - "spectrum:cyan": 0, - "spectrum:black": 0, - "spectrum:white": 0 + "spectrum:yellow": 1 }, "experience": 1.0, "pattern": [ diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/sender_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/sender_node_refined.json index 8d0fe33fb8..14f2c9e2f5 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/sender_node_refined.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/sender_node_refined.json @@ -4,11 +4,7 @@ "time": 80, "tier": "advanced", "colors": { - "spectrum:magenta": 0, - "spectrum:yellow": 4, - "spectrum:cyan": 0, - "spectrum:black": 0, - "spectrum:white": 0 + "spectrum:yellow": 4 }, "experience": 4.0, "pattern": [ diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/storage_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/storage_node.json index ccd27db472..a75ebbd0f2 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/storage_node.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/storage_node.json @@ -4,11 +4,7 @@ "time": 80, "tier": "advanced", "colors": { - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:cyan": 1, - "spectrum:black": 0, - "spectrum:white": 0 + "spectrum:cyan": 1 }, "experience": 1.0, "pattern": [ diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/storage_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/storage_node_refined.json index 97b2a217d8..d5285164f0 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/storage_node_refined.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/storage_node_refined.json @@ -4,11 +4,7 @@ "time": 80, "tier": "advanced", "colors": { - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:cyan": 4, - "spectrum:black": 0, - "spectrum:white": 0 + "spectrum:cyan": 4 }, "experience": 4.0, "pattern": [ diff --git a/src/main/resources/data/spectrum/tags/block/exempt_from_mineable_debug_check.json b/src/main/resources/data/spectrum/tags/block/exempt_from_mineable_debug_check.json index 0efa3716e4..a0fefb2503 100644 --- a/src/main/resources/data/spectrum/tags/block/exempt_from_mineable_debug_check.json +++ b/src/main/resources/data/spectrum/tags/block/exempt_from_mineable_debug_check.json @@ -2,7 +2,7 @@ "values": [ "#spectrum:mob_heads", "#spectrum:unbreakable", - "#spectrum:pastel_network_nodes", + "#spectrum:pastel_nodes", "spectrum:dragonrot", "spectrum:liquid_crystal", diff --git a/src/main/resources/data/spectrum/tags/block/pastel_network_nodes.json b/src/main/resources/data/spectrum/tags/block/pastel_network_nodes.json deleted file mode 100644 index 5be22a0f57..0000000000 --- a/src/main/resources/data/spectrum/tags/block/pastel_network_nodes.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "values": [ - "spectrum:connection_node", - "spectrum:provider_node", - "spectrum:storage_node", - "spectrum:sender_node", - "spectrum:gather_node" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/tags/block/pastel_nodes.json b/src/main/resources/data/spectrum/tags/block/pastel_nodes.json new file mode 100644 index 0000000000..72f73d7f15 --- /dev/null +++ b/src/main/resources/data/spectrum/tags/block/pastel_nodes.json @@ -0,0 +1,22 @@ +{ + "values": [ + "spectrum:connection_node", + + "spectrum:ink_node", + + "spectrum:provider_node", + "spectrum:storage_node", + "spectrum:sender_node", + "spectrum:gather_node", + + "spectrum:fluid_provider_node", + "spectrum:fluid_storage_node", + "spectrum:fluid_sender_node", + "spectrum:fluid_gather_node", + + "spectrum:omni_provider_node", + "spectrum:omni_storage_node", + "spectrum:omni_sender_node", + "spectrum:omni_gather_node" + ] +} \ No newline at end of file From c6e473b0473b780a5815ad529f493dba4351f9bc Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 2 Aug 2026 08:51:57 +0200 Subject: [PATCH 125/477] fix space in create resonance processor --- ...scent_levitite .json => aeronautics_pearlescent_levitite.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/data/spectrum/spectrum/resonance_processor/mod_compat/{aeronautics_pearlescent_levitite .json => aeronautics_pearlescent_levitite.json} (100%) diff --git a/src/main/resources/data/spectrum/spectrum/resonance_processor/mod_compat/aeronautics_pearlescent_levitite .json b/src/main/resources/data/spectrum/spectrum/resonance_processor/mod_compat/aeronautics_pearlescent_levitite.json similarity index 100% rename from src/main/resources/data/spectrum/spectrum/resonance_processor/mod_compat/aeronautics_pearlescent_levitite .json rename to src/main/resources/data/spectrum/spectrum/resonance_processor/mod_compat/aeronautics_pearlescent_levitite.json From 2d935114873f7a7b982522d6ff258fd8c26a029e Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 2 Aug 2026 09:44:12 +0200 Subject: [PATCH 126/477] pastel node unlocks & recipes --- .../registries/SpectrumAdvancements.java | 6 ++-- .../advancement/unlocks/filtering.json | 6 ++-- .../base.json} | 0 .../base_refined.json} | 2 +- .../unlocks/pastel_network/fluid.json | 16 +++++++++++ .../unlocks/pastel_network/fluid_refined.json | 16 +++++++++++ .../unlocks/pastel_network/ink.json | 16 +++++++++++ .../unlocks/pastel_network/ink_refined.json | 16 +++++++++++ .../pastel_network/item.json} | 4 +-- .../unlocks/pastel_network/item_refined.json | 10 +++++++ .../unlocks/pastel_network/omni.json | 22 +++++++++++++++ .../unlocks/pastel_network/omni_refined.json | 22 +++++++++++++++ .../unlock_pastel_node_coloring.json | 6 ++++ .../unlock_pastel_node_upgrading.json | 16 +++++++++++ .../guidebook/entries/ink/cinderhearth.json | 2 +- .../pastel_network/connection_node.json | 2 +- .../entries/pastel_network/gather_node.json | 6 ++-- .../pastel_network/pastel_network.json | 2 +- .../pastel_network_coloring.json | 2 +- .../entries/pastel_network/provider_node.json | 6 ++-- .../pastel_network/redstone_interaction.json | 2 +- .../entries/pastel_network/sender_node.json | 6 ++-- .../entries/pastel_network/storage_node.json | 6 ++-- .../pastel_network/upgrades/decorative.json | 2 +- .../pastel_network/upgrades/redstone.json | 2 +- .../pastel_network/upgrades/transfer.json | 2 +- .../pastel_network/upgrades/upgrades.json | 2 +- .../tier3/pastel_network/connection_node.json | 2 +- .../connection_node_refined.json | 2 +- .../pastel_network/fluid_gather_node.json | 27 ++++++++++++++++++ .../fluid_gather_node_refined.json | 27 ++++++++++++++++++ .../pastel_network/fluid_provider_node.json | 27 ++++++++++++++++++ .../fluid_provider_node_refined.json | 27 ++++++++++++++++++ .../pastel_network/fluid_sender_node.json | 27 ++++++++++++++++++ .../fluid_sender_node_refined.json | 27 ++++++++++++++++++ .../pastel_network/fluid_storage_node.json | 27 ++++++++++++++++++ .../fluid_storage_node_refined.json | 27 ++++++++++++++++++ .../pastel_network/ink_node_refined.json | 28 +++++++++++++++++++ ...gather_node.json => item_gather_node.json} | 2 +- ...ned.json => item_gather_node_refined.json} | 2 +- ...ider_node.json => item_provider_node.json} | 2 +- ...d.json => item_provider_node_refined.json} | 2 +- ...sender_node.json => item_sender_node.json} | 2 +- ...ned.json => item_sender_node_refined.json} | 2 +- ...orage_node.json => item_storage_node.json} | 2 +- ...ed.json => item_storage_node_refined.json} | 2 +- .../pastel_network/omni_gather_node.json | 28 +++++++++++++++++++ .../omni_gather_node_refined.json | 28 +++++++++++++++++++ .../pastel_network/omni_provider_node.json | 28 +++++++++++++++++++ .../omni_provider_node_refined.json | 28 +++++++++++++++++++ .../pastel_network/omni_sender_node.json | 28 +++++++++++++++++++ .../omni_sender_node_refined.json | 28 +++++++++++++++++++ .../pastel_network/omni_storage_node.json | 28 +++++++++++++++++++ .../omni_storage_node_refined.json | 28 +++++++++++++++++++ 54 files changed, 649 insertions(+), 39 deletions(-) rename src/main/resources/data/spectrum/advancement/unlocks/{blocks/pastel_network.json => pastel_network/base.json} (100%) rename src/main/resources/data/spectrum/advancement/unlocks/{blocks/pastel_network_refined.json => pastel_network/base_refined.json} (82%) create mode 100644 src/main/resources/data/spectrum/advancement/unlocks/pastel_network/fluid.json create mode 100644 src/main/resources/data/spectrum/advancement/unlocks/pastel_network/fluid_refined.json create mode 100644 src/main/resources/data/spectrum/advancement/unlocks/pastel_network/ink.json create mode 100644 src/main/resources/data/spectrum/advancement/unlocks/pastel_network/ink_refined.json rename src/main/resources/data/spectrum/advancement/{milestones/unlock_pastel_node_upgrading.json => unlocks/pastel_network/item.json} (51%) create mode 100644 src/main/resources/data/spectrum/advancement/unlocks/pastel_network/item_refined.json create mode 100644 src/main/resources/data/spectrum/advancement/unlocks/pastel_network/omni.json create mode 100644 src/main/resources/data/spectrum/advancement/unlocks/pastel_network/omni_refined.json rename src/main/resources/data/spectrum/advancement/{milestones => unlocks/pastel_network}/unlock_pastel_node_coloring.json (69%) create mode 100644 src/main/resources/data/spectrum/advancement/unlocks/pastel_network/unlock_pastel_node_upgrading.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_gather_node.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_gather_node_refined.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_provider_node.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_provider_node_refined.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_sender_node.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_sender_node_refined.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_storage_node.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_storage_node_refined.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/ink_node_refined.json rename src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/{gather_node.json => item_gather_node.json} (86%) rename src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/{gather_node_refined.json => item_gather_node_refined.json} (85%) rename src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/{provider_node.json => item_provider_node.json} (86%) rename src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/{provider_node_refined.json => item_provider_node_refined.json} (85%) rename src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/{sender_node.json => item_sender_node.json} (86%) rename src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/{sender_node_refined.json => item_sender_node_refined.json} (85%) rename src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/{storage_node.json => item_storage_node.json} (86%) rename src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/{storage_node_refined.json => item_storage_node_refined.json} (85%) create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_gather_node.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_gather_node_refined.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_provider_node.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_provider_node_refined.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_sender_node.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_sender_node_refined.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_storage_node.json create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_storage_node_refined.json diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumAdvancements.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumAdvancements.java index d4bd5bbaeb..98f82c0353 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumAdvancements.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumAdvancements.java @@ -39,8 +39,10 @@ public class SpectrumAdvancements { public static final ResourceLocation SPAWNER_CREATURE_CHANGE = SpectrumCommon.locate("milestones/unlock_spawner_creature_change"); public static final ResourceLocation SPAWNER_MANIPULATION = SpectrumCommon.locate("milestones/unlock_spawner_manipulation"); public static final ResourceLocation UNLOCK_SHOOTING_STARS = SpectrumCommon.locate("milestones/unlock_shooting_stars"); - public static final ResourceLocation PASTEL_NODE_UPGRADING = SpectrumCommon.locate("milestones/unlock_pastel_node_upgrading"); - public static final ResourceLocation PASTEL_NODE_COLORING = SpectrumCommon.locate("milestones/unlock_pastel_node_coloring"); + + // Pastel Network Features + public static final ResourceLocation PASTEL_NODE_UPGRADING = SpectrumCommon.locate("unlocks/pastel_network/unlock_pastel_node_upgrading"); + public static final ResourceLocation PASTEL_NODE_COLORING = SpectrumCommon.locate("unlocks/pastel_network/unlock_pastel_node_coloring"); // Paintbrush Abilities public static final ResourceLocation PAINTBRUSH_COLORING = SpectrumCommon.locate("collect_pigment"); diff --git a/src/main/resources/data/spectrum/advancement/unlocks/filtering.json b/src/main/resources/data/spectrum/advancement/unlocks/filtering.json index 89d4966ac3..d07ae2f920 100644 --- a/src/main/resources/data/spectrum/advancement/unlocks/filtering.json +++ b/src/main/resources/data/spectrum/advancement/unlocks/filtering.json @@ -1,12 +1,12 @@ { "criteria": { - "unlock_pastel_network": { + "unlocked_pastel_network": { "trigger": "revelationary:advancement_gotten", "conditions": { - "advancement_identifier": "spectrum:unlocks/blocks/pastel_network" + "advancement_identifier": "spectrum:unlocks/pastel_network/base" } }, - "unlock_black_hole_chest": { + "unlocked_black_hole_chest": { "trigger": "revelationary:advancement_gotten", "conditions": { "advancement_identifier": "spectrum:unlocks/blocks/black_hole_chest" diff --git a/src/main/resources/data/spectrum/advancement/unlocks/blocks/pastel_network.json b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/base.json similarity index 100% rename from src/main/resources/data/spectrum/advancement/unlocks/blocks/pastel_network.json rename to src/main/resources/data/spectrum/advancement/unlocks/pastel_network/base.json diff --git a/src/main/resources/data/spectrum/advancement/unlocks/blocks/pastel_network_refined.json b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/base_refined.json similarity index 82% rename from src/main/resources/data/spectrum/advancement/unlocks/blocks/pastel_network_refined.json rename to src/main/resources/data/spectrum/advancement/unlocks/pastel_network/base_refined.json index e5e5731fbb..438e82c974 100644 --- a/src/main/resources/data/spectrum/advancement/unlocks/blocks/pastel_network_refined.json +++ b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/base_refined.json @@ -3,7 +3,7 @@ "unlocked_pastel_network": { "trigger": "revelationary:advancement_gotten", "conditions": { - "advancement_identifier": "spectrum:unlocks/blocks/pastel_network" + "advancement_identifier": "spectrum:unlocks/pastel_network/base" } }, "grown_azurite_in_crystallarieum": { diff --git a/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/fluid.json b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/fluid.json new file mode 100644 index 0000000000..d202536a09 --- /dev/null +++ b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/fluid.json @@ -0,0 +1,16 @@ +{ + "criteria": { + "unlocked_pastel_network": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:unlocks/pastel_network/base" + } + }, + "collected_mermaids_gem": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:collect_mermaids_gem" + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/fluid_refined.json b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/fluid_refined.json new file mode 100644 index 0000000000..2ca1e3d004 --- /dev/null +++ b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/fluid_refined.json @@ -0,0 +1,16 @@ +{ + "criteria": { + "unlocked_refined_pastel_network": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:unlocks/pastel_network/base_refined" + } + }, + "collected_mermaids_gem": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:collect_mermaids_gem" + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/ink.json b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/ink.json new file mode 100644 index 0000000000..6badee69a8 --- /dev/null +++ b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/ink.json @@ -0,0 +1,16 @@ +{ + "criteria": { + "unlocked_pastel_network": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:unlocks/pastel_network/base" + } + }, + "unlocked_ink_use": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:milestones/unlock_ink_use" + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/ink_refined.json b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/ink_refined.json new file mode 100644 index 0000000000..1fdb6aba48 --- /dev/null +++ b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/ink_refined.json @@ -0,0 +1,16 @@ +{ + "criteria": { + "unlocked_refined_pastel_network": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:unlocks/pastel_network/base_refined" + } + }, + "unlocked_ink_use": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:milestones/unlock_ink_use" + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/advancement/milestones/unlock_pastel_node_upgrading.json b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/item.json similarity index 51% rename from src/main/resources/data/spectrum/advancement/milestones/unlock_pastel_node_upgrading.json rename to src/main/resources/data/spectrum/advancement/unlocks/pastel_network/item.json index e44575994c..683e55d246 100644 --- a/src/main/resources/data/spectrum/advancement/milestones/unlock_pastel_node_upgrading.json +++ b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/item.json @@ -1,9 +1,9 @@ { "criteria": { - "reached_endgame": { + "unlocked_pastel_network": { "trigger": "revelationary:advancement_gotten", "conditions": { - "advancement_identifier": "spectrum:lategame/collect_pure_resource" + "advancement_identifier": "spectrum:unlocks/pastel_network/base" } } } diff --git a/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/item_refined.json b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/item_refined.json new file mode 100644 index 0000000000..3d2f7dae50 --- /dev/null +++ b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/item_refined.json @@ -0,0 +1,10 @@ +{ + "criteria": { + "unlocked_refined_pastel_network": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:unlocks/pastel_network/base_refined" + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/omni.json b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/omni.json new file mode 100644 index 0000000000..c28742f894 --- /dev/null +++ b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/omni.json @@ -0,0 +1,22 @@ +{ + "criteria": { + "unlocked_item_pastel_network": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:unlocks/pastel_network/item" + } + }, + "unlocked_fluid_pastel_network": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:unlocks/pastel_network/fluid" + } + }, + "unlocked_ink_pastel_network": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:unlocks/pastel_network/ink" + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/omni_refined.json b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/omni_refined.json new file mode 100644 index 0000000000..4c1e403fb5 --- /dev/null +++ b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/omni_refined.json @@ -0,0 +1,22 @@ +{ + "criteria": { + "unlocked_refined_item_pastel_network": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:unlocks/pastel_network/item_refined" + } + }, + "unlocked_refined_fluid_pastel_network": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:unlocks/pastel_network/fluid_refined" + } + }, + "unlocked_refined_ink_pastel_network": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:unlocks/pastel_network/ink_refined" + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/advancement/milestones/unlock_pastel_node_coloring.json b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/unlock_pastel_node_coloring.json similarity index 69% rename from src/main/resources/data/spectrum/advancement/milestones/unlock_pastel_node_coloring.json rename to src/main/resources/data/spectrum/advancement/unlocks/pastel_network/unlock_pastel_node_coloring.json index c68a07b7d8..08b6b75b37 100644 --- a/src/main/resources/data/spectrum/advancement/milestones/unlock_pastel_node_coloring.json +++ b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/unlock_pastel_node_coloring.json @@ -1,5 +1,11 @@ { "criteria": { + "unlocked_pastel_network": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:unlocks/pastel_network/base" + } + }, "has_any_advanced_pastel_network_advancement": { "trigger": "revelationary:advancement_count", "conditions": { diff --git a/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/unlock_pastel_node_upgrading.json b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/unlock_pastel_node_upgrading.json new file mode 100644 index 0000000000..d573a3cd3c --- /dev/null +++ b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/unlock_pastel_node_upgrading.json @@ -0,0 +1,16 @@ +{ + "criteria": { + "unlocked_pastel_network": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:unlocks/pastel_network/base" + } + }, + "collected_pure_resource": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:lategame/collect_pure_resource" + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/ink/cinderhearth.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/ink/cinderhearth.json index 453968085c..1b66670012 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/ink/cinderhearth.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/ink/cinderhearth.json @@ -36,7 +36,7 @@ { "type": "spectrum:pedestal_crafting", "title": "container.spectrum.rei.pedestal_recipe", - "recipe_id": "spectrum:pedestal/tier3/cinderhearth_blazing.json" + "recipe_id": "spectrum:pedestal/tier3/cinderhearth_blazing" }, { "type": "modonomicon:text", diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/connection_node.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/connection_node.json index fe74e43593..ee473d117f 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/connection_node.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/connection_node.json @@ -5,7 +5,7 @@ }, "condition": { "type": "modonomicon:advancement", - "advancement_id": "spectrum:unlocks/blocks/pastel_network" + "advancement_id": "spectrum:unlocks/pastel_network/base" }, "category": "spectrum:pastel_network", "hide_while_locked": true, diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/gather_node.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/gather_node.json index 5decd0d217..1204cb655b 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/gather_node.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/gather_node.json @@ -5,7 +5,7 @@ }, "condition": { "type": "modonomicon:advancement", - "advancement_id": "spectrum:unlocks/blocks/pastel_network" + "advancement_id": "spectrum:unlocks/pastel_network/item" }, "category": "spectrum:pastel_network", "hide_while_locked": true, @@ -29,12 +29,12 @@ "type": "spectrum:pedestal_crafting", "text": "book.spectrum.guidebook.gather_node.page1.text", "title": "container.spectrum.rei.pedestal_recipe", - "recipe_id": "spectrum:pedestal/tier3/pastel_network/gather_node" + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_gather_node" }, { "type": "spectrum:pedestal_crafting", "title": "container.spectrum.rei.pure_recipe", - "recipe_id": "spectrum:pedestal/tier3/pastel_network/gather_node_refined" + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_gather_node_refined" } ] } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/pastel_network.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/pastel_network.json index 95bd97724b..b38a46c677 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/pastel_network.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/pastel_network.json @@ -5,7 +5,7 @@ }, "condition": { "type": "modonomicon:advancement", - "advancement_id": "spectrum:unlocks/blocks/pastel_network" + "advancement_id": "spectrum:unlocks/pastel_network/base" }, "category": "spectrum:pastel_network", "hide_while_locked": true, diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/pastel_network_coloring.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/pastel_network_coloring.json index 11b14a787d..8f9d2321c6 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/pastel_network_coloring.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/pastel_network_coloring.json @@ -8,7 +8,7 @@ }, "condition": { "type": "modonomicon:advancement", - "advancement_id": "spectrum:milestones/unlock_pastel_node_coloring" + "advancement_id": "spectrum:unlocks/pastel_network/unlock_pastel_node_coloring" }, "category": "spectrum:pastel_network", "hide_while_locked": true, diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/provider_node.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/provider_node.json index f104d4e763..9167ed480c 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/provider_node.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/provider_node.json @@ -5,7 +5,7 @@ }, "condition": { "type": "modonomicon:advancement", - "advancement_id": "spectrum:unlocks/blocks/pastel_network" + "advancement_id": "spectrum:unlocks/pastel_network/item" }, "category": "spectrum:pastel_network", "hide_while_locked": true, @@ -28,12 +28,12 @@ { "type": "spectrum:pedestal_crafting", "title": "container.spectrum.rei.pedestal_recipe", - "recipe_id": "spectrum:pedestal/tier3/pastel_network/provider_node" + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_provider_node" }, { "type": "spectrum:pedestal_crafting", "title": "container.spectrum.rei.pure_recipe", - "recipe_id": "spectrum:pedestal/tier3/pastel_network/provider_node_refined" + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_provider_node_refined" } ] } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/redstone_interaction.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/redstone_interaction.json index 7b56a101bb..5e379195f3 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/redstone_interaction.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/redstone_interaction.json @@ -5,7 +5,7 @@ }, "condition": { "type": "modonomicon:advancement", - "advancement_id": "spectrum:unlocks/blocks/pastel_network" + "advancement_id": "spectrum:unlocks/pastel_network/base" }, "category": "spectrum:pastel_network", "hide_while_locked": true, diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/sender_node.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/sender_node.json index 1bf6316551..d1cca223b3 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/sender_node.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/sender_node.json @@ -5,7 +5,7 @@ }, "condition": { "type": "modonomicon:advancement", - "advancement_id": "spectrum:unlocks/blocks/pastel_network" + "advancement_id": "spectrum:unlocks/pastel_network/item" }, "category": "spectrum:pastel_network", "hide_while_locked": true, @@ -28,12 +28,12 @@ { "type": "spectrum:pedestal_crafting", "title": "container.spectrum.rei.pedestal_recipe", - "recipe_id": "spectrum:pedestal/tier3/pastel_network/sender_node" + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_sender_node" }, { "type": "spectrum:pedestal_crafting", "title": "container.spectrum.rei.pure_recipe", - "recipe_id": "spectrum:pedestal/tier3/pastel_network/sender_node_refined" + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_sender_node_refined" } ] } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/storage_node.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/storage_node.json index e0128b5148..5511b52aba 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/storage_node.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/storage_node.json @@ -5,7 +5,7 @@ }, "condition": { "type": "modonomicon:advancement", - "advancement_id": "spectrum:unlocks/blocks/pastel_network" + "advancement_id": "spectrum:unlocks/pastel_network/item" }, "category": "spectrum:pastel_network", "hide_while_locked": true, @@ -28,12 +28,12 @@ { "type": "spectrum:pedestal_crafting", "title": "container.spectrum.rei.pedestal_recipe", - "recipe_id": "spectrum:pedestal/tier3/pastel_network/storage_node" + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_storage_node" }, { "type": "spectrum:pedestal_crafting", "title": "container.spectrum.rei.pure_recipe", - "recipe_id": "spectrum:pedestal/tier3/pastel_network/storage_node_refined" + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_storage_node_refined" } ] } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/upgrades/decorative.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/upgrades/decorative.json index 08783d43ac..07bbf4ed7c 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/upgrades/decorative.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/upgrades/decorative.json @@ -5,7 +5,7 @@ }, "condition": { "type": "modonomicon:advancement", - "advancement_id": "spectrum:milestones/unlock_pastel_node_upgrading" + "advancement_id": "spectrum:unlocks/pastel_network/unlock_pastel_node_upgrading" }, "category": "spectrum:pastel_network", "hide_while_locked": true, diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/upgrades/redstone.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/upgrades/redstone.json index 45a7ae138e..ef9865b2ff 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/upgrades/redstone.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/upgrades/redstone.json @@ -5,7 +5,7 @@ }, "condition": { "type": "modonomicon:advancement", - "advancement_id": "spectrum:milestones/unlock_pastel_node_upgrading" + "advancement_id": "spectrum:unlocks/pastel_network/unlock_pastel_node_upgrading" }, "category": "spectrum:pastel_network", "hide_while_locked": true, diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/upgrades/transfer.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/upgrades/transfer.json index 674f32fb6c..28eccef8ec 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/upgrades/transfer.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/upgrades/transfer.json @@ -5,7 +5,7 @@ }, "condition": { "type": "modonomicon:advancement", - "advancement_id": "spectrum:milestones/unlock_pastel_node_upgrading" + "advancement_id": "spectrum:unlocks/pastel_network/unlock_pastel_node_upgrading" }, "category": "spectrum:pastel_network", "hide_while_locked": true, diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/upgrades/upgrades.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/upgrades/upgrades.json index 5378c43ac6..38d89733ea 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/upgrades/upgrades.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/upgrades/upgrades.json @@ -5,7 +5,7 @@ }, "condition": { "type": "modonomicon:advancement", - "advancement_id": "spectrum:milestones/unlock_pastel_node_upgrading" + "advancement_id": "spectrum:unlocks/pastel_network/unlock_pastel_node_upgrading" }, "category": "spectrum:pastel_network", "hide_while_locked": true, diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/connection_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/connection_node.json index b979d4f71d..98de429cbd 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/connection_node.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/connection_node.json @@ -20,5 +20,5 @@ "id": "spectrum:connection_node", "count": 4 }, - "required_advancement": "spectrum:unlocks/blocks/pastel_network" + "required_advancement": "spectrum:unlocks/pastel_network/base" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/connection_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/connection_node_refined.json index 333b0b4ab8..3c9dc7ec0d 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/connection_node_refined.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/connection_node_refined.json @@ -20,5 +20,5 @@ "id": "spectrum:connection_node", "count": 32 }, - "required_advancement": "spectrum:unlocks/blocks/pastel_network_refined" + "required_advancement": "spectrum:unlocks/pastel_network/base_refined" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_gather_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_gather_node.json new file mode 100644 index 0000000000..159d2c3d7a --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_gather_node.json @@ -0,0 +1,27 @@ +{ + "type": "spectrum:pedestal", + "group": "pastel_network", + "time": 80, + "tier": "advanced", + "colors": { + "spectrum:black": 1 + }, + "experience": 1.0, + "pattern": [ + " M ", + "ASA", + "YXY" + ], + "key": { + "S": "spectrum:onyx_shard", + "X": "spectrum:polished_basalt", + "Y": "spectrum:polished_calcite", + "A": "spectrum:raw_azurite", + "M": "spectrum:mermaids_gem" + }, + "result": { + "id": "spectrum:fluid_gather_node", + "count": 1 + }, + "required_advancement": "spectrum:unlocks/pastel_network/fluid" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_gather_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_gather_node_refined.json new file mode 100644 index 0000000000..d0e84e2953 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_gather_node_refined.json @@ -0,0 +1,27 @@ +{ + "type": "spectrum:pedestal", + "group": "pure_pastel_network", + "time": 80, + "tier": "advanced", + "colors": { + "spectrum:black": 4 + }, + "experience": 4.0, + "pattern": [ + " M ", + "ASA", + "YXY" + ], + "key": { + "S": "spectrum:onyx_shard", + "X": "spectrum:polished_basalt", + "Y": "spectrum:polished_calcite", + "A": "spectrum:pure_azurite", + "M": "spectrum:mermaids_gem" + }, + "result": { + "id": "spectrum:fluid_gather_node", + "count": 8 + }, + "required_advancement": "spectrum:unlocks/pastel_network/fluid_refined" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_provider_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_provider_node.json new file mode 100644 index 0000000000..1a6355f1f3 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_provider_node.json @@ -0,0 +1,27 @@ +{ + "type": "spectrum:pedestal", + "group": "pastel_network", + "time": 80, + "tier": "advanced", + "colors": { + "spectrum:magenta": 1 + }, + "experience": 1.0, + "pattern": [ + " M ", + "ASA", + "YXY" + ], + "key": { + "S": "minecraft:amethyst_shard", + "X": "spectrum:polished_basalt", + "Y": "spectrum:polished_calcite", + "A": "spectrum:raw_azurite", + "M": "spectrum:mermaids_gem" + }, + "result": { + "id": "spectrum:fluid_provider_node", + "count": 1 + }, + "required_advancement": "spectrum:unlocks/pastel_network/fluid" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_provider_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_provider_node_refined.json new file mode 100644 index 0000000000..6f1e0401ac --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_provider_node_refined.json @@ -0,0 +1,27 @@ +{ + "type": "spectrum:pedestal", + "group": "pure_pastel_network", + "time": 80, + "tier": "advanced", + "colors": { + "spectrum:magenta": 4 + }, + "experience": 4.0, + "pattern": [ + " M ", + "ASA", + "YXY" + ], + "key": { + "S": "minecraft:amethyst_shard", + "X": "spectrum:polished_basalt", + "Y": "spectrum:polished_calcite", + "A": "spectrum:pure_azurite", + "M": "spectrum:mermaids_gem" + }, + "result": { + "id": "spectrum:fluid_provider_node", + "count": 8 + }, + "required_advancement": "spectrum:unlocks/pastel_network/fluid_refined" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_sender_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_sender_node.json new file mode 100644 index 0000000000..fb83e204dd --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_sender_node.json @@ -0,0 +1,27 @@ +{ + "type": "spectrum:pedestal", + "group": "pastel_network", + "time": 80, + "tier": "advanced", + "colors": { + "spectrum:yellow": 1 + }, + "experience": 1.0, + "pattern": [ + " M ", + "ASA", + "YXY" + ], + "key": { + "S": "spectrum:citrine_shard", + "X": "spectrum:polished_basalt", + "Y": "spectrum:polished_calcite", + "A": "spectrum:raw_azurite", + "M": "spectrum:mermaids_gem" + }, + "result": { + "id": "spectrum:fluid_sender_node", + "count": 1 + }, + "required_advancement": "spectrum:unlocks/pastel_network/fluid" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_sender_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_sender_node_refined.json new file mode 100644 index 0000000000..3e47db81fa --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_sender_node_refined.json @@ -0,0 +1,27 @@ +{ + "type": "spectrum:pedestal", + "group": "pure_pastel_network", + "time": 80, + "tier": "advanced", + "colors": { + "spectrum:yellow": 4 + }, + "experience": 4.0, + "pattern": [ + " M ", + "ASA", + "YXY" + ], + "key": { + "S": "spectrum:citrine_shard", + "X": "spectrum:polished_basalt", + "Y": "spectrum:polished_calcite", + "A": "spectrum:pure_azurite", + "M": "spectrum:mermaids_gem" + }, + "result": { + "id": "spectrum:fluid_sender_node", + "count": 8 + }, + "required_advancement": "spectrum:unlocks/pastel_network/fluid_refined" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_storage_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_storage_node.json new file mode 100644 index 0000000000..512b6fc787 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_storage_node.json @@ -0,0 +1,27 @@ +{ + "type": "spectrum:pedestal", + "group": "pastel_network", + "time": 80, + "tier": "advanced", + "colors": { + "spectrum:cyan": 1 + }, + "experience": 1.0, + "pattern": [ + " M ", + "ASA", + "YXY" + ], + "key": { + "S": "spectrum:topaz_shard", + "X": "spectrum:polished_basalt", + "Y": "spectrum:polished_calcite", + "A": "spectrum:raw_azurite", + "M": "spectrum:mermaids_gem" + }, + "result": { + "id": "spectrum:fluid_storage_node", + "count": 1 + }, + "required_advancement": "spectrum:unlocks/pastel_network/fluid" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_storage_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_storage_node_refined.json new file mode 100644 index 0000000000..b85d682aa9 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/fluid_storage_node_refined.json @@ -0,0 +1,27 @@ +{ + "type": "spectrum:pedestal", + "group": "pure_pastel_network", + "time": 80, + "tier": "advanced", + "colors": { + "spectrum:cyan": 4 + }, + "experience": 4.0, + "pattern": [ + " M ", + "ASA", + "YXY" + ], + "key": { + "S": "spectrum:topaz_shard", + "X": "spectrum:polished_basalt", + "Y": "spectrum:polished_calcite", + "A": "spectrum:pure_azurite", + "M": "spectrum:mermaids_gem" + }, + "result": { + "id": "spectrum:fluid_storage_node", + "count": 8 + }, + "required_advancement": "spectrum:unlocks/pastel_network/fluid_refined" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/ink_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/ink_node_refined.json new file mode 100644 index 0000000000..683fef2413 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/ink_node_refined.json @@ -0,0 +1,28 @@ +{ + "type": "spectrum:pedestal", + "group": "pure_pastel_network", + "time": 80, + "tier": "advanced", + "colors": { + "spectrum:cyan": 4, + "spectrum:magenta": 4, + "spectrum:yellow": 4 + }, + "experience": 4.0, + "pattern": [ + " A ", + "ASA", + "YXY" + ], + "key": { + "S": "#spectrum:pigments", + "X": "spectrum:polished_basalt", + "Y": "spectrum:polished_calcite", + "A": "spectrum:pure_azurite" + }, + "result": { + "id": "spectrum:ink_node", + "count": 8 + }, + "required_advancement": "spectrum:unlocks/pastel_network/ink_refined" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/gather_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_gather_node.json similarity index 86% rename from src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/gather_node.json rename to src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_gather_node.json index 5d4c4b457a..dcf4eb833b 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/gather_node.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_gather_node.json @@ -22,5 +22,5 @@ "id": "spectrum:gather_node", "count": 1 }, - "required_advancement": "spectrum:unlocks/blocks/pastel_network" + "required_advancement": "spectrum:unlocks/pastel_network/item" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/gather_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_gather_node_refined.json similarity index 85% rename from src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/gather_node_refined.json rename to src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_gather_node_refined.json index 3af09b77a1..fa11ab4c69 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/gather_node_refined.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_gather_node_refined.json @@ -22,5 +22,5 @@ "id": "spectrum:gather_node", "count": 8 }, - "required_advancement": "spectrum:unlocks/blocks/pastel_network_refined" + "required_advancement": "spectrum:unlocks/pastel_network/item_refined" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/provider_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_provider_node.json similarity index 86% rename from src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/provider_node.json rename to src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_provider_node.json index dcb2bdb404..0918acdd3a 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/provider_node.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_provider_node.json @@ -22,5 +22,5 @@ "id": "spectrum:provider_node", "count": 1 }, - "required_advancement": "spectrum:unlocks/blocks/pastel_network" + "required_advancement": "spectrum:unlocks/pastel_network/item" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/provider_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_provider_node_refined.json similarity index 85% rename from src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/provider_node_refined.json rename to src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_provider_node_refined.json index 817925a615..1bfab16aff 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/provider_node_refined.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_provider_node_refined.json @@ -22,5 +22,5 @@ "id": "spectrum:provider_node", "count": 8 }, - "required_advancement": "spectrum:unlocks/blocks/pastel_network_refined" + "required_advancement": "spectrum:unlocks/pastel_network/item_refined" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/sender_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_sender_node.json similarity index 86% rename from src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/sender_node.json rename to src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_sender_node.json index 6ca64a15b7..6cdf2d1337 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/sender_node.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_sender_node.json @@ -22,5 +22,5 @@ "id": "spectrum:sender_node", "count": 1 }, - "required_advancement": "spectrum:unlocks/blocks/pastel_network" + "required_advancement": "spectrum:unlocks/pastel_network/item" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/sender_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_sender_node_refined.json similarity index 85% rename from src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/sender_node_refined.json rename to src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_sender_node_refined.json index 14f2c9e2f5..69dfaca3c4 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/sender_node_refined.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_sender_node_refined.json @@ -22,5 +22,5 @@ "id": "spectrum:sender_node", "count": 8 }, - "required_advancement": "spectrum:unlocks/blocks/pastel_network_refined" + "required_advancement": "spectrum:unlocks/pastel_network/item_refined" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/storage_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_storage_node.json similarity index 86% rename from src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/storage_node.json rename to src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_storage_node.json index a75ebbd0f2..4fa2607a56 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/storage_node.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_storage_node.json @@ -22,5 +22,5 @@ "id": "spectrum:storage_node", "count": 1 }, - "required_advancement": "spectrum:unlocks/blocks/pastel_network" + "required_advancement": "spectrum:unlocks/pastel_network/item" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/storage_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_storage_node_refined.json similarity index 85% rename from src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/storage_node_refined.json rename to src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_storage_node_refined.json index d5285164f0..a7f1e4ead3 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/storage_node_refined.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/item_storage_node_refined.json @@ -22,5 +22,5 @@ "id": "spectrum:storage_node", "count": 8 }, - "required_advancement": "spectrum:unlocks/blocks/pastel_network_refined" + "required_advancement": "spectrum:unlocks/pastel_network/item_refined" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_gather_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_gather_node.json new file mode 100644 index 0000000000..8e8b031bf4 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_gather_node.json @@ -0,0 +1,28 @@ +{ + "type": "spectrum:pedestal", + "group": "pastel_network", + "time": 240, + "tier": "advanced", + "colors": { + "spectrum:black": 4 + }, + "experience": 1.0, + "pattern": [ + " A ", + "PSM", + "YXY" + ], + "key": { + "S": "spectrum:onyx_shard", + "X": "spectrum:polished_basalt", + "Y": "spectrum:polished_calcite", + "A": "spectrum:raw_azurite", + "M": "spectrum:mermaids_gem", + "P": "#spectrum:pigments" + }, + "result": { + "id": "spectrum:omni_gather_node", + "count": 1 + }, + "required_advancement": "spectrum:unlocks/pastel_network/omni" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_gather_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_gather_node_refined.json new file mode 100644 index 0000000000..6405c2ed15 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_gather_node_refined.json @@ -0,0 +1,28 @@ +{ + "type": "spectrum:pedestal", + "group": "pure_pastel_network", + "time": 240, + "tier": "advanced", + "colors": { + "spectrum:black": 16 + }, + "experience": 4.0, + "pattern": [ + " A ", + "PSM", + "YXY" + ], + "key": { + "S": "spectrum:onyx_shard", + "X": "spectrum:polished_basalt", + "Y": "spectrum:polished_calcite", + "A": "spectrum:pure_azurite", + "M": "spectrum:mermaids_gem", + "P": "#spectrum:pigments" + }, + "result": { + "id": "spectrum:omni_gather_node", + "count": 8 + }, + "required_advancement": "spectrum:unlocks/pastel_network/omni_refined" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_provider_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_provider_node.json new file mode 100644 index 0000000000..42b21addca --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_provider_node.json @@ -0,0 +1,28 @@ +{ + "type": "spectrum:pedestal", + "group": "pastel_network", + "time": 240, + "tier": "advanced", + "colors": { + "spectrum:magenta": 4 + }, + "experience": 1.0, + "pattern": [ + " A ", + "PSM", + "YXY" + ], + "key": { + "S": "minecraft:amethyst_shard", + "X": "spectrum:polished_basalt", + "Y": "spectrum:polished_calcite", + "A": "spectrum:raw_azurite", + "M": "spectrum:mermaids_gem", + "P": "#spectrum:pigments" + }, + "result": { + "id": "spectrum:omni_provider_node", + "count": 1 + }, + "required_advancement": "spectrum:unlocks/pastel_network/omni" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_provider_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_provider_node_refined.json new file mode 100644 index 0000000000..4e536039a5 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_provider_node_refined.json @@ -0,0 +1,28 @@ +{ + "type": "spectrum:pedestal", + "group": "pure_pastel_network", + "time": 240, + "tier": "advanced", + "colors": { + "spectrum:magenta": 16 + }, + "experience": 4.0, + "pattern": [ + " A ", + "PSM", + "YXY" + ], + "key": { + "S": "minecraft:amethyst_shard", + "X": "spectrum:polished_basalt", + "Y": "spectrum:polished_calcite", + "A": "spectrum:pure_azurite", + "M": "spectrum:mermaids_gem", + "P": "#spectrum:pigments" + }, + "result": { + "id": "spectrum:omni_provider_node", + "count": 8 + }, + "required_advancement": "spectrum:unlocks/pastel_network/omni_refined" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_sender_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_sender_node.json new file mode 100644 index 0000000000..4abf699f25 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_sender_node.json @@ -0,0 +1,28 @@ +{ + "type": "spectrum:pedestal", + "group": "pastel_network", + "time": 240, + "tier": "advanced", + "colors": { + "spectrum:yellow": 4 + }, + "experience": 1.0, + "pattern": [ + " A ", + "PSM", + "YXY" + ], + "key": { + "S": "spectrum:citrine_shard", + "X": "spectrum:polished_basalt", + "Y": "spectrum:polished_calcite", + "A": "spectrum:raw_azurite", + "M": "spectrum:mermaids_gem", + "P": "#spectrum:pigments" + }, + "result": { + "id": "spectrum:omni_sender_node", + "count": 1 + }, + "required_advancement": "spectrum:unlocks/pastel_network/omni" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_sender_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_sender_node_refined.json new file mode 100644 index 0000000000..b3c29a0735 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_sender_node_refined.json @@ -0,0 +1,28 @@ +{ + "type": "spectrum:pedestal", + "group": "pure_pastel_network", + "time": 240, + "tier": "advanced", + "colors": { + "spectrum:yellow": 16 + }, + "experience": 4.0, + "pattern": [ + " A ", + "PSM", + "YXY" + ], + "key": { + "S": "spectrum:citrine_shard", + "X": "spectrum:polished_basalt", + "Y": "spectrum:polished_calcite", + "A": "spectrum:pure_azurite", + "M": "spectrum:mermaids_gem", + "P": "#spectrum:pigments" + }, + "result": { + "id": "spectrum:omni_sender_node", + "count": 8 + }, + "required_advancement": "spectrum:unlocks/pastel_network/omni_refined" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_storage_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_storage_node.json new file mode 100644 index 0000000000..a99c3ef89f --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_storage_node.json @@ -0,0 +1,28 @@ +{ + "type": "spectrum:pedestal", + "group": "pastel_network", + "time": 240, + "tier": "advanced", + "colors": { + "spectrum:cyan": 4 + }, + "experience": 1.0, + "pattern": [ + " A ", + "PSM", + "YXY" + ], + "key": { + "S": "spectrum:topaz_shard", + "X": "spectrum:polished_basalt", + "Y": "spectrum:polished_calcite", + "A": "spectrum:raw_azurite", + "M": "spectrum:mermaids_gem", + "P": "#spectrum:pigments" + }, + "result": { + "id": "spectrum:omni_storage_node", + "count": 1 + }, + "required_advancement": "spectrum:unlocks/pastel_network/omni" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_storage_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_storage_node_refined.json new file mode 100644 index 0000000000..3de7ba5445 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_storage_node_refined.json @@ -0,0 +1,28 @@ +{ + "type": "spectrum:pedestal", + "group": "pure_pastel_network", + "time": 240, + "tier": "advanced", + "colors": { + "spectrum:cyan": 16 + }, + "experience": 4.0, + "pattern": [ + " A ", + "PSM", + "YXY" + ], + "key": { + "S": "spectrum:topaz_shard", + "X": "spectrum:polished_basalt", + "Y": "spectrum:polished_calcite", + "A": "spectrum:pure_azurite", + "M": "spectrum:mermaids_gem", + "P": "#spectrum:pigments" + }, + "result": { + "id": "spectrum:omni_storage_node", + "count": 8 + }, + "required_advancement": "spectrum:unlocks/pastel_network/omni_refined" +} \ No newline at end of file From 7f9d2b8aaaeb54a98d80a9f9ecb4cc2c298acbc1 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 2 Aug 2026 10:35:13 +0200 Subject: [PATCH 127/477] unlock omni pastel nodes after moonstone pedestal --- .../unlocks/pastel_network/omni.json | 6 ++++ .../unlocks/pastel_network/omni_refined.json | 6 ++++ .../tier3/pastel_network/ink_node.json | 28 +++++++++++++++++++ .../pastel_network/omni_gather_node.json | 5 ++-- .../omni_gather_node_refined.json | 5 ++-- .../pastel_network/omni_provider_node.json | 5 ++-- .../omni_provider_node_refined.json | 5 ++-- .../pastel_network/omni_sender_node.json | 5 ++-- .../omni_sender_node_refined.json | 5 ++-- .../pastel_network/omni_storage_node.json | 5 ++-- .../omni_storage_node_refined.json | 5 ++-- 11 files changed, 64 insertions(+), 16 deletions(-) create mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/ink_node.json diff --git a/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/omni.json b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/omni.json index c28742f894..2e042c712f 100644 --- a/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/omni.json +++ b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/omni.json @@ -1,5 +1,11 @@ { "criteria": { + "built_complex_pedestal_structure": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:lategame/build_complex_pedestal_structure" + } + }, "unlocked_item_pastel_network": { "trigger": "revelationary:advancement_gotten", "conditions": { diff --git a/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/omni_refined.json b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/omni_refined.json index 4c1e403fb5..cc2fb65557 100644 --- a/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/omni_refined.json +++ b/src/main/resources/data/spectrum/advancement/unlocks/pastel_network/omni_refined.json @@ -1,5 +1,11 @@ { "criteria": { + "built_complex_pedestal_structure": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:lategame/build_complex_pedestal_structure" + } + }, "unlocked_refined_item_pastel_network": { "trigger": "revelationary:advancement_gotten", "conditions": { diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/ink_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/ink_node.json new file mode 100644 index 0000000000..7b0ffb2fee --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/ink_node.json @@ -0,0 +1,28 @@ +{ + "type": "spectrum:pedestal", + "group": "pastel_network", + "time": 80, + "tier": "advanced", + "colors": { + "spectrum:cyan": 1, + "spectrum:magenta": 1, + "spectrum:yellow": 1 + }, + "experience": 1.0, + "pattern": [ + " A ", + "ASA", + "YXY" + ], + "key": { + "S": "#spectrum:pigments", + "X": "spectrum:polished_basalt", + "Y": "spectrum:polished_calcite", + "A": "spectrum:raw_azurite" + }, + "result": { + "id": "spectrum:ink_node", + "count": 1 + }, + "required_advancement": "spectrum:unlocks/pastel_network/ink" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_gather_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_gather_node.json index 8e8b031bf4..3e814d3f95 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_gather_node.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_gather_node.json @@ -2,9 +2,10 @@ "type": "spectrum:pedestal", "group": "pastel_network", "time": 240, - "tier": "advanced", + "tier": "complex", "colors": { - "spectrum:black": 4 + "spectrum:black": 4, + "spectrum:white": 4 }, "experience": 1.0, "pattern": [ diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_gather_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_gather_node_refined.json index 6405c2ed15..df1d645307 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_gather_node_refined.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_gather_node_refined.json @@ -2,9 +2,10 @@ "type": "spectrum:pedestal", "group": "pure_pastel_network", "time": 240, - "tier": "advanced", + "tier": "complex", "colors": { - "spectrum:black": 16 + "spectrum:black": 16, + "spectrum:white": 16 }, "experience": 4.0, "pattern": [ diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_provider_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_provider_node.json index 42b21addca..232ddb01c0 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_provider_node.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_provider_node.json @@ -2,9 +2,10 @@ "type": "spectrum:pedestal", "group": "pastel_network", "time": 240, - "tier": "advanced", + "tier": "complex", "colors": { - "spectrum:magenta": 4 + "spectrum:magenta": 4, + "spectrum:white": 4 }, "experience": 1.0, "pattern": [ diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_provider_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_provider_node_refined.json index 4e536039a5..f9726da859 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_provider_node_refined.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_provider_node_refined.json @@ -2,9 +2,10 @@ "type": "spectrum:pedestal", "group": "pure_pastel_network", "time": 240, - "tier": "advanced", + "tier": "complex", "colors": { - "spectrum:magenta": 16 + "spectrum:magenta": 16, + "spectrum:white": 16 }, "experience": 4.0, "pattern": [ diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_sender_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_sender_node.json index 4abf699f25..9bd2bdccbe 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_sender_node.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_sender_node.json @@ -2,9 +2,10 @@ "type": "spectrum:pedestal", "group": "pastel_network", "time": 240, - "tier": "advanced", + "tier": "complex", "colors": { - "spectrum:yellow": 4 + "spectrum:yellow": 4, + "spectrum:white": 4 }, "experience": 1.0, "pattern": [ diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_sender_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_sender_node_refined.json index b3c29a0735..8e1d1fd4f5 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_sender_node_refined.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_sender_node_refined.json @@ -2,9 +2,10 @@ "type": "spectrum:pedestal", "group": "pure_pastel_network", "time": 240, - "tier": "advanced", + "tier": "complex", "colors": { - "spectrum:yellow": 16 + "spectrum:yellow": 16, + "spectrum:white": 16 }, "experience": 4.0, "pattern": [ diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_storage_node.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_storage_node.json index a99c3ef89f..00482b018d 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_storage_node.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_storage_node.json @@ -2,9 +2,10 @@ "type": "spectrum:pedestal", "group": "pastel_network", "time": 240, - "tier": "advanced", + "tier": "complex", "colors": { - "spectrum:cyan": 4 + "spectrum:cyan": 4, + "spectrum:white": 4 }, "experience": 1.0, "pattern": [ diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_storage_node_refined.json b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_storage_node_refined.json index 3de7ba5445..65a9d6c638 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_storage_node_refined.json +++ b/src/main/resources/data/spectrum/recipe/pedestal/tier3/pastel_network/omni_storage_node_refined.json @@ -2,9 +2,10 @@ "type": "spectrum:pedestal", "group": "pure_pastel_network", "time": 240, - "tier": "advanced", + "tier": "complex", "colors": { - "spectrum:cyan": 16 + "spectrum:cyan": 16, + "spectrum:white": 16 }, "experience": 4.0, "pattern": [ From ebd523743f091d0017983fdf177cc6428eebd9ce Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 2 Aug 2026 10:35:22 +0200 Subject: [PATCH 128/477] pastel guidebook entries --- .../resources/assets/spectrum/lang/en_us.json | 33 ++++++---- .../resources/assets/spectrum/lang/ko_kr.json | 10 ++-- .../resources/assets/spectrum/lang/ru_ru.json | 10 ++-- .../resources/assets/spectrum/lang/zh_cn.json | 10 ++-- .../pastel_network/connection_node.json | 6 +- .../entries/pastel_network/fluid_nodes.json | 60 +++++++++++++++++++ .../entries/pastel_network/gather_node.json | 13 ++-- .../entries/pastel_network/ink_nodes.json | 33 ++++++++++ .../entries/pastel_network/item_nodes.json | 60 +++++++++++++++++++ .../entries/pastel_network/omni_nodes.json | 60 +++++++++++++++++++ .../entries/pastel_network/provider_node.json | 8 +-- .../entries/pastel_network/sender_node.json | 10 +--- .../entries/pastel_network/storage_node.json | 10 +--- 13 files changed, 265 insertions(+), 58 deletions(-) create mode 100644 src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/fluid_nodes.json create mode 100644 src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/ink_nodes.json create mode 100644 src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/item_nodes.json create mode 100644 src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/omni_nodes.json diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 3659829065..1ec71f083e 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -2455,9 +2455,9 @@ "book.spectrum.guidebook.conflicting_enchantments.name": "Enchanting Mastery", "book.spectrum.guidebook.conflicting_enchantments.page0.text": "Today is the day where I put the problems I used to have enchanting my items with multiple, conflicting enchantments behind me.\\\nAs a master of enchanting, nothing is left to my wishes now.", "book.spectrum.guidebook.conflicting_enchantments.page1.text": "I can now use the Enchanter to apply enchantments that are normally mutually exclusive.\\\n\\\n*Such actions will require a LOT of experience*", - "book.spectrum.guidebook.connection_node.name": "Connection Node", - "book.spectrum.guidebook.connection_node.page0.text": "As the simplest of nodes the Connection Node has no active use.\\\n\\\nThey solely act as a cheap and unobtrusive way of extending the reach of my networks.", - "book.spectrum.guidebook.connection_node.page1.text": "Like all other nodes, the Connection Node has a range of 12 blocks.", + "book.spectrum.guidebook.connection_node.name": "Connection Nodes", + "book.spectrum.guidebook.connection_node.about.text": "As the simplest of nodes the Connection Node has no active use.\\\n\\\nThey solely act as a cheap and unobtrusive way of extending the reach of my networks.", + "book.spectrum.guidebook.connection_node.recipe.text": "Like all other nodes, the Connection Node has a range of 12 blocks.", "book.spectrum.guidebook.constructors_staff.page0.text": "I spend a lot of time placing blocks, so much so that I could almost believe that this is the main reason for my existence. But placing a lot of similar blocks is tedious.\\\n\\\nOr rather: *was* tedious.", "book.spectrum.guidebook.constructors_staff.page1.text": "When sneaking, expands based on all blocks instead of just matching ones.", "book.spectrum.guidebook.cotton_cloud_boots.page0.text": "Being able to fly like the birds has always been a dream of many people, including myself.\\\n\\\nI designed these boots to make it happen. The freedom is almost overwhelming! (*I didn't quite get it right without a little catch, but what can you do.*)", @@ -2681,9 +2681,8 @@ "book.spectrum.guidebook.fusion_shrine.page1.text": "Either [#](bb00bb)Calcite[#]() or [#](bb00bb)Basalt[#]() will do.\\\nRequires a focus structure and clear view of the sky.", "book.spectrum.guidebook.fusion_shrine.page2.text": "Dimensions: 9x9x5 blocks.", "book.spectrum.guidebook.fusion_shrine.page3.text": "- 1 Fusion Shrine\n- 4 Polished Gemstone Blocks\n- 4 Chiseled Polished Blocks\n- 8 Polished Pillars\n- 12 Polished Slabs\n- 77 Polished Blocks\n\n\\\nI'm able to switch [#](bb00bb)Basalt[#]() with [#](bb00bb)Calcite[#]() and choose the [Gemstone Blocks](entry://decoration/gemstone_deco) to my liking, as always.", - "book.spectrum.guidebook.gather_node.name": "Gather Node", - "book.spectrum.guidebook.gather_node.page0.text": "The Gather Node will actively request items from other nodes and put them in the connected inventory.\\\n\\\nSpecify the items to be collected in its [#](449900)filter[#]().", - "book.spectrum.guidebook.gather_node.page1.text": "Gathering Order:\n1. [Sender Nodes](entry://pastel_network/sender_node)\n2. [Provider Nodes](entry://pastel_network/provider_node)\n3. [Storage Nodes](entry://pastel_network/storage_node)", + "book.spectrum.guidebook.gather_node.name": "Gather Nodes", + "book.spectrum.guidebook.gather_node.about.text": "The Gather Node will actively request items from other nodes and put them in the connected inventory.\\\n\\\nSpecify the items to be collected in its [#](449900)filter[#]().\\\n\\\nGathering Order:\n1. [Sender Nodes](entry://pastel_network/sender_node)\n2. [Provider Nodes](entry://pastel_network/provider_node)\n3. [Storage Nodes](entry://pastel_network/storage_node)", "book.spectrum.guidebook.gemstone_armor.name": "Gemstone Armor", "book.spectrum.guidebook.gemstone_armor.page0.text": "I've had more than enough time to develop my own individual fighting style.\\\nTo best support it, I've designed a range of matching gear.\\\n\\\nDisadvantage: The ingredients used to make them are very brittle. Therefore, the durability of this equipment is relatively low.", "book.spectrum.guidebook.gemstone_armor.checklist.helmet": "Helmet: when nothingness meets hell", @@ -3721,7 +3720,7 @@ "book.spectrum.guidebook.primordial_fire.page1.text": "Without a *Soul*, everything that is left behind is *Torch*.", "book.spectrum.guidebook.primordial_fire.primordial_torch.text": "*A purple light in the darkness.*", "book.spectrum.guidebook.projectile_rebound.page0.text": "Each level gave me a small chance of [#](449900)bouncing off incoming projectiles[#]().", - "book.spectrum.guidebook.provider_node.name": "Provider Node", + "book.spectrum.guidebook.provider_node.name": "Provider Nodes", "book.spectrum.guidebook.provider_node.page0.text": "Make the items in the connected inventory available in their [Pastel Network](entry://pastel_network/pastel_network).\\\n\\\nItems are not pushed, but can be requested from [Gather Nodes](entry://pastel_network/gather_node).", "book.spectrum.guidebook.puff_circlet.page0.text": "This glistening hoop creates a protective film of air around me.\\\n\\\nGrants [#](495b24)4[#]() units of [#](2c2e8e)Azure Dike[#](). Protects me from projectiles and can cushion a long fall, using some of those charges.\\\nThe Puff Circlet also prevents [#](bb00bb)Farmland[#]() from being trampled.", "book.spectrum.guidebook.puff_circlet.page1.text": "*Gone are the days of being sniped at from behind by Skeletons.*", @@ -3826,8 +3825,8 @@ "book.spectrum.guidebook.semi_permeable_glass.page3.title": "Gemstone Variant", "book.spectrum.guidebook.semi_permeable_glass.page4.title": "Tinted Variant", "book.spectrum.guidebook.semi_permeable_glass.page5.title": "Radiant Variant", - "book.spectrum.guidebook.sender_node.name": "Sender Node", - "book.spectrum.guidebook.sender_node.page0.text": "The Sender Node will actively try to keep the connected inventory empty.\\\n\\\nThe order, in which it will push items, is as follows:\n1. [Gather Nodes](entry://pastel_network/gather_node)\n2. [Storage Nodes](entry://pastel_network/storage_node)", + "book.spectrum.guidebook.sender_node.name": "Sender Nodes", + "book.spectrum.guidebook.sender_node.about.text": "The Sender Node will actively try to keep the connected inventory empty.\\\n\\\nThe order, in which it will push items, is as follows:\n1. [Gather Nodes](entry://pastel_network/gather_node)\n2. [Storage Nodes](entry://pastel_network/storage_node)", "book.spectrum.guidebook.serendipity_reel.name": "Serendipity Reel", "book.spectrum.guidebook.serendipity_reel.page0.text": "To be honest, I no longer have to go fishing to feed myself. It is still a guilty pleasure of mine. Sitting by my pond and watching the gentle waves makes me feel calm.\\\n\\\nDoesn't mean I don't appreciate the occasional catch. Or two. Or three. Or...", "book.spectrum.guidebook.serendipity_reel.page1.text": "Chance to reel in double the loot. Or more!\\\n\\\nMax Level: 2\\\nApplicable to Spectrum's Fishing Rods.", @@ -3920,8 +3919,8 @@ "book.spectrum.guidebook.steadfast.page0.text": "Knowing me, I will create the perfect tool, only to have it fall into Lava five minutes later in a moment of derangement. And then there is the dimension of the Endermen, which dramatically punishes any mistakes.\\\n\\\nThis new enchantment will protect my favorite tools in case of brainfart (including being thrown against a cactus).", "book.spectrum.guidebook.steadfast.page1.text": "Protects tools from damage when on the ground, even from Lava or falling into the Void.\\\n\\\nMax Level: 1\\\nApplicable to all tools.", "book.spectrum.guidebook.stiffness.page0.text": "[#](449900)Decreases my attack speed[#]() with every level.", - "book.spectrum.guidebook.storage_node.name": "Storage Node", - "book.spectrum.guidebook.storage_node.page0.text": "The Storage Node shows its greatest use in combination with [Sender Nodes](entry://pastel_network/sender_node) (will push to it) and [Gather Nodes](entry://pastel_network/gather_node) (will pull from it).\\\n\\\nIts [#](449900)filter[#]() allows me to specify which items it will receive & provide. An empty filter makes the connected inventory act as a general store for all types of items.", + "book.spectrum.guidebook.storage_node.name": "Storage Nodes", + "book.spectrum.guidebook.storage_node.about.text": "The Storage Node shows its greatest use in combination with [Sender Nodes](entry://pastel_network/sender_node) (will push to it) and [Gather Nodes](entry://pastel_network/gather_node) (will pull from it).\\\n\\\nIts [#](449900)filter[#]() allows me to specify which items it will receive & provide. An empty filter makes the connected inventory act as a general store for all types of items.", "book.spectrum.guidebook.storm_stones.name": "Storm Stones", "book.spectrum.guidebook.storm_stones.page0.text": "Storms are a powerful manifestation of Mother Nature.\\\nUsing the [Fusion Shrine](entry://general/fusion_shrine) I even started one while I was crafting [some powerful resources](entry://general/onyx_shards).\\\n\\\nThere is no doubt that I will find something related to them that can help me on my journey.", "book.spectrum.guidebook.storm_stones.page0.title": "Thunderstorms", @@ -4005,6 +4004,18 @@ "book.spectrum.guidebook.pastel_network_coloring.page0.text": "The more I got to grips with my Pastel Network, the more limitations I realised – especially when I wanted to use lots of nodes in a small space.\\\n\\\nThe fact that each node always connects to all of them was one of my... more interesting design decisions.", "book.spectrum.guidebook.pastel_network_coloring.page1.title": "The Solution?", "book.spectrum.guidebook.pastel_network_coloring.page1.text": "**Color!**\\\n\\\nOnly nodes that I have painted the same colour connect to each other.\\\nNow I can use a lot of small networks in a compact space.", + "book.spectrum.guidebook.gather_node.recipe.text": "These are crafted with Onyx.", + "book.spectrum.guidebook.provider_node.recipe.text": "These are crafted with Amethyst.", + "book.spectrum.guidebook.sender_node.recipe.text": "These are crafted with Citrine.", + "book.spectrum.guidebook.storage_node.recipe.text": "These are crafted with Topaz.", + "book.spectrum.guidebook.item_nodes.name": "Item Transfer", + "book.spectrum.guidebook.item_nodes.about.text": "My constructs are happily jingling all on their own.\\\n\\\nBeing able to automatically supply them with the materials they need will be incredibly handy.", + "book.spectrum.guidebook.fluid_nodes.name": "Fluid Transfer", + "book.spectrum.guidebook.fluid_nodes.about.text": "Running around with half my stock of buckets whenever I need to carry large quantities of liquid isn't much fun in the long run.\\\nThese here can take that sweat-inducing task off my hands.", + "book.spectrum.guidebook.ink_nodes.name": "Ink Transfer", + "book.spectrum.guidebook.ink_nodes.about.text": "Ink is tricky!\\\nThese nodes do not merely transport [Ink](entry://ink/ink) from A to B, it is more like establishing a tunnel. All of the constructs in the network will share Ink with one another.\\\n\\\nInk will flow from where it is abundant to where it is scarce.", + "book.spectrum.guidebook.omni_nodes.name": "Omni Nodes", + "book.spectrum.guidebook.omni_nodes.about.text": "These jack of all trades type of nodes handle [item transfer](entry://pastel_network/item_nodes), [fluid transfer](entry://pastel_network/fluid_nodes) and [Ink transfer](entry://pastel_network/ink_nodes) all in one!\\\nGiven what I already learned from the other types of nodes, it wasn’t difficult at all to combine the functions – after all, they’re all based on the same concept.", "book.spectrum.guidebook.turn_back_to_polished": "By applying heat, all blocks can be returned to their polished state.", "book.spectrum.guidebook.two_upgrade_slots": "2 upgrade slots", diff --git a/src/main/resources/assets/spectrum/lang/ko_kr.json b/src/main/resources/assets/spectrum/lang/ko_kr.json index 6a540d8578..44ef1cb9a9 100644 --- a/src/main/resources/assets/spectrum/lang/ko_kr.json +++ b/src/main/resources/assets/spectrum/lang/ko_kr.json @@ -2455,8 +2455,8 @@ "book.spectrum.guidebook.conflicting_enchantments.page0.text": "내 장비에 서로 충돌하는 여러 마법 부여를 함께 걸지 못해 끙끙대던 과거의 문제들을 마침내 뒤로하고 떠나는 날이다.\\\n마법 부여의 숙련자로서, 이제 내 소망을 가로막는 것은 아무것도 없다.", "book.spectrum.guidebook.conflicting_enchantments.page1.text": "이제 나는 마법 부여기를 사용하여 일반적으론 중복이 불가능한 마법 부여들도 함께 적용할 수 있게 되었다.\\\n\\\n*물론 그러한 행동에는 엄청나게 많은 경험치가 요구될 것이다.*", "book.spectrum.guidebook.connection_node.name": "연결 노드", - "book.spectrum.guidebook.connection_node.page0.text": "가장 단순한 노드인 연결 노드는 그 자체로는 능동적인 역할을 하지 않는다.\\\n\\\n오로지 내 네트워크의 도달 범위를 아주 값싸고 눈에 띄지 않게 확장해 주는 역할만을 수행할 뿐이다.", - "book.spectrum.guidebook.connection_node.page1.text": "다른 모든 노드들과 마찬가지로, 연결 노드 역시 12블록의 범위를 가진다.", + "book.spectrum.guidebook.connection_node.about.text": "가장 단순한 노드인 연결 노드는 그 자체로는 능동적인 역할을 하지 않는다.\\\n\\\n오로지 내 네트워크의 도달 범위를 아주 값싸고 눈에 띄지 않게 확장해 주는 역할만을 수행할 뿐이다.", + "book.spectrum.guidebook.connection_node.recipe.text": "다른 모든 노드들과 마찬가지로, 연결 노드 역시 12블록의 범위를 가진다.", "book.spectrum.guidebook.constructors_staff.page0.text": "나는 블록을 배치하는 데 정말 많은 시간을 보낸다. 어찌나 많은지 내 존재의 주된 이유가 이것 때문은 아닐까 믿어질 정도다. 하지만 비슷한 블록을 무더기로 배치하는 건 너무나도 지루한 일이다.\\\n\\\n아니, 정확히 말하자면, 지루한 일*이었다*.", "book.spectrum.guidebook.constructors_staff.page1.text": "웅크린 상태에서는 일치하는 블록뿐만 아니라 모든 블록을 기반으로 영역을 확장한다.", "book.spectrum.guidebook.cotton_cloud_boots.page0.text": "새처럼 하늘을 날아다니는 것은 나를 포함한 많은 이들의 오랜 꿈이었다.\\\n\\\n나는 그 꿈을 실현시키기 위해 이 부츠를 고안해 냈다. 이 자유로움은 거의 압도적일 지경이다! (*약간의 흠이 있어서 완벽하게 만들어내진 못했지만, 뭐 어쩌겠는가.*)", @@ -2680,7 +2680,7 @@ "book.spectrum.guidebook.fusion_shrine.page2.text": "크기: 9x9x5 블록.", "book.spectrum.guidebook.fusion_shrine.page3.text": "- 1 융합의 성소\n- 4 윤나는 보석 블록\n- 4 조각된 윤나는 블록\n- 8 윤나는 기둥\n- 12 윤나는 반 블록\n- 77 윤나는 블록\n\n\\\n언제나 그렇듯 [#](bb00bb)현무암[#]()을 [#](bb00bb)방해석[#]()으로 바꿀 수 있고, [보석 블록](entry://decoration/gemstone_deco) 역시 내 취향에 맞게 선택할 수 있다.", "book.spectrum.guidebook.gather_node.name": "수집 노드", - "book.spectrum.guidebook.gather_node.page0.text": "수집 노드는 다른 노드들로부터 아이템을 능동적으로 요청하여 연결된 인벤토리에 집어넣는다.\\\n\\\n어떤 아이템을 수집할지는 [#](449900)필터[#]()를 통해 지정할 수 있다.", + "book.spectrum.guidebook.gather_node.about.text": "수집 노드는 다른 노드들로부터 아이템을 능동적으로 요청하여 연결된 인벤토리에 집어넣는다.\\\n\\\n어떤 아이템을 수집할지는 [#](449900)필터[#]()를 통해 지정할 수 있다.", "book.spectrum.guidebook.gather_node.page1.text": "수집 우선순위:\n1. [송신 노드](entry://pastel_network/sender_node)\n2. [제공 노드](entry://pastel_network/provider_node)\n3. [저장 노드](entry://pastel_network/storage_node)", "book.spectrum.guidebook.gemstone_armor.name": "보석 방어구", "book.spectrum.guidebook.gemstone_armor.page0.text": "나만의 독자적인 전투 스타일을 개발할 시간은 차고 넘쳤다.\\\n그 전투를 가장 잘 보조해 줄 일련의 장비들을 직접 설계했다.\\\n\\\n단점이 있다면, 제작에 쓰인 재료들이 무척이나 깨지기 쉽다는 점이다. 따라서 이 장비들의 내구도는 상대적으로 낮은 편이다.", @@ -3825,7 +3825,7 @@ "book.spectrum.guidebook.semi_permeable_glass.page4.title": "차광 변형", "book.spectrum.guidebook.semi_permeable_glass.page5.title": "광채 변형", "book.spectrum.guidebook.sender_node.name": "송신 노드", - "book.spectrum.guidebook.sender_node.page0.text": "송신 노드는 자신과 연결된 인벤토리를 어떻게든 비워내려고 끊임없이 시도할 것이다.\\\n\\\n아이템을 밀어내는 우선순위는 다음과 같다.\n1. [수집 노드](entry://pastel_network/gather_node)\n2. [저장 노드](entry://pastel_network/storage_node)", + "book.spectrum.guidebook.sender_node.about.text": "송신 노드는 자신과 연결된 인벤토리를 어떻게든 비워내려고 끊임없이 시도할 것이다.\\\n\\\n아이템을 밀어내는 우선순위는 다음과 같다.\n1. [수집 노드](entry://pastel_network/gather_node)\n2. [저장 노드](entry://pastel_network/storage_node)", "book.spectrum.guidebook.serendipity_reel.name": "행운의 릴", "book.spectrum.guidebook.serendipity_reel.page0.text": "솔직히 말해, 이젠 굶어 죽지 않으려고 억지로 낚시질을 할 필요는 없다. 하지만 이건 여전히 내가 남몰래 즐기는 소소한 취미 중 하나다. 연못가에 걸터앉아 잔잔하게 일렁이는 파도를 보고 있자면 마음이 한없이 평온해진다.\\\n\\\n그렇다고 이따금씩 낚여 올라오는 수확물이 반갑지 않다는 뜻은 아니다. 두 개, 아니면 세 개. 그것도 아니면...", "book.spectrum.guidebook.serendipity_reel.page1.text": "전리품을 두 배로 낚아 올릴 확률을 부여한다. 어쩌면 그 이상일지도!\\\n\\\n최대 레벨: 2\\\n스펙트럼의 낚시대에 적용 가능.", @@ -3919,7 +3919,7 @@ "book.spectrum.guidebook.steadfast.page1.text": "바닥에 떨어진 도구가 그 어떤 피해를 입지 않도록 절대적으로 보호한다. 용암에 빠지거나 심지어 공허 아래로 추락하는 순간조차도 지켜낸다.\\\n\\\n최대 레벨: 1\\\n모든 도구에 적용 가능.", "book.spectrum.guidebook.stiffness.page0.text": "레벨이 오를수록 [#](449900)내 공격 속도를 끔찍하게 늦춰버린다[#]().", "book.spectrum.guidebook.storage_node.name": "저장 노드", - "book.spectrum.guidebook.storage_node.page0.text": "저장 노드는 자신에게 아이템을 쑤셔 넣으려는 [송신 노드](entry://pastel_network/sender_node)와 자신에게서 아이템을 빼가려는 [수집 노드](entry://pastel_network/gather_node)와 함께 쓰일 때 그 진가가 폭발한다.\\\n\\\n[#](449900)필터[#]()를 사용하면 어떤 아이템을 넣고 꺼낼지 자세히 지정할 수 있다. 필터를 비워두면, 연결된 인벤토리는 잡다한 물건을 모조리 넣는 공용 창고로 돌변한다.", + "book.spectrum.guidebook.storage_node.about.text": "저장 노드는 자신에게 아이템을 쑤셔 넣으려는 [송신 노드](entry://pastel_network/sender_node)와 자신에게서 아이템을 빼가려는 [수집 노드](entry://pastel_network/gather_node)와 함께 쓰일 때 그 진가가 폭발한다.\\\n\\\n[#](449900)필터[#]()를 사용하면 어떤 아이템을 넣고 꺼낼지 자세히 지정할 수 있다. 필터를 비워두면, 연결된 인벤토리는 잡다한 물건을 모조리 넣는 공용 창고로 돌변한다.", "book.spectrum.guidebook.storm_stones.name": "폭풍석", "book.spectrum.guidebook.storm_stones.page0.text": "폭풍은 대자연이 보여주는 가장 압도적인 힘의 과시다.\\\n내가 [어떤 강력한 자원들](entry://general/onyx_shards)을 조합하느라 쩔쩔매고 있을 때, [융합의 성소](entry://general/fusion_shrine)를 통해 불러내기도 했었다.\\\n\\\n분명 내 앞으로의 여정에 피가 되고 살이 될 폭풍과 관련된 무언가를 찾아낼 수 있을 거라는 확신이 든다.", "book.spectrum.guidebook.storm_stones.page0.title": "뇌우", diff --git a/src/main/resources/assets/spectrum/lang/ru_ru.json b/src/main/resources/assets/spectrum/lang/ru_ru.json index 637d6a91f4..1815adaf56 100644 --- a/src/main/resources/assets/spectrum/lang/ru_ru.json +++ b/src/main/resources/assets/spectrum/lang/ru_ru.json @@ -2451,8 +2451,8 @@ "book.spectrum.guidebook.conflicting_enchantments.page0.text": "Сегодня настал день, когда я отодвигаю проблемы, которые у меня были при зачаровывании моих предметов множеством конфликтующих зачарований в сторону.\\\nКак мастер зачарований, больше меня ничего не останавливает от моих желаний.", "book.spectrum.guidebook.conflicting_enchantments.page1.text": "Теперь я могу использовать зачарователь, чтобы применять зачарования, которые обычно являются взаимоисключающими.\\\n\\\n*Такие действия потребуют МНОГО опыта*", "book.spectrum.guidebook.connection_node.name": "Узел соединения", - "book.spectrum.guidebook.connection_node.page0.text": "Как самый простой из узлов, узел соединения не имеет активного применения.\\\n\\\nОни лишь действуют как дешёвый и ненавязчивый способ удлинения досягаемости моих сетей.", - "book.spectrum.guidebook.connection_node.page1.text": "Как и все другие узлы, узел соединения имеет длину в 12 блоков.", + "book.spectrum.guidebook.connection_node.about.text": "Как самый простой из узлов, узел соединения не имеет активного применения.\\\n\\\nОни лишь действуют как дешёвый и ненавязчивый способ удлинения досягаемости моих сетей.", + "book.spectrum.guidebook.connection_node.recipe.text": "Как и все другие узлы, узел соединения имеет длину в 12 блоков.", "book.spectrum.guidebook.constructors_staff.page0.text": "Я провожу много времени, расставляя блоки, так много, что можно подумать, что это главная причина моего существования. Расставлять множество одинаковых блоков – это утомительно.\\\n\\\nИли скорее: *было* утомительно.", "book.spectrum.guidebook.constructors_staff.page1.text": "Крадучись, расширяет на основе всех блоков, а не одинаковых.", "book.spectrum.guidebook.cotton_cloud_boots.page0.text": "Уметь летать как птица, всегда было мечтой многих людей, в том числе и меня.\\\n\\\nЯ придумал эти ботинки, чтобы сделать это. Свобода почти ошеломляет! (*Правда, без подвоха не обошлось, но что поделаешь.*)", @@ -2675,7 +2675,7 @@ "book.spectrum.guidebook.fusion_shrine.page2.text": "Размеры: 9x9x5 блоков.", "book.spectrum.guidebook.fusion_shrine.page3.text": "- 1 святыня слияния\n- 4 полиров. самоцвет. бл.\n- 4 резных блока\n- 8 полированных колонн\n- 12 полированных плит\n- 77 полированных блоков\n\n\\\nЯ могу заменить [#](bb00bb)базальт[#]() на [#](bb00bb)кальцит[#]() и выбрать [самоцветные блоки](entry://decoration/gemstone_deco) по своему вкусу, как всегда.", "book.spectrum.guidebook.gather_node.name": "Узел сбора", - "book.spectrum.guidebook.gather_node.page0.text": "Узел сбора будет активно запрашивать предметы у других узлов и помещать их в подключённый инвентарь.\\\n\\\nУкажите предметы для сбора в его [#](449900)фильтре[#]().", + "book.spectrum.guidebook.gather_node.about.text": "Узел сбора будет активно запрашивать предметы у других узлов и помещать их в подключённый инвентарь.\\\n\\\nУкажите предметы для сбора в его [#](449900)фильтре[#]().", "book.spectrum.guidebook.gather_node.page1.text": "Порядок сбора:\n1. [Узел отправки](entry://pastel_network/sender_node)\n2. [Узел снабжения](entry://pastel_network/provider_node)\n3. [Узел хранения](entry://pastel_network/storage_node)", "book.spectrum.guidebook.gemstone_armor.name": "Самоцветная броня", "book.spectrum.guidebook.gemstone_armor.page0.text": "У меня было достаточно времени, чтобы выработать свой индивидуальный стиль боя.\\\nЧтобы наилучшим образом поддержать этот стиль, я разработал ряд подходящих вещей.\\\n\\\nНедостатки: Ингредиенты, используемые чтобы сделать эти вещи, являются очень хрупкими. Поэтому прочность данного снаряжения является довольно низкой.", @@ -3824,7 +3824,7 @@ "book.spectrum.guidebook.semi_permeable_glass.page4.title": "Тонированный вариант", "book.spectrum.guidebook.semi_permeable_glass.page5.title": "Светящийся вариант", "book.spectrum.guidebook.sender_node.name": "Узел отправки", - "book.spectrum.guidebook.sender_node.page0.text": "Узел отправки будет активно пытаться держать соединённый инвентарь пустым.\\\n\\\nПорядок, в котором он будет выталкивать предметы, выглядит следующим образом:\n1. [Узел сбора](entry://pastel_network/gather_node)\n2. [Узел хранения](entry://pastel_network/storage_node)", + "book.spectrum.guidebook.sender_node.about.text": "Узел отправки будет активно пытаться держать соединённый инвентарь пустым.\\\n\\\nПорядок, в котором он будет выталкивать предметы, выглядит следующим образом:\n1. [Узел сбора](entry://pastel_network/gather_node)\n2. [Узел хранения](entry://pastel_network/storage_node)", "book.spectrum.guidebook.serendipity_reel.name": "Везучая катушка", "book.spectrum.guidebook.serendipity_reel.page0.text": "Если честно, мне больше не нужно рыбачить, чтобы прокормить себя. Но это до сих пор моё постыдное удовольствие. Сидение у пруда и наблюдение за нежными волнами вызывает у меня спокойствие.\\\n\\\nЭто не значит, что я не ценю случайную поимку. Или две. Или три. Или...", "book.spectrum.guidebook.serendipity_reel.page1.text": "Шанс выловить двойную добычу. Или больше!\\\n\\\nМаксимальный уровень: 2\\\nПрименимо ко всем удочкам Spectrum'а.", @@ -3918,7 +3918,7 @@ "book.spectrum.guidebook.steadfast.page1.text": "Защищает инструменты от всех видов урона, когда они находятся на земле, даже от лавы или падения в пустоту.\\\n\\\nМаксимальный уровень: 1\\\nПрименимо ко всем инструментам.", "book.spectrum.guidebook.stiffness.page0.text": "[#](449900)Уменьшает мою скорость атаки[#]() с каждым уровнем.", "book.spectrum.guidebook.storage_node.name": "Узел хранения", - "book.spectrum.guidebook.storage_node.page0.text": "Узел хранения будет наиболее эффективно использоваться в сочетании с [узлами отправки](entry://pastel_network/sender_node) (будут отправлять на него) и [узлами сбора](entry://pastel_network/gather_node) (будут получать от него).\\\n\\\nЕго [#](449900)фильтр[#]() позволяет мне указать, какие предметы он будет получать и отдавать. При пустом фильтре узел действует как общее хранилище для всех типов предметов.", + "book.spectrum.guidebook.storage_node.about.text": "Узел хранения будет наиболее эффективно использоваться в сочетании с [узлами отправки](entry://pastel_network/sender_node) (будут отправлять на него) и [узлами сбора](entry://pastel_network/gather_node) (будут получать от него).\\\n\\\nЕго [#](449900)фильтр[#]() позволяет мне указать, какие предметы он будет получать и отдавать. При пустом фильтре узел действует как общее хранилище для всех типов предметов.", "book.spectrum.guidebook.storm_stones.name": "Осколки грома", "book.spectrum.guidebook.storm_stones.page0.text": "Гроза – это мощное проявление Матушки Природы.\\\nИспользуя [святыню слияния](entry://general/fusion_shrine) я даже начал одну, когда я создавал [некоторые мощные ресурсы](entry://general/onyx_shards).\\\n\\\nНет никаких сомнений в том, что я найду что-то связанное с ними, что может помочь мне в моём приключении.", "book.spectrum.guidebook.storm_stones.page0.title": "Грозы", diff --git a/src/main/resources/assets/spectrum/lang/zh_cn.json b/src/main/resources/assets/spectrum/lang/zh_cn.json index d33a25cc8e..6a99327a4a 100644 --- a/src/main/resources/assets/spectrum/lang/zh_cn.json +++ b/src/main/resources/assets/spectrum/lang/zh_cn.json @@ -3903,17 +3903,17 @@ "book.spectrum.guidebook.pastel_network.page2.title": "标签过滤", "book.spectrum.guidebook.pastel_network.page2.text": "虽然我这小脑袋瓜挺聪明的,但我的节点却不怎么灵光。这在需要更细节的过滤时可是个问题。\\\n好在我可以利用这些水晶完全没脑子这一点,在[命名牌](item://minecraft:name_tag)上写下[#](449900)物品标签[#]()就能骗过节点,这样节点就只会听我的命令什么该过滤什么不该过滤!", "book.spectrum.guidebook.connection_node.name": "连接节点", - "book.spectrum.guidebook.connection_node.page0.text": "作为最基本的节点,连接节点本身没有主动功能。\\\n\\\n它仅作为一种低成本、不显眼的方式用来拓展网络范围。", - "book.spectrum.guidebook.connection_node.page1.text": "和所有节点一样,连接节点的范围为 12 格。", + "book.spectrum.guidebook.connection_node.about.text": "作为最基本的节点,连接节点本身没有主动功能。\\\n\\\n它仅作为一种低成本、不显眼的方式用来拓展网络范围。", + "book.spectrum.guidebook.connection_node.recipe.text": "和所有节点一样,连接节点的范围为 12 格。", "book.spectrum.guidebook.gather_node.name": "收集节点", - "book.spectrum.guidebook.gather_node.page0.text": "收集节点会主动向其他节点请求物品,并将其放入与之相连的容器中。\\\n\\\n打开[#](449900)过滤器[#]()可以指定要收集的物品。", + "book.spectrum.guidebook.gather_node.about.text": "收集节点会主动向其他节点请求物品,并将其放入与之相连的容器中。\\\n\\\n打开[#](449900)过滤器[#]()可以指定要收集的物品。", "book.spectrum.guidebook.gather_node.page1.text": "收集顺序:\n1. [发送节点](entry://pastel_network/sender_node)\n2. [提供节点](entry://pastel_network/provider_node)\n3. [存储节点](entry://pastel_network/storage_node)", "book.spectrum.guidebook.provider_node.name": "提供节点", "book.spectrum.guidebook.provider_node.page0.text": "将相连容器内的物品接入[绘彩网络](entry://pastel_network/pastel_network)。\\\n\\\n物品不会被主动推送,但可以被[收集节点](entry://pastel_network/gather_node)请求。", "book.spectrum.guidebook.sender_node.name": "发送节点", - "book.spectrum.guidebook.sender_node.page0.text": "发送节点会主动尝试清空相连的容器。\\\n\\\n推送顺序:\n1. [收集节点](entry://pastel_network/gather_node)\n2. [存储节点](entry://pastel_network/storage_node)", + "book.spectrum.guidebook.sender_node.about.text": "发送节点会主动尝试清空相连的容器。\\\n\\\n推送顺序:\n1. [收集节点](entry://pastel_network/gather_node)\n2. [存储节点](entry://pastel_network/storage_node)", "book.spectrum.guidebook.storage_node.name": "存储节点", - "book.spectrum.guidebook.storage_node.page0.text": "存储节点与[发送节点](entry://pastel_network/sender_node)(推送物品)和[收集节点](entry://pastel_network/gather_node)(提供物品)配合时效果最佳。\\\n\\\n其[#](449900)过滤器[#]()可指定接收与提供的物品。过滤器为空时,相连容器会作为通用储物仓库,接收所有类型物品。", + "book.spectrum.guidebook.storage_node.about.text": "存储节点与[发送节点](entry://pastel_network/sender_node)(推送物品)和[收集节点](entry://pastel_network/gather_node)(提供物品)配合时效果最佳。\\\n\\\n其[#](449900)过滤器[#]()可指定接收与提供的物品。过滤器为空时,相连容器会作为通用储物仓库,接收所有类型物品。", "book.spectrum.guidebook.pastel_upgrades.name": "绘彩节点升级", "book.spectrum.guidebook.pastel_upgrades.about.text": "唉,太残酷了,实在太残酷了——我的创造竟然 *还不够完美!* 这简直有辱我之名,这绝不能容忍。\\\n\\\n想了一会儿,答案显而易见。我可以利用环绕节点的光环来强化它们(这当然也是我设计好的一部分),现在所需的只是合适的材料...", "book.spectrum.guidebook.pastel_upgrades.enhancing.title": "节点强化", diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/connection_node.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/connection_node.json index ee473d117f..7c4b0d02d2 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/connection_node.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/connection_node.json @@ -22,14 +22,14 @@ "pages": [ { "type": "modonomicon:text", - "text": "book.spectrum.guidebook.connection_node.page0.text", + "text": "book.spectrum.guidebook.connection_node.about.text", "title": "book.spectrum.guidebook.connection_node.name" }, { "type": "spectrum:pedestal_crafting", - "text": "book.spectrum.guidebook.connection_node.page1.text", "title": "container.spectrum.rei.pedestal_recipe", - "recipe_id": "spectrum:pedestal/tier3/pastel_network/connection_node" + "recipe_id": "spectrum:pedestal/tier3/pastel_network/connection_node", + "text": "book.spectrum.guidebook.connection_node.recipe.text" }, { "type": "spectrum:pedestal_crafting", diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/fluid_nodes.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/fluid_nodes.json new file mode 100644 index 0000000000..1106f96a4e --- /dev/null +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/fluid_nodes.json @@ -0,0 +1,60 @@ +{ + "name": "book.spectrum.guidebook.fluid_nodes.name", + "icon": { + "item": "minecraft:water_bucket" + }, + "condition": { + "type": "modonomicon:advancement", + "advancement_id": "spectrum:unlocks/pastel_network/fluid" + }, + "category": "spectrum:pastel_network", + "hide_while_locked": true, + "parents": [], + "background_u_index": 0, + "background_v_index": 0, + "x": -3, + "y": -1, + "pages": [ + { + "type": "modonomicon:text", + "title": "book.spectrum.guidebook.fluid_nodes.name", + "text": "book.spectrum.guidebook.fluid_nodes.about.text" + }, + { + "type": "spectrum:pedestal_crafting", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/fluid_provider_node" + }, + { + "type": "spectrum:pedestal_crafting", + "title": "container.spectrum.rei.pure_recipe", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/fluid_provider_node_refined" + }, + { + "type": "spectrum:pedestal_crafting", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/fluid_storage_node" + }, + { + "type": "spectrum:pedestal_crafting", + "title": "container.spectrum.rei.pure_recipe", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/fluid_storage_node_refined" + }, + { + "type": "spectrum:pedestal_crafting", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/fluid_sender_node" + }, + { + "type": "spectrum:pedestal_crafting", + "title": "container.spectrum.rei.pure_recipe", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/fluid_sender_node_refined" + }, + { + "type": "spectrum:pedestal_crafting", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/fluid_gather_node" + }, + { + "type": "spectrum:pedestal_crafting", + "title": "container.spectrum.rei.pure_recipe", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/fluid_gather_node_refined" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/gather_node.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/gather_node.json index 1204cb655b..812f57e100 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/gather_node.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/gather_node.json @@ -22,19 +22,14 @@ "pages": [ { "type": "modonomicon:text", - "text": "book.spectrum.guidebook.gather_node.page0.text", - "title": "book.spectrum.guidebook.gather_node.name" + "title": "book.spectrum.guidebook.gather_node.name", + "text": "book.spectrum.guidebook.gather_node.about.text" }, { "type": "spectrum:pedestal_crafting", - "text": "book.spectrum.guidebook.gather_node.page1.text", "title": "container.spectrum.rei.pedestal_recipe", - "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_gather_node" - }, - { - "type": "spectrum:pedestal_crafting", - "title": "container.spectrum.rei.pure_recipe", - "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_gather_node_refined" + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_gather_node", + "text": "book.spectrum.guidebook.gather_node.recipe.text" } ] } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/ink_nodes.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/ink_nodes.json new file mode 100644 index 0000000000..b31e5665b8 --- /dev/null +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/ink_nodes.json @@ -0,0 +1,33 @@ +{ + "name": "book.spectrum.guidebook.ink_nodes.name", + "icon": { + "item": "spectrum:pigment_palette" + }, + "condition": { + "type": "modonomicon:advancement", + "advancement_id": "spectrum:unlocks/pastel_network/ink" + }, + "category": "spectrum:pastel_network", + "hide_while_locked": true, + "parents": [], + "background_u_index": 0, + "background_v_index": 0, + "x": -3, + "y": 1, + "pages": [ + { + "type": "modonomicon:text", + "text": "book.spectrum.guidebook.ink_nodes.about.text" + }, + { + "type": "spectrum:pedestal_crafting", + "title": "book.spectrum.guidebook.ink_nodes.name", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/ink_node" + }, + { + "type": "spectrum:pedestal_crafting", + "title": "container.spectrum.rei.pure_recipe", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/ink_node_refined" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/item_nodes.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/item_nodes.json new file mode 100644 index 0000000000..bbc90be7cd --- /dev/null +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/item_nodes.json @@ -0,0 +1,60 @@ +{ + "name": "book.spectrum.guidebook.item_nodes.name", + "icon": { + "item": "minecraft:grass_block" + }, + "condition": { + "type": "modonomicon:advancement", + "advancement_id": "spectrum:unlocks/pastel_network/item" + }, + "category": "spectrum:pastel_network", + "hide_while_locked": true, + "parents": [], + "background_u_index": 0, + "background_v_index": 0, + "x": -3, + "y": 0, + "pages": [ + { + "type": "modonomicon:text", + "title": "book.spectrum.guidebook.item_nodes.name", + "text": "book.spectrum.guidebook.item_nodes.about.text" + }, + { + "type": "spectrum:pedestal_crafting", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_provider_node" + }, + { + "type": "spectrum:pedestal_crafting", + "title": "container.spectrum.rei.pure_recipe", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_provider_node_refined" + }, + { + "type": "spectrum:pedestal_crafting", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_storage_node" + }, + { + "type": "spectrum:pedestal_crafting", + "title": "container.spectrum.rei.pure_recipe", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_storage_node_refined" + }, + { + "type": "spectrum:pedestal_crafting", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_sender_node" + }, + { + "type": "spectrum:pedestal_crafting", + "title": "container.spectrum.rei.pure_recipe", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_sender_node_refined" + }, + { + "type": "spectrum:pedestal_crafting", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_gather_node" + }, + { + "type": "spectrum:pedestal_crafting", + "title": "container.spectrum.rei.pure_recipe", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_gather_node_refined" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/omni_nodes.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/omni_nodes.json new file mode 100644 index 0000000000..7d0733a848 --- /dev/null +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/omni_nodes.json @@ -0,0 +1,60 @@ +{ + "name": "book.spectrum.guidebook.omni_nodes.name", + "icon": { + "item": "spectrum:multitool" + }, + "condition": { + "type": "modonomicon:advancement", + "advancement_id": "spectrum:unlocks/pastel_network/omni" + }, + "category": "spectrum:pastel_network", + "hide_while_locked": true, + "parents": [], + "background_u_index": 0, + "background_v_index": 0, + "x": -4, + "y": 0, + "pages": [ + { + "type": "modonomicon:text", + "title": "book.spectrum.guidebook.omni_nodes.name", + "text": "book.spectrum.guidebook.omni_nodes.about.text" + }, + { + "type": "spectrum:pedestal_crafting", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/omni_provider_node" + }, + { + "type": "spectrum:pedestal_crafting", + "title": "container.spectrum.rei.pure_recipe", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/omni_provider_node_refined" + }, + { + "type": "spectrum:pedestal_crafting", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/omni_storage_node" + }, + { + "type": "spectrum:pedestal_crafting", + "title": "container.spectrum.rei.pure_recipe", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/omni_storage_node_refined" + }, + { + "type": "spectrum:pedestal_crafting", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/omni_sender_node" + }, + { + "type": "spectrum:pedestal_crafting", + "title": "container.spectrum.rei.pure_recipe", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/omni_sender_node_refined" + }, + { + "type": "spectrum:pedestal_crafting", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/omni_gather_node" + }, + { + "type": "spectrum:pedestal_crafting", + "title": "container.spectrum.rei.pure_recipe", + "recipe_id": "spectrum:pedestal/tier3/pastel_network/omni_gather_node_refined" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/provider_node.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/provider_node.json index 9167ed480c..1ed1800dcb 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/provider_node.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/provider_node.json @@ -28,12 +28,8 @@ { "type": "spectrum:pedestal_crafting", "title": "container.spectrum.rei.pedestal_recipe", - "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_provider_node" - }, - { - "type": "spectrum:pedestal_crafting", - "title": "container.spectrum.rei.pure_recipe", - "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_provider_node_refined" + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_provider_node", + "text": "book.spectrum.guidebook.provider_node.recipe.text" } ] } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/sender_node.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/sender_node.json index d1cca223b3..18c72db8a0 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/sender_node.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/sender_node.json @@ -23,17 +23,13 @@ { "type": "modonomicon:text", "title": "book.spectrum.guidebook.sender_node.name", - "text": "book.spectrum.guidebook.sender_node.page0.text" + "text": "book.spectrum.guidebook.sender_node.about.text" }, { "type": "spectrum:pedestal_crafting", "title": "container.spectrum.rei.pedestal_recipe", - "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_sender_node" - }, - { - "type": "spectrum:pedestal_crafting", - "title": "container.spectrum.rei.pure_recipe", - "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_sender_node_refined" + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_sender_node", + "text": "book.spectrum.guidebook.sender_node.recipe.text" } ] } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/storage_node.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/storage_node.json index 5511b52aba..05dd8cff5b 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/storage_node.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/storage_node.json @@ -23,17 +23,13 @@ { "type": "modonomicon:text", "title": "book.spectrum.guidebook.storage_node.name", - "text": "book.spectrum.guidebook.storage_node.page0.text" + "text": "book.spectrum.guidebook.storage_node.about.text" }, { "type": "spectrum:pedestal_crafting", "title": "container.spectrum.rei.pedestal_recipe", - "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_storage_node" - }, - { - "type": "spectrum:pedestal_crafting", - "title": "container.spectrum.rei.pure_recipe", - "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_storage_node_refined" + "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_storage_node", + "text": "book.spectrum.guidebook.storage_node.recipe.text" } ] } \ No newline at end of file From bb24d4c79d7a2a7f82361a2ce9189bca87dd2c8a Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 2 Aug 2026 10:41:56 +0200 Subject: [PATCH 129/477] make guidebook entries nicer --- src/main/resources/assets/spectrum/lang/en_us.json | 2 +- .../books/guidebook/entries/pastel_network/fluid_nodes.json | 4 ++++ .../books/guidebook/entries/pastel_network/ink_nodes.json | 2 +- .../books/guidebook/entries/pastel_network/item_nodes.json | 4 ++++ .../books/guidebook/entries/pastel_network/omni_nodes.json | 4 ++++ 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 1ec71f083e..e9e9eb6d1a 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -4015,7 +4015,7 @@ "book.spectrum.guidebook.ink_nodes.name": "Ink Transfer", "book.spectrum.guidebook.ink_nodes.about.text": "Ink is tricky!\\\nThese nodes do not merely transport [Ink](entry://ink/ink) from A to B, it is more like establishing a tunnel. All of the constructs in the network will share Ink with one another.\\\n\\\nInk will flow from where it is abundant to where it is scarce.", "book.spectrum.guidebook.omni_nodes.name": "Omni Nodes", - "book.spectrum.guidebook.omni_nodes.about.text": "These jack of all trades type of nodes handle [item transfer](entry://pastel_network/item_nodes), [fluid transfer](entry://pastel_network/fluid_nodes) and [Ink transfer](entry://pastel_network/ink_nodes) all in one!\\\nGiven what I already learned from the other types of nodes, it wasn’t difficult at all to combine the functions – after all, they’re all based on the same concept.", + "book.spectrum.guidebook.omni_nodes.about.text": "These jack of all trades type of nodes handle [item transfer](entry://pastel_network/item_nodes), [fluid transfer](entry://pastel_network/fluid_nodes) and [Ink transfer](entry://pastel_network/ink_nodes) all in one!\\\n\\\nGiven what I already learned from the other types of nodes, it wasn’t difficult at all to combine the functions – after all, they’re all based on the same concept.", "book.spectrum.guidebook.turn_back_to_polished": "By applying heat, all blocks can be returned to their polished state.", "book.spectrum.guidebook.two_upgrade_slots": "2 upgrade slots", diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/fluid_nodes.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/fluid_nodes.json index 1106f96a4e..52abe509a7 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/fluid_nodes.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/fluid_nodes.json @@ -22,6 +22,7 @@ }, { "type": "spectrum:pedestal_crafting", + "title": "book.spectrum.guidebook.sender_node.name", "recipe_id": "spectrum:pedestal/tier3/pastel_network/fluid_provider_node" }, { @@ -31,6 +32,7 @@ }, { "type": "spectrum:pedestal_crafting", + "title": "book.spectrum.guidebook.storage_node.name", "recipe_id": "spectrum:pedestal/tier3/pastel_network/fluid_storage_node" }, { @@ -40,6 +42,7 @@ }, { "type": "spectrum:pedestal_crafting", + "title": "book.spectrum.guidebook.sender_node.name", "recipe_id": "spectrum:pedestal/tier3/pastel_network/fluid_sender_node" }, { @@ -49,6 +52,7 @@ }, { "type": "spectrum:pedestal_crafting", + "title": "book.spectrum.guidebook.gather_node.name", "recipe_id": "spectrum:pedestal/tier3/pastel_network/fluid_gather_node" }, { diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/ink_nodes.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/ink_nodes.json index b31e5665b8..7f75430238 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/ink_nodes.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/ink_nodes.json @@ -17,11 +17,11 @@ "pages": [ { "type": "modonomicon:text", + "title": "book.spectrum.guidebook.ink_nodes.name", "text": "book.spectrum.guidebook.ink_nodes.about.text" }, { "type": "spectrum:pedestal_crafting", - "title": "book.spectrum.guidebook.ink_nodes.name", "recipe_id": "spectrum:pedestal/tier3/pastel_network/ink_node" }, { diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/item_nodes.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/item_nodes.json index bbc90be7cd..3154b0094f 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/item_nodes.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/item_nodes.json @@ -22,6 +22,7 @@ }, { "type": "spectrum:pedestal_crafting", + "title": "book.spectrum.guidebook.sender_node.name", "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_provider_node" }, { @@ -31,6 +32,7 @@ }, { "type": "spectrum:pedestal_crafting", + "title": "book.spectrum.guidebook.storage_node.name", "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_storage_node" }, { @@ -40,6 +42,7 @@ }, { "type": "spectrum:pedestal_crafting", + "title": "book.spectrum.guidebook.sender_node.name", "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_sender_node" }, { @@ -49,6 +52,7 @@ }, { "type": "spectrum:pedestal_crafting", + "title": "book.spectrum.guidebook.gather_node.name", "recipe_id": "spectrum:pedestal/tier3/pastel_network/item_gather_node" }, { diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/omni_nodes.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/omni_nodes.json index 7d0733a848..43cfae7fab 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/omni_nodes.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/pastel_network/omni_nodes.json @@ -22,6 +22,7 @@ }, { "type": "spectrum:pedestal_crafting", + "title": "book.spectrum.guidebook.sender_node.name", "recipe_id": "spectrum:pedestal/tier3/pastel_network/omni_provider_node" }, { @@ -31,6 +32,7 @@ }, { "type": "spectrum:pedestal_crafting", + "title": "book.spectrum.guidebook.storage_node.name", "recipe_id": "spectrum:pedestal/tier3/pastel_network/omni_storage_node" }, { @@ -40,6 +42,7 @@ }, { "type": "spectrum:pedestal_crafting", + "title": "book.spectrum.guidebook.sender_node.name", "recipe_id": "spectrum:pedestal/tier3/pastel_network/omni_sender_node" }, { @@ -49,6 +52,7 @@ }, { "type": "spectrum:pedestal_crafting", + "title": "book.spectrum.guidebook.gather_node.name", "recipe_id": "spectrum:pedestal/tier3/pastel_network/omni_gather_node" }, { From 73ff554b4422d5ae651848bc3a86a289443d7157 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 2 Aug 2026 12:57:32 +0200 Subject: [PATCH 130/477] pastel block models --- .../pastel_network/nodes/PastelNodeBases.java | 29 +++++ .../pastel_network/nodes/PastelNodeBlock.java | 4 +- .../nodes/PastelNodeBlockEntity.java | 7 ++ .../nodes/PastelNodeBlockEntityRenderer.java | 61 +++++----- .../spectrum/registries/SpectrumBlocks.java | 32 +++--- .../registries/SpectrumEventListeners.java | 5 + .../spectrum/blockstates/dawnbrush.json | 19 ++++ .../blockstates/fluid_gather_node.json | 7 ++ .../blockstates/fluid_provider_node.json | 7 ++ .../blockstates/fluid_sender_node.json | 7 ++ .../blockstates/fluid_storage_node.json | 7 ++ .../assets/spectrum/blockstates/ink_node.json | 7 ++ .../blockstates/omni_gather_node.json | 7 ++ .../blockstates/omni_provider_node.json | 7 ++ .../blockstates/omni_sender_node.json | 7 ++ .../blockstates/omni_storage_node.json | 7 ++ .../spectrum/blockstates/tinting_station.json | 19 ++++ .../assets/spectrum/blockstates/twill.json | 19 ++++ .../spectrum/blockstates/vantaclast.json | 19 ++++ .../assets/spectrum/models/item/ink_node.json | 105 ++++++++++++++++++ .../models/technical/pastel_fluid_base.json | 69 ++++++++++++ .../models/technical/pastel_ink_base.json | 69 ++++++++++++ .../models/technical/pastel_item_base.json | 69 ++++++++++++ .../models/technical/pastel_omni_base.json | 69 ++++++++++++ .../textures/block/pastel_fluid_node_base.png | Bin 0 -> 350 bytes .../textures/block/pastel_ink_node_base.png | Bin 0 -> 442 bytes .../textures/block/pastel_omni_node_base.png | Bin 0 -> 395 bytes 27 files changed, 605 insertions(+), 53 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBases.java create mode 100644 src/main/resources/assets/spectrum/blockstates/dawnbrush.json create mode 100644 src/main/resources/assets/spectrum/blockstates/fluid_gather_node.json create mode 100644 src/main/resources/assets/spectrum/blockstates/fluid_provider_node.json create mode 100644 src/main/resources/assets/spectrum/blockstates/fluid_sender_node.json create mode 100644 src/main/resources/assets/spectrum/blockstates/fluid_storage_node.json create mode 100644 src/main/resources/assets/spectrum/blockstates/ink_node.json create mode 100644 src/main/resources/assets/spectrum/blockstates/omni_gather_node.json create mode 100644 src/main/resources/assets/spectrum/blockstates/omni_provider_node.json create mode 100644 src/main/resources/assets/spectrum/blockstates/omni_sender_node.json create mode 100644 src/main/resources/assets/spectrum/blockstates/omni_storage_node.json create mode 100644 src/main/resources/assets/spectrum/blockstates/tinting_station.json create mode 100644 src/main/resources/assets/spectrum/blockstates/twill.json create mode 100644 src/main/resources/assets/spectrum/blockstates/vantaclast.json create mode 100644 src/main/resources/assets/spectrum/models/item/ink_node.json create mode 100644 src/main/resources/assets/spectrum/models/technical/pastel_fluid_base.json create mode 100644 src/main/resources/assets/spectrum/models/technical/pastel_ink_base.json create mode 100644 src/main/resources/assets/spectrum/models/technical/pastel_item_base.json create mode 100644 src/main/resources/assets/spectrum/models/technical/pastel_omni_base.json create mode 100644 src/main/resources/assets/spectrum/textures/block/pastel_fluid_node_base.png create mode 100644 src/main/resources/assets/spectrum/textures/block/pastel_ink_node_base.png create mode 100644 src/main/resources/assets/spectrum/textures/block/pastel_omni_node_base.png diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBases.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBases.java new file mode 100644 index 0000000000..14c3447bf6 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBases.java @@ -0,0 +1,29 @@ +package de.dafuqs.spectrum.blocks.pastel_network.nodes; + +import de.dafuqs.spectrum.*; +import net.minecraft.client.resources.model.*; +import net.minecraft.resources.*; +import net.neoforged.api.distmarker.*; + +public class PastelNodeBases { + + public record PastelNodeBase(ResourceLocation location) { + + @OnlyIn(Dist.CLIENT) + public ModelResourceLocation getModelLocation() { + return ModelResourceLocation.standalone(location); + } + + } + + public static final ResourceLocation BASE_LOCATION = SpectrumCommon.locate("technical/pastel_item_base"); + public static final ResourceLocation FLUID_LOCATION = SpectrumCommon.locate("technical/pastel_fluid_base"); + public static final ResourceLocation INK_LOCATION = SpectrumCommon.locate("technical/pastel_ink_base"); + public static final ResourceLocation OMNI_LOCATION = SpectrumCommon.locate("technical/pastel_omni_base"); + + public static final PastelNodeBase ITEM = new PastelNodeBase(BASE_LOCATION); + public static final PastelNodeBase FLUID = new PastelNodeBase(FLUID_LOCATION); + public static final PastelNodeBase INK = new PastelNodeBase(INK_LOCATION); + public static final PastelNodeBase OMNI = new PastelNodeBase(OMNI_LOCATION); + +} diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java index 612d5c3ff1..77556ea135 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java @@ -52,12 +52,14 @@ public class PastelNodeBlock extends SpectrumFacingBlock implements EntityBlock, }}; protected final PastelNodeType pastelNodeType; + protected final PastelNodeBases.PastelNodeBase base; protected final Set> supportedPayloads; protected final List tooltips; - public PastelNodeBlock(Properties settings, PastelNodeType pastelNodeType, Set> supportedPayloads, List tooltips) { + public PastelNodeBlock(Properties settings, PastelNodeType pastelNodeType, PastelNodeBases.PastelNodeBase base, Set> supportedPayloads, List tooltips) { super(settings.lightLevel(s -> s.getValue(LIT) ? 13 : 0)); this.pastelNodeType = pastelNodeType; + this.base = base; this.supportedPayloads = supportedPayloads; this.tooltips = tooltips; registerDefaultState(defaultBlockState().setValue(LIT, false).setValue(REDSTONE_EMITTING, false)); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java index 6647c59304..625211be39 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java @@ -422,6 +422,13 @@ public PastelNodeType getNodeType() { return PastelNodeType.CONNECTION; } + public PastelNodeBases.PastelNodeBase getNodeBase() { + if (this.getBlockState().getBlock() instanceof PastelNodeBlock pastelNodeBlock) { + return pastelNodeBlock.base; + } + return PastelNodeBases.ITEM; + } + public Set> getSupportedPayloads() { if (this.getBlockState().getBlock() instanceof PastelNodeBlock pastelNodeBlock) { return pastelNodeBlock.supportedPayloads; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntityRenderer.java index fca6d406f1..5a0731cab6 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntityRenderer.java @@ -8,8 +8,6 @@ import de.dafuqs.spectrum.blocks.pastel_network.network.*; import de.dafuqs.spectrum.helpers.*; import net.minecraft.client.*; -import net.minecraft.client.model.geom.*; -import net.minecraft.client.model.geom.builders.*; import net.minecraft.client.renderer.*; import net.minecraft.client.renderer.block.*; import net.minecraft.client.renderer.blockentity.*; @@ -21,33 +19,23 @@ public class PastelNodeBlockEntityRenderer implements BlockEntityRenderer { private static final long REAL_DAY_LENGTH = 86400 * 20; - private static final Crystal CONNECTION = new Crystal(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/connection_node_crystal")), false); - private static final Crystal PROVIDER = new Crystal(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/provider_node_crystal")), true); - private static final Crystal SENDER = new Crystal(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/sender_node_crystal")), true); - private static final Crystal STORAGE = new Crystal(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/storage_node_crystal")), true); - private static final Crystal GATHER = new Crystal(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/gather_node_crystal")), false); - private static final ResourceLocation BASE = SpectrumCommon.locate("textures/block/pastel_node_base.png"); + private record Crystal(ModelResourceLocation crystal, boolean hasOuterRing) { + } + + private static final Crystal CRYSTAL_CONNECTION = new Crystal(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/connection_node_crystal")), false); + private static final Crystal CRYSTAL_PROVIDER = new Crystal(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/provider_node_crystal")), true); + private static final Crystal CRYSTAL_SENDER = new Crystal(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/sender_node_crystal")), true); + private static final Crystal CRYSTAL_STORAGE = new Crystal(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/storage_node_crystal")), true); + private static final Crystal CRYSTAL_GATHER = new Crystal(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/gather_node_crystal")), false); + private static final ResourceLocation INNER_RING = SpectrumCommon.locate("textures/block/pastel_node_inner_ring_blank.png"); private static final ResourceLocation OUTER_RING = SpectrumCommon.locate("textures/block/pastel_node_outer_ring_blank.png"); private static final ResourceLocation REDSTONE_RING = SpectrumCommon.locate("textures/block/pastel_node_redstone_ring_blank.png"); - private final ModelPart base; - @SuppressWarnings("unused") public PastelNodeBlockEntityRenderer(BlockEntityRendererProvider.Context ctx) { - this.base = getItemNodeBaseTexturedModelData().bakeRoot(); - } - public static LayerDefinition getItemNodeBaseTexturedModelData() { - MeshDefinition modelData = new MeshDefinition(); - PartDefinition modelPartData = modelData.getRoot(); - modelPartData.addOrReplaceChild("base", CubeListBuilder.create().texOffs(6, 0).addBox(-1.0F, 1.1F, -1.0F, 2.0F, 0.0F, 2.0F), PartPose.ZERO); - modelPartData.addOrReplaceChild("leaf1", CubeListBuilder.create().texOffs(-4, 0).addBox(-2.0F, 1.0F, -4.0F, 4.0F, 0.0F, 4.0F), PartPose.offsetAndRotation(0.0F, 0.0F, -1.0F, 0.5236F, 0.0F, 0.0F)); - modelPartData.addOrReplaceChild("leaf2", CubeListBuilder.create().texOffs(-4, 4).addBox(-2.0F, 1.0F, 0.0F, 4.0F, 0.0F, 4.0F), PartPose.offsetAndRotation(0.0F, 0.0F, 1.0F, -0.5236F, 0.0F, 0.0F)); - modelPartData.addOrReplaceChild("leaf3", CubeListBuilder.create().texOffs(-4, 8).addBox(0.0F, 1.0F, -2.0F, 4.0F, 0.0F, 4.0F), PartPose.offsetAndRotation(1.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.5236F)); - modelPartData.addOrReplaceChild("leaf4", CubeListBuilder.create().texOffs(-4, 12).addBox(-4.0F, 1.0F, -2.0F, 4.0F, 0.0F, 4.0F), PartPose.offsetAndRotation(-1.0F, 0.0F, 0.0F, 0.0F, 0.0F, -0.5236F)); - return LayerDefinition.create(modelData, 16, 16); } @Override @@ -61,12 +49,12 @@ public void render(PastelNodeBlockEntity node, float tickDelta, PoseStack matric var time = (world.getGameTime() + node.getCreationStamp()) % REAL_DAY_LENGTH + tickDelta; - var crystal = switch (node.getNodeType()) { - case CONNECTION -> CONNECTION; - case STORAGE -> STORAGE; - case PROVIDER -> PROVIDER; - case SENDER -> SENDER; - case GATHER -> GATHER; + Crystal crystal = switch (node.getNodeType()) { + case CONNECTION -> CRYSTAL_CONNECTION; + case STORAGE -> CRYSTAL_STORAGE; + case PROVIDER -> CRYSTAL_PROVIDER; + case SENDER -> CRYSTAL_SENDER; + case GATHER -> CRYSTAL_GATHER; }; var heightMod = 0.5F; @@ -117,16 +105,19 @@ public void render(PastelNodeBlockEntity node, float tickDelta, PoseStack matric } } + BlockRenderDispatcher blockRenderManager = Minecraft.getInstance().getBlockRenderer(); + matrices.translate(0, -0.5, 0); float quarterCrystalRotation = node.crystalRotation / 2; - matrices.mulPose(Axis.YP.rotation(quarterCrystalRotation)); - var rootBuffer = vertexConsumers.getBuffer(RenderType.entityCutout(BASE)); - base.render(matrices, rootBuffer, light, overlay); + // BASE + matrices.mulPose(Axis.YP.rotation(quarterCrystalRotation)); + ModelResourceLocation base = node.getNodeBase().getModelLocation(); + blockRenderManager.getModelRenderer().renderModel(matrices.last(), vertexConsumers.getBuffer(Sheets.cutoutBlockSheet()), null, blockRenderManager.getBlockModelShaper().getModelManager().getModel(base), 1.0F, 1.0F, 1.0F, LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY); matrices.mulPose(Axis.YP.rotation(quarterCrystalRotation * 2)); + // RINGS matrices.scale(0.6F, 0.6F, 0.6F); - var color = SpectrumColorHelper.colorIntToVec(node.networkUUID.flatMap(id -> Pastel.getClientInstance().getNetwork(id)).map(PastelNetwork::getColor).orElse(0xFFFFFF)); color = SpectrumColorHelper.colorIntToVec(SpectrumColorHelper.interpolate(color, SpectrumColorHelper.WASH, 0.2125F)); @@ -154,16 +145,14 @@ public void render(PastelNodeBlockEntity node, float tickDelta, PoseStack matric } } + // CRYSTAL matrices.translate(0.0, node.crystalHeight, 0.0); - BlockRenderDispatcher blockRenderManager = Minecraft.getInstance().getBlockRenderer(); - blockRenderManager.getModelRenderer().renderModel(matrices.last(), vertexConsumers.getBuffer(Sheets.solidBlockSheet()), null, blockRenderManager.getBlockModelShaper().getModelManager().getModel(crystal.crystal), 1.0F, 1.0F, 1.0F, LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY); + blockRenderManager.getModelRenderer().renderModel(matrices.last(), vertexConsumers.getBuffer(Sheets.translucentCullBlockSheet()), null, blockRenderManager.getBlockModelShaper().getModelManager().getModel(crystal.crystal), 1.0F, 1.0F, 1.0F, LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY); matrices.popPose(); } private float mod(double in) { return (float) (in % (Math.PI * 2)); } - - private record Crystal(ModelResourceLocation crystal, boolean hasOuterRing) { - } + } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index 99d22ab515..fa492bfe96 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -577,26 +577,26 @@ private static BlockBehaviour.Properties pastelNode(SoundType soundGroup) { return settings(MapColor.NONE, soundGroup, 1.0F).pushReaction(PushReaction.DESTROY).noOcclusion(); } - public static final DeferredBlock CONNECTION_NODE = register(blockWithItem("connection_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.CONNECTION, Set.of(), List.of(Component.translatable("block.spectrum.connection_node.tooltip"))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock CONNECTION_NODE = register(blockWithItem("connection_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.CONNECTION, PastelNodeBases.ITEM, Set.of(), List.of(Component.translatable("block.spectrum.connection_node.tooltip"))), () -> IS.of()).withPredefinedItemModel()); public static final DeferredBlock INK_NODE = register(blockWithItem("ink_node", - () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.ink_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.SENDER, PastelNodeBases.INK, Set.of(SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.ink_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); // TODO: rename ids to "item_*" with next major update - public static final DeferredBlock ITEM_PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.provider_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); - public static final DeferredBlock ITEM_STORAGE_NODE = register(blockWithItem("storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.storage_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); - public static final DeferredBlock ITEM_SENDER_NODE = register(blockWithItem("sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.sender_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); - public static final DeferredBlock ITEM_GATHER_NODE = register(blockWithItem("gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.gather_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); - - public static final DeferredBlock FLUID_PROVIDER_NODE = register(blockWithItem("fluid_provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_provider_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); - public static final DeferredBlock FLUID_STORAGE_NODE = register(blockWithItem("fluid_storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_storage_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); - public static final DeferredBlock FLUID_SENDER_NODE = register(blockWithItem("fluid_sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_sender_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); - public static final DeferredBlock FLUID_GATHER_NODE = register(blockWithItem("fluid_gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_gather_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); - - public static final DeferredBlock OMNI_PROVIDER_NODE = register(blockWithItem("omni_provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_provider_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); - public static final DeferredBlock OMNI_STORAGE_NODE = register(blockWithItem("omni_storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_storage_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); - public static final DeferredBlock OMNI_SENDER_NODE = register(blockWithItem("omni_sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_sender_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); - public static final DeferredBlock OMNI_GATHER_NODE = register(blockWithItem("omni_gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_gather_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock ITEM_PROVIDER_NODE = register(blockWithItem("provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, PastelNodeBases.ITEM, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.provider_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock ITEM_STORAGE_NODE = register(blockWithItem("storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, PastelNodeBases.ITEM, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.storage_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock ITEM_SENDER_NODE = register(blockWithItem("sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, PastelNodeBases.ITEM, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.sender_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock ITEM_GATHER_NODE = register(blockWithItem("gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, PastelNodeBases.ITEM, Set.of(SpectrumPastelPayloadTypes.ITEM), List.of(Component.translatable("block.spectrum.gather_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + + public static final DeferredBlock FLUID_PROVIDER_NODE = register(blockWithItem("fluid_provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, PastelNodeBases.FLUID, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_provider_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock FLUID_STORAGE_NODE = register(blockWithItem("fluid_storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, PastelNodeBases.FLUID, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_storage_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock FLUID_SENDER_NODE = register(blockWithItem("fluid_sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, PastelNodeBases.FLUID, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_sender_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock FLUID_GATHER_NODE = register(blockWithItem("fluid_gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, PastelNodeBases.FLUID, Set.of(SpectrumPastelPayloadTypes.FLUID), List.of(Component.translatable("block.spectrum.fluid_gather_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.fluid_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + + public static final DeferredBlock OMNI_PROVIDER_NODE = register(blockWithItem("omni_provider_node", () -> new PastelNodeBlock(pastelNode(SoundType.AMETHYST_CLUSTER), PastelNodeType.PROVIDER, PastelNodeBases.OMNI, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_provider_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock OMNI_STORAGE_NODE = register(blockWithItem("omni_storage_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.TOPAZ_CLUSTER), PastelNodeType.STORAGE, PastelNodeBases.OMNI, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_storage_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock OMNI_SENDER_NODE = register(blockWithItem("omni_sender_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.CITRINE_CLUSTER), PastelNodeType.SENDER, PastelNodeBases.OMNI, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_sender_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); + public static final DeferredBlock OMNI_GATHER_NODE = register(blockWithItem("omni_gather_node", () -> new PastelNodeBlock(pastelNode(SpectrumSoundTypes.ONYX_CLUSTER), PastelNodeType.GATHER, PastelNodeBases.OMNI, Set.of(SpectrumPastelPayloadTypes.FLUID, SpectrumPastelPayloadTypes.ITEM, SpectrumPastelPayloadTypes.INK), List.of(Component.translatable("block.spectrum.ink_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_gather_node.tooltip").withStyle(ChatFormatting.WHITE), Component.translatable("block.spectrum.omni_pastel_network_nodes.tooltip.placing").withStyle(ChatFormatting.GRAY))), () -> IS.of()).withPredefinedItemModel()); // COLORED BLOCK FAMILIES diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index ca4185b4b1..e2520202cf 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -90,6 +90,11 @@ public static void registerAdditional(ModelEvent.RegisterAdditional event) { event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/sender_node_crystal"))); event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/storage_node_crystal"))); event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/gather_node_crystal"))); + + event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/pastel_item_base"))); + event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/pastel_ink_base"))); + event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/pastel_fluid_base"))); + event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/pastel_omni_base"))); } @SubscribeEvent diff --git a/src/main/resources/assets/spectrum/blockstates/dawnbrush.json b/src/main/resources/assets/spectrum/blockstates/dawnbrush.json new file mode 100644 index 0000000000..9ac7e153f8 --- /dev/null +++ b/src/main/resources/assets/spectrum/blockstates/dawnbrush.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "spectrum:block/dawnbrush", + "y": 180 + }, + "facing=north": { + "model": "spectrum:block/dawnbrush", + "y": 90 + }, + "facing=south": { + "model": "spectrum:block/dawnbrush", + "y": 270 + }, + "facing=west": { + "model": "spectrum:block/dawnbrush" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/blockstates/fluid_gather_node.json b/src/main/resources/assets/spectrum/blockstates/fluid_gather_node.json new file mode 100644 index 0000000000..2c02209755 --- /dev/null +++ b/src/main/resources/assets/spectrum/blockstates/fluid_gather_node.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "spectrum:block/fluid_gather_node" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/blockstates/fluid_provider_node.json b/src/main/resources/assets/spectrum/blockstates/fluid_provider_node.json new file mode 100644 index 0000000000..802da1ebd0 --- /dev/null +++ b/src/main/resources/assets/spectrum/blockstates/fluid_provider_node.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "spectrum:block/fluid_provider_node" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/blockstates/fluid_sender_node.json b/src/main/resources/assets/spectrum/blockstates/fluid_sender_node.json new file mode 100644 index 0000000000..6b33b6f1cd --- /dev/null +++ b/src/main/resources/assets/spectrum/blockstates/fluid_sender_node.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "spectrum:block/fluid_sender_node" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/blockstates/fluid_storage_node.json b/src/main/resources/assets/spectrum/blockstates/fluid_storage_node.json new file mode 100644 index 0000000000..ec724ca191 --- /dev/null +++ b/src/main/resources/assets/spectrum/blockstates/fluid_storage_node.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "spectrum:block/fluid_storage_node" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/blockstates/ink_node.json b/src/main/resources/assets/spectrum/blockstates/ink_node.json new file mode 100644 index 0000000000..44aa5b14b1 --- /dev/null +++ b/src/main/resources/assets/spectrum/blockstates/ink_node.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "spectrum:block/ink_node" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/blockstates/omni_gather_node.json b/src/main/resources/assets/spectrum/blockstates/omni_gather_node.json new file mode 100644 index 0000000000..c624f1b456 --- /dev/null +++ b/src/main/resources/assets/spectrum/blockstates/omni_gather_node.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "spectrum:block/omni_gather_node" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/blockstates/omni_provider_node.json b/src/main/resources/assets/spectrum/blockstates/omni_provider_node.json new file mode 100644 index 0000000000..e330513821 --- /dev/null +++ b/src/main/resources/assets/spectrum/blockstates/omni_provider_node.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "spectrum:block/omni_provider_node" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/blockstates/omni_sender_node.json b/src/main/resources/assets/spectrum/blockstates/omni_sender_node.json new file mode 100644 index 0000000000..4ec2445b50 --- /dev/null +++ b/src/main/resources/assets/spectrum/blockstates/omni_sender_node.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "spectrum:block/omni_sender_node" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/blockstates/omni_storage_node.json b/src/main/resources/assets/spectrum/blockstates/omni_storage_node.json new file mode 100644 index 0000000000..0a4f38ec74 --- /dev/null +++ b/src/main/resources/assets/spectrum/blockstates/omni_storage_node.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "spectrum:block/omni_storage_node" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/blockstates/tinting_station.json b/src/main/resources/assets/spectrum/blockstates/tinting_station.json new file mode 100644 index 0000000000..d982e572ce --- /dev/null +++ b/src/main/resources/assets/spectrum/blockstates/tinting_station.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "spectrum:block/tinting_station", + "y": 180 + }, + "facing=north": { + "model": "spectrum:block/tinting_station", + "y": 90 + }, + "facing=south": { + "model": "spectrum:block/tinting_station", + "y": 270 + }, + "facing=west": { + "model": "spectrum:block/tinting_station" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/blockstates/twill.json b/src/main/resources/assets/spectrum/blockstates/twill.json new file mode 100644 index 0000000000..a25a64e99d --- /dev/null +++ b/src/main/resources/assets/spectrum/blockstates/twill.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "spectrum:block/twill", + "y": 180 + }, + "facing=north": { + "model": "spectrum:block/twill", + "y": 90 + }, + "facing=south": { + "model": "spectrum:block/twill", + "y": 270 + }, + "facing=west": { + "model": "spectrum:block/twill" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/blockstates/vantaclast.json b/src/main/resources/assets/spectrum/blockstates/vantaclast.json new file mode 100644 index 0000000000..b9b4d04be7 --- /dev/null +++ b/src/main/resources/assets/spectrum/blockstates/vantaclast.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "spectrum:block/vantaclast", + "y": 180 + }, + "facing=north": { + "model": "spectrum:block/vantaclast", + "y": 90 + }, + "facing=south": { + "model": "spectrum:block/vantaclast", + "y": 270 + }, + "facing=west": { + "model": "spectrum:block/vantaclast" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/ink_node.json b/src/main/resources/assets/spectrum/models/item/ink_node.json new file mode 100644 index 0000000000..252378aea4 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/ink_node.json @@ -0,0 +1,105 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", + "textures": { + "2": "spectrum:block/connection_node_crystal", + "particle": "spectrum:block/pastel_ink_node_base" + }, + "elements": [ + { + "name": "base", + "from": [7, 2, 7], + "to": [9, 2, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]}, + "faces": { + "up": {"uv": [10, 2, 8, 0], "texture": "#particle"}, + "down": {"uv": [12, 0, 10, 2], "texture": "#particle"} + } + }, + { + "name": "leaf1", + "from": [6, 2, 8], + "to": [10, 2, 14], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 2, 9]}, + "faces": { + "up": {"uv": [4, 12, 0, 8], "texture": "#particle"}, + "down": {"uv": [8, 8, 4, 12], "texture": "#particle"} + } + }, + { + "name": "leaf2", + "from": [6, 2, 2], + "to": [10, 2, 8], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 2, 7]}, + "faces": { + "up": {"uv": [4, 4, 0, 0], "texture": "#particle"}, + "down": {"uv": [8, 0, 4, 4], "texture": "#particle"} + } + }, + { + "name": "leaf3", + "from": [2, 2, 6], + "to": [8, 2, 10], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7, 2, 8]}, + "faces": { + "up": {"uv": [4, 8, 0, 4], "texture": "#particle"}, + "down": {"uv": [8, 4, 4, 8], "texture": "#particle"} + } + }, + { + "name": "leaf4", + "from": [8, 2, 6], + "to": [14, 2, 10], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9, 2, 8]}, + "faces": { + "up": {"uv": [4, 16, 0, 12], "texture": "#particle"}, + "down": {"uv": [8, 12, 4, 16], "texture": "#particle"} + } + }, + { + "name": "crystal", + "from": [6.5, 5, 6.5], + "to": [9.5, 11, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 6], "texture": "#2"}, + "east": {"uv": [0, 0, 3, 6], "texture": "#2"}, + "south": {"uv": [0, 0, 3, 6], "texture": "#2"}, + "west": {"uv": [0, 0, 3, 6], "texture": "#2"}, + "up": {"uv": [4, 0, 7, 3], "texture": "#2"}, + "down": {"uv": [4, 3, 7, 6], "texture": "#2"} + } + }, + { + "name": "crystal inner", + "from": [9.65, 11.25, 9.65], + "to": [6.35, 4.75, 6.35], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [8, 0, 11, 6], "texture": "#2"}, + "east": {"uv": [8, 0, 11, 6], "texture": "#2"}, + "south": {"uv": [8, 0, 11, 6], "texture": "#2"}, + "west": {"uv": [8, 0, 11, 6], "texture": "#2"}, + "up": {"uv": [8, 0, 11, 3], "texture": "#2"}, + "down": {"uv": [8, 3, 11, 6], "texture": "#2"} + } + } + ], + "groups": [ + { + "name": "infloration", + "origin": [0, 0, 0], + "scope": 0, + "color": 0, + "children": [0, 1, 2, 3, 4] + }, + { + "name": "crystal", + "origin": [8, 3.5, 8], + "scope": 0, + "color": 0, + "children": [5, 6] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/technical/pastel_fluid_base.json b/src/main/resources/assets/spectrum/models/technical/pastel_fluid_base.json new file mode 100644 index 0000000000..075a5df3e4 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/technical/pastel_fluid_base.json @@ -0,0 +1,69 @@ +{ + "format_version": "1.21.1", + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", + "textures": { + "particle": "spectrum:block/pastel_fluid_node_base" + }, + "elements": [ + { + "name": "base", + "from": [-1, 2, -1], + "to": [1, 2, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [-1, 0, -1]}, + "faces": { + "up": {"uv": [14, 2, 12, 0], "texture": "#particle"}, + "down": {"uv": [16, 0, 14, 2], "texture": "#particle"} + } + }, + { + "name": "leaf1", + "from": [-2.5, 2, 0], + "to": [2.5, 2, 6], + "rotation": {"angle": -22.5, "axis": "x", "origin": [-0.5, 2, 1]}, + "faces": { + "up": {"uv": [5, 6, 0, 0], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "texture": "#particle"} + } + }, + { + "name": "leaf2", + "from": [-2.5, 2, -6], + "to": [2.5, 2, 0], + "rotation": {"angle": 22.5, "axis": "x", "origin": [0.5, 2, -1]}, + "faces": { + "up": {"uv": [0, 0, 5, 6], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "rotation": 180, "texture": "#particle"} + } + }, + { + "name": "leaf3", + "from": [-6, 2, -2.5], + "to": [0, 2, 2.5], + "rotation": {"angle": -22.5, "axis": "z", "origin": [-1, 2, -0.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 270, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 270, "texture": "#particle"} + } + }, + { + "name": "leaf4", + "from": [0, 2, -2.5], + "to": [6, 2, 2.5], + "rotation": {"angle": 22.5, "axis": "z", "origin": [1, 2, 0.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 90, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 90, "texture": "#particle"} + } + } + ], + "groups": [ + { + "name": "infloration", + "origin": [0, 0, 0], + "scope": 0, + "color": 0, + "children": [0, 1, 2, 3, 4] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/technical/pastel_ink_base.json b/src/main/resources/assets/spectrum/models/technical/pastel_ink_base.json new file mode 100644 index 0000000000..50536a9f7a --- /dev/null +++ b/src/main/resources/assets/spectrum/models/technical/pastel_ink_base.json @@ -0,0 +1,69 @@ +{ + "format_version": "1.21.1", + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", + "textures": { + "particle": "spectrum:block/pastel_ink_node_base" + }, + "elements": [ + { + "name": "base", + "from": [-1, 2, -1], + "to": [1, 2, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [-1, 0, -1]}, + "faces": { + "up": {"uv": [10, 2, 8, 0], "texture": "#particle"}, + "down": {"uv": [12, 0, 10, 2], "texture": "#particle"} + } + }, + { + "name": "leaf1", + "from": [-2, 2, 0], + "to": [2, 2, 6], + "rotation": {"angle": -22.5, "axis": "x", "origin": [0, 2, 1]}, + "faces": { + "up": {"uv": [4, 12, 0, 8], "texture": "#particle"}, + "down": {"uv": [8, 8, 4, 12], "texture": "#particle"} + } + }, + { + "name": "leaf2", + "from": [-2, 2, -6], + "to": [2, 2, 0], + "rotation": {"angle": 22.5, "axis": "x", "origin": [0, 2, -1]}, + "faces": { + "up": {"uv": [4, 4, 0, 0], "texture": "#particle"}, + "down": {"uv": [8, 0, 4, 4], "texture": "#particle"} + } + }, + { + "name": "leaf3", + "from": [-6, 2, -2], + "to": [0, 2, 2], + "rotation": {"angle": -22.5, "axis": "z", "origin": [-1, 2, 0]}, + "faces": { + "up": {"uv": [4, 8, 0, 4], "texture": "#particle"}, + "down": {"uv": [8, 4, 4, 8], "texture": "#particle"} + } + }, + { + "name": "leaf4", + "from": [0, 2, -2], + "to": [6, 2, 2], + "rotation": {"angle": 22.5, "axis": "z", "origin": [1, 2, 0]}, + "faces": { + "up": {"uv": [4, 16, 0, 12], "texture": "#particle"}, + "down": {"uv": [8, 12, 4, 16], "texture": "#particle"} + } + } + ], + "groups": [ + { + "name": "infloration", + "origin": [0, 0, 0], + "scope": 0, + "color": 0, + "children": [0, 1, 2, 3, 4] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/technical/pastel_item_base.json b/src/main/resources/assets/spectrum/models/technical/pastel_item_base.json new file mode 100644 index 0000000000..c86bb17a97 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/technical/pastel_item_base.json @@ -0,0 +1,69 @@ +{ + "format_version": "1.21.1", + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", + "textures": { + "particle": "spectrum:block/pastel_node_base" + }, + "elements": [ + { + "name": "base", + "from": [-1, 2, -1], + "to": [1, 2, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [-1, 0, -1]}, + "faces": { + "up": {"uv": [10, 2, 8, 0], "texture": "#particle"}, + "down": {"uv": [12, 0, 10, 2], "texture": "#particle"} + } + }, + { + "name": "leaf1", + "from": [-2, 2, 0], + "to": [2, 2, 4], + "rotation": {"angle": -22.5, "axis": "x", "origin": [0, 2, 1]}, + "faces": { + "up": {"uv": [4, 12, 0, 8], "texture": "#particle"}, + "down": {"uv": [8, 8, 4, 12], "texture": "#particle"} + } + }, + { + "name": "leaf2", + "from": [-2, 2, -4], + "to": [2, 2, 0], + "rotation": {"angle": 22.5, "axis": "x", "origin": [0, 2, -1]}, + "faces": { + "up": {"uv": [4, 4, 0, 0], "texture": "#particle"}, + "down": {"uv": [8, 0, 4, 4], "texture": "#particle"} + } + }, + { + "name": "leaf3", + "from": [-4, 2, -2], + "to": [0, 2, 2], + "rotation": {"angle": -22.5, "axis": "z", "origin": [-1, 2, 0]}, + "faces": { + "up": {"uv": [4, 8, 0, 4], "texture": "#particle"}, + "down": {"uv": [8, 4, 4, 8], "texture": "#particle"} + } + }, + { + "name": "leaf4", + "from": [0, 2, -2], + "to": [4, 2, 2], + "rotation": {"angle": 22.5, "axis": "z", "origin": [1, 2, 0]}, + "faces": { + "up": {"uv": [4, 16, 0, 12], "texture": "#particle"}, + "down": {"uv": [8, 12, 4, 16], "texture": "#particle"} + } + } + ], + "groups": [ + { + "name": "infloration", + "origin": [0, 0, 0], + "scope": 0, + "color": 0, + "children": [0, 1, 2, 3, 4] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/technical/pastel_omni_base.json b/src/main/resources/assets/spectrum/models/technical/pastel_omni_base.json new file mode 100644 index 0000000000..78dce8f3d2 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/technical/pastel_omni_base.json @@ -0,0 +1,69 @@ +{ + "format_version": "1.21.1", + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", + "textures": { + "particle": "spectrum:block/pastel_omni_node_base" + }, + "elements": [ + { + "name": "base", + "from": [-1, 2, -1], + "to": [1, 2, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 2, 0]}, + "faces": { + "up": {"uv": [14, 2, 12, 0], "texture": "#particle"}, + "down": {"uv": [16, 0, 14, 2], "texture": "#particle"} + } + }, + { + "name": "leaf1", + "from": [-2.5, 2, 0], + "to": [2.5, 2, 6], + "rotation": {"angle": -22.5, "axis": "x", "origin": [-0.5, 2, 1]}, + "faces": { + "up": {"uv": [5, 6, 0, 0], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "texture": "#missing"} + } + }, + { + "name": "leaf2", + "from": [-2.5, 2, -6], + "to": [2.5, 2, 0], + "rotation": {"angle": 22.5, "axis": "x", "origin": [0.5, 2, -1]}, + "faces": { + "up": {"uv": [0, 0, 5, 6], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "rotation": 180, "texture": "#particle"} + } + }, + { + "name": "leaf3", + "from": [-6, 2, -2.5], + "to": [0, 2, 2.5], + "rotation": {"angle": -22.5, "axis": "z", "origin": [-1, 2, -0.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 270, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 270, "texture": "#particle"} + } + }, + { + "name": "leaf4", + "from": [0, 2, -2.5], + "to": [6, 2, 2.5], + "rotation": {"angle": 22.5, "axis": "z", "origin": [1, 2, 0.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 90, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 90, "texture": "#particle"} + } + } + ], + "groups": [ + { + "name": "infloration", + "origin": [0, 0, 0], + "scope": 0, + "color": 0, + "children": [0, 1, 2, 3, 4] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/textures/block/pastel_fluid_node_base.png b/src/main/resources/assets/spectrum/textures/block/pastel_fluid_node_base.png new file mode 100644 index 0000000000000000000000000000000000000000..7cebe79e9a80dfa1f587a0d06a89e9c1b14b59c9 GIT binary patch literal 350 zcmV-k0iphhP)TJt`jFsGmJ3j^IukR&6 zVQ7nyOXMts<1|?v9_fc#GU80$-JUg^^{{_z6!%xVO~$ff*t7?+Q4}Jelrbgd!_;8T w{uKRxgC76@0RR65YDbd*000I_L_t&o02P0gA@u-3tI|Xx`>7_g0LE0!!3!n+mt4$Aut-!Nl~mQ z!by{atBT(QPISa<;CM&2Ioc+xt!nTtjLljWUsdxa=_=a zXmTcTKoi>@6Kg9MNN1af$3HaA19E?|$ZKA0-pWIF?UKluL`4&er-r?HS-|*K8UE{{ z%~_EpOT4t6=n$9;VyIjLXEGH{Ol0;EsLsMNT##p3PF7^eq8+SX83^AONsv2mGKq>N zQmIipo1Q{p(+l|xa8_i=60ukh^7-YzAQjG1Q(?PU)`@H}F002ovPDHLkV1gFztvvt$ literal 0 HcmV?d00001 From aabe96666b71ae35af50d681d545b2ad5cf8229c Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 2 Aug 2026 13:12:06 +0200 Subject: [PATCH 131/477] pastel node item models --- .../models/item/fluid_gather_node.json | 157 ++++++++++ .../models/item/fluid_provider_node.json | 145 +++++++++ .../models/item/fluid_sender_node.json | 157 ++++++++++ .../models/item/fluid_storage_node.json | 185 +++++++++++ .../spectrum/models/item/gather_node.json | 288 ++++------------- .../models/item/omni_gather_node.json | 157 ++++++++++ .../models/item/omni_provider_node.json | 145 +++++++++ .../models/item/omni_sender_node.json | 157 ++++++++++ .../models/item/omni_storage_node.json | 185 +++++++++++ .../spectrum/models/item/sender_node.json | 288 ++++------------- .../spectrum/models/item/storage_node.json | 290 ++++-------------- 11 files changed, 1468 insertions(+), 686 deletions(-) create mode 100644 src/main/resources/assets/spectrum/models/item/fluid_gather_node.json create mode 100644 src/main/resources/assets/spectrum/models/item/fluid_provider_node.json create mode 100644 src/main/resources/assets/spectrum/models/item/fluid_sender_node.json create mode 100644 src/main/resources/assets/spectrum/models/item/fluid_storage_node.json create mode 100644 src/main/resources/assets/spectrum/models/item/omni_gather_node.json create mode 100644 src/main/resources/assets/spectrum/models/item/omni_provider_node.json create mode 100644 src/main/resources/assets/spectrum/models/item/omni_sender_node.json create mode 100644 src/main/resources/assets/spectrum/models/item/omni_storage_node.json diff --git a/src/main/resources/assets/spectrum/models/item/fluid_gather_node.json b/src/main/resources/assets/spectrum/models/item/fluid_gather_node.json new file mode 100644 index 0000000000..2c4d16e8ac --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/fluid_gather_node.json @@ -0,0 +1,157 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", + "textures": { + "2": "spectrum:block/gather_node_crystal", + "3": "spectrum:block/pastel_node_inner_ring_blank", + "4": "spectrum:block/pastel_node_redstone_ring_blank", + "5": "spectrum:block/pastel_node_outer_ring_blank", + "particle": "spectrum:block/pastel_fluid_node_base" + }, + "elements": [ + { + "name": "base", + "from": [7, 2, 7], + "to": [9, 2, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]}, + "faces": { + "up": {"uv": [14, 2, 12, 0], "texture": "#particle"}, + "down": {"uv": [16, 0, 14, 2], "texture": "#particle"} + } + }, + { + "name": "leaf1", + "from": [5.5, 2, 8], + "to": [10.5, 2, 14], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7.5, 2, 9]}, + "faces": { + "up": {"uv": [5, 6, 0, 0], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "texture": "#particle"} + } + }, + { + "name": "leaf2", + "from": [5.5, 2, 2], + "to": [10.5, 2, 8], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8.5, 2, 7]}, + "faces": { + "up": {"uv": [0, 0, 5, 6], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "rotation": 180, "texture": "#particle"} + } + }, + { + "name": "leaf3", + "from": [2, 2, 5.5], + "to": [8, 2, 10.5], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7, 2, 7.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 270, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 270, "texture": "#particle"} + } + }, + { + "name": "leaf4", + "from": [8, 2, 5.5], + "to": [14, 2, 10.5], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9, 2, 8.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 90, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 90, "texture": "#particle"} + } + }, + { + "name": "crystal", + "from": [6.5, 7, 6.5], + "to": [9.5, 14, 9.5], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 10.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 7], "texture": "#2"}, + "east": {"uv": [0, 0, 3, 7], "texture": "#2"}, + "south": {"uv": [0, 0, 3, 7], "texture": "#2"}, + "west": {"uv": [0, 0, 3, 7], "texture": "#2"}, + "up": {"uv": [3, 0, 6, 3], "rotation": 270, "texture": "#2"}, + "down": {"uv": [3, 3, 6, 6], "rotation": 90, "texture": "#2"} + } + }, + { + "name": "crystal inner", + "from": [9.64264, 12.15, 11.65736], + "to": [6.34264, 8.85, 4.35736], + "rotation": {"angle": -45, "axis": "x", "origin": [7.99264, 10.5, 8.00736]}, + "faces": { + "north": {"uv": [6, 2, 8, 4], "rotation": 270, "texture": "#2"}, + "east": {"uv": [6, 0, 8, 2], "rotation": 270, "texture": "#2"}, + "south": {"uv": [6, 0, 8, 2], "rotation": 270, "texture": "#2"}, + "west": {"uv": [6, 0, 8, 2], "rotation": 270, "texture": "#2"}, + "up": {"uv": [6, 2, 8, 4], "rotation": 270, "texture": "#2"}, + "down": {"uv": [6, 2, 8, 4], "rotation": 270, "texture": "#2"} + } + }, + { + "name": "ring_inner", + "from": [4.5, 3.75, 4.5], + "to": [11.5, 3.75, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 3.75, 8]}, + "faces": { + "north": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "east": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "south": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "west": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "up": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "down": {"uv": [1, 1, 8, 8], "texture": "#3"} + } + }, + { + "name": "ring_outer", + "from": [2.5, 5.75, 2.5], + "to": [13.5, 5.75, 13.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5.75, 8]}, + "faces": { + "north": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "east": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "south": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "west": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "up": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "down": {"uv": [1, 1, 12, 12], "texture": "#5"} + } + }, + { + "name": "ring_redstone", + "from": [0.5, 5, 0.5], + "to": [15.5, 5, 15.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 8]}, + "faces": { + "north": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "east": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "south": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "west": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "up": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "down": {"uv": [1, 1, 16, 16], "texture": "#4"} + } + } + ], + "groups": [ + { + "name": "infloration", + "origin": [0, 0, 0], + "scope": 0, + "color": 0, + "children": [0, 1, 2, 3, 4] + }, + { + "name": "crystal", + "origin": [8, 3.5, 8], + "scope": 0, + "color": 0, + "children": [5, 6] + }, + { + "name": "rings", + "origin": [7.5, 5, 6.5], + "scope": 0, + "color": 0, + "children": [7, 8, 9] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/fluid_provider_node.json b/src/main/resources/assets/spectrum/models/item/fluid_provider_node.json new file mode 100644 index 0000000000..f44401dc25 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/fluid_provider_node.json @@ -0,0 +1,145 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", + "textures": { + "2": "spectrum:block/provider_node_crystal", + "3": "spectrum:block/pastel_node_inner_ring_blank", + "4": "spectrum:block/pastel_node_redstone_ring_blank", + "5": "spectrum:block/pastel_node_outer_ring_blank", + "particle": "spectrum:block/pastel_fluid_node_base" + }, + "elements": [ + { + "name": "base", + "from": [7, 2, 7], + "to": [9, 2, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]}, + "faces": { + "up": {"uv": [14, 2, 12, 0], "texture": "#particle"}, + "down": {"uv": [16, 0, 14, 2], "texture": "#particle"} + } + }, + { + "name": "leaf1", + "from": [5.5, 2, 8], + "to": [10.5, 2, 14], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7.5, 2, 9]}, + "faces": { + "up": {"uv": [5, 6, 0, 0], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "texture": "#particle"} + } + }, + { + "name": "leaf2", + "from": [5.5, 2, 2], + "to": [10.5, 2, 8], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8.5, 2, 7]}, + "faces": { + "up": {"uv": [0, 0, 5, 6], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "rotation": 180, "texture": "#particle"} + } + }, + { + "name": "leaf3", + "from": [2, 2, 5.5], + "to": [8, 2, 10.5], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7, 2, 7.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 270, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 270, "texture": "#particle"} + } + }, + { + "name": "leaf4", + "from": [8, 2, 5.5], + "to": [14, 2, 10.5], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9, 2, 8.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 90, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 90, "texture": "#particle"} + } + }, + { + "name": "crystal", + "from": [6.5, 8, 6.5], + "to": [9.5, 11, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 3], "texture": "#2"}, + "east": {"uv": [3, 0, 6, 3], "texture": "#2"}, + "south": {"uv": [0, 0, 3, 3], "texture": "#2"}, + "west": {"uv": [3, 0, 6, 3], "texture": "#2"}, + "up": {"uv": [3, 3, 6, 6], "rotation": 270, "texture": "#2"}, + "down": {"uv": [0, 3, 3, 6], "rotation": 90, "texture": "#2"} + } + }, + { + "name": "crystal inner", + "from": [9.64264, 11.15, 9.65736], + "to": [6.34264, 7.85, 6.35736], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [6, 0, 9, 3], "texture": "#2"}, + "east": {"uv": [6, 0, 9, 3], "texture": "#2"}, + "south": {"uv": [6, 0, 9, 3], "texture": "#2"}, + "west": {"uv": [6, 0, 9, 3], "texture": "#2"}, + "up": {"uv": [6, 0, 9, 3], "rotation": 270, "texture": "#2"}, + "down": {"uv": [6, 0, 9, 3], "rotation": 90, "texture": "#2"} + } + }, + { + "name": "ring_inner", + "from": [4.5, 3.75, 4.5], + "to": [11.5, 3.75, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 3.75, 8]}, + "faces": { + "up": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "down": {"uv": [1, 1, 8, 8], "texture": "#3"} + } + }, + { + "name": "ring_outer", + "from": [2.5, 5.75, 2.5], + "to": [13.5, 5.75, 13.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5.75, 8]}, + "faces": { + "up": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "down": {"uv": [1, 1, 12, 12], "texture": "#5"} + } + }, + { + "name": "ring_redstone", + "from": [0.5, 5, 0.5], + "to": [15.5, 5, 15.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 8]}, + "faces": { + "up": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "down": {"uv": [1, 1, 16, 16], "texture": "#4"} + } + } + ], + "groups": [ + { + "name": "infloration", + "origin": [0, 0, 0], + "scope": 0, + "color": 0, + "children": [0, 1, 2, 3, 4] + }, + { + "name": "crystal", + "origin": [8, 3.5, 8], + "scope": 0, + "color": 0, + "children": [5, 6] + }, + { + "name": "rings", + "origin": [7.5, 5, 6.5], + "scope": 0, + "color": 0, + "children": [7, 8, 9] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/fluid_sender_node.json b/src/main/resources/assets/spectrum/models/item/fluid_sender_node.json new file mode 100644 index 0000000000..09181974df --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/fluid_sender_node.json @@ -0,0 +1,157 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", + "textures": { + "2": "spectrum:block/sender_node_crystal", + "3": "spectrum:block/pastel_node_inner_ring_blank", + "4": "spectrum:block/pastel_node_redstone_ring_blank", + "5": "spectrum:block/pastel_node_outer_ring_blank", + "particle": "spectrum:block/pastel_fluid_node_base" + }, + "elements": [ + { + "name": "base", + "from": [7, 2, 7], + "to": [9, 2, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]}, + "faces": { + "up": {"uv": [14, 2, 12, 0], "texture": "#particle"}, + "down": {"uv": [16, 0, 14, 2], "texture": "#particle"} + } + }, + { + "name": "leaf1", + "from": [5.5, 2, 8], + "to": [10.5, 2, 14], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7.5, 2, 9]}, + "faces": { + "up": {"uv": [5, 6, 0, 0], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "texture": "#particle"} + } + }, + { + "name": "leaf2", + "from": [5.5, 2, 2], + "to": [10.5, 2, 8], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8.5, 2, 7]}, + "faces": { + "up": {"uv": [0, 0, 5, 6], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "rotation": 180, "texture": "#particle"} + } + }, + { + "name": "leaf3", + "from": [2, 2, 5.5], + "to": [8, 2, 10.5], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7, 2, 7.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 270, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 270, "texture": "#particle"} + } + }, + { + "name": "leaf4", + "from": [8, 2, 5.5], + "to": [14, 2, 10.5], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9, 2, 8.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 90, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 90, "texture": "#particle"} + } + }, + { + "name": "crystal", + "from": [6.5, 8, 6.5], + "to": [9.5, 11, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [3, 0, 0, 3], "texture": "#2"}, + "east": {"uv": [3, 0, 0, 3], "texture": "#2"}, + "south": {"uv": [3, 0, 0, 3], "texture": "#2"}, + "west": {"uv": [3, 0, 0, 3], "texture": "#2"}, + "up": {"uv": [3, 6, 6, 3], "rotation": 180, "texture": "#2"}, + "down": {"uv": [3, 3, 0, 6], "rotation": 270, "texture": "#2"} + } + }, + { + "name": "crystal inner", + "from": [9.64264, 11.15, 9.65736], + "to": [6.34264, 7.85, 6.35736], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [3, 3, 6, 0], "rotation": 90, "texture": "#2"}, + "east": {"uv": [3, 3, 6, 0], "rotation": 90, "texture": "#2"}, + "south": {"uv": [3, 3, 6, 0], "rotation": 90, "texture": "#2"}, + "west": {"uv": [3, 3, 6, 0], "rotation": 90, "texture": "#2"}, + "up": {"uv": [3, 3, 6, 0], "rotation": 180, "texture": "#2"}, + "down": {"uv": [3, 3, 6, 0], "texture": "#2"} + } + }, + { + "name": "ring_inner", + "from": [4.5, 3.75, 4.5], + "to": [11.5, 3.75, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 3.75, 8]}, + "faces": { + "north": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "east": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "south": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "west": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "up": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "down": {"uv": [1, 1, 8, 8], "texture": "#3"} + } + }, + { + "name": "ring_outer", + "from": [2.5, 5.75, 2.5], + "to": [13.5, 5.75, 13.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5.75, 8]}, + "faces": { + "north": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "east": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "south": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "west": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "up": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "down": {"uv": [1, 1, 12, 12], "texture": "#5"} + } + }, + { + "name": "ring_redstone", + "from": [0.5, 5, 0.5], + "to": [15.5, 5, 15.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 8]}, + "faces": { + "north": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "east": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "south": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "west": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "up": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "down": {"uv": [1, 1, 16, 16], "texture": "#4"} + } + } + ], + "groups": [ + { + "name": "infloration", + "origin": [0, 0, 0], + "scope": 0, + "color": 0, + "children": [0, 1, 2, 3, 4] + }, + { + "name": "crystal", + "origin": [8, 3.5, 8], + "scope": 0, + "color": 0, + "children": [5, 6] + }, + { + "name": "rings", + "origin": [7.5, 5, 6.5], + "scope": 0, + "color": 0, + "children": [7, 8, 9] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/fluid_storage_node.json b/src/main/resources/assets/spectrum/models/item/fluid_storage_node.json new file mode 100644 index 0000000000..8065a07777 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/fluid_storage_node.json @@ -0,0 +1,185 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", + "textures": { + "2": "spectrum:block/storage_node_crystal", + "3": "spectrum:block/pastel_node_inner_ring_blank", + "4": "spectrum:block/pastel_node_redstone_ring_blank", + "5": "spectrum:block/pastel_node_outer_ring_blank", + "particle": "spectrum:block/pastel_fluid_node_base" + }, + "elements": [ + { + "name": "base", + "from": [7, 2, 7], + "to": [9, 2, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]}, + "faces": { + "up": {"uv": [14, 2, 12, 0], "texture": "#particle"}, + "down": {"uv": [16, 0, 14, 2], "texture": "#particle"} + } + }, + { + "name": "leaf1", + "from": [5.5, 2, 8], + "to": [10.5, 2, 14], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7.5, 2, 9]}, + "faces": { + "up": {"uv": [5, 6, 0, 0], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "texture": "#particle"} + } + }, + { + "name": "leaf2", + "from": [5.5, 2, 2], + "to": [10.5, 2, 8], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8.5, 2, 7]}, + "faces": { + "up": {"uv": [0, 0, 5, 6], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "rotation": 180, "texture": "#particle"} + } + }, + { + "name": "leaf3", + "from": [2, 2, 5.5], + "to": [8, 2, 10.5], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7, 2, 7.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 270, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 270, "texture": "#particle"} + } + }, + { + "name": "leaf4", + "from": [8, 2, 5.5], + "to": [14, 2, 10.5], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9, 2, 8.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 90, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 90, "texture": "#particle"} + } + }, + { + "name": "lower crystal", + "from": [5.5, 7.5, 5.5], + "to": [10.5, 10.5, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 3], "texture": "#2"}, + "east": {"uv": [0, 0, 5, 3], "texture": "#2"}, + "south": {"uv": [0, 0, 5, 3], "texture": "#2"}, + "west": {"uv": [0, 0, 5, 3], "texture": "#2"}, + "up": {"uv": [5, 0, 10, 5], "rotation": 270, "texture": "#2"}, + "down": {"uv": [10, 0, 15, 5], "rotation": 90, "texture": "#2"} + } + }, + { + "name": "upper crystal", + "from": [5.5, 11.5, 5.5], + "to": [10.5, 14.5, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 3], "texture": "#2"}, + "east": {"uv": [0, 0, 5, 3], "texture": "#2"}, + "south": {"uv": [0, 0, 5, 3], "texture": "#2"}, + "west": {"uv": [0, 0, 5, 3], "texture": "#2"}, + "up": {"uv": [5, 0, 10, 5], "rotation": 270, "texture": "#2"}, + "down": {"uv": [10, 0, 15, 5], "rotation": 90, "texture": "#2"} + } + }, + { + "name": "lower crystal inner", + "from": [10.64264, 10.65, 10.65736], + "to": [5.34264, 7.35, 5.35736], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "east": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "south": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "west": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "up": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "down": {"uv": [0, 3, 2, 5], "texture": "#2"} + } + }, + { + "name": "upper crystal inner", + "from": [10.64264, 14.65, 10.65736], + "to": [5.34264, 11.35, 5.35736], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "east": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "south": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "west": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "up": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "down": {"uv": [0, 3, 2, 5], "texture": "#2"} + } + }, + { + "name": "ring_inner", + "from": [4.5, 3.75, 4.5], + "to": [11.5, 3.75, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 3.75, 8]}, + "faces": { + "north": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "east": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "south": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "west": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "up": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "down": {"uv": [1, 1, 8, 8], "texture": "#3"} + } + }, + { + "name": "ring_outer", + "from": [2.5, 5.75, 2.5], + "to": [13.5, 5.75, 13.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5.75, 8]}, + "faces": { + "north": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "east": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "south": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "west": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "up": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "down": {"uv": [1, 1, 12, 12], "texture": "#5"} + } + }, + { + "name": "ring_redstone", + "from": [0.5, 5, 0.5], + "to": [15.5, 5, 15.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 8]}, + "faces": { + "north": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "east": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "south": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "west": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "up": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "down": {"uv": [1, 1, 16, 16], "texture": "#4"} + } + } + ], + "groups": [ + { + "name": "infloration", + "origin": [0, 0, 0], + "scope": 0, + "color": 0, + "children": [0, 1, 2, 3, 4] + }, + { + "name": "crystal", + "origin": [8, 3.5, 8], + "scope": 0, + "color": 0, + "children": [5, 6, 7, 8] + }, + { + "name": "rings", + "origin": [7.5, 5, 6.5], + "scope": 0, + "color": 0, + "children": [9, 10, 11] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/gather_node.json b/src/main/resources/assets/spectrum/models/item/gather_node.json index bab7d1fbe7..28f1dd31cf 100644 --- a/src/main/resources/assets/spectrum/models/item/gather_node.json +++ b/src/main/resources/assets/spectrum/models/item/gather_node.json @@ -1,223 +1,65 @@ { - "parent": "minecraft:block/block", + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", "textures": { "2": "spectrum:block/gather_node_crystal", "3": "spectrum:block/pastel_node_inner_ring_blank", "4": "spectrum:block/pastel_node_redstone_ring_blank", "5": "spectrum:block/pastel_node_outer_ring_blank", - "particle": "spectrum:block/pastel_pedestal" + "particle": "spectrum:block/pastel_node_base" }, "elements": [ - { - "name": "base", - "from": [ - 7, - 2, - 7 - ], - "to": [ - 9, - 2, - 9 - ], - "rotation": { - "angle": 0, - "axis": "y", - "origin": [ - 7, - 0, - 7 - ] - }, - "faces": { - "up": { - "uv": [ - 10, - 2, - 8, - 0 - ], - "texture": "#particle" - }, - "down": { - "uv": [ - 12, - 0, - 10, - 2 - ], - "texture": "#particle" - } - } - }, - { - "name": "leaf1", - "from": [ - 6, - 2, - 8 - ], - "to": [ - 10, - 2, - 12 - ], - "rotation": { - "angle": -22.5, - "axis": "x", - "origin": [ - 8, - 2, - 9 - ] - }, - "faces": { - "up": { - "uv": [ - 4, - 12, - 0, - 8 - ], - "texture": "#particle" - }, - "down": { - "uv": [ - 8, - 8, - 4, - 12 - ], - "texture": "#particle" - } - } - }, - { - "name": "leaf2", - "from": [ - 6, - 2, - 4 - ], - "to": [ - 10, - 2, - 8 - ], - "rotation": { - "angle": 22.5, - "axis": "x", - "origin": [ - 8, - 2, - 7 - ] - }, - "faces": { - "up": { - "uv": [ - 4, - 4, - 0, - 0 - ], - "texture": "#particle" - }, - "down": { - "uv": [ - 8, - 0, - 4, - 4 - ], - "texture": "#particle" - } - } - }, - { - "name": "leaf3", - "from": [ - 4, - 2, - 6 - ], - "to": [ - 8, - 2, - 10 - ], - "rotation": { - "angle": -22.5, - "axis": "z", - "origin": [ - 7, - 2, - 8 - ] - }, - "faces": { - "up": { - "uv": [ - 4, - 8, - 0, - 4 - ], - "texture": "#particle" - }, - "down": { - "uv": [ - 8, - 4, - 4, - 8 - ], - "texture": "#particle" - } - } - }, - { - "name": "leaf4", - "from": [ - 8, - 2, - 6 - ], - "to": [ - 12, - 2, - 10 - ], - "rotation": { - "angle": 22.5, - "axis": "z", - "origin": [ - 9, - 2, - 8 - ] - }, - "faces": { - "up": { - "uv": [ - 4, - 16, - 0, - 12 - ], - "texture": "#particle" - }, - "down": { - "uv": [ - 8, - 12, - 4, - 16 - ], - "texture": "#particle" - } - } - }, + { + "name": "base", + "from": [7, 2, 7], + "to": [9, 2, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]}, + "faces": { + "up": {"uv": [10, 2, 8, 0], "texture": "#particle"}, + "down": {"uv": [12, 0, 10, 2], "texture": "#particle"} + } + }, + { + "name": "leaf1", + "from": [6, 2, 8], + "to": [10, 2, 12], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 2, 9]}, + "faces": { + "up": {"uv": [4, 12, 0, 8], "texture": "#particle"}, + "down": {"uv": [8, 8, 4, 12], "texture": "#particle"} + } + }, + { + "name": "leaf2", + "from": [6, 2, 4], + "to": [10, 2, 8], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 2, 7]}, + "faces": { + "up": {"uv": [4, 4, 0, 0], "texture": "#particle"}, + "down": {"uv": [8, 0, 4, 4], "texture": "#particle"} + } + }, + { + "name": "leaf3", + "from": [4, 2, 6], + "to": [8, 2, 10], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7, 2, 8]}, + "faces": { + "up": {"uv": [4, 8, 0, 4], "texture": "#particle"}, + "down": {"uv": [8, 4, 4, 8], "texture": "#particle"} + } + }, + { + "name": "leaf4", + "from": [8, 2, 6], + "to": [12, 2, 10], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9, 2, 8]}, + "faces": { + "up": {"uv": [4, 16, 0, 12], "texture": "#particle"}, + "down": {"uv": [8, 12, 4, 16], "texture": "#particle"} + } + }, { "name": "crystal", "from": [6.5, 7, 6.5], @@ -293,33 +135,23 @@ { "name": "infloration", "origin": [0, 0, 0], + "scope": 0, "color": 0, - "children": [ - 0, - 1, - 2, - 3, - 4 - ] + "children": [0, 1, 2, 3, 4] }, { "name": "crystal", "origin": [8, 3.5, 8], + "scope": 0, "color": 0, - "children": [ - 5, - 6 - ] + "children": [5, 6] }, { "name": "rings", "origin": [7.5, 5, 6.5], + "scope": 0, "color": 0, - "children": [ - 7, - 8, - 9 - ] + "children": [7, 8, 9] } ] } \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/omni_gather_node.json b/src/main/resources/assets/spectrum/models/item/omni_gather_node.json new file mode 100644 index 0000000000..a65fff22d6 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/omni_gather_node.json @@ -0,0 +1,157 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", + "textures": { + "2": "spectrum:block/gather_node_crystal", + "3": "spectrum:block/pastel_node_inner_ring_blank", + "4": "spectrum:block/pastel_node_redstone_ring_blank", + "5": "spectrum:block/pastel_node_outer_ring_blank", + "particle": "spectrum:block/pastel_omni_node_base" + }, + "elements": [ + { + "name": "base", + "from": [7, 2, 7], + "to": [9, 2, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 2, 8]}, + "faces": { + "up": {"uv": [14, 2, 12, 0], "texture": "#particle"}, + "down": {"uv": [16, 0, 14, 2], "texture": "#particle"} + } + }, + { + "name": "leaf1", + "from": [5.5, 2, 8], + "to": [10.5, 2, 14], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7.5, 2, 9]}, + "faces": { + "up": {"uv": [5, 6, 0, 0], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "texture": "#missing"} + } + }, + { + "name": "leaf2", + "from": [5.5, 2, 2], + "to": [10.5, 2, 8], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8.5, 2, 7]}, + "faces": { + "up": {"uv": [0, 0, 5, 6], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "rotation": 180, "texture": "#particle"} + } + }, + { + "name": "leaf3", + "from": [2, 2, 5.5], + "to": [8, 2, 10.5], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7, 2, 7.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 270, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 270, "texture": "#particle"} + } + }, + { + "name": "leaf4", + "from": [8, 2, 5.5], + "to": [14, 2, 10.5], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9, 2, 8.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 90, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 90, "texture": "#particle"} + } + }, + { + "name": "crystal", + "from": [6.5, 7, 6.5], + "to": [9.5, 14, 9.5], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 10.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 7], "texture": "#2"}, + "east": {"uv": [0, 0, 3, 7], "texture": "#2"}, + "south": {"uv": [0, 0, 3, 7], "texture": "#2"}, + "west": {"uv": [0, 0, 3, 7], "texture": "#2"}, + "up": {"uv": [3, 0, 6, 3], "rotation": 270, "texture": "#2"}, + "down": {"uv": [3, 3, 6, 6], "rotation": 90, "texture": "#2"} + } + }, + { + "name": "crystal inner", + "from": [9.64264, 12.15, 11.65736], + "to": [6.34264, 8.85, 4.35736], + "rotation": {"angle": -45, "axis": "x", "origin": [7.99264, 10.5, 8.00736]}, + "faces": { + "north": {"uv": [6, 2, 8, 4], "rotation": 270, "texture": "#2"}, + "east": {"uv": [6, 0, 8, 2], "rotation": 270, "texture": "#2"}, + "south": {"uv": [6, 0, 8, 2], "rotation": 270, "texture": "#2"}, + "west": {"uv": [6, 0, 8, 2], "rotation": 270, "texture": "#2"}, + "up": {"uv": [6, 2, 8, 4], "rotation": 270, "texture": "#2"}, + "down": {"uv": [6, 2, 8, 4], "rotation": 270, "texture": "#2"} + } + }, + { + "name": "ring_inner", + "from": [4.5, 3.75, 4.5], + "to": [11.5, 3.75, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 3.75, 8]}, + "faces": { + "north": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "east": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "south": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "west": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "up": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "down": {"uv": [1, 1, 8, 8], "texture": "#3"} + } + }, + { + "name": "ring_outer", + "from": [2.5, 5.75, 2.5], + "to": [13.5, 5.75, 13.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5.75, 8]}, + "faces": { + "north": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "east": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "south": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "west": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "up": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "down": {"uv": [1, 1, 12, 12], "texture": "#5"} + } + }, + { + "name": "ring_redstone", + "from": [0.5, 5, 0.5], + "to": [15.5, 5, 15.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 8]}, + "faces": { + "north": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "east": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "south": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "west": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "up": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "down": {"uv": [1, 1, 16, 16], "texture": "#4"} + } + } + ], + "groups": [ + { + "name": "infloration", + "origin": [0, 0, 0], + "scope": 0, + "color": 0, + "children": [0, 1, 2, 3, 4] + }, + { + "name": "crystal", + "origin": [8, 3.5, 8], + "scope": 0, + "color": 0, + "children": [5, 6] + }, + { + "name": "rings", + "origin": [7.5, 5, 6.5], + "scope": 0, + "color": 0, + "children": [7, 8, 9] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/omni_provider_node.json b/src/main/resources/assets/spectrum/models/item/omni_provider_node.json new file mode 100644 index 0000000000..38ff4928b6 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/omni_provider_node.json @@ -0,0 +1,145 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", + "textures": { + "2": "spectrum:block/provider_node_crystal", + "3": "spectrum:block/pastel_node_inner_ring_blank", + "4": "spectrum:block/pastel_node_redstone_ring_blank", + "5": "spectrum:block/pastel_node_outer_ring_blank", + "particle": "spectrum:block/pastel_omni_node_base" + }, + "elements": [ + { + "name": "base", + "from": [7, 2, 7], + "to": [9, 2, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 2, 8]}, + "faces": { + "up": {"uv": [14, 2, 12, 0], "texture": "#particle"}, + "down": {"uv": [16, 0, 14, 2], "texture": "#particle"} + } + }, + { + "name": "leaf1", + "from": [5.5, 2, 8], + "to": [10.5, 2, 14], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7.5, 2, 9]}, + "faces": { + "up": {"uv": [5, 6, 0, 0], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "texture": "#missing"} + } + }, + { + "name": "leaf2", + "from": [5.5, 2, 2], + "to": [10.5, 2, 8], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8.5, 2, 7]}, + "faces": { + "up": {"uv": [0, 0, 5, 6], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "rotation": 180, "texture": "#particle"} + } + }, + { + "name": "leaf3", + "from": [2, 2, 5.5], + "to": [8, 2, 10.5], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7, 2, 7.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 270, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 270, "texture": "#particle"} + } + }, + { + "name": "leaf4", + "from": [8, 2, 5.5], + "to": [14, 2, 10.5], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9, 2, 8.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 90, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 90, "texture": "#particle"} + } + }, + { + "name": "crystal", + "from": [6.5, 8, 6.5], + "to": [9.5, 11, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 3], "texture": "#2"}, + "east": {"uv": [3, 0, 6, 3], "texture": "#2"}, + "south": {"uv": [0, 0, 3, 3], "texture": "#2"}, + "west": {"uv": [3, 0, 6, 3], "texture": "#2"}, + "up": {"uv": [3, 3, 6, 6], "rotation": 270, "texture": "#2"}, + "down": {"uv": [0, 3, 3, 6], "rotation": 90, "texture": "#2"} + } + }, + { + "name": "crystal inner", + "from": [9.64264, 11.15, 9.65736], + "to": [6.34264, 7.85, 6.35736], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [6, 0, 9, 3], "texture": "#2"}, + "east": {"uv": [6, 0, 9, 3], "texture": "#2"}, + "south": {"uv": [6, 0, 9, 3], "texture": "#2"}, + "west": {"uv": [6, 0, 9, 3], "texture": "#2"}, + "up": {"uv": [6, 0, 9, 3], "rotation": 270, "texture": "#2"}, + "down": {"uv": [6, 0, 9, 3], "rotation": 90, "texture": "#2"} + } + }, + { + "name": "ring_inner", + "from": [4.5, 3.75, 4.5], + "to": [11.5, 3.75, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 3.75, 8]}, + "faces": { + "up": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "down": {"uv": [1, 1, 8, 8], "texture": "#3"} + } + }, + { + "name": "ring_outer", + "from": [2.5, 5.75, 2.5], + "to": [13.5, 5.75, 13.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5.75, 8]}, + "faces": { + "up": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "down": {"uv": [1, 1, 12, 12], "texture": "#5"} + } + }, + { + "name": "ring_redstone", + "from": [0.5, 5, 0.5], + "to": [15.5, 5, 15.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 8]}, + "faces": { + "up": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "down": {"uv": [1, 1, 16, 16], "texture": "#4"} + } + } + ], + "groups": [ + { + "name": "infloration", + "origin": [0, 0, 0], + "scope": 0, + "color": 0, + "children": [0, 1, 2, 3, 4] + }, + { + "name": "crystal", + "origin": [8, 3.5, 8], + "scope": 0, + "color": 0, + "children": [5, 6] + }, + { + "name": "rings", + "origin": [7.5, 5, 6.5], + "scope": 0, + "color": 0, + "children": [7, 8, 9] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/omni_sender_node.json b/src/main/resources/assets/spectrum/models/item/omni_sender_node.json new file mode 100644 index 0000000000..d78930e326 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/omni_sender_node.json @@ -0,0 +1,157 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", + "textures": { + "2": "spectrum:block/sender_node_crystal", + "3": "spectrum:block/pastel_node_inner_ring_blank", + "4": "spectrum:block/pastel_node_redstone_ring_blank", + "5": "spectrum:block/pastel_node_outer_ring_blank", + "particle": "spectrum:block/pastel_omni_node_base" + }, + "elements": [ + { + "name": "base", + "from": [7, 2, 7], + "to": [9, 2, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 2, 8]}, + "faces": { + "up": {"uv": [14, 2, 12, 0], "texture": "#particle"}, + "down": {"uv": [16, 0, 14, 2], "texture": "#particle"} + } + }, + { + "name": "leaf1", + "from": [5.5, 2, 8], + "to": [10.5, 2, 14], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7.5, 2, 9]}, + "faces": { + "up": {"uv": [5, 6, 0, 0], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "texture": "#missing"} + } + }, + { + "name": "leaf2", + "from": [5.5, 2, 2], + "to": [10.5, 2, 8], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8.5, 2, 7]}, + "faces": { + "up": {"uv": [0, 0, 5, 6], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "rotation": 180, "texture": "#particle"} + } + }, + { + "name": "leaf3", + "from": [2, 2, 5.5], + "to": [8, 2, 10.5], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7, 2, 7.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 270, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 270, "texture": "#particle"} + } + }, + { + "name": "leaf4", + "from": [8, 2, 5.5], + "to": [14, 2, 10.5], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9, 2, 8.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 90, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 90, "texture": "#particle"} + } + }, + { + "name": "crystal", + "from": [6.5, 8, 6.5], + "to": [9.5, 11, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [3, 0, 0, 3], "texture": "#2"}, + "east": {"uv": [3, 0, 0, 3], "texture": "#2"}, + "south": {"uv": [3, 0, 0, 3], "texture": "#2"}, + "west": {"uv": [3, 0, 0, 3], "texture": "#2"}, + "up": {"uv": [3, 6, 6, 3], "rotation": 180, "texture": "#2"}, + "down": {"uv": [3, 3, 0, 6], "rotation": 270, "texture": "#2"} + } + }, + { + "name": "crystal inner", + "from": [9.64264, 11.15, 9.65736], + "to": [6.34264, 7.85, 6.35736], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [3, 3, 6, 0], "rotation": 90, "texture": "#2"}, + "east": {"uv": [3, 3, 6, 0], "rotation": 90, "texture": "#2"}, + "south": {"uv": [3, 3, 6, 0], "rotation": 90, "texture": "#2"}, + "west": {"uv": [3, 3, 6, 0], "rotation": 90, "texture": "#2"}, + "up": {"uv": [3, 3, 6, 0], "rotation": 180, "texture": "#2"}, + "down": {"uv": [3, 3, 6, 0], "texture": "#2"} + } + }, + { + "name": "ring_inner", + "from": [4.5, 3.75, 4.5], + "to": [11.5, 3.75, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 3.75, 8]}, + "faces": { + "north": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "east": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "south": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "west": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "up": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "down": {"uv": [1, 1, 8, 8], "texture": "#3"} + } + }, + { + "name": "ring_outer", + "from": [2.5, 5.75, 2.5], + "to": [13.5, 5.75, 13.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5.75, 8]}, + "faces": { + "north": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "east": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "south": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "west": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "up": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "down": {"uv": [1, 1, 12, 12], "texture": "#5"} + } + }, + { + "name": "ring_redstone", + "from": [0.5, 5, 0.5], + "to": [15.5, 5, 15.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 8]}, + "faces": { + "north": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "east": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "south": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "west": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "up": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "down": {"uv": [1, 1, 16, 16], "texture": "#4"} + } + } + ], + "groups": [ + { + "name": "infloration", + "origin": [0, 0, 0], + "scope": 0, + "color": 0, + "children": [0, 1, 2, 3, 4] + }, + { + "name": "crystal", + "origin": [8, 3.5, 8], + "scope": 0, + "color": 0, + "children": [5, 6] + }, + { + "name": "rings", + "origin": [7.5, 5, 6.5], + "scope": 0, + "color": 0, + "children": [7, 8, 9] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/omni_storage_node.json b/src/main/resources/assets/spectrum/models/item/omni_storage_node.json new file mode 100644 index 0000000000..edec4f6046 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/omni_storage_node.json @@ -0,0 +1,185 @@ +{ + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", + "textures": { + "2": "spectrum:block/storage_node_crystal", + "3": "spectrum:block/pastel_node_inner_ring_blank", + "4": "spectrum:block/pastel_node_redstone_ring_blank", + "5": "spectrum:block/pastel_node_outer_ring_blank", + "particle": "spectrum:block/pastel_omni_node_base" + }, + "elements": [ + { + "name": "base", + "from": [7, 2, 7], + "to": [9, 2, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 2, 8]}, + "faces": { + "up": {"uv": [14, 2, 12, 0], "texture": "#particle"}, + "down": {"uv": [16, 0, 14, 2], "texture": "#particle"} + } + }, + { + "name": "leaf1", + "from": [5.5, 2, 8], + "to": [10.5, 2, 14], + "rotation": {"angle": -22.5, "axis": "x", "origin": [7.5, 2, 9]}, + "faces": { + "up": {"uv": [5, 6, 0, 0], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "texture": "#missing"} + } + }, + { + "name": "leaf2", + "from": [5.5, 2, 2], + "to": [10.5, 2, 8], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8.5, 2, 7]}, + "faces": { + "up": {"uv": [0, 0, 5, 6], "texture": "#particle"}, + "down": {"uv": [10, 0, 5, 6], "rotation": 180, "texture": "#particle"} + } + }, + { + "name": "leaf3", + "from": [2, 2, 5.5], + "to": [8, 2, 10.5], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7, 2, 7.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 270, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 270, "texture": "#particle"} + } + }, + { + "name": "leaf4", + "from": [8, 2, 5.5], + "to": [14, 2, 10.5], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9, 2, 8.5]}, + "faces": { + "up": {"uv": [5, 12, 0, 6], "rotation": 90, "texture": "#particle"}, + "down": {"uv": [5, 12, 10, 6], "rotation": 90, "texture": "#particle"} + } + }, + { + "name": "lower crystal", + "from": [5.5, 7.5, 5.5], + "to": [10.5, 10.5, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 3], "texture": "#2"}, + "east": {"uv": [0, 0, 5, 3], "texture": "#2"}, + "south": {"uv": [0, 0, 5, 3], "texture": "#2"}, + "west": {"uv": [0, 0, 5, 3], "texture": "#2"}, + "up": {"uv": [5, 0, 10, 5], "rotation": 270, "texture": "#2"}, + "down": {"uv": [10, 0, 15, 5], "rotation": 90, "texture": "#2"} + } + }, + { + "name": "upper crystal", + "from": [5.5, 11.5, 5.5], + "to": [10.5, 14.5, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 3], "texture": "#2"}, + "east": {"uv": [0, 0, 5, 3], "texture": "#2"}, + "south": {"uv": [0, 0, 5, 3], "texture": "#2"}, + "west": {"uv": [0, 0, 5, 3], "texture": "#2"}, + "up": {"uv": [5, 0, 10, 5], "rotation": 270, "texture": "#2"}, + "down": {"uv": [10, 0, 15, 5], "rotation": 90, "texture": "#2"} + } + }, + { + "name": "lower crystal inner", + "from": [10.64264, 10.65, 10.65736], + "to": [5.34264, 7.35, 5.35736], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "east": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "south": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "west": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "up": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "down": {"uv": [0, 3, 2, 5], "texture": "#2"} + } + }, + { + "name": "upper crystal inner", + "from": [10.64264, 14.65, 10.65736], + "to": [5.34264, 11.35, 5.35736], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "east": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "south": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "west": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "up": {"uv": [0, 3, 2, 5], "texture": "#2"}, + "down": {"uv": [0, 3, 2, 5], "texture": "#2"} + } + }, + { + "name": "ring_inner", + "from": [4.5, 3.75, 4.5], + "to": [11.5, 3.75, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 3.75, 8]}, + "faces": { + "north": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "east": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "south": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "west": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "up": {"uv": [1, 1, 8, 8], "texture": "#3"}, + "down": {"uv": [1, 1, 8, 8], "texture": "#3"} + } + }, + { + "name": "ring_outer", + "from": [2.5, 5.75, 2.5], + "to": [13.5, 5.75, 13.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5.75, 8]}, + "faces": { + "north": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "east": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "south": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "west": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "up": {"uv": [1, 1, 12, 12], "texture": "#5"}, + "down": {"uv": [1, 1, 12, 12], "texture": "#5"} + } + }, + { + "name": "ring_redstone", + "from": [0.5, 5, 0.5], + "to": [15.5, 5, 15.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 8]}, + "faces": { + "north": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "east": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "south": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "west": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "up": {"uv": [1, 1, 16, 16], "texture": "#4"}, + "down": {"uv": [1, 1, 16, 16], "texture": "#4"} + } + } + ], + "groups": [ + { + "name": "infloration", + "origin": [0, 0, 0], + "scope": 0, + "color": 0, + "children": [0, 1, 2, 3, 4] + }, + { + "name": "crystal", + "origin": [8, 3.5, 8], + "scope": 0, + "color": 0, + "children": [5, 6, 7, 8] + }, + { + "name": "rings", + "origin": [7.5, 5, 6.5], + "scope": 0, + "color": 0, + "children": [9, 10, 11] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/sender_node.json b/src/main/resources/assets/spectrum/models/item/sender_node.json index 83f1002861..d2fdd3a641 100644 --- a/src/main/resources/assets/spectrum/models/item/sender_node.json +++ b/src/main/resources/assets/spectrum/models/item/sender_node.json @@ -1,223 +1,65 @@ { - "parent": "minecraft:block/block", + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", "textures": { "2": "spectrum:block/sender_node_crystal", "3": "spectrum:block/pastel_node_inner_ring_blank", "4": "spectrum:block/pastel_node_redstone_ring_blank", "5": "spectrum:block/pastel_node_outer_ring_blank", - "particle": "spectrum:block/pastel_pedestal" + "particle": "spectrum:block/pastel_node_base" }, "elements": [ - { - "name": "base", - "from": [ - 7, - 2, - 7 - ], - "to": [ - 9, - 2, - 9 - ], - "rotation": { - "angle": 0, - "axis": "y", - "origin": [ - 7, - 0, - 7 - ] - }, - "faces": { - "up": { - "uv": [ - 10, - 2, - 8, - 0 - ], - "texture": "#particle" - }, - "down": { - "uv": [ - 12, - 0, - 10, - 2 - ], - "texture": "#particle" - } - } - }, - { - "name": "leaf1", - "from": [ - 6, - 2, - 8 - ], - "to": [ - 10, - 2, - 12 - ], - "rotation": { - "angle": -22.5, - "axis": "x", - "origin": [ - 8, - 2, - 9 - ] - }, - "faces": { - "up": { - "uv": [ - 4, - 12, - 0, - 8 - ], - "texture": "#particle" - }, - "down": { - "uv": [ - 8, - 8, - 4, - 12 - ], - "texture": "#particle" - } - } - }, - { - "name": "leaf2", - "from": [ - 6, - 2, - 4 - ], - "to": [ - 10, - 2, - 8 - ], - "rotation": { - "angle": 22.5, - "axis": "x", - "origin": [ - 8, - 2, - 7 - ] - }, - "faces": { - "up": { - "uv": [ - 4, - 4, - 0, - 0 - ], - "texture": "#particle" - }, - "down": { - "uv": [ - 8, - 0, - 4, - 4 - ], - "texture": "#particle" - } - } - }, - { - "name": "leaf3", - "from": [ - 4, - 2, - 6 - ], - "to": [ - 8, - 2, - 10 - ], - "rotation": { - "angle": -22.5, - "axis": "z", - "origin": [ - 7, - 2, - 8 - ] - }, - "faces": { - "up": { - "uv": [ - 4, - 8, - 0, - 4 - ], - "texture": "#particle" - }, - "down": { - "uv": [ - 8, - 4, - 4, - 8 - ], - "texture": "#particle" - } - } - }, - { - "name": "leaf4", - "from": [ - 8, - 2, - 6 - ], - "to": [ - 12, - 2, - 10 - ], - "rotation": { - "angle": 22.5, - "axis": "z", - "origin": [ - 9, - 2, - 8 - ] - }, - "faces": { - "up": { - "uv": [ - 4, - 16, - 0, - 12 - ], - "texture": "#particle" - }, - "down": { - "uv": [ - 8, - 12, - 4, - 16 - ], - "texture": "#particle" - } - } - }, + { + "name": "base", + "from": [7, 2, 7], + "to": [9, 2, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]}, + "faces": { + "up": {"uv": [10, 2, 8, 0], "texture": "#particle"}, + "down": {"uv": [12, 0, 10, 2], "texture": "#particle"} + } + }, + { + "name": "leaf1", + "from": [6, 2, 8], + "to": [10, 2, 12], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 2, 9]}, + "faces": { + "up": {"uv": [4, 12, 0, 8], "texture": "#particle"}, + "down": {"uv": [8, 8, 4, 12], "texture": "#particle"} + } + }, + { + "name": "leaf2", + "from": [6, 2, 4], + "to": [10, 2, 8], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 2, 7]}, + "faces": { + "up": {"uv": [4, 4, 0, 0], "texture": "#particle"}, + "down": {"uv": [8, 0, 4, 4], "texture": "#particle"} + } + }, + { + "name": "leaf3", + "from": [4, 2, 6], + "to": [8, 2, 10], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7, 2, 8]}, + "faces": { + "up": {"uv": [4, 8, 0, 4], "texture": "#particle"}, + "down": {"uv": [8, 4, 4, 8], "texture": "#particle"} + } + }, + { + "name": "leaf4", + "from": [8, 2, 6], + "to": [12, 2, 10], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9, 2, 8]}, + "faces": { + "up": {"uv": [4, 16, 0, 12], "texture": "#particle"}, + "down": {"uv": [8, 12, 4, 16], "texture": "#particle"} + } + }, { "name": "crystal", "from": [6.5, 8, 6.5], @@ -293,33 +135,23 @@ { "name": "infloration", "origin": [0, 0, 0], + "scope": 0, "color": 0, - "children": [ - 0, - 1, - 2, - 3, - 4 - ] + "children": [0, 1, 2, 3, 4] }, { "name": "crystal", "origin": [8, 3.5, 8], + "scope": 0, "color": 0, - "children": [ - 5, - 6 - ] + "children": [5, 6] }, { "name": "rings", "origin": [7.5, 5, 6.5], + "scope": 0, "color": 0, - "children": [ - 7, - 8, - 9 - ] + "children": [7, 8, 9] } ] } \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/storage_node.json b/src/main/resources/assets/spectrum/models/item/storage_node.json index ab7e296f61..a4d082b4a3 100644 --- a/src/main/resources/assets/spectrum/models/item/storage_node.json +++ b/src/main/resources/assets/spectrum/models/item/storage_node.json @@ -1,223 +1,65 @@ { - "parent": "minecraft:block/block", + "format_version": "1.21.11", + "credit": "Made with Blockbench", + "parent": "minecraft:block/block", "textures": { "2": "spectrum:block/storage_node_crystal", "3": "spectrum:block/pastel_node_inner_ring_blank", "4": "spectrum:block/pastel_node_redstone_ring_blank", "5": "spectrum:block/pastel_node_outer_ring_blank", - "particle": "spectrum:block/pastel_pedestal" + "particle": "spectrum:block/pastel_node_base" }, "elements": [ - { - "name": "base", - "from": [ - 7, - 2, - 7 - ], - "to": [ - 9, - 2, - 9 - ], - "rotation": { - "angle": 0, - "axis": "y", - "origin": [ - 7, - 0, - 7 - ] - }, - "faces": { - "up": { - "uv": [ - 10, - 2, - 8, - 0 - ], - "texture": "#particle" - }, - "down": { - "uv": [ - 12, - 0, - 10, - 2 - ], - "texture": "#particle" - } - } - }, - { - "name": "leaf1", - "from": [ - 6, - 2, - 8 - ], - "to": [ - 10, - 2, - 12 - ], - "rotation": { - "angle": -22.5, - "axis": "x", - "origin": [ - 8, - 2, - 9 - ] - }, - "faces": { - "up": { - "uv": [ - 4, - 12, - 0, - 8 - ], - "texture": "#particle" - }, - "down": { - "uv": [ - 8, - 8, - 4, - 12 - ], - "texture": "#particle" - } - } - }, - { - "name": "leaf2", - "from": [ - 6, - 2, - 4 - ], - "to": [ - 10, - 2, - 8 - ], - "rotation": { - "angle": 22.5, - "axis": "x", - "origin": [ - 8, - 2, - 7 - ] - }, - "faces": { - "up": { - "uv": [ - 4, - 4, - 0, - 0 - ], - "texture": "#particle" - }, - "down": { - "uv": [ - 8, - 0, - 4, - 4 - ], - "texture": "#particle" - } - } - }, - { - "name": "leaf3", - "from": [ - 4, - 2, - 6 - ], - "to": [ - 8, - 2, - 10 - ], - "rotation": { - "angle": -22.5, - "axis": "z", - "origin": [ - 7, - 2, - 8 - ] - }, - "faces": { - "up": { - "uv": [ - 4, - 8, - 0, - 4 - ], - "texture": "#particle" - }, - "down": { - "uv": [ - 8, - 4, - 4, - 8 - ], - "texture": "#particle" - } - } - }, - { - "name": "leaf4", - "from": [ - 8, - 2, - 6 - ], - "to": [ - 12, - 2, - 10 - ], - "rotation": { - "angle": 22.5, - "axis": "z", - "origin": [ - 9, - 2, - 8 - ] - }, - "faces": { - "up": { - "uv": [ - 4, - 16, - 0, - 12 - ], - "texture": "#particle" - }, - "down": { - "uv": [ - 8, - 12, - 4, - 16 - ], - "texture": "#particle" - } - } - }, + { + "name": "base", + "from": [7, 2, 7], + "to": [9, 2, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]}, + "faces": { + "up": {"uv": [10, 2, 8, 0], "texture": "#particle"}, + "down": {"uv": [12, 0, 10, 2], "texture": "#particle"} + } + }, + { + "name": "leaf1", + "from": [6, 2, 8], + "to": [10, 2, 12], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 2, 9]}, + "faces": { + "up": {"uv": [4, 12, 0, 8], "texture": "#particle"}, + "down": {"uv": [8, 8, 4, 12], "texture": "#particle"} + } + }, + { + "name": "leaf2", + "from": [6, 2, 4], + "to": [10, 2, 8], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 2, 7]}, + "faces": { + "up": {"uv": [4, 4, 0, 0], "texture": "#particle"}, + "down": {"uv": [8, 0, 4, 4], "texture": "#particle"} + } + }, + { + "name": "leaf3", + "from": [4, 2, 6], + "to": [8, 2, 10], + "rotation": {"angle": -22.5, "axis": "z", "origin": [7, 2, 8]}, + "faces": { + "up": {"uv": [4, 8, 0, 4], "texture": "#particle"}, + "down": {"uv": [8, 4, 4, 8], "texture": "#particle"} + } + }, + { + "name": "leaf4", + "from": [8, 2, 6], + "to": [12, 2, 10], + "rotation": {"angle": 22.5, "axis": "z", "origin": [9, 2, 8]}, + "faces": { + "up": {"uv": [4, 16, 0, 12], "texture": "#particle"}, + "down": {"uv": [8, 12, 4, 16], "texture": "#particle"} + } + }, { "name": "lower crystal", "from": [5.5, 7.5, 5.5], @@ -321,35 +163,23 @@ { "name": "infloration", "origin": [0, 0, 0], + "scope": 0, "color": 0, - "children": [ - 0, - 1, - 2, - 3, - 4 - ] + "children": [0, 1, 2, 3, 4] }, { "name": "crystal", "origin": [8, 3.5, 8], + "scope": 0, "color": 0, - "children": [ - 5, - 6, - 7, - 8 - ] + "children": [5, 6, 7, 8] }, { "name": "rings", "origin": [7.5, 5, 6.5], + "scope": 0, "color": 0, - "children": [ - 9, - 10, - 11 - ] + "children": [9, 10, 11] } ] } \ No newline at end of file From 6530132851d7e22b0bfd5825b2c08e9ef455ec8f Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 2 Aug 2026 13:28:23 +0200 Subject: [PATCH 132/477] bump version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index b8d461081a..6a514b4d7b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,7 +14,7 @@ neoforge_version_range=[21.1.186,) # Mod Properties mod_id=spectrum -mod_version=1.11.9-1.21.1-neo +mod_version=1.12.0-1.21.1-neo maven_group=de.dafuqs archives_base_name=Spectrum From b9bcb9f926cb795c2e9bd24e98290fe1927a38ab Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 2 Aug 2026 20:16:31 +0200 Subject: [PATCH 133/477] fluid pastel rendering --- .../network/PastelTransmission.java | 2 +- .../payloads/FluidPastelPayload.java | 26 +++++++-- .../payloads/InkPastelPayload.java | 22 ++------ .../payloads/ItemPastelPayload.java | 16 +++++- .../payloads/PastelPayload.java | 7 +-- .../mixin/client/MixinParticleManager.java | 4 +- .../s2c_payloads/InkTransmissionPayload.java | 53 +++++++++++++++++++ .../client/PastelTransmissionParticle.java | 28 +++++----- .../render/EarlyRenderingParticle.java | 2 +- .../EarlyRenderingParticleContainer.java | 4 +- .../render/ExtendedParticleManager.java | 2 +- .../client/SpectrumClientEventListeners.java | 2 +- 12 files changed, 117 insertions(+), 51 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/InkTransmissionPayload.java diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmission.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmission.java index 244bcb294b..588636a2a0 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmission.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmission.java @@ -79,7 +79,7 @@ private void arriveAtDestination() { } BlockPos destinationPos = nodePositions.getLast(); - @Nullable PastelNodeBlockEntity destinationNode = this.network.getLoadedNodeAt(destinationPos); + PastelNodeBlockEntity destinationNode = this.network.getLoadedNodeAt(destinationPos); Level level = this.network.getLevel(); payload.arriveAtDestination(level, destinationPos, destinationNode); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java index 1e2b349df2..c6e7ce094d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java @@ -4,22 +4,32 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; +import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.client.*; +import de.dafuqs.spectrum.particle.effect.*; +import dev.emi.emi.*; +import dev.emi.emi.api.stack.*; +import net.minecraft.client.*; import net.minecraft.client.renderer.*; import net.minecraft.client.renderer.texture.*; import net.minecraft.core.*; +import net.minecraft.core.particles.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; +import net.minecraft.resources.*; +import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; +import net.minecraft.world.phys.*; +import net.neoforged.neoforge.client.extensions.common.*; import net.neoforged.neoforge.fluids.*; import net.neoforged.neoforge.fluids.capability.*; import org.jetbrains.annotations.*; -public record FluidPastelPayload(FluidStack fluidStack) implements PastelPayload { +public record FluidPastelPayload(FluidStack fluidStack, ParticleOptions particleEffect) implements PastelPayload { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( - FluidStack.CODEC.fieldOf("stack").forGetter(FluidPastelPayload::fluidStack) + FluidStack.CODEC.fieldOf("fluid").forGetter(FluidPastelPayload::fluidStack) ).apply(i, FluidPastelPayload::new)); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( @@ -27,8 +37,16 @@ public record FluidPastelPayload(FluidStack fluidStack) implements PastelPayload FluidPastelPayload::new ); - public void render(PastelTransmissionParticle particle, Level level, PoseStack poseStack, final MultiBufferSource vertexConsumers, int light) { - particle.itemRenderer.renderStatic(this.fluidStack.getFluid().getBucket().getDefaultInstance(), ItemDisplayContext.GROUND, light, OverlayTexture.NO_OVERLAY, poseStack, vertexConsumers, level, 0); + public FluidPastelPayload(FluidStack fluidStack) { + this(fluidStack, ColorParticleOption.create(ParticleTypes.ENTITY_EFFECT, IClientFluidTypeExtensions.of(fluidStack.getFluid()).getTintColor(fluidStack))); + } + + @Override + public void tick(Level level, PastelTransmissionParticle particle) { + if(level.getGameTime() % 2 == 0) { + Vec3 pos = particle.getPos(); + level.addParticle(particleEffect, pos.x(), pos.y(), pos.z(), 0, 0, 0); + } } public MapCodec codec() { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java index 995ff71ead..66104b781a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java @@ -10,10 +10,12 @@ import net.minecraft.client.renderer.*; import net.minecraft.client.renderer.texture.*; import net.minecraft.core.*; +import net.minecraft.core.particles.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; +import net.minecraft.world.phys.*; import org.jetbrains.annotations.*; import java.util.*; @@ -21,7 +23,7 @@ public record InkPastelPayload(List inkAmount) implements PastelPayload { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( - InkAmount.CODEC.listOf().fieldOf("stack").forGetter(InkPastelPayload::inkAmount) + InkAmount.CODEC.listOf().fieldOf("ink").forGetter(InkPastelPayload::inkAmount) ).apply(i, InkPastelPayload::new)); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( @@ -29,10 +31,6 @@ public record InkPastelPayload(List inkAmount) implements PastelPaylo InkPastelPayload::new ); - public void render(PastelTransmissionParticle particle, Level level, PoseStack poseStack, final MultiBufferSource vertexConsumers, int light) { - particle.itemRenderer.renderStatic(PigmentItem.byColor(this.inkAmount.get(0).color()).getDefaultInstance(), ItemDisplayContext.GROUND, light, OverlayTexture.NO_OVERLAY, poseStack, vertexConsumers, level, 0); - } - public MapCodec codec() { return CODEC; } @@ -41,18 +39,4 @@ public StreamCodec streamCodec() { return STREAM_CODEC; } - @Override - public void arriveAtDestination(Level level, BlockPos destination, @Nullable PastelNodeBlockEntity destinationNode) { - /*if (destinationNode != null) { - @Nullable InkStorageBlockEntity destinationHandler = InkPastelPayloadType.getConnectedInkStorage(destinationNode); - if (destinationHandler != null) { - InkStorage destinationStorage = destinationHandler.getEnergyStorage(); - for(InkAmount ic : inkAmount) { - destinationStorage.addEnergy(ic.color(), ic.amount()); - destinationHandler.setInkDirty(); - } - } - }*/ - } - } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java index 0b848578f4..a0fa24467d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java @@ -6,13 +6,16 @@ import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.client.*; +import net.minecraft.client.*; import net.minecraft.client.renderer.*; import net.minecraft.client.renderer.texture.*; import net.minecraft.core.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; +import net.minecraft.util.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; +import net.minecraft.world.phys.*; import net.neoforged.neoforge.items.*; import org.jspecify.annotations.*; @@ -27,8 +30,19 @@ public record ItemPastelPayload(ItemStack itemStack) implements PastelPayload { ItemPastelPayload::new ); - public void render(PastelTransmissionParticle particle, Level level, PoseStack poseStack, final MultiBufferSource vertexConsumers, int light) { + public void renderAfterEntities(PastelTransmissionParticle particle, Level level, PoseStack poseStack, final MultiBufferSource vertexConsumers, Camera camera, float tickDelta) { + Vec3 cameraPos = camera.getPosition(); + Vec3 pos = particle.getPos(); + + poseStack.pushPose(); + + poseStack.translate(pos.x() - cameraPos.x, pos.y() - cameraPos.y, pos.z() - cameraPos.z); + int light = particle.getLightColor(tickDelta); + poseStack.mulPose(camera.rotation()); + poseStack.scale(0.65F, 0.65F, 0.65F); + poseStack.translate(0, -0.15, 0); particle.itemRenderer.renderStatic(this.itemStack, ItemDisplayContext.GROUND, light, OverlayTexture.NO_OVERLAY, poseStack, vertexConsumers, level, 0); + poseStack.popPose(); } public MapCodec codec() { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java index d816784b5e..26ee1602d4 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayload.java @@ -5,6 +5,7 @@ import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.particle.client.*; import de.dafuqs.spectrum.registries.*; +import net.minecraft.client.*; import net.minecraft.client.renderer.*; import net.minecraft.core.*; import net.minecraft.network.*; @@ -26,10 +27,10 @@ public interface PastelPayload { * @param destination the position of the node to arrive at * @param destinationNode the pastel node. Can be null if it was broken while the transmission was underway */ - void arriveAtDestination(Level level, BlockPos destination, @Nullable PastelNodeBlockEntity destinationNode); + default void arriveAtDestination(Level level, BlockPos destination, @Nullable PastelNodeBlockEntity destinationNode) { } - void render(PastelTransmissionParticle pastelTransmissionParticle, Level level, PoseStack poseStack, MultiBufferSource vertexConsumers, int light); + default void renderAfterEntities(PastelTransmissionParticle pastelTransmissionParticle, Level level, PoseStack poseStack, MultiBufferSource vertexConsumers, final Camera camera, final float tickDelta) { } - // void spawnTravelParticles(Level level); // TODO + default void tick(Level level, PastelTransmissionParticle particle) { } } diff --git a/src/main/java/de/dafuqs/spectrum/mixin/client/MixinParticleManager.java b/src/main/java/de/dafuqs/spectrum/mixin/client/MixinParticleManager.java index 3b609c9453..f4e44d643e 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/client/MixinParticleManager.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/client/MixinParticleManager.java @@ -27,8 +27,8 @@ private void removeDeadHook(final CallbackInfo ci) { } @Override - public void render(final PoseStack matrices, final MultiBufferSource vertexConsumers, final Camera camera, final float tickDelta) { - spectrum$earlyRenderingParticleContainer.render(matrices, vertexConsumers, camera, tickDelta); + public void renderAfterEntities(final PoseStack matrices, final MultiBufferSource vertexConsumers, final Camera camera, final float tickDelta) { + spectrum$earlyRenderingParticleContainer.renderAfterEntities(matrices, vertexConsumers, camera, tickDelta); } } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/InkTransmissionPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/InkTransmissionPayload.java new file mode 100644 index 0000000000..b3df503712 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/InkTransmissionPayload.java @@ -0,0 +1,53 @@ +package de.dafuqs.spectrum.networking.s2c_payloads; + +import de.dafuqs.spectrum.blocks.pastel_network.network.*; +import de.dafuqs.spectrum.networking.*; +import de.dafuqs.spectrum.particle.effect.*; +import net.minecraft.core.*; +import net.minecraft.network.*; +import net.minecraft.network.codec.*; +import net.minecraft.network.protocol.*; +import net.minecraft.network.protocol.common.*; +import net.minecraft.network.protocol.common.custom.*; +import net.minecraft.server.level.*; +import net.minecraft.world.level.*; +import net.neoforged.neoforge.network.handling.*; + +import java.util.*; + +public record InkTransmissionPayload(int networkColor, int travelTime, PastelTransmission transmission) implements CustomPacketPayload { + + public static final Type ID = SpectrumC2SPackets.makeId("pastel_transmission"); + public static final StreamCodec CODEC = StreamCodec.composite( + ByteBufCodecs.INT, InkTransmissionPayload::networkColor, + ByteBufCodecs.INT, InkTransmissionPayload::travelTime, + PastelTransmission.STREAM_CODEC, InkTransmissionPayload::transmission, + InkTransmissionPayload::new + ); + + public static void sendPastelTransmissionParticle(ServerPastelNetwork network, int travelTime, PastelTransmission transmission) { + Packet packet = new ClientboundCustomPayloadPacket(new InkTransmissionPayload(network.getColor(), travelTime, transmission)); + Set targetPlayers = new HashSet(); + targetPlayers.addAll(network.getLevel().getChunkSource().chunkMap.getPlayers(new ChunkPos(transmission.getNodePositions().getFirst()), false)); + targetPlayers.addAll(network.getLevel().getChunkSource().chunkMap.getPlayers(new ChunkPos(transmission.getNodePositions().getLast()), false)); + + for (ServerPlayer player : targetPlayers) { + player.connection.send(packet); + } + } + + @SuppressWarnings("resource") + public static void execute(InkTransmissionPayload payload, IPayloadContext context) { + int color = payload.networkColor(); + int travelTime = payload.travelTime(); + PastelTransmission transmission = payload.transmission; + BlockPos spawnPos = transmission.getStartPos(); + context.player().level().addParticle(new PastelTransmissionParticleEffect(transmission.getNodePositions(), transmission.getPayload(), travelTime, color), spawnPos.getX() + 0.5, spawnPos.getY() + 0.5, spawnPos.getZ() + 0.5, 0, 0, 0); + } + + @Override + public Type type() { + return ID; + } + +} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/particle/client/PastelTransmissionParticle.java b/src/main/java/de/dafuqs/spectrum/particle/client/PastelTransmissionParticle.java index f8aba59755..ff5a7eda06 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/client/PastelTransmissionParticle.java +++ b/src/main/java/de/dafuqs/spectrum/particle/client/PastelTransmissionParticle.java @@ -73,28 +73,24 @@ public void tick() { this.y = Mth.lerp(nodeProgress, source.y, destination.y); this.z = Mth.lerp(nodeProgress, source.z, destination.z); + payload.tick(level, this); + if (SpectrumConfig.CONFIG.PastelNetworkParticles.get() && this.age % 2 == 0) { level.addParticle(particleEffect, x + random.nextDouble() * 0.4 - 0.2, y + random.nextDouble() * 0.4 - 0.2, z + random.nextDouble() * 0.4 - 0.2, random.nextDouble() * 0.4 - 0.2, random.nextDouble() * 0.4 - 0.2, random.nextDouble() * 0.4 - 0.2); } } @Override - public void renderAsEntity(final PoseStack poseStack, final MultiBufferSource vertexConsumers, final Camera camera, final float tickDelta) { - final Vec3 cameraPos = camera.getPosition(); - final float x = (float) (Mth.lerp(tickDelta, xo, this.x)); - final float y = (float) (Mth.lerp(tickDelta, yo, this.y)); - final float z = (float) (Mth.lerp(tickDelta, zo, this.z)); - - poseStack.pushPose(); - - poseStack.translate(x - cameraPos.x, y - cameraPos.y, z - cameraPos.z); - final int light = getLightColor(tickDelta); - poseStack.mulPose(camera.rotation()); - poseStack.scale(0.65F, 0.65F, 0.65F); - poseStack.translate(0, -0.15, 0); - payload.render(this, level, poseStack, vertexConsumers, light); - - poseStack.popPose(); + public void renderAfterEntities(final PoseStack poseStack, final MultiBufferSource vertexConsumers, final Camera camera, final float tickDelta) { + payload.renderAfterEntities(this, level, poseStack, vertexConsumers, camera, tickDelta); + } + + public int getLightColor(float partialTick) { + return super.getLightColor(partialTick); + } + + public Vec3 getPos(float partialTick) { + return new Vec3(Mth.lerp(partialTick, xo, this.x), Mth.lerp(partialTick, yo, this.y), Mth.lerp(partialTick, zo, this.z)); } } diff --git a/src/main/java/de/dafuqs/spectrum/particle/render/EarlyRenderingParticle.java b/src/main/java/de/dafuqs/spectrum/particle/render/EarlyRenderingParticle.java index 5e950c9ed7..1de5991c8b 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/render/EarlyRenderingParticle.java +++ b/src/main/java/de/dafuqs/spectrum/particle/render/EarlyRenderingParticle.java @@ -6,5 +6,5 @@ public interface EarlyRenderingParticle { - void renderAsEntity(final PoseStack matrices, final MultiBufferSource vertexConsumers, final Camera camera, final float tickDelta); + void renderAfterEntities(final PoseStack matrices, final MultiBufferSource vertexConsumers, final Camera camera, final float tickDelta); } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/particle/render/EarlyRenderingParticleContainer.java b/src/main/java/de/dafuqs/spectrum/particle/render/EarlyRenderingParticleContainer.java index d1989f7491..81ccbeebf9 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/render/EarlyRenderingParticleContainer.java +++ b/src/main/java/de/dafuqs/spectrum/particle/render/EarlyRenderingParticleContainer.java @@ -31,10 +31,10 @@ public static void clear() { particles.clear(); } - public void render(final PoseStack matrices, final MultiBufferSource vertexConsumers, final Camera camera, final float tickDelta) { + public void renderAfterEntities(final PoseStack matrices, final MultiBufferSource vertexConsumers, final Camera camera, final float tickDelta) { for (final Queue particles : particles.values()) { for (final EarlyRenderingParticle particle : particles) { - particle.renderAsEntity(matrices, vertexConsumers, camera, tickDelta); + particle.renderAfterEntities(matrices, vertexConsumers, camera, tickDelta); } } } diff --git a/src/main/java/de/dafuqs/spectrum/particle/render/ExtendedParticleManager.java b/src/main/java/de/dafuqs/spectrum/particle/render/ExtendedParticleManager.java index f456db9b4d..784272549b 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/render/ExtendedParticleManager.java +++ b/src/main/java/de/dafuqs/spectrum/particle/render/ExtendedParticleManager.java @@ -6,5 +6,5 @@ public interface ExtendedParticleManager { - void render(PoseStack matrices, MultiBufferSource vertexConsumers, Camera camera, float tickDelta); + void renderAfterEntities(PoseStack matrices, MultiBufferSource vertexConsumers, Camera camera, float tickDelta); } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java index a33866c40c..956657bcca 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java @@ -248,7 +248,7 @@ private static void onWorldRenderStart(RenderLevelStageEvent event) { MultiBufferSource.BufferSource bufferSource = minecraft.renderBuffers().bufferSource(); if (stage == RenderLevelStageEvent.Stage.AFTER_ENTITIES) { - ((ExtendedParticleManager) minecraft.particleEngine).render(event.getPoseStack(), bufferSource, event.getCamera(), event.getPartialTick().getGameTimeDeltaTicks()); + ((ExtendedParticleManager) minecraft.particleEngine).renderAfterEntities(event.getPoseStack(), bufferSource, event.getCamera(), event.getPartialTick().getGameTimeDeltaTicks()); } else if (stage == RenderLevelStageEvent.Stage.AFTER_TRANSLUCENT_BLOCKS) { Entity focusedEntity = event.getCamera().getEntity(); From a20d9d73c71735a2f2c1433841fd8e56a0798275 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 2 Aug 2026 20:19:48 +0200 Subject: [PATCH 134/477] omg --- src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java b/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java index 0893511d51..2501d53ac1 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java @@ -38,7 +38,7 @@ public class AE2Compat extends SpectrumIntegrationPacks.ModIntegrationPack { @Override public void register(IEventBus modBus) { - NeoForge.EVENT_BUS.addListener(CreateCompat::addItemsToSubTabs); + NeoForge.EVENT_BUS.addListener(AE2Compat::addItemsToSubTabs); } @Override From 409270fbd0c2d1745007c5dd1550c8f4d4f27373 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 2 Aug 2026 20:58:45 +0200 Subject: [PATCH 135/477] fix color picker shift click --- .../spectrum/blocks/ink/sink/ColorPickerBlockEntity.java | 2 +- .../de/dafuqs/spectrum/inventories/BaseInkScreenHandler.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlockEntity.java index 78fb3accba..9df85c5623 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlockEntity.java @@ -32,7 +32,7 @@ public class ColorPickerBlockEntity extends BaseInkBlockEntity implements MenuProvider { public static final long TICKS_PER_CONVERSION = 5; - public static final long INK_CAPACITY = (long) Math.pow(256, 2); + public static final long INK_CAPACITY = 64 * 64 * 64 * 100; // (long) Math.pow(256, 2); protected @Nullable InkConvertingRecipe cachedRecipe; public ColorPickerBlockEntity(BlockPos blockPos, BlockState blockState) { diff --git a/src/main/java/de/dafuqs/spectrum/inventories/BaseInkScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/BaseInkScreenHandler.java index 865422788c..7267731147 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/BaseInkScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/BaseInkScreenHandler.java @@ -32,7 +32,7 @@ public record ScreenOpeningData(BlockPos pos, Optional> inkColo public static final int PLAYER_INVENTORY_START_Y = 84; protected final Level world; - public final ServerPlayer serverPlayer; + public final @Nullable ServerPlayer serverPlayer; protected BaseInkBlockEntity blockEntity; protected int inventorySize; @@ -53,6 +53,7 @@ public BaseInkScreenHandler(int syncId, Inventory playerInventory, BaseInkBlockE protected BaseInkScreenHandler(@Nullable MenuType menuType, int syncId, Inventory playerInventory, BaseInkBlockEntity blockEntity, Optional> selectedColor, int inventorySize) { super(menuType, syncId); + this.inventorySize = inventorySize; this.blockEntity = blockEntity; this.blockEntity.setSelectedColor(selectedColor); this.serverPlayer = playerInventory.player instanceof ServerPlayer serverPlayerEntity ? serverPlayerEntity : null; From f16db36a6ff5c06f1209712fb4ffb1584e147b68 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 2 Aug 2026 21:06:02 +0200 Subject: [PATCH 136/477] dummy block/item models --- src/main/resources/assets/spectrum/models/block/dawnbrush.json | 3 +++ .../assets/spectrum/models/block/fluid_gather_node.json | 3 +++ .../assets/spectrum/models/block/fluid_provider_node.json | 3 +++ .../assets/spectrum/models/block/fluid_sender_node.json | 3 +++ .../assets/spectrum/models/block/fluid_storage_node.json | 3 +++ src/main/resources/assets/spectrum/models/block/ink_node.json | 3 +++ .../assets/spectrum/models/block/omni_gather_node.json | 3 +++ .../assets/spectrum/models/block/omni_provider_node.json | 3 +++ .../assets/spectrum/models/block/omni_sender_node.json | 3 +++ .../assets/spectrum/models/block/omni_storage_node.json | 3 +++ .../assets/spectrum/models/block/tinting_station.json | 3 +++ src/main/resources/assets/spectrum/models/block/twill.json | 3 +++ .../resources/assets/spectrum/models/block/vantaclast.json | 3 +++ src/main/resources/assets/spectrum/models/item/dawnbrush.json | 3 +++ .../resources/assets/spectrum/models/item/tinting_station.json | 3 +++ src/main/resources/assets/spectrum/models/item/twill.json | 3 +++ src/main/resources/assets/spectrum/models/item/vantaclast.json | 3 +++ 17 files changed, 51 insertions(+) create mode 100644 src/main/resources/assets/spectrum/models/block/dawnbrush.json create mode 100644 src/main/resources/assets/spectrum/models/block/fluid_gather_node.json create mode 100644 src/main/resources/assets/spectrum/models/block/fluid_provider_node.json create mode 100644 src/main/resources/assets/spectrum/models/block/fluid_sender_node.json create mode 100644 src/main/resources/assets/spectrum/models/block/fluid_storage_node.json create mode 100644 src/main/resources/assets/spectrum/models/block/ink_node.json create mode 100644 src/main/resources/assets/spectrum/models/block/omni_gather_node.json create mode 100644 src/main/resources/assets/spectrum/models/block/omni_provider_node.json create mode 100644 src/main/resources/assets/spectrum/models/block/omni_sender_node.json create mode 100644 src/main/resources/assets/spectrum/models/block/omni_storage_node.json create mode 100644 src/main/resources/assets/spectrum/models/block/tinting_station.json create mode 100644 src/main/resources/assets/spectrum/models/block/twill.json create mode 100644 src/main/resources/assets/spectrum/models/block/vantaclast.json create mode 100644 src/main/resources/assets/spectrum/models/item/dawnbrush.json create mode 100644 src/main/resources/assets/spectrum/models/item/tinting_station.json create mode 100644 src/main/resources/assets/spectrum/models/item/twill.json create mode 100644 src/main/resources/assets/spectrum/models/item/vantaclast.json diff --git a/src/main/resources/assets/spectrum/models/block/dawnbrush.json b/src/main/resources/assets/spectrum/models/block/dawnbrush.json new file mode 100644 index 0000000000..732d2fb72e --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/dawnbrush.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/color_picker" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/fluid_gather_node.json b/src/main/resources/assets/spectrum/models/block/fluid_gather_node.json new file mode 100644 index 0000000000..4625faab4c --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/fluid_gather_node.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:item/fluid_gather_node" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/fluid_provider_node.json b/src/main/resources/assets/spectrum/models/block/fluid_provider_node.json new file mode 100644 index 0000000000..21c09f3821 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/fluid_provider_node.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:item/fluid_provider_node" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/fluid_sender_node.json b/src/main/resources/assets/spectrum/models/block/fluid_sender_node.json new file mode 100644 index 0000000000..ecc841ec36 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/fluid_sender_node.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:item/fluid_sender_node" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/fluid_storage_node.json b/src/main/resources/assets/spectrum/models/block/fluid_storage_node.json new file mode 100644 index 0000000000..439a064e13 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/fluid_storage_node.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:item/fluid_storage_node" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/ink_node.json b/src/main/resources/assets/spectrum/models/block/ink_node.json new file mode 100644 index 0000000000..850339e86c --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/ink_node.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:item/ink_node" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/omni_gather_node.json b/src/main/resources/assets/spectrum/models/block/omni_gather_node.json new file mode 100644 index 0000000000..bf228453cc --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/omni_gather_node.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:item/omni_gather_node" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/omni_provider_node.json b/src/main/resources/assets/spectrum/models/block/omni_provider_node.json new file mode 100644 index 0000000000..a68fa4bbf9 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/omni_provider_node.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:item/omni_provider_node" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/omni_sender_node.json b/src/main/resources/assets/spectrum/models/block/omni_sender_node.json new file mode 100644 index 0000000000..33ada2e6a1 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/omni_sender_node.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:item/omni_sender_node" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/omni_storage_node.json b/src/main/resources/assets/spectrum/models/block/omni_storage_node.json new file mode 100644 index 0000000000..b3df1c29c5 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/omni_storage_node.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:item/omni_storage_node" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/tinting_station.json b/src/main/resources/assets/spectrum/models/block/tinting_station.json new file mode 100644 index 0000000000..732d2fb72e --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/tinting_station.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/color_picker" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/twill.json b/src/main/resources/assets/spectrum/models/block/twill.json new file mode 100644 index 0000000000..732d2fb72e --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/twill.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/color_picker" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/vantaclast.json b/src/main/resources/assets/spectrum/models/block/vantaclast.json new file mode 100644 index 0000000000..732d2fb72e --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/vantaclast.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/color_picker" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/dawnbrush.json b/src/main/resources/assets/spectrum/models/item/dawnbrush.json new file mode 100644 index 0000000000..d58155c68f --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/dawnbrush.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/dawnbrush" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/tinting_station.json b/src/main/resources/assets/spectrum/models/item/tinting_station.json new file mode 100644 index 0000000000..8449637083 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/tinting_station.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/tinting_station" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/twill.json b/src/main/resources/assets/spectrum/models/item/twill.json new file mode 100644 index 0000000000..c754849772 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/twill.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/twill" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/vantaclast.json b/src/main/resources/assets/spectrum/models/item/vantaclast.json new file mode 100644 index 0000000000..013605913b --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/vantaclast.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/vantaclast" +} \ No newline at end of file From db7e48881f4777d5e1527d25b228462dbaac9dd4 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 2 Aug 2026 22:51:23 +0200 Subject: [PATCH 137/477] dummy out water walking fix due to sable crash --- .../de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java index a4119c6c79..dc690d486d 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java @@ -29,7 +29,8 @@ public abstract class AbstractBlockStateMixin { } // https://github.com/apace100/water-walking-fix - @ModifyReturnValue(method = "getCollisionShape(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/phys/shapes/CollisionContext;)Lnet/minecraft/world/phys/shapes/VoxelShape;", at = @At("RETURN")) + // dummied out due to sable crash + /*@ModifyReturnValue(method = "getCollisionShape(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/phys/shapes/CollisionContext;)Lnet/minecraft/world/phys/shapes/VoxelShape;", at = @At("RETURN")) public VoxelShape getFluidloggedCollisionShape(VoxelShape original, BlockGetter level, BlockPos pos, CollisionContext context) { FluidState fluidState = spectrum$getFluidStateHelper(level, pos); if(fluidState == null || fluidState.isEmpty()) { @@ -66,5 +67,5 @@ public VoxelShape getFluidloggedCollisionShape(VoxelShape original, BlockGetter for (int i = 0; i <= 8; i++) { FLUID_LEVEL_SHAPES[i] = Block.box(0.0, 0.0, 0.0, 16.0, i, 16.0); } - } + }*/ } From 73abf481cf686def8b954137bd1f9fc0d6ceff9f Mon Sep 17 00:00:00 2001 From: RK_01 <50594595+RaphiMC@users.noreply.github.com> Date: Sun, 2 Aug 2026 23:24:17 +0200 Subject: [PATCH 138/477] Modify injection point for renderItemDecorations method --- .../java/de/dafuqs/spectrum/mixin/client/DrawContextMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/mixin/client/DrawContextMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/client/DrawContextMixin.java index aa8fb9ef7f..84a488de87 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/client/DrawContextMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/client/DrawContextMixin.java @@ -24,7 +24,7 @@ public abstract class DrawContextMixin { @Shadow public abstract void renderOutline(int x, int y, int width, int height, int color); - @Inject(method = "renderItemDecorations(Lnet/minecraft/client/gui/Font;Lnet/minecraft/world/item/ItemStack;IILjava/lang/String;)V", at = @At(value = "INVOKE", target = "net/minecraft/world/item/ItemStack.getCount ()I", ordinal = 0)) + @Inject(method = "renderItemDecorations(Lnet/minecraft/client/gui/Font;Lnet/minecraft/world/item/ItemStack;IILjava/lang/String;)V", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;push()V")) protected void spectrum$drawSlotBackground(Font textRenderer, ItemStack stack, int x, int y, String countOverride, CallbackInfo ci) { SlotBackgroundEffectProvider backgroundEffectProvider = null; From e673f701f2ba3ac610ce3ead4f858bf5bff23b9b Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 3 Aug 2026 20:09:39 +0200 Subject: [PATCH 139/477] fix #937 --- .../EnchantmentUpgradeEmiRecipeGated.java | 2 +- .../BookEnchanterCraftingPageRenderer.java | 23 +++++++++---------- .../BookEnchanterUpgradingPageRenderer.java | 22 ++++++++++-------- .../items/magic_items/KnowledgeGemItem.java | 10 ++++---- 4 files changed, 28 insertions(+), 29 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/EnchantmentUpgradeEmiRecipeGated.java b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/EnchantmentUpgradeEmiRecipeGated.java index 430c7d2431..41771dcac7 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/EnchantmentUpgradeEmiRecipeGated.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/EnchantmentUpgradeEmiRecipeGated.java @@ -75,7 +75,7 @@ public void addUnlockedWidgets(WidgetHolder widgets) { // Knowledge Gem and Enchanter final var gem = new DynamicStackWidget(c -> { int xp = levelData.get(selectedSourceLevel - 1).experience(); - return EmiStack.of(KnowledgeGemItem.getKnowledgeDropStackWithXP(xp, false)); + return EmiStack.of(KnowledgeGemItem.getKnowledgeDropStackWithXP(xp, true)); }, 0, 111, 5); widgets.add(gem); widgets.addSlot(EmiStack.of(SpectrumBlocks.ENCHANTER), 111, 51).drawBack(false); diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookEnchanterCraftingPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookEnchanterCraftingPageRenderer.java index 7b6d739a0d..51a0da1968 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookEnchanterCraftingPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookEnchanterCraftingPageRenderer.java @@ -17,6 +17,7 @@ public class BookEnchanterCraftingPageRenderer extends BookGatedRecipePageRenderer> { private static final ResourceLocation BACKGROUND_TEXTURE = SpectrumCommon.locate("textures/gui/modonomicon/enchanter_crafting.png"); + private static final ItemStack ENCHANTER = SpectrumBlocks.ENCHANTER.asItem().getDefaultInstance(); public BookEnchanterCraftingPageRenderer(BookGatedRecipePage page) { super(page); @@ -41,25 +42,23 @@ protected void drawRecipe(GuiGraphics drawContext, RecipeHolder // the ingredients NonNullList ingredients = recipe.getIngredients(); - int ingredientX = recipeX - 3; - // surrounding input slots - parentScreen.renderIngredient(drawContext, ingredientX + 16, recipeY, mouseX, mouseY, ingredients.get(1)); - parentScreen.renderIngredient(drawContext, ingredientX + 40, recipeY, mouseX, mouseY, ingredients.get(2)); - parentScreen.renderIngredient(drawContext, ingredientX + 56, recipeY + 16, mouseX, mouseY, ingredients.get(3)); - parentScreen.renderIngredient(drawContext, ingredientX + 56, recipeY + 40, mouseX, mouseY, ingredients.get(4)); - parentScreen.renderIngredient(drawContext, ingredientX + 40, recipeY + 56, mouseX, mouseY, ingredients.get(5)); - parentScreen.renderIngredient(drawContext, ingredientX + 16, recipeY + 56, mouseX, mouseY, ingredients.get(6)); - parentScreen.renderIngredient(drawContext, ingredientX, recipeY + 40, mouseX, mouseY, ingredients.get(7)); - parentScreen.renderIngredient(drawContext, ingredientX, recipeY + 16, mouseX, mouseY, ingredients.get(8)); + parentScreen.renderIngredient(drawContext, recipeX + 13, recipeY, mouseX, mouseY, ingredients.get(1)); + parentScreen.renderIngredient(drawContext, recipeX + 37, recipeY, mouseX, mouseY, ingredients.get(2)); + parentScreen.renderIngredient(drawContext, recipeX + 53, recipeY + 16, mouseX, mouseY, ingredients.get(3)); + parentScreen.renderIngredient(drawContext, recipeX + 53, recipeY + 40, mouseX, mouseY, ingredients.get(4)); + parentScreen.renderIngredient(drawContext, recipeX + 37, recipeY + 56, mouseX, mouseY, ingredients.get(5)); + parentScreen.renderIngredient(drawContext, recipeX + 13, recipeY + 56, mouseX, mouseY, ingredients.get(6)); + parentScreen.renderIngredient(drawContext, recipeX - 3, recipeY + 40, mouseX, mouseY, ingredients.get(7)); + parentScreen.renderIngredient(drawContext, recipeX - 3, recipeY + 16, mouseX, mouseY, ingredients.get(8)); // center input slot - parentScreen.renderIngredient(drawContext, ingredientX + 28, recipeY + 28, mouseX, mouseY, ingredients.get(0)); + parentScreen.renderIngredient(drawContext, recipeX + 25, recipeY + 28, mouseX, mouseY, ingredients.get(0)); // Knowledge Gem and Enchanter ItemStack knowledgeDropStackWithXP = KnowledgeGemItem.getKnowledgeDropStackWithXP(recipe.getRequiredExperience(), true); parentScreen.renderItemStack(drawContext, recipeX + 81, recipeY + 9, mouseX, mouseY, knowledgeDropStackWithXP); - parentScreen.renderItemStack(drawContext, recipeX + 81, recipeY + 46, mouseX, mouseY, SpectrumBlocks.ENCHANTER.asItem().getDefaultInstance()); + parentScreen.renderItemStack(drawContext, recipeX + 81, recipeY + 46, mouseX, mouseY, ENCHANTER); // the output parentScreen.renderItemStack(drawContext, recipeX + 81, recipeY + 31, mouseX, mouseY, recipe.getResultItem(world.registryAccess())); diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookEnchanterUpgradingPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookEnchanterUpgradingPageRenderer.java index d6806820b1..e30f5f98f8 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookEnchanterUpgradingPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookEnchanterUpgradingPageRenderer.java @@ -19,6 +19,7 @@ public class BookEnchanterUpgradingPageRenderer extends BookGatedRecipePageRenderer> { private static final ResourceLocation BACKGROUND_TEXTURE = SpectrumCommon.locate("textures/gui/modonomicon/enchanter_crafting.png"); + private static final ItemStack ENCHANTER = SpectrumBlocks.ENCHANTER.asItem().getDefaultInstance(); public BookEnchanterUpgradingPageRenderer(BookGatedRecipePage page) { super(page); @@ -44,23 +45,24 @@ protected void drawRecipe(GuiGraphics drawContext, RecipeHolder ingredients = recipe.getIngredients(); // surrounding input slots - IngredientStack bowlStack = IngredientStack.of(recipe.getForSourceLevel(0).ingredient(), recipe.getForSourceLevel(0).countPerBowl()); - ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX - 13, recipeY, mouseX, mouseY, bowlStack); - ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX - 37, recipeY, mouseX, mouseY, bowlStack); - ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX - 53, recipeY + 16, mouseX, mouseY, bowlStack); - ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX - 53, recipeY + 40, mouseX, mouseY, bowlStack); - ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX - 37, recipeY + 56, mouseX, mouseY, bowlStack); - ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX - 13, recipeY + 56, mouseX, mouseY, bowlStack); + EnchantmentUpgradeRecipe.LevelData levelOneData = recipe.getForSourceLevel(1); + IngredientStack bowlStack = IngredientStack.of(levelOneData.ingredient(), levelOneData.countPerBowl()); + ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX + 13, recipeY, mouseX, mouseY, bowlStack); + ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX + 37, recipeY, mouseX, mouseY, bowlStack); + ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX + 53, recipeY + 16, mouseX, mouseY, bowlStack); + ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX + 53, recipeY + 40, mouseX, mouseY, bowlStack); + ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX + 37, recipeY + 56, mouseX, mouseY, bowlStack); + ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX + 13, recipeY + 56, mouseX, mouseY, bowlStack); ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX - 3, recipeY + 40, mouseX, mouseY, bowlStack); ModonomiconHelper.renderIngredientStack(drawContext, parentScreen, recipeX - 3, recipeY + 16, mouseX, mouseY, bowlStack); // center input slot - parentScreen.renderIngredient(drawContext, recipeX - 25, recipeY + 28, mouseX, mouseY, ingredients.getFirst()); + parentScreen.renderIngredient(drawContext, recipeX + 25, recipeY + 28, mouseX, mouseY, ingredients.getFirst()); // Knowledge Gem and Enchanter - ItemStack knowledgeDropStackWithXP = KnowledgeGemItem.getKnowledgeDropStackWithXP(recipe.getForSourceLevel(0).experience(), true); + ItemStack knowledgeDropStackWithXP = KnowledgeGemItem.getKnowledgeDropStackWithXP(levelOneData.experience(), true); parentScreen.renderItemStack(drawContext, recipeX + 81, recipeY + 9, mouseX, mouseY, knowledgeDropStackWithXP); - parentScreen.renderItemStack(drawContext, recipeX + 81, recipeY + 46, mouseX, mouseY, SpectrumBlocks.ENCHANTER.asItem().getDefaultInstance()); + parentScreen.renderItemStack(drawContext, recipeX + 81, recipeY + 46, mouseX, mouseY, ENCHANTER); // the output parentScreen.renderItemStack(drawContext, recipeX + 81, recipeY + 31, mouseX, mouseY, recipe.getResultItem(world.registryAccess())); diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/KnowledgeGemItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/KnowledgeGemItem.java index 5ee179ded0..2cd88961da 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/KnowledgeGemItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/KnowledgeGemItem.java @@ -36,7 +36,9 @@ public KnowledgeGemItem(Properties settings, int maxStorageBase) { public static ItemStack getKnowledgeDropStackWithXP(int experience, boolean noStoreTooltip) { ItemStack stack = new ItemStack(SpectrumItems.KNOWLEDGE_GEM.get()); stack.set(SpectrumDataComponentTypes.STORED_EXPERIENCE, experience); - if (noStoreTooltip) stack.set(SpectrumDataComponentTypes.HIDE_USAGE_TOOLTIP, Unit.INSTANCE); + if (noStoreTooltip) { + stack.set(SpectrumDataComponentTypes.HIDE_USAGE_TOOLTIP, Unit.INSTANCE); + } return stack; } @@ -119,16 +121,12 @@ public void appendHoverText(ItemStack stack, TooltipContext context, List Date: Mon, 3 Aug 2026 20:21:15 +0200 Subject: [PATCH 140/477] fix #938 --- .../spectrum/helpers/InventoryHelper.java | 74 +++++++++---------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/helpers/InventoryHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/InventoryHelper.java index 4d3efa9b67..4277edc62d 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/InventoryHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/InventoryHelper.java @@ -102,63 +102,63 @@ public static Tuple> getStackCountInInventory(ItemStack /** * Adds a single itemstack to an inventory * - * @param itemStack the itemstack to add. The stack can have a size > + * @param stackToAdd the itemstack to add. The stack can have a size > * maxStackSize and will be split accordingly * @param inventory the inventory to add to * @return The remaining stack that could not be added */ - public static ItemStack smartAddToInventory(ItemStack itemStack, Container inventory, @Nullable Direction side) { + public static ItemStack smartAddToInventory(ItemStack stackToAdd, Container inventory, @Nullable Direction side) { if (inventory instanceof WorldlyContainer sidedInventory && side != null) { int[] acceptableSlots = sidedInventory.getSlotsForFace(side); - for (int acceptableSlot : acceptableSlots) { - if (sidedInventory.canPlaceItemThroughFace(acceptableSlot, itemStack, side)) { - itemStack = setOrCombineStack(inventory, acceptableSlot, itemStack); - if (itemStack.isEmpty()) { + for (int slot : acceptableSlots) { + if (sidedInventory.canPlaceItemThroughFace(slot, stackToAdd, side)) { + stackToAdd = setOrCombineStack(inventory, slot, stackToAdd); + if (stackToAdd.isEmpty()) { break; } } } } else { - for (int i = 0; i < inventory.getContainerSize(); i++) { - itemStack = setOrCombineStack(inventory, i, itemStack); - if (itemStack.isEmpty()) { + for (int slot = 0; slot < inventory.getContainerSize(); slot++) { + stackToAdd = setOrCombineStack(inventory, slot, stackToAdd); + if (stackToAdd.isEmpty()) { break; } } } - return itemStack; + return stackToAdd; } - public static ItemStack setOrCombineStack(Container inventory, int slot, ItemStack addingStack) { - ItemStack existingStack = inventory.getItem(slot); - int max = Math.min(addingStack.getMaxStackSize(), inventory.getMaxStackSize(existingStack)); - if (existingStack.isEmpty()) { - if (addingStack.getCount() > max) { - ItemStack newStack = addingStack.copy(); + public static ItemStack setOrCombineStack(Container inventory, int slot, ItemStack stackToAdd) { + ItemStack slotStack = inventory.getItem(slot); + int max = inventory.getMaxStackSize(stackToAdd); + if (slotStack.isEmpty()) { + if (stackToAdd.getCount() > max) { + ItemStack newStack = stackToAdd.copy(); newStack.setCount(max); - addingStack.shrink(max); + stackToAdd.shrink(max); inventory.setItem(slot, newStack); } else { - inventory.setItem(slot, addingStack); + inventory.setItem(slot, stackToAdd); return ItemStack.EMPTY; } } else { - combineStacks(existingStack, addingStack, max); + combineStacks(slotStack, stackToAdd, max); } - return addingStack; + return stackToAdd; } - public static void combineStacks(ItemStack originalStack, ItemStack addingStack) { - combineStacks(originalStack, addingStack, originalStack.getMaxStackSize()); + public static void combineStacks(ItemStack originalStack, ItemStack stackToAdd) { + combineStacks(originalStack, stackToAdd, stackToAdd.getMaxStackSize()); } - public static void combineStacks(ItemStack originalStack, ItemStack addingStack, int max) { - if (ItemStack.isSameItemSameComponents(originalStack, addingStack)) { + private static void combineStacks(ItemStack originalStack, ItemStack stackToAdd, int max) { + if (ItemStack.isSameItemSameComponents(originalStack, stackToAdd)) { int leftOverAmountInExistingStack = max - originalStack.getCount(); if (leftOverAmountInExistingStack > 0) { - int addAmount = Math.min(leftOverAmountInExistingStack, addingStack.getCount()); + int addAmount = Math.min(leftOverAmountInExistingStack, stackToAdd.getCount()); originalStack.grow(addAmount); - addingStack.shrink(addAmount); + stackToAdd.shrink(addAmount); } } } @@ -174,12 +174,12 @@ public static void combineStacks(ItemStack originalStack, ItemStack addingStack, */ public static boolean addToInventory(Container inventory, ItemStack stackToAdd, int rangeStart, int rangeEnd) { for (int i = rangeStart; i < rangeEnd; i++) { - ItemStack currentStack = inventory.getItem(i); - if (currentStack.isEmpty()) { + ItemStack slotStack = inventory.getItem(i); + if (slotStack.isEmpty()) { inventory.setItem(i, stackToAdd); return true; } else if (stackToAdd.isStackable()) { - combineStacks(currentStack, stackToAdd, inventory.getMaxStackSize(currentStack)); + combineStacks(slotStack, stackToAdd, inventory.getMaxStackSize(stackToAdd)); if (stackToAdd.isEmpty()) { return true; } @@ -199,8 +199,8 @@ public static boolean addToInventory(Container inventory, ItemStack stackToAdd, */ public static boolean addToInventory(Container inventory, List stacksToAdd, int rangeStart, int rangeEnd) { for (int i = rangeStart; i < rangeEnd; i++) { - ItemStack inventoryStack = inventory.getItem(i); - if (inventoryStack.isEmpty()) { + ItemStack slotStack = inventory.getItem(i); + if (slotStack.isEmpty()) { inventory.setItem(i, stacksToAdd.getFirst()); stacksToAdd.removeFirst(); if (stacksToAdd.isEmpty()) { @@ -210,7 +210,7 @@ public static boolean addToInventory(Container inventory, List stacks for (int j = 0; j < stacksToAdd.size(); j++) { ItemStack stackToAdd = stacksToAdd.get(j); if (stackToAdd.isStackable()) { - combineStacks(inventoryStack, stackToAdd, inventory.getMaxStackSize(stackToAdd)); + combineStacks(slotStack, stackToAdd, inventory.getMaxStackSize(stackToAdd)); if (stackToAdd.isEmpty()) { stacksToAdd.remove(j); if (stacksToAdd.isEmpty()) { @@ -237,15 +237,15 @@ public static boolean hasIngredientStacksInInventory(List ingre requiredIngredientAmounts.add(ingredient.getCount()); } - for (int i = 0; i < inventory.getContainerSize(); i++) { + for (int slot = 0; slot < inventory.getContainerSize(); slot++) { if (ingredientsToFind.isEmpty()) { break; } - ItemStack currentStack = inventory.getItem(i); - if (!currentStack.isEmpty()) { - int amount = currentStack.getCount(); + ItemStack slotStack = inventory.getItem(slot); + if (!slotStack.isEmpty()) { + int amount = slotStack.getCount(); for (int j = 0; j < ingredientsToFind.size(); j++) { - if (ingredientsToFind.get(j).test(currentStack)) { + if (ingredientsToFind.get(j).test(slotStack)) { int ingredientCount = requiredIngredientAmounts.get(j); if (amount >= ingredientCount) { ingredientsToFind.remove(j); From bb62f4b13f08f5dcd533646a08132130341c165d Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 3 Aug 2026 20:37:12 +0200 Subject: [PATCH 141/477] fix injection point of #936 --- .../java/de/dafuqs/spectrum/mixin/client/DrawContextMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/mixin/client/DrawContextMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/client/DrawContextMixin.java index 84a488de87..c80838d0c8 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/client/DrawContextMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/client/DrawContextMixin.java @@ -24,7 +24,7 @@ public abstract class DrawContextMixin { @Shadow public abstract void renderOutline(int x, int y, int width, int height, int color); - @Inject(method = "renderItemDecorations(Lnet/minecraft/client/gui/Font;Lnet/minecraft/world/item/ItemStack;IILjava/lang/String;)V", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;push()V")) + @Inject(method = "renderItemDecorations(Lnet/minecraft/client/gui/Font;Lnet/minecraft/world/item/ItemStack;IILjava/lang/String;)V", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;pushPose()V")) protected void spectrum$drawSlotBackground(Font textRenderer, ItemStack stack, int x, int y, String countOverride, CallbackInfo ci) { SlotBackgroundEffectProvider backgroundEffectProvider = null; From 2f33ac298cc1ad0083a08ad594296df4997c082e Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 4 Aug 2026 16:11:23 +0200 Subject: [PATCH 142/477] fix total capped ink storage tooltip --- .../spectrum/api/ink/storage/TotalCappedInkStorage.java | 8 ++++---- src/main/resources/assets/spectrum/lang/en_us.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/storage/TotalCappedInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/TotalCappedInkStorage.java index 47ad07b9b8..ee86a9d690 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/storage/TotalCappedInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/TotalCappedInkStorage.java @@ -109,9 +109,8 @@ public void fillCompletely() { @Override public void clearContent() { - Set supportedColors = this.storedEnergy.keySet(); Map newContent = new HashMap<>(); - for (InkColor color : supportedColors) { + for (InkColor color : this.storedEnergy.keySet()) { newContent.put(color, 0L); } this.storedEnergy = newContent; @@ -121,9 +120,10 @@ public void clearContent() { @Override public List getTooltip() { List tooltip = new ArrayList<>(); - long maxEnergyPerColor = getMaxPerColor(); - tooltip.add(Component.translatable("item.spectrum.ink_storage.stores_ink_per_type", Support.getShortenedNumberString(maxEnergyPerColor))); + + tooltip.add(Component.translatable("item.spectrum.total_capped_energy_storage.tooltip", Support.getShortenedNumberString(getMaxTotal()))); appendInkStoreBulletTooltips(tooltip); + return tooltip; } diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index e9e9eb6d1a..4dda1a18fd 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -5005,7 +5005,7 @@ "item.spectrum.topaz_glass_arrow.tooltip": "Pulls the target in your direction", "item.spectrum.topaz_powder": "Topaz Powder", "item.spectrum.topaz_shard": "Topaz Shard", - "item.spectrum.total_capped_simple_pigment_energy_storage.tooltip": "§7Stores up to %d§7 Ink in total", + "item.spectrum.total_capped_energy_storage.tooltip": "§7Stores up to %d§7 Ink in total", "item.spectrum.totem_pendant": "Totem Pendant", "item.spectrum.totem_pendant.tooltip": "§7One-time Protection from Death", "item.spectrum.triple_meat_pot_pie": "Triple Meat Pot Pie", From b068d2cd3f3b4f5f9bd48ee473ddc850ed4270bc Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 4 Aug 2026 16:12:32 +0200 Subject: [PATCH 143/477] remove unnecessary mixin & unused overlay stuffs --- .../api/render/DynamicItemRenderer.java | 38 ----- .../api/render/DynamicRenderModel.java | 158 ------------------ .../BottomlessBundleItem.java | 23 --- .../items/tools/OmniAcceleratorItem.java | 26 --- .../mixin/client/HeldItemRendererMixin.java | 44 ----- src/main/resources/spectrum.mixins.json | 1 - 6 files changed, 290 deletions(-) delete mode 100644 src/main/java/de/dafuqs/spectrum/api/render/DynamicItemRenderer.java delete mode 100644 src/main/java/de/dafuqs/spectrum/api/render/DynamicRenderModel.java delete mode 100644 src/main/java/de/dafuqs/spectrum/mixin/client/HeldItemRendererMixin.java diff --git a/src/main/java/de/dafuqs/spectrum/api/render/DynamicItemRenderer.java b/src/main/java/de/dafuqs/spectrum/api/render/DynamicItemRenderer.java deleted file mode 100644 index a5694c76dd..0000000000 --- a/src/main/java/de/dafuqs/spectrum/api/render/DynamicItemRenderer.java +++ /dev/null @@ -1,38 +0,0 @@ -package de.dafuqs.spectrum.api.render; - -import com.mojang.blaze3d.vertex.*; -import it.unimi.dsi.fastutil.objects.*; -import net.minecraft.client.renderer.*; -import net.minecraft.client.renderer.entity.*; -import net.minecraft.client.resources.model.*; -import net.minecraft.world.item.*; - -import java.util.function.*; - -// TODO: make usable on neoforge -// Similar to FAPIs DynamicItemRenderer, except with a little more information. -@FunctionalInterface -public interface DynamicItemRenderer { - - Object2ObjectArrayMap RENDERERS = new Object2ObjectArrayMap<>(); - - /** - * Renders an item stack. - * - * @param renderer the currently used ItemRenderer instance - * @param stack the rendered item stack - * @param mode the model transformation mode - * @param leftHanded the handedness boolean in the original render methods arguments - * @param matrices the matrix stack - * @param vertexConsumers the vertex consumer provider - * @param light packed lightmap coordinates - * @param overlay the overlay UV passed to {@link com.mojang.blaze3d.vertex.VertexConsumer#setOverlay(int)} - * @param model the original model [use this to render the underlying item model] - */ - void render(ItemRenderer renderer, ItemStack stack, ItemDisplayContext mode, boolean leftHanded, PoseStack matrices, MultiBufferSource vertexConsumers, int light, int overlay, BakedModel model); - - static void registerDynamicItemRenderer(Item item, Supplier renderer) { - DynamicItemRenderer.RENDERERS.put(item, renderer.get()); - } - -} diff --git a/src/main/java/de/dafuqs/spectrum/api/render/DynamicRenderModel.java b/src/main/java/de/dafuqs/spectrum/api/render/DynamicRenderModel.java deleted file mode 100644 index 05c0d9689b..0000000000 --- a/src/main/java/de/dafuqs/spectrum/api/render/DynamicRenderModel.java +++ /dev/null @@ -1,158 +0,0 @@ -package de.dafuqs.spectrum.api.render; - -import it.unimi.dsi.fastutil.objects.*; -import net.minecraft.client.multiplayer.*; -import net.minecraft.client.renderer.block.model.*; -import net.minecraft.client.renderer.texture.*; -import net.minecraft.client.resources.model.*; -import net.minecraft.core.*; -import net.minecraft.resources.*; -import net.minecraft.util.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.block.state.*; -import org.jspecify.annotations.*; - -import java.util.*; -import java.util.function.*; - -// TODO: use -class ForwardingBakedModel implements BakedModel { - protected @Nullable BakedModel wrapped; - - public BakedModel getWrappedModel() { - return this.wrapped; - } - - protected void setWrappedModel(BakedModel model) { - this.wrapped = model; - } - - @Override - public List getQuads(@Nullable BlockState state, @Nullable Direction side, RandomSource rand) { - return this.wrapped.getQuads(state, side, rand); - } - - @Override - public boolean useAmbientOcclusion() { - return this.wrapped.useAmbientOcclusion(); - } - - @Override - public boolean isGui3d() { - return this.wrapped.isGui3d(); - } - - @Override - public boolean usesBlockLight() { - return this.wrapped.usesBlockLight(); - } - - @Override - public boolean isCustomRenderer() { - return this.wrapped.isCustomRenderer(); - } - - @Override - public TextureAtlasSprite getParticleIcon() { - return this.wrapped.getParticleIcon(); - } - - @Override - public ItemTransforms getTransforms() { - return this.wrapped.getTransforms(); - } - - @Override - public ItemOverrides getOverrides() { - return this.wrapped.getOverrides(); - } -} - -public class DynamicRenderModel extends ForwardingBakedModel implements UnbakedModel { - - public static final ObjectOpenHashSet CUSTOM_ITEM_MODELS = new ObjectOpenHashSet<>(); - - private static class WrappingOverridesList extends ItemOverrides { - private final ItemOverrides wrapped; - - private WrappingOverridesList(ItemOverrides orig) { - super(null, null, List.of()); - this.wrapped = orig; - } - - @Override - public @Nullable BakedModel resolve(BakedModel model, ItemStack stack, @Nullable ClientLevel world, @Nullable LivingEntity entity, int seed) { - BakedModel newModel = wrapped.resolve(model, stack, world, entity, seed); - return newModel == model ? model : new DynamicRenderModel(newModel); - } - } - - // only used pre-bake; set to null after bake - private @Nullable UnbakedModel baseUnbaked; - - // pre-bake constructor - public DynamicRenderModel(UnbakedModel base) { - this.baseUnbaked = base; - } - - // post-bake / post-override constructor - public DynamicRenderModel(BakedModel base) { - this.wrapped = base instanceof DynamicRenderModel fm ? fm.getWrappedModel() : base; - } - - // avoid FAPI builtin model lookup - @Override - public boolean isCustomRenderer() { - // maintain behavior from original - return false; - } - - private DynamicRenderModel wrap(BakedModel model) { - this.wrapped = model instanceof DynamicRenderModel fm ? fm.getWrappedModel() : model; - return this; - } - - @Override - public Collection getDependencies() { - // If we no longer have an unbaked delegate, return empty to avoid NPEs - return this.baseUnbaked != null ? this.baseUnbaked.getDependencies() : Collections.emptyList(); - } - - // override so wrap persists over override - ensures that renderer is called - @Override - public ItemOverrides getOverrides() { - // When used pre-bake `wrapped` may be null — avoid calling super.getOverrides() in that case - if (this.wrapped == null) { - // Lightweight safe fallback overrides instance; NeoForge 1.21.1 may or may not expose ItemOverrides.EMPTY - return new WrappingOverridesList(new ItemOverrides(null, null, List.of())); - } - return new WrappingOverridesList(super.getOverrides()); - } - - // return empty transform to prevent double apply in render - @Override - public ItemTransforms getTransforms() { - return this.wrapped != null ? this.wrapped.getTransforms() : ItemTransforms.NO_TRANSFORMS; - } - - @Override - public void resolveParents(Function modelLoader) { - if (this.baseUnbaked != null) { - this.baseUnbaked.resolveParents(modelLoader); - } - } - - @Override - public @Nullable BakedModel bake(ModelBaker baker, Function textureGetter, ModelState rotationContainer) { - // If already baked / no unbaked delegate, return the current wrapped model - if (this.baseUnbaked == null) { - return this.wrapped; - } - BakedModel baked = this.baseUnbaked.bake(baker, textureGetter, rotationContainer); - // drop pre-bake reference after bake - this.baseUnbaked = null; - return this.wrap(baked); - } - -} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleItem.java b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleItem.java index 0a3d23a458..0ca309029c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleItem.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleItem.java @@ -268,29 +268,6 @@ protected ItemStack execute(BlockSource pointer, ItemStack stack) { } - @OnlyIn(Dist.CLIENT) - public static class Renderer implements DynamicItemRenderer { - public Renderer() { - } - - @Override - public void render(ItemRenderer renderer, ItemStack stack, ItemDisplayContext mode, boolean leftHanded, PoseStack matrices, MultiBufferSource vertexConsumers, int light, int overlay, BakedModel model) { - // TODO - /*renderer.render(stack, mode, leftHanded, matrices, vertexConsumers, light, overlay, model); - if (mode != ItemDisplayContext.GUI || getStoredAmount(stack) <= 0) - return; - ItemStack bundledStack = BottomlessBundleItem.getTemplateVariant(stack); - Minecraft client = Minecraft.getInstance(); - BakedModel bundledModel = renderer.getModel(bundledStack, client.level, client.player, 0); - - matrices.pushPose(); - matrices.scale(0.5F, 0.5F, 0.5F); - matrices.translate(0.5F, 0.5F, 0.5F); - renderer.render(bundledStack, mode, leftHanded, matrices, vertexConsumers, light, overlay, bundledModel); - matrices.popPose();*/ - } - } - @Override public boolean supportsEnchantment(ItemStack stack, Holder enchantment) { return super.supportsEnchantment(stack, enchantment) || enchantment.is(Enchantments.POWER); diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/OmniAcceleratorItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/OmniAcceleratorItem.java index 248e96bfe2..06cac1bf3f 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/OmniAcceleratorItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/OmniAcceleratorItem.java @@ -111,32 +111,6 @@ public void appendHoverText(ItemStack stack, TooltipContext context, List optionalStack = getFirstStack(client.level.registryAccess(), stack); - if (optionalStack.isEmpty()) { - return; - } - ItemStack bundledStack = optionalStack.get(); - - BakedModel bundledModel = renderer.getModel(bundledStack, client.level, client.player, 0); - - matrices.pushPose(); - matrices.scale(0.5F, 0.5F, 0.5F); - matrices.translate(0.5F, 0.5F, 0.5F); - renderer.render(bundledStack, mode, leftHanded, matrices, vertexConsumers, light, overlay, bundledModel); - matrices.popPose(); - } - } - @Override public SlotEffect backgroundType(@Nullable Player player, ItemStack stack) { var usable = InkPowered.hasAvailableInk(player, COST); diff --git a/src/main/java/de/dafuqs/spectrum/mixin/client/HeldItemRendererMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/client/HeldItemRendererMixin.java deleted file mode 100644 index 4860e01e14..0000000000 --- a/src/main/java/de/dafuqs/spectrum/mixin/client/HeldItemRendererMixin.java +++ /dev/null @@ -1,44 +0,0 @@ -package de.dafuqs.spectrum.mixin.client; - -import com.mojang.blaze3d.vertex.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.client.player.*; -import net.minecraft.client.renderer.*; -import net.minecraft.world.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.item.*; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.*; -import org.spongepowered.asm.mixin.injection.callback.*; - -@Mixin(ItemInHandRenderer.class) -public class HeldItemRendererMixin { - - @Shadow - private ItemStack offHandItem; - - @Shadow - private void renderOneHandedMap(PoseStack matrices, MultiBufferSource vertexConsumers, int light, float equipProgress, HumanoidArm arm, float swingProgress, ItemStack stack) { - } - - @Shadow - private void renderTwoHandedMap(PoseStack matrices, MultiBufferSource vertexConsumers, int light, float pitch, float equipProgress, float swingProgress) { - } - - // TODO: do we need that mixin? ARTISANS_ATLAS extends MapItem - @Inject(method = "renderArmWithItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;getItem()Lnet/minecraft/world/item/Item;", ordinal = 1), cancellable = true) - private void spectrum$renderFirstPersonItem(AbstractClientPlayer player, float tickDelta, float pitch, InteractionHand hand, float swingProgress, ItemStack item, float equipProgress, PoseStack matrices, MultiBufferSource vertexConsumers, int light, CallbackInfo ci) { - if (item.is(SpectrumItems.ARTISANS_ATLAS)) { - boolean isInMainHand = hand == InteractionHand.MAIN_HAND; - if (isInMainHand && this.offHandItem.isEmpty()) { - this.renderTwoHandedMap(matrices, vertexConsumers, light, pitch, equipProgress, swingProgress); - } else { - HumanoidArm arm = isInMainHand ? player.getMainArm() : player.getMainArm().getOpposite(); - this.renderOneHandedMap(matrices, vertexConsumers, light, equipProgress, arm, swingProgress, item); - } - matrices.popPose(); - ci.cancel(); - } - } - -} diff --git a/src/main/resources/spectrum.mixins.json b/src/main/resources/spectrum.mixins.json index b844e0141b..9c8168681f 100644 --- a/src/main/resources/spectrum.mixins.json +++ b/src/main/resources/spectrum.mixins.json @@ -103,7 +103,6 @@ "client.EntityRenderDispatcherMixin", "client.GameRendererMixin", "client.HeadFeatureRendererMixin", - "client.HeldItemRendererMixin", "client.InGameHudMixin", "client.InGameOverlayRendererMixin", "client.ItemRendererMixin", From 14cc28c4abb26157f65c89b525b2256bbcb47971 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 4 Aug 2026 16:12:56 +0200 Subject: [PATCH 144/477] I do not know what that chances, but it is definitely more correct --- src/main/java/de/dafuqs/spectrum/mixin/ItemEntityMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/mixin/ItemEntityMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/ItemEntityMixin.java index 7d1a5ca437..f0e9bb68bd 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/ItemEntityMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/ItemEntityMixin.java @@ -69,7 +69,7 @@ public void spectrumItemStackDamageActions(DamageSource source, float amount, Ca private void isDamageProof(DamageSource source, float amount, CallbackInfoReturnable cir) { ItemEntity thisItemEntity = (ItemEntity) (Object) this; if (DamageImmunityHelper.isImmuneTo(thisItemEntity.getItem(), source)) { - cir.setReturnValue(true); + cir.setReturnValue(false); } else if (source.is(SpectrumDamageTypes.PRIMORDIAL_FIRE)) { if (PrimordialFireBurningRecipe.processItemEntity(thisItemEntity.level(), thisItemEntity)) { cir.setReturnValue(true); From 82c2472620e6305b7f5a479b098b6a67d901972e Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 4 Aug 2026 16:15:36 +0200 Subject: [PATCH 145/477] Huge Ink changes! - Ink now evens out even between items<=>blocks (like palettes in the color picker) - Hovering over Ink storing blocks using the Paintbrush now brings up a UI with Ink data - Crystallarieum does not take ink items anymore. Supply Ink via Pastel Node --- .../de/dafuqs/spectrum/SpectrumClient.java | 19 ++- .../spectrum/api/ink/InkTransferHelper.java | 85 ++++++------- .../spectrum/api/ink/storage/InkStorage.java | 49 -------- .../blocks/ink/BaseInkBlockEntity.java | 22 ++-- .../ink/gen/InkGeneratorBlockEntity.java | 20 +-- .../ink/sink/CinderhearthBlockEntity.java | 27 ++-- .../ink/sink/ColorPickerBlockEntity.java | 59 ++------- .../blocks/ink/sink/CrystallarieumBlock.java | 8 -- .../ink/sink/CrystallarieumBlockEntity.java | 47 +++---- .../CrystallarieumBlockEntityRenderer.java | 10 -- .../ink/sink/TintingStationBlockEntity.java | 41 ++---- .../blocks/ink/sink/package-info.java | 7 ++ .../dafuqs/spectrum/helpers/RenderHelper.java | 2 +- .../inventories/ColorPickerScreen.java | 7 +- .../inventories/InkStorageScreen.java | 7 +- .../inventories/TintingStationScreen.java | 6 +- .../widgets/ink/InkListWidget.java | 21 ++-- .../ink/InkListWidgetWithBorderAndTitle.java | 8 +- .../inventories/widgets/ink/InkPieWidget.java | 118 +++++++++++------- .../widgets/ink/StackedInkBarWidget.java | 60 ++++++--- .../mixin/client/ItemRendererMixin.java | 14 --- .../InkContainerInteractionCriterion.java | 3 +- .../spectrum/registries/SpectrumItems.java | 2 +- .../client/SpectrumClientEventListeners.java | 50 +++++--- .../dafuqs/spectrum/render/HudRenderers.java | 106 +++++++++++----- .../spectrum/textures/gui/sprites/splash.png | Bin 0 -> 10713 bytes .../gui/sprites/widget/ink_pie_background.png | Bin 0 -> 8348 bytes .../gui/sprites/widget/ink_pie_foreground.png | Bin 0 -> 5743 bytes .../widget/ink_pie_foreground_thick.png | Bin 0 -> 5789 bytes .../gui/sprites/widget/stacked_ink_bar.png | Bin 0 -> 4409 bytes .../sprites/widget/stacked_ink_bar_thick.png | Bin 0 -> 4438 bytes 31 files changed, 380 insertions(+), 418 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/ink/sink/package-info.java create mode 100644 src/main/resources/assets/spectrum/textures/gui/sprites/splash.png create mode 100644 src/main/resources/assets/spectrum/textures/gui/sprites/widget/ink_pie_background.png create mode 100644 src/main/resources/assets/spectrum/textures/gui/sprites/widget/ink_pie_foreground.png create mode 100644 src/main/resources/assets/spectrum/textures/gui/sprites/widget/ink_pie_foreground_thick.png create mode 100644 src/main/resources/assets/spectrum/textures/gui/sprites/widget/stacked_ink_bar.png create mode 100644 src/main/resources/assets/spectrum/textures/gui/sprites/widget/stacked_ink_bar_thick.png diff --git a/src/main/java/de/dafuqs/spectrum/SpectrumClient.java b/src/main/java/de/dafuqs/spectrum/SpectrumClient.java index ff420ac3b7..11c361d8d8 100644 --- a/src/main/java/de/dafuqs/spectrum/SpectrumClient.java +++ b/src/main/java/de/dafuqs/spectrum/SpectrumClient.java @@ -41,11 +41,15 @@ public SpectrumClient(IEventBus modBus, ModContainer modContainer) { modBus.addListener(SpectrumModelPredicateProviders::registerClient); modBus.addListener(SpectrumEntityRenderers::registerClient); modBus.addListener(SpectrumParticleFactories::register); - modBus.addListener(HudRenderers::register); - NeoForge.EVENT_BUS.addListener(HudRenderers::registerPost); + modBus.addListener(SpectrumFluids::registerClient); + modBus.addListener(SpectrumBlockEntities::registerClient); + modBus.addListener(SpectrumMenuTypes::registerClient); + modBus.addListener(SpectrumModelLayerLocations::register); + modBus.addListener(BedrockCapeRenderer::registerLayers); + modBus.addListener(SpectrumColorProviders::registerBlocks); + modBus.addListener(SpectrumColorProviders::registerItems); - NeoForge.EVENT_BUS.addListener(HudRenderers::registerPost); SpectrumEnvironmentalDataOverrides.register(); SpectrumClientEventListeners.register(modBus); @@ -55,15 +59,6 @@ public SpectrumClient(IEventBus modBus, ModContainer modContainer) { RevealingCallback.register(this); ClientAdvancementPacketCallback.registerCallback(this); - - modBus.addListener(SpectrumFluids::registerClient); - modBus.addListener(SpectrumBlockEntities::registerClient); - modBus.addListener(SpectrumMenuTypes::registerClient); - modBus.addListener(SpectrumModelLayerLocations::register); - modBus.addListener(BedrockCapeRenderer::registerLayers); - - modBus.addListener(SpectrumColorProviders::registerBlocks); - modBus.addListener(SpectrumColorProviders::registerItems); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java b/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java index d755bfecab..87ca292674 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java @@ -1,10 +1,12 @@ package de.dafuqs.spectrum.api.ink; +import com.mojang.datafixers.util.*; import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.progression.*; import de.dafuqs.spectrum.registries.*; +import it.unimi.dsi.fastutil.objects.*; import net.minecraft.server.level.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; @@ -14,75 +16,65 @@ public class InkTransferHelper { - public static long transferInkOneWay(InkCapability source, InkCapability destination, @Nullable InkColor color, @Nullable Player advancementPlayer, ItemStack advancementStack) { - long amount = 0; - if (color != null) { - amount = InkStorage.transferInk(source.getStorage(), destination.getStorage(), color); - } else { - for (InkColor c : InkColors.all()) { - amount += InkStorage.transferInk(source.getStorage(), destination.getStorage(), c); - } - } - - if (amount > 0) { - source.markDirty(); - destination.markDirty(); - - if (advancementPlayer instanceof ServerPlayer serverPlayer) { - SpectrumAdvancementCriteria.INK_CONTAINER_INTERACTION.trigger(serverPlayer, advancementStack, source.getStorage(), color, amount); - } - } - return amount; - } - /** * Transfers Ink from storages with lots of Ink * to storages with less. * When called repeatedly (like every tick) the values of all storages will equalize, * limited by their max storage. * Don't forget to mark your stuff dirty, like with InkStorageBlockEntity.setInkDirty()! - * @param targets The storages to run an equalization tick on + * @param capabilities The InkCapabilities to run an equalization tick on */ - public static void equalizeInk(List targets) { - SpectrumRegistries.INK_COLOR.stream().forEach(inkColor -> equalizeInk(targets, inkColor)); - for(InkCapability inkStorage : targets) { - inkStorage.markDirty(); + public static void equalizeInk(List capabilities) { + SpectrumRegistries.INK_COLOR.stream().forEach(inkColor -> equalizeInk(capabilities, inkColor)); + } + + public static void equalizeInk(InkCapability capability1, InkCapability capability2, @Nullable InkColor color) { + if(color == null) { + equalizeInk(capability1, capability2); + } else { + equalizeInk(List.of(capability1, capability2), color); } } + public static void equalizeInk(InkCapability capability1, InkCapability capability2) { + SpectrumRegistries.INK_COLOR.stream().forEach(inkColor -> equalizeInk(List.of(capability1, capability2), inkColor)); + } + private static void equalizeInk(List targets, InkColor color) { final double PRESSURE_FACTOR = 0.02; - List storages = new ArrayList<>(); + Map map = new Object2ObjectArrayMap<>(); + Set dirtyCapabilities = new ObjectArraySet<>(); for (InkCapability cap : targets) { InkStorage storage = cap.getStorage(); if (storage.accepts(color)) { - storages.add(storage); + map.put(storage, cap); } } - if (storages.isEmpty()) { + if (map.isEmpty()) { return; } // Compute average long total = 0; - for (InkStorage s : storages) { + for (InkStorage s : map.keySet()) { total += s.getEnergy(color); } - double avg = (double) total / storages.size(); + double avg = (double) total / map.size(); - for (InkStorage s : storages) { + for (Map.Entry entry : map.entrySet()) { + InkStorage s = entry.getKey(); long current = s.getEnergy(color); double diff = avg - current; if (diff > 0) { // Needs ink long remainingNeed = (long) Math.ceil(diff * PRESSURE_FACTOR); - for (InkStorage other : storages) { + for (Map.Entry other : map.entrySet()) { if (other == s) continue; - long available = other.getEnergy(color); + long available = other.getKey().getEnergy(color); if (available <= 0) continue; long room = s.getRoom(color); @@ -91,12 +83,10 @@ private static void equalizeInk(List targets, InkColor color) { long toTransfer = Math.min(Math.min(available, remainingNeed), room); if (toTransfer > 0) { - long drained = other.drainEnergy(color, toTransfer); - long leftover = s.addEnergy(color, drained); - - if (leftover != 0) { - other.addEnergy(color, leftover); - } + long drained = other.getKey().drainEnergy(color, toTransfer); + s.addEnergy(color, drained); + dirtyCapabilities.add(other.getValue()); + dirtyCapabilities.add(entry.getValue()); remainingNeed -= drained; if (remainingNeed <= 0) break; @@ -106,21 +96,18 @@ private static void equalizeInk(List targets, InkColor color) { } else if (diff < 0) { // Has excess long remainingExcess = (long) Math.ceil(-diff * PRESSURE_FACTOR); - for (InkStorage other : storages) { + for (Map.Entry other : map.entrySet()) { if (other == s) continue; - long room = other.getRoom(color); + long room = other.getKey().getRoom(color); if (room <= 0) continue; long toTransfer = Math.min(room, remainingExcess); - if (toTransfer > 0) { long drained = s.drainEnergy(color, toTransfer); - long leftover = other.addEnergy(color, drained); - - if (leftover != 0) { - s.addEnergy(color, leftover); - } + other.getKey().addEnergy(color, drained); + dirtyCapabilities.add(other.getValue()); + dirtyCapabilities.add(entry.getValue()); remainingExcess -= drained; if (remainingExcess <= 0) break; @@ -129,7 +116,7 @@ private static void equalizeInk(List targets, InkColor color) { } } - for (InkCapability cap : targets) { + for (InkCapability cap : dirtyCapabilities) { cap.markDirty(); } } diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorage.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorage.java index dce9549058..2e47d4efca 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorage.java @@ -16,55 +16,6 @@ **/ public abstract class InkStorage implements Clearable { - /** - * Transfer Ink from one storage to another - * Transfers Ink using a "pressure like" system: Tries to balance the ink in source and destination. - * The more energy is in source, the more is getting transferred, up to when both storages even out. - * - * @param source The ink storage that is getting drawn from - * @param destination The ink storage receiving energy - * @return the total amount of energy that could be transferred - */ - public static long transferInk(@NotNull InkStorage source, @NotNull InkStorage destination) { - long transferred = 0; - for (InkColor inkColor : source.getEnergy().keySet()) { - transferred += transferInk(source, destination, inkColor); - } - return transferred; - } - - /** - * Transfer Ink from one storage to another - * Transfers Ink using a "pressure like" system: Tries to balance the ink in source and destination. - * The more energy is in source, the more is getting transferred, up to when both storages even out. - * - * @param source The ink storage that is getting drawn from - * @param destination The ink storage receiving energy - * @param color The ink type to transfer - * @return the amount of energy that could be transferred - */ - public static long transferInk(@NotNull InkStorage source, @NotNull InkStorage destination, @NotNull InkColor color) { - if (!destination.accepts(color)) { - return 0; - } - - long sourceAmount = source.getEnergy(color); - if (sourceAmount > 0) { - long destinationRoom = destination.getRoom(color); - if (destinationRoom > 0) { - long destinationAmount = destination.getEnergy(color); - if (sourceAmount > destinationAmount + 1) { - long transferAmount = Math.max(1, (sourceAmount - destinationAmount) / 32); // the constant here is simulating pressure flow - transferAmount = Math.min(transferAmount, Math.min(sourceAmount, destinationRoom)); - destination.addEnergy(color, transferAmount); - source.drainEnergy(color, transferAmount); - return transferAmount; - } - } - } - return 0; - } - // if the storage is able to store this kind of color public abstract boolean accepts(InkColor color); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlockEntity.java index 714883fd2b..73d7f93770 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlockEntity.java @@ -43,8 +43,8 @@ public T getInkStorage() { return inkStorage; } - public InkCapability getCapability() { - return getLevel().getCapability(InkCapabilities.BLOCK, getBlockPos(), null); + public InkCapability getInkCapability() { + return getLevel().getCapability(InkCapabilities.BLOCK, getBlockPos()); } @Override @@ -86,8 +86,8 @@ public void setOwner(Player playerEntity) { @Override public void setChanged() { super.setChanged(); + this.paused = false; if (this.level != null && !this.level.isClientSide) { - this.paused = false; updateInClientWorld(); } } @@ -139,17 +139,13 @@ public int getContainerSize() { return INVENTORY_SIZE; } - public boolean tryFillInkContainer() { - long transferredAmount = 0; - - ItemStack stack = inventory.get(OUTPUT_SLOT_ID); - InkCapability itemStorage = stack.getCapability(InkCapabilities.ITEM, null); - if (itemStorage != null) { - InkCapability blockEntityStorage = this.level.getCapability(InkCapabilities.BLOCK, this.worldPosition, null); - transferredAmount = InkTransferHelper.transferInkOneWay(blockEntityStorage, itemStorage, this.selectedColor.map(Holder::value).orElse(null), getOwnerIfOnline(this.getLevel()), stack); + public void tryFillInkContainer(int slotId) { + ItemStack slotStack = inventory.get(slotId); + InkCapability itemCapability = slotStack.getCapability(InkCapabilities.ITEM, null); + if (itemCapability != null) { + InkCapability blockCapability = getInkCapability(); + InkTransferHelper.equalizeInk(blockCapability, itemCapability, this.selectedColor.map(Holder::value).orElse(null)); } - - return transferredAmount > 0; } public void setSelectedColor(Optional> inkColor) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/InkGeneratorBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/InkGeneratorBlockEntity.java index 613c3c55d6..6cbbafac59 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/InkGeneratorBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/InkGeneratorBlockEntity.java @@ -30,18 +30,18 @@ public InkGeneratorBlockEntity(BlockEntityType blockEntityType, BlockPos bloc @SuppressWarnings("unused") public static void serverTick(Level level, BlockPos pos, BlockState state, InkGeneratorBlockEntity blockEntity) { blockEntity.inkDirty = false; - if (!blockEntity.paused) { - boolean logicSuccess = false; - if (shouldTickLogic(level)) { - logicSuccess = blockEntity.tickLogic(level); - } - boolean filledContainer = blockEntity.tryFillInkContainer(); - - if (logicSuccess || filledContainer) { - //blockEntity.updateInClientWorld(); + if (blockEntity.paused) { + return; + } + + if (blockEntity.shouldTickLogic(level)) { + if(blockEntity.tickLogic(level)) { blockEntity.setInkDirty(); + } else { + blockEntity.paused = true; } } + blockEntity.tryFillInkContainer(OUTPUT_SLOT_ID); } @Override @@ -66,7 +66,7 @@ public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByte BaseInkScreenHandler.ScreenOpeningData.STREAM_CODEC.encode(buffer, new BaseInkScreenHandler.ScreenOpeningData(this.worldPosition, this.selectedColor)); } - protected static boolean shouldTickLogic(Level world) { + protected boolean shouldTickLogic(Level world) { return world.getGameTime() % RUN_LOGIC_EVERY_X_TICKS == 0; } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java index 78e4ba33ea..1db8c0a104 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java @@ -1,12 +1,15 @@ package de.dafuqs.spectrum.blocks.ink.sink; import de.dafuqs.spectrum.api.block.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.recipe.*; import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.blocks.upgrade.*; +import de.dafuqs.spectrum.capabilities.*; import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.inventories.*; @@ -58,7 +61,6 @@ public class CinderhearthBlockEntity extends BaseContainerBlockEntity implements private UpgradeHolder upgrades; private RecipeHolder currentRecipe; // blasting & cinderhearth private boolean usesEfficiency; - protected boolean canTransferInk; protected boolean inkDirty; protected CinderHearthStructureType structure = CinderHearthStructureType.NONE; @@ -190,7 +192,6 @@ public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup this.propertyDelegate.craftingTime = nbt.getShort("CraftingTime"); this.propertyDelegate.craftingTimeTotal = nbt.getShort("CraftingTimeTotal"); this.usesEfficiency = nbt.getBoolean("UsesEfficiency"); - this.canTransferInk = nbt.getBoolean("Paused"); this.inventoryChanged = nbt.getBoolean("InventoryChanged"); if (nbt.contains("Structure", Tag.TAG_ANY_NUMERIC)) { this.structure = CinderHearthStructureType.values()[nbt.getInt("Structure")]; @@ -214,7 +215,6 @@ public void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup nbt.putShort("CraftingTime", (short) this.propertyDelegate.craftingTime); nbt.putShort("CraftingTimeTotal", (short) this.propertyDelegate.craftingTimeTotal); nbt.putBoolean("UsesEfficiency", this.usesEfficiency); - nbt.putBoolean("Paused", this.canTransferInk); nbt.putBoolean("InventoryChanged", this.inventoryChanged); nbt.putInt("Structure", this.structure.ordinal()); if (this.upgrades != null) { @@ -232,24 +232,16 @@ public static void serverTick(Level world, BlockPos blockPos, BlockState blockSt if (cinderhearthBlockEntity.upgrades == null) { cinderhearthBlockEntity.calculateUpgrades(); } - cinderhearthBlockEntity.inkDirty = false; - if (cinderhearthBlockEntity.canTransferInk) { - boolean didSomething = false; + if (cinderhearthBlockEntity.inkDirty || cinderhearthBlockEntity.inventoryChanged) { ItemStack stack = cinderhearthBlockEntity.getItem(INK_PROVIDER_SLOT_ID); - if (stack.getItem() instanceof InkStorageItem inkStorageItem) { - InkStorage itemStorage = inkStorageItem.getEnergyStorage(stack); - didSomething = InkStorage.transferInk(itemStorage, cinderhearthBlockEntity.inkStorage) != 0; - if (didSomething) { - inkStorageItem.setEnergyStorage(stack, itemStorage); - } - } - if (didSomething) { - cinderhearthBlockEntity.setInkDirty(); - } else { - cinderhearthBlockEntity.canTransferInk = false; + InkCapability stackCapability = stack.getCapability(InkCapabilities.ITEM); + InkCapability cinderhearthCapability = world.getCapability(InkCapabilities.BLOCK, blockPos); + if (stackCapability != null && cinderhearthCapability != null) { + InkTransferHelper.equalizeInk(stackCapability, cinderhearthCapability); } } + cinderhearthBlockEntity.inkDirty = false; if (cinderhearthBlockEntity.inventoryChanged) { calculateRecipe(world, cinderhearthBlockEntity); @@ -542,7 +534,6 @@ public boolean stillValid(Player player) { public void inventoryChanged() { this.inventoryChanged = true; - this.canTransferInk = true; this.setChanged(); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlockEntity.java index 9df85c5623..9a9a9c2502 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlockEntity.java @@ -3,6 +3,7 @@ import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.blocks.ink.*; +import de.dafuqs.spectrum.blocks.ink.gen.*; import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.helpers.*; @@ -29,48 +30,23 @@ import java.util.*; -public class ColorPickerBlockEntity extends BaseInkBlockEntity implements MenuProvider { +public class ColorPickerBlockEntity extends InkGeneratorBlockEntity implements MenuProvider { public static final long TICKS_PER_CONVERSION = 5; - public static final long INK_CAPACITY = 64 * 64 * 64 * 100; // (long) Math.pow(256, 2); - protected @Nullable InkConvertingRecipe cachedRecipe; + protected @Nullable RecipeHolder cachedRecipe; public ColorPickerBlockEntity(BlockPos blockPos, BlockState blockState) { - super(SpectrumBlockEntities.COLOR_PICKER.get(), blockPos, blockState, new TotalCappedInkStorage(INK_CAPACITY, Map.of())); - } - - @SuppressWarnings("unused") - public static void serverTick(Level world, BlockPos pos, BlockState state, ColorPickerBlockEntity blockEntity) { - blockEntity.inkDirty = false; - if (!blockEntity.paused) { - boolean convertedPigment = false; - boolean shouldPause = true; - if (world.getGameTime() % TICKS_PER_CONVERSION == 0) { - convertedPigment = blockEntity.tryConvertPigmentToEnergy((ServerLevel) world); - } else { - shouldPause = false; - } - boolean filledContainer = blockEntity.tryFillInkContainer(); - - if (convertedPigment || filledContainer) { - blockEntity.updateInClientWorld(); - blockEntity.setInkDirty(); - } else if (shouldPause) { - blockEntity.paused = true; - } - } + super(SpectrumBlockEntities.COLOR_PICKER.get(), blockPos, blockState, 3); } @Override - public void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { - super.loadAdditional(nbt, registryLookup); - CodecHelper.fromNbt(InkStorageComponent.CODEC, nbt.get("ink_storage")).ifPresent(storage -> this.inkStorage = new TotalCappedInkStorage(storage.maxEnergyTotal(), storage.storedEnergy())); + protected boolean shouldTickLogic(Level world) { + return world.getGameTime() % TICKS_PER_CONVERSION == 0; } @Override - protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { - super.saveAdditional(nbt, registryLookup); - CodecHelper.writeNbt(nbt, "ink_storage", InkStorageComponent.CODEC, new InkStorageComponent(this.inkStorage)); + protected boolean tickLogic(Level level) { + return tryConvertPigmentToEnergy((ServerLevel) level); } @Override @@ -108,6 +84,8 @@ protected boolean tryConvertPigmentToEnergy(ServerLevel world) { new Vec3(0.0, 0.1, 0.0) ); + setChanged(); + return true; } } @@ -117,23 +95,12 @@ protected boolean tryConvertPigmentToEnergy(ServerLevel world) { protected @Nullable InkConvertingRecipe getInkConvertingRecipe(Level world) { // is the current stack empty? ItemStack inputStack = inventory.get(INPUT_SLOT_ID); - if (inputStack.isEmpty()) { - this.cachedRecipe = null; - return null; - } - - // does the cached recipe match? - if (this.cachedRecipe != null) { - if (this.cachedRecipe.getIngredients().get(INPUT_SLOT_ID).test(inputStack)) { - return this.cachedRecipe; - } - } // search matching recipe - Optional> recipe = world.getRecipeManager().getRecipeFor(SpectrumRecipeTypes.INK_CONVERTING, new SingleRecipeInput(inventory.get(INPUT_SLOT_ID)), world); + Optional> recipe = world.getRecipeManager().getRecipeFor(SpectrumRecipeTypes.INK_CONVERTING, new SingleRecipeInput(inputStack), world, cachedRecipe); if (recipe.isPresent()) { - this.cachedRecipe = recipe.get().value(); - return this.cachedRecipe; + this.cachedRecipe = recipe.get(); + return this.cachedRecipe.value(); } else { this.cachedRecipe = null; return null; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlock.java index d93b0bd295..c51a8bd7fa 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlock.java @@ -101,14 +101,6 @@ public ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level if (FluidUtil.interactWithFluidHandler(player, hand, crystallarieumBlockEntity.tank)) { crystallarieumBlockEntity.updateInClientWorld(); return ItemInteractionResult.CONSUME; - } - - // hand is full and inventory is empty: add - // hand is full and inventory already contains item: exchange them - else if (stack.getItem() instanceof InkStorageItem inkStorageItem) { - if (inkStorageItem.getDrainability().canDrain(false) && exchangeStack(world, pos, player, hand, stack, crystallarieumBlockEntity, CrystallarieumBlockEntity.INK_STORAGE_STACK_SLOT_ID)) { - crystallarieumBlockEntity.setOwner(player); - } } else { if (exchangeStack(world, pos, player, hand, stack, crystallarieumBlockEntity, CrystallarieumBlockEntity.ADDITIVE_SLOT_ID)) { crystallarieumBlockEntity.setOwner(player); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java index 6a8240039b..9a048e6691 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java @@ -2,6 +2,8 @@ import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.fluid.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.components.*; @@ -31,13 +33,12 @@ public class CrystallarieumBlockEntity extends InWorldInteractionBlockEntity imp private final static FlowAnimator.Factory FACTORY; + protected final static int INVENTORY_SIZE = 1; protected final static int ADDITIVE_SLOT_ID = 0; - protected final static int INK_STORAGE_STACK_SLOT_ID = 1; - protected final static int INVENTORY_SIZE = 2; public static final long INK_STORAGE_SIZE = 64 * 64 * 100; - protected IndividualCappedInkStorage inkStorage; + protected IndividualCappedInkStorage inkStorage = new IndividualCappedInkStorage(INK_STORAGE_SIZE); protected boolean inkDirty; @Nullable @@ -53,7 +54,7 @@ public class CrystallarieumBlockEntity extends InWorldInteractionBlockEntity imp protected TickLooper tickLooper = new TickLooper(SECOND); protected int currentGrowthStageTicks; - protected boolean canWork; + protected boolean canWork = true; float rotation = 0F; protected @Nullable FlowAnimator animator; @@ -61,8 +62,6 @@ public class CrystallarieumBlockEntity extends InWorldInteractionBlockEntity imp public CrystallarieumBlockEntity(BlockPos pos, BlockState state) { super(SpectrumBlockEntities.CRYSTALLARIEUM.get(), pos, state, INVENTORY_SIZE); - this.inkStorage = new IndividualCappedInkStorage(INK_STORAGE_SIZE); - this.canWork = true; } @SuppressWarnings("unused") @@ -102,7 +101,7 @@ public void updateAnimator() { @SuppressWarnings("unused") public static void serverTick(Level world, BlockPos blockPos, BlockState blockState, CrystallarieumBlockEntity crystallarieum) { if (crystallarieum.canWork) { - transferInk(crystallarieum); + crystallarieum.canWork = false; var recipe = crystallarieum.currentRecipe; if (recipe != null) { @@ -173,17 +172,6 @@ private static void tickRecipe(Level world, BlockPos blockPos, CrystallarieumBlo } } - private static void transferInk(CrystallarieumBlockEntity crystallarieum) { - ItemStack inkStorageStack = crystallarieum.getItem(INK_STORAGE_STACK_SLOT_ID); - if (inkStorageStack.getItem() instanceof InkStorageItem inkStorageItem) { - InkStorage itemInkStorage = inkStorageItem.getEnergyStorage(inkStorageStack); - long transferredAmount = InkStorage.transferInk(itemInkStorage, crystallarieum.inkStorage); - if (transferredAmount > 0) { - inkStorageItem.setEnergyStorage(inkStorageStack, itemInkStorage); - } - } - } - @Override public void inventoryChanged() { if (this.currentRecipe == null || level == null) { @@ -255,16 +243,8 @@ public void acceptStack(ItemStack itemStack, boolean creative, @Nullable UUID pl boolean changed = false; if (level == null) return; - if (itemStack.getItem() instanceof InkStorageItem inkStorageItem && inkStorageItem.getDrainability().canDrain(false)) { - ItemStack currentInkStorageStack = getItem(INK_STORAGE_STACK_SLOT_ID); - if (currentInkStorageStack.isEmpty()) { - setItem(INK_STORAGE_STACK_SLOT_ID, itemStack.copy()); - if (!creative) { - itemStack.setCount(0); - } - changed = true; - } - } else if (level.getBlockState(worldPosition.above()).isAir()) { + + if (level.getBlockState(worldPosition.above()).isAir()) { var recipe = level.getRecipeManager().getRecipeFor(SpectrumRecipeTypes.CRYSTALLARIEUM, new SingleRecipeInput(itemStack), level); if (recipe.isPresent()) { if (!creative) { @@ -345,9 +325,16 @@ public IndividualCappedInkStorage getInkStorage() { @Override public void setInkDirty() { + setChanged(); this.inkDirty = true; } + @Override + public void setChanged() { + super.setChanged(); + this.canWork = true; + } + @Override public boolean getInkDirty() { return this.inkDirty; @@ -355,9 +342,7 @@ public boolean getInkDirty() { @Override public boolean canPlaceItem(int slot, ItemStack stack) { - if (slot == INK_STORAGE_STACK_SLOT_ID) { - return stack.getItem() instanceof InkStorageItem; - } else if (this.currentRecipe != null) { + if (this.currentRecipe != null) { return this.currentRecipe.value().getAdditive(stack) != CrystallarieumAdditive.EMPTY; } return false; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntityRenderer.java index f863876d77..e9d7614819 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntityRenderer.java @@ -109,16 +109,6 @@ private void renderHalo(CrystallarieumBlockEntity crystal, float tickDelta, Pose upperecho.y = (float) (-0.5 - (bounce / 3)); halo.render(matrices, vertices, LightTexture.FULL_BRIGHT, overlay, argb); - //Fairly lazily placed ink storage. Due to be removed once ink update happens - ItemStack inkStorageStack = crystal.getItem(CrystallarieumBlockEntity.INK_STORAGE_STACK_SLOT_ID); - if (!inkStorageStack.isEmpty()) { - matrices.scale(0.65F, 0.65F, 0.65F); - matrices.mulPose(Axis.XP.rotationDegrees(180)); - matrices.translate(0, 0.975 + bounce / 3, 0); - Minecraft.getInstance().getItemRenderer().renderStatic(inkStorageStack, ItemDisplayContext.GROUND, light, overlay, matrices, vertexConsumers, crystal.getLevel(), 0); - - } - matrices.popPose(); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/TintingStationBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/TintingStationBlockEntity.java index 646ccdb02e..221459e114 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/TintingStationBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/TintingStationBlockEntity.java @@ -51,8 +51,7 @@ public static void serverTick(Level world, BlockPos pos, BlockState state, Tinti return; } - boolean didSomething = true; - + blockEntity.paused = true; Optional> inkColorHolder = blockEntity.getSelectedColor(); InkStorage inkStorage = blockEntity.getInkStorage(); @@ -80,40 +79,26 @@ public static void serverTick(Level world, BlockPos pos, BlockState state, Tinti output.grow(1); } - if (didSomething) { - inkStorage.addEnergy(selectedInkColor, -ITEM_COLORING_COST); + inkStorage.addEnergy(selectedInkColor, -ITEM_COLORING_COST); + + if (SpectrumConfig.CONFIG.BlockSoundVolume.get() > 0) { + blockEntity.getLevel().playSound(null, blockEntity.getBlockPos(), SpectrumSoundEvents.COLOR_PICKER_PROCESSING, SoundSource.BLOCKS, SpectrumConfig.CONFIG.BlockSoundVolume.get().floatValue() / 3F, 1.0F); - if (SpectrumConfig.CONFIG.BlockSoundVolume.get() > 0) { - blockEntity.getLevel().playSound(null, blockEntity.getBlockPos(), SpectrumSoundEvents.COLOR_PICKER_PROCESSING, SoundSource.BLOCKS, SpectrumConfig.CONFIG.BlockSoundVolume.get().floatValue() / 3F, 1.0F); - - PlayParticleWithRandomOffsetAndVelocityPayload.playParticleWithRandomOffsetAndVelocity((ServerLevel) blockEntity.getLevel(), - new Vec3(blockEntity.getBlockPos().getX() + 0.5, blockEntity.getBlockPos().getY() + 0.7, blockEntity.getBlockPos().getZ() + 0.5), - ColoredFluidRisingParticleEffect.of(selectedInkColor.getColorInt()), - 5, - new Vec3(0.22, 0.0, 0.22), - new Vec3(0.0, 0.1, 0.0) - ); - } + PlayParticleWithRandomOffsetAndVelocityPayload.playParticleWithRandomOffsetAndVelocity((ServerLevel) blockEntity.getLevel(), + new Vec3(blockEntity.getBlockPos().getX() + 0.5, blockEntity.getBlockPos().getY() + 0.7, blockEntity.getBlockPos().getZ() + 0.5), + ColoredFluidRisingParticleEffect.of(selectedInkColor.getColorInt()), + 5, + new Vec3(0.22, 0.0, 0.22), + new Vec3(0.0, 0.1, 0.0) + ); } - } else { - didSomething = false; } } - } else { - didSomething = false; } } } - if(!didSomething) { - didSomething = blockEntity.tryFillInkContainer(); - } - - if (didSomething) { - blockEntity.setInkDirty(); - } else { - blockEntity.paused = true; - } + blockEntity.tryFillInkContainer(OUTPUT_SLOT_ID); } // Cleaned up version of net.minecraft.world.item.component.DyedItemColor diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/package-info.java new file mode 100644 index 0000000000..09c1bef428 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/package-info.java @@ -0,0 +1,7 @@ +@NullMarked +@MethodsReturnNonnullByDefault +@FieldsAreNonnullByDefault +package de.dafuqs.spectrum.blocks.ink.sink; + +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/RenderHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/RenderHelper.java index cdea2c85ce..f013b1b341 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/RenderHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/RenderHelper.java @@ -13,7 +13,7 @@ public class RenderHelper { * Draws a filled triangle * Attention: The points specified have to be ordered in counter-clockwise order, or will now show up at all */ - public static void fillTriangle(PoseStack matrices, int p1x, int p1y, int p2x, int p2y, int p3x, int p3y, Vector3f color) { + public static void fillTriangle(PoseStack matrices, float p1x, float p1y, float p2x, float p2y, float p3x, float p3y, Vector3f color) { Matrix4f matrix = matrices.last().pose(); float red = color.x(); float green = color.y(); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java index ff7d8a5fe1..be86166414 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java @@ -1,6 +1,7 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.inventories.widgets.ink.*; import net.minecraft.client.gui.*; import net.minecraft.network.chat.*; @@ -8,6 +9,8 @@ import net.minecraft.world.entity.player.*; import org.jetbrains.annotations.*; +import java.util.function.*; + public class ColorPickerScreen extends BaseInkScreen { protected static final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); @@ -24,9 +27,9 @@ public ColorPickerScreen(ColorPickerScreenHandler handler, Inventory playerInven protected void init() { super.init(); - this.inkPieWidget = new InkPieWidget(getGuiLeft() + 54, getGuiTop() + 21, 42, 42, this.menu.getBlockEntity()); + this.inkPieWidget = new InkPieWidget(getGuiLeft() + 54, getGuiTop() + 20, () -> menu.getBlockEntity().getInkCapability()); addRenderableWidget(this.inkPieWidget); - this.stackedInkBarWidget = new StackedInkBarWidget(getGuiLeft() + 100, getGuiTop() + 21, 4, 40, this.menu.getBlockEntity()); + this.stackedInkBarWidget = new StackedInkBarWidget(getGuiLeft() + 99, getGuiTop() + 20, this.menu.getBlockEntity().getInkCapability()); addRenderableWidget(stackedInkBarWidget); } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java index 8059d29319..071c2e2d52 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java @@ -1,6 +1,7 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.inventories.widgets.ink.*; import net.minecraft.client.gui.*; import net.minecraft.network.chat.*; @@ -8,6 +9,8 @@ import net.minecraft.world.entity.player.*; import org.jetbrains.annotations.*; +import java.util.function.*; + public class InkStorageScreen extends BaseInkScreen { protected static final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/color_picker.png"); @@ -24,9 +27,9 @@ public InkStorageScreen(InkStorageScreenHandler handler, Inventory playerInvento protected void init() { super.init(); - this.inkPieWidget = new InkPieWidget(getGuiLeft() + 54, getGuiTop() + 21, 42, 42, this.menu.getBlockEntity()); + this.inkPieWidget = new InkPieWidget(getGuiLeft() + 54, getGuiTop() + 21, () -> menu.getBlockEntity().getInkCapability()); addRenderableWidget(this.inkPieWidget); - this.stackedInkBarWidget = new StackedInkBarWidget(getGuiLeft() + 100, getGuiTop() + 21, 4, 40, this.menu.getBlockEntity()); + this.stackedInkBarWidget = new StackedInkBarWidget(getGuiLeft() + 100, getGuiTop() + 21, this.menu.getBlockEntity().getInkCapability()); addRenderableWidget(stackedInkBarWidget); } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java index e61a8e8978..53366f547a 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java @@ -1,6 +1,8 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.ink.capability.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.inventories.widgets.ink.*; import net.minecraft.client.gui.*; import net.minecraft.network.chat.*; @@ -8,6 +10,8 @@ import net.minecraft.world.entity.player.*; import org.jetbrains.annotations.*; +import java.util.function.*; + public class TintingStationScreen extends BaseInkScreen { protected static final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/tinting_station.png"); @@ -22,7 +26,7 @@ public TintingStationScreen(TintingStationScreenHandler handler, Inventory playe protected void init() { super.init(); - this.inkListWidget = new InkListWidgetWithBorderAndTitle(getGuiLeft() + 140, getGuiTop() + 40, 40, this.menu.getBlockEntity()); + this.inkListWidget = new InkListWidgetWithBorderAndTitle(getGuiLeft() + 140, getGuiTop() + 40, 40, () -> menu.getBlockEntity().getInkCapability()); inkListWidget.setPosition(getGuiLeft() - this.inkListWidget.getWidth(), getGuiTop() + 40); addRenderableWidget(inkListWidget); } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java index a97263a335..f7e2a5a809 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java @@ -1,5 +1,6 @@ package de.dafuqs.spectrum.inventories.widgets.ink; +import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.helpers.*; @@ -10,6 +11,7 @@ import org.jetbrains.annotations.*; import javax.annotation.Nullable; +import java.util.function.*; public class InkListWidget extends AbstractWidget { @@ -17,19 +19,19 @@ public class InkListWidget extends AbstractWidget { protected final int widthPerColor; protected final int spaceBetweenColors; protected final Iterable colors; - protected final InkStorageBlockEntity inkStorageBlockEntity; + protected final Supplier inkCapability; - public InkListWidget(int x, int y, int height, InkStorageBlockEntity inkStorageBlockEntity) { - this(x, y, height, inkStorageBlockEntity, 4, 2, 0); + public InkListWidget(int x, int y, int height, Supplier inkCapability) { + this(x, y, height, inkCapability, 4, 2, 0); } - public InkListWidget(int x, int y, int height, InkStorageBlockEntity inkStorageBlockEntity, int widthPerColor, int spaceBetweenColors, int padding) { - super(x, y, inkStorageBlockEntity.getInkStorage().acceptedColors().size() * (widthPerColor + spaceBetweenColors) - spaceBetweenColors + padding + padding, height, Component.empty()); + public InkListWidget(int x, int y, int height, Supplier inkCapability, int widthPerColor, int spaceBetweenColors, int padding) { + super(x, y, inkCapability.get().getStorage().acceptedColors().size() * (widthPerColor + spaceBetweenColors) - spaceBetweenColors + padding + padding, height, Component.empty()); this.widthPerColor = widthPerColor; this.padding = padding; this.spaceBetweenColors = spaceBetweenColors; - this.inkStorageBlockEntity = inkStorageBlockEntity; - this.colors = inkStorageBlockEntity.getInkStorage().acceptedColors(); + this.inkCapability = inkCapability; + this.colors = inkCapability.get().getStorage().acceptedColors(); } @Override @@ -39,9 +41,8 @@ protected void updateWidgetNarration(@NotNull NarrationElementOutput narrationEl @Override protected void renderWidget(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { - InkStorage inkStorage = inkStorageBlockEntity.getInkStorage(); + InkStorage inkStorage = inkCapability.get().getStorage(); - // foreground bars int startHeight = getY() + getHeight() + padding; int currentXOffset = 0; long total = inkStorage.getMaxPerColor(); @@ -57,7 +58,7 @@ protected void renderWidget(@NotNull GuiGraphics guiGraphics, int mouseX, int mo @Nullable public Tooltip getTooltip() { - return inkStorageBlockEntity.getInkStorage().getWidgetTooltip(); + return inkCapability.get().getStorage().getWidgetTooltip(); } } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidgetWithBorderAndTitle.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidgetWithBorderAndTitle.java index 93098db57b..637537fd50 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidgetWithBorderAndTitle.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidgetWithBorderAndTitle.java @@ -1,6 +1,7 @@ package de.dafuqs.spectrum.inventories.widgets.ink; import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.helpers.*; @@ -10,6 +11,7 @@ import org.jetbrains.annotations.*; import java.util.*; +import java.util.function.*; public class InkListWidgetWithBorderAndTitle extends InkListWidget { @@ -17,15 +19,15 @@ public class InkListWidgetWithBorderAndTitle extends InkListWidget { protected static final ResourceLocation INK_SPRITE = SpectrumCommon.locate("widget/ink_text"); protected static final int TITLE_HEIGHT = 18; - public InkListWidgetWithBorderAndTitle(int x, int y, int height, InkStorageBlockEntity inkStorageBlockEntity) { - super(x, y, height, inkStorageBlockEntity, 4, 1, 5); + public InkListWidgetWithBorderAndTitle(int x, int y, int height, Supplier inkCapability) { + super(x, y, height, inkCapability, 4, 1, 5); } @Override protected void renderWidget(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { // We first collect the colors we need to draw // this widget does skip ink colors that the player has no access to yet - InkStorage inkStorage = inkStorageBlockEntity.getInkStorage(); + InkStorage inkStorage = inkCapability.get().getStorage(); List> inkColorAmountsOverZero = new ArrayList<>(); for (InkColor color : colors) { long amount = inkStorage.getEnergy(color); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkPieWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkPieWidget.java index af0d7b6cb8..69f709e864 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkPieWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkPieWidget.java @@ -1,76 +1,106 @@ package de.dafuqs.spectrum.inventories.widgets.ink; +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.helpers.*; +import net.minecraft.client.*; import net.minecraft.client.gui.*; import net.minecraft.client.gui.components.*; import net.minecraft.client.gui.narration.*; import net.minecraft.network.chat.*; +import net.minecraft.resources.*; import org.jetbrains.annotations.*; import javax.annotation.Nullable; +import java.util.function.*; public class InkPieWidget extends AbstractWidget { - protected final InkStorageBlockEntity blockEntity; + public static final double TICKS_PER_ROTATION = 400D; - public InkPieWidget(int x, int y, int width, int height, InkStorageBlockEntity blockEntity) { - super(x, y, width, height, Component.empty()); - this.blockEntity = blockEntity; + protected static final ResourceLocation BACKGROUND_SPRITE = SpectrumCommon.locate("widget/ink_pie_background"); + protected static final ResourceLocation FOREGROUND_SPRITE = SpectrumCommon.locate("widget/ink_pie_foreground"); + protected static final ResourceLocation FOREGROUND_SPRITE_THICK = SpectrumCommon.locate("widget/ink_pie_foreground_thick"); + + protected final Supplier inkCapability; + protected boolean thickOutline; + + public InkPieWidget(int x, int y, Supplier inkCapability) { + super(x, y, 42, 42, Component.empty()); + this.inkCapability = inkCapability; + } + + public InkPieWidget setThickOutline() { + this.thickOutline = true; + return this; } @Override protected void renderWidget(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { - long totalInk = blockEntity.getInkStorage().getCurrentTotal(); + guiGraphics.blitSprite(BACKGROUND_SPRITE, this.getX(), this.getY(), 42, 42); + + InkStorage inkStorage = inkCapability.get().getStorage(); + long currentTotal = inkStorage.getCurrentTotal(); + if (currentTotal <= 0) return; - if (totalInk > 0) { - int centerX = getX() + width / 2; - int centerY = getY() + width / 2; - int radius = 22; + int centerX = getX() + width / 2; + int centerY = getY() + width / 2; + int radius = 22; + + // --- Smooth, double-precision rotation source --- + double time = Minecraft.getInstance().level.getGameTime(); + double base = time % TICKS_PER_ROTATION; + double startRad = -(base / TICKS_PER_ROTATION) * Math.PI; + + for (InkColor color : InkColors.all()) { + long currentInk = inkStorage.getEnergy(color); + if (currentInk <= 0) continue; + + double remaining = (double) currentInk / (double) currentTotal; - double startRad = -0.5 * Math.PI; - for (InkColor color : InkColors.all()) { - long currentInk = blockEntity.getInkStorage().getEnergy(color); - if (currentInk > 0) { - double thisPart = ((double) currentInk / (double) totalInk); - while (thisPart > 0) { - double curr = Math.min(0.20, thisPart); - thisPart -= curr; - - double endRad = startRad + curr * 2 * Math.PI; - - int p2x = (int) (radius * Math.cos(startRad)); - int p2y = (int) (radius * Math.sin(startRad)); - int p3x = (int) (radius * Math.cos(endRad)); - int p3y = (int) (radius * Math.sin(endRad)); - - RenderHelper.fillTriangle(guiGraphics.pose(), - centerX, centerY, // center point - centerX + p3x, centerY + p3y, // end point - centerX + p2x, centerY + p2y, // start point - color.getColorVec()); - - double middleRad = startRad + curr * Math.PI; - int pmx = (int) (radius * Math.cos(middleRad)); - int pmy = (int) (radius * Math.sin(middleRad)); - RenderHelper.fillTriangle(guiGraphics.pose(), - centerX + p3x, centerY + p3y, - centerX + pmx, centerY + pmy, - centerX + p2x, centerY + p2y, - color.getColorVec()); - - startRad = endRad; - } - } + while (remaining > 0.0) { + double curr = Math.min(0.20, remaining); + remaining -= curr; + + double endRad = startRad + curr * 2.0 * Math.PI; + float p2x = (float) (radius * Math.cos(startRad)); + float p2y = (float) (radius * Math.sin(startRad)); + float p3x = (float) (radius * Math.cos(endRad)); + float p3y = (float) (radius * Math.sin(endRad)); + + RenderHelper.fillTriangle(guiGraphics.pose(), + centerX, centerY, + centerX + p3x, centerY + p3y, + centerX + p2x, centerY + p2y, + color.getColorVec()); + + double middleRad = startRad + curr * Math.PI; + float pmx = (float) (radius * Math.cos(middleRad)); + float pmy = (float) (radius * Math.sin(middleRad)); + + RenderHelper.fillTriangle(guiGraphics.pose(), + centerX + p3x, centerY + p3y, + centerX + pmx, centerY + pmy, + centerX + p2x, centerY + p2y, + color.getColorVec()); + + startRad = endRad; } } + + if(thickOutline) { + guiGraphics.blitSprite(FOREGROUND_SPRITE_THICK, this.getX() - 1, this.getY() - 1, 44, 44); + } else { + guiGraphics.blitSprite(FOREGROUND_SPRITE, this.getX(), this.getY(), 42, 42); + } } @Nullable public Tooltip getTooltip() { - return blockEntity.getInkStorage().getWidgetTooltip(); + return inkCapability.get().getStorage().getWidgetTooltip(); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/StackedInkBarWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/StackedInkBarWidget.java index f635b867fe..36791e9b2c 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/StackedInkBarWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/StackedInkBarWidget.java @@ -1,5 +1,7 @@ package de.dafuqs.spectrum.inventories.widgets.ink; +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.helpers.*; @@ -7,38 +9,56 @@ import net.minecraft.client.gui.components.*; import net.minecraft.client.gui.narration.*; import net.minecraft.network.chat.*; +import net.minecraft.resources.*; import org.jetbrains.annotations.*; import javax.annotation.Nullable; +import java.util.function.*; public class StackedInkBarWidget extends AbstractWidget { - - protected final InkStorageBlockEntity blockEntity; - public StackedInkBarWidget(int x, int y, int width, int height, InkStorageBlockEntity blockEntity) { - super(x, y, width, height, Component.empty()); - this.blockEntity = blockEntity; + protected static final ResourceLocation BACKGROUND_SPRITE = SpectrumCommon.locate("widget/stacked_ink_bar"); + protected static final ResourceLocation BACKGROUND_SPRITE_THICK = SpectrumCommon.locate("widget/stacked_ink_bar_thick"); + + protected final Supplier inkCapability; + protected boolean thickOutline; + + public StackedInkBarWidget(int x, int y, Supplier inkCapability) { + super(x, y, 6, 42, Component.empty()); + this.inkCapability = inkCapability; + } + + public StackedInkBarWidget setThickOutline() { + this.thickOutline = true; + return this; } @Override protected void renderWidget(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { - InkStorage inkStorage = this.blockEntity.getInkStorage(); - long currentTotal = inkStorage.getCurrentTotal(); + if(thickOutline) { + guiGraphics.blitSprite(BACKGROUND_SPRITE_THICK, this.getX() - 1, this.getY() - 1, 8, 44); + } else { + guiGraphics.blitSprite(BACKGROUND_SPRITE, this.getX(), this.getY(), 6, 42); + } + + InkStorage inkStorage = inkCapability.get().getStorage(); + if (inkStorage.getCurrentTotal() <= 0) { + return; + } + + long maxTotal = inkStorage.getMaxTotal(); - if (currentTotal > 0) { - long maxTotal = inkStorage.getMaxTotal(); - - int currentHeight = getY() + getHeight(); - for (InkColor color : InkColors.all()) { - long amount = inkStorage.getEnergy(color); - if (amount > 0) { - int height = Math.round(((float) amount / (float) maxTotal * getHeight())); - if (height > 0) { - RenderHelper.fillQuad(guiGraphics.pose(), getX(), currentHeight - height, height, getWidth(), color.getColorVec()); - } - currentHeight -= height; + // drawn from bottom to top + int currentHeight = getY() + getHeight() - 1; + for (InkColor color : InkColors.all()) { + long amount = inkStorage.getEnergy(color); + if (amount > 0) { + int height = Math.round(((float) amount / (float) maxTotal * getHeight())); + if (height > 0) { + RenderHelper.fillQuad(guiGraphics.pose(), getX() + 1, currentHeight - height, height, getWidth() - 2, color.getColorVec()); } + currentHeight -= height; } } } @@ -50,7 +70,7 @@ protected void updateWidgetNarration(@NotNull NarrationElementOutput narrationEl @Nullable public Tooltip getTooltip() { - InkStorage inkStorage = this.blockEntity.getInkStorage(); + InkStorage inkStorage = inkCapability.get().getStorage(); String readableCurrentTotalString = Support.getShortenedNumberString(inkStorage.getCurrentTotal()); String percent = Support.getSensiblePercentString(inkStorage.getCurrentTotal(), (inkStorage.getMaxTotal())); return Tooltip.create(Component.translatable("spectrum.tooltip.ink_powered.percent_filled", readableCurrentTotalString, percent)); diff --git a/src/main/java/de/dafuqs/spectrum/mixin/client/ItemRendererMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/client/ItemRendererMixin.java index e403544791..1ef64e08b0 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/client/ItemRendererMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/client/ItemRendererMixin.java @@ -37,18 +37,4 @@ public abstract class ItemRendererMixin { SpectrumModelPredicateProviders.DISPLAY_CONTEXT = displayContext; } - @Inject(at = @At("HEAD"), method = "render", cancellable = true) - private void spectrum$dynRender(ItemStack stack, ItemDisplayContext renderMode, boolean leftHanded, PoseStack matrices, MultiBufferSource vertexConsumers, int light, int overlay, BakedModel model, CallbackInfo ci) { - // if model is a dynamic one, check the renderers - if (model instanceof DynamicRenderModel dm) { - DynamicItemRenderer renderer = DynamicItemRenderer.RENDERERS.get(stack.getItem()); - // shouldn't happen normally but check anyway - if (renderer != null) { - // unwrap the model here so that the custom renderer doesn't have to do it - renderer.render((ItemRenderer) (Object) this, stack, renderMode, leftHanded, matrices, vertexConsumers, light, overlay, dm.getWrappedModel()); - ci.cancel(); - } - } - } - } diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/InkContainerInteractionCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/InkContainerInteractionCriterion.java index f59318dfa2..665c9e3c85 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/InkContainerInteractionCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/InkContainerInteractionCriterion.java @@ -45,8 +45,7 @@ public boolean matches(ItemStack stack, Map colors, InkColor cha return itemPredicate.test(stack) && changeRange.test(change) && changeInkColorPredicate.test(changeColor) - && colorRanges.entrySet().stream().allMatch(entry -> colorRanges.get(entry.getKey()).test(colors.get(entry.getKey()))); - + && colorRanges.entrySet().stream().allMatch(entry -> colorRanges.get(entry.getKey()).test(colors.getOrDefault(entry.getKey(), 0L))); } } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java index d5d6bf14fd..f0b2e236c2 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java @@ -447,7 +447,7 @@ public Map, Integer> getDefaultEnchantments() { // Specialty Magical Tools public static final DeferredItem KNOWLEDGE_GEM = register("knowledge_gem", () -> new KnowledgeGemItem(IS.of(1, Rarity.UNCOMMON), 10000)); public static final DeferredItem CELESTIAL_POCKETWATCH = register("celestial_pocketwatch", () -> new CelestialPocketWatchItem(IS.of(1, Rarity.UNCOMMON))); - public static final DeferredItem ARTISANS_ATLAS = register("artisans_atlas", () -> new ArtisansAtlasItem(IS.of(Rarity.UNCOMMON))); + public static final DeferredItem ARTISANS_ATLAS = register("artisans_atlas", () -> new ArtisansAtlasItem(IS.of(1, Rarity.UNCOMMON))); public static final DeferredItem GILDED_BOOK = register("gilded_book", () -> new GildedBookItem(IS.of(Rarity.UNCOMMON))); public static final DeferredItem ENCHANTMENT_CANVAS = register("enchantment_canvas", () -> new EnchantmentCanvasItem(IS.of(Rarity.UNCOMMON))); public static final DeferredItem EVERPROMISE_RIBBON = register("everpromise_ribbon", () -> new EverpromiseRibbonItem(IS.of())); diff --git a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java index 956657bcca..04e7177b4c 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java @@ -1,16 +1,22 @@ package de.dafuqs.spectrum.registries.client; +import com.mojang.authlib.minecraft.client.*; +import com.mojang.blaze3d.platform.*; import com.mojang.blaze3d.shaders.*; +import com.mojang.blaze3d.systems.*; import com.mojang.blaze3d.vertex.*; import com.mojang.datafixers.util.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.api.interaction.*; +import de.dafuqs.spectrum.attachment_types.*; import de.dafuqs.spectrum.blocks.pastel_network.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.data_loaders.client.*; import de.dafuqs.spectrum.deeper_down.client.*; import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.inventories.widgets.ink.*; import de.dafuqs.spectrum.items.magic_items.*; import de.dafuqs.spectrum.items.tooltip.*; import de.dafuqs.spectrum.mixin.accessors.*; @@ -46,12 +52,15 @@ import net.neoforged.api.distmarker.*; import net.neoforged.bus.api.*; import net.neoforged.fml.common.*; +import net.neoforged.neoforge.client.*; import net.neoforged.neoforge.client.event.*; import net.neoforged.neoforge.client.extensions.common.*; import net.neoforged.neoforge.event.entity.player.*; +import org.joml.*; import org.jspecify.annotations.*; import oshi.util.tuples.*; +import java.lang.Math; import java.util.*; @EventBusSubscriber(modid = SpectrumCommon.MOD_ID, value = Dist.CLIENT) @@ -278,29 +287,43 @@ public String getName() { @SubscribeEvent private static void onRenderBlockOutlines(RenderHighlightEvent.Block event) { - boolean shouldCancel = false; + HudRenderers.hoveredCapability = null; + + Minecraft client = Minecraft.getInstance(); + if (client.player == null) { + return; + } BlockHitResult target = event.getTarget(); Camera camera = event.getCamera(); - Minecraft client = Minecraft.getInstance(); - if (client.player != null) { - for (ItemStack handStack : client.player.getHandSlots()) { - Item handItem = handStack.getItem(); - if (handItem instanceof ConstructorsStaffItem) { - shouldCancel = renderPlacementStaffOutline(event.getPoseStack(), camera, camera.getPosition().x, camera.getPosition().y, camera.getPosition().z, event.getMultiBufferSource(), target); + boolean shouldCancel = false; + + outer: + for (ItemStack handStack : client.player.getHandSlots()) { + switch (handStack.getItem()) { + case PaintbrushItem paintbrushItem: + InkCapability inkCapability = client.level.getCapability(InkCapabilities.BLOCK, target.getBlockPos()); + if (inkCapability != null) { + HudRenderers.hoveredCapability = inkCapability; + break outer; + } break; - } else if (handItem instanceof ExchangeStaffItem) { - shouldCancel = renderExchangeStaffOutline(event.getPoseStack(), camera, camera.getPosition().x, camera.getPosition().y, camera.getPosition().z, event.getMultiBufferSource(), handStack, target); + case ConstructorsStaffItem constructorsStaffItem: + shouldCancel = renderPlacementStaffOutline(client, event.getPoseStack(), camera, camera.getPosition().x, camera.getPosition().y, camera.getPosition().z, event.getMultiBufferSource(), target); + break outer; + case ExchangeStaffItem exchangeStaffItem: + shouldCancel = renderExchangeStaffOutline(client, event.getPoseStack(), camera, camera.getPosition().x, camera.getPosition().y, camera.getPosition().z, event.getMultiBufferSource(), handStack, target); + break outer; + default: break; - } } } event.setCanceled(shouldCancel); } - private static boolean renderPlacementStaffOutline(PoseStack matrices, Camera camera, double d, double e, double f, MultiBufferSource consumers, BlockHitResult hitResult) { - Minecraft client = Minecraft.getInstance(); + + private static boolean renderPlacementStaffOutline(Minecraft client, PoseStack matrices, Camera camera, double d, double e, double f, MultiBufferSource consumers, BlockHitResult hitResult) { ClientLevel world = client.level; Player player = client.player; if (player == null || world == null) return false; @@ -351,8 +374,7 @@ private static boolean renderPlacementStaffOutline(PoseStack matrices, Camera ca return false; } - private static boolean renderExchangeStaffOutline(PoseStack matrices, Camera camera, double d, double e, double f, MultiBufferSource consumers, ItemStack exchangeStaffItemStack, BlockHitResult hitResult) { - Minecraft client = Minecraft.getInstance(); + private static boolean renderExchangeStaffOutline(Minecraft client, PoseStack matrices, Camera camera, double d, double e, double f, MultiBufferSource consumers, ItemStack exchangeStaffItemStack, BlockHitResult hitResult) { ClientLevel world = client.level; BlockPos lookingAtPos = hitResult.getBlockPos(); BlockState lookingAtState = world.getBlockState(lookingAtPos); diff --git a/src/main/java/de/dafuqs/spectrum/render/HudRenderers.java b/src/main/java/de/dafuqs/spectrum/render/HudRenderers.java index 88f3d90eb4..34db471ada 100644 --- a/src/main/java/de/dafuqs/spectrum/render/HudRenderers.java +++ b/src/main/java/de/dafuqs/spectrum/render/HudRenderers.java @@ -2,37 +2,79 @@ import com.mojang.blaze3d.platform.*; import com.mojang.blaze3d.systems.*; +import com.mojang.blaze3d.vertex.*; +import com.mojang.math.*; import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.attachment_types.*; +import de.dafuqs.spectrum.inventories.widgets.ink.*; +import de.dafuqs.spectrum.registries.client.*; import net.minecraft.client.*; import net.minecraft.client.gui.*; +import net.minecraft.client.multiplayer.*; +import net.minecraft.client.renderer.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; +import net.neoforged.neoforge.client.*; import net.neoforged.neoforge.client.event.*; import net.neoforged.neoforge.client.gui.*; +import org.joml.*; import org.jspecify.annotations.*; +import java.lang.Math; +import java.util.function.*; + public class HudRenderers { private static final Component MISSING_INK_TEXT = Component.translatable("item.spectrum.constructors_staff.tooltip.missing_ink"); private static final Component NONE_TEXT = Component.translatable("item.spectrum.constructors_staff.tooltip.none_in_inventory"); + // AZURE DIKE + public static final ResourceLocation AZURE_DIKE_OVERLAY_ID = SpectrumCommon.locate("azure_dike"); + + // BUILDING STAFFS + public static final ResourceLocation STAFF_OVERLAY_ID = SpectrumCommon.locate("staff_overlay"); private static @Nullable ItemStack itemStackToRender; private static int amount; private static boolean missingInk; - public static final ResourceLocation AZURE_DIKE_OVERLAY_ID = SpectrumCommon.locate("azure_dike"); + // PAINTBRUSH INFO + public static final ResourceLocation PAINTBRUSH_INFO_OVERLAY_ID = SpectrumCommon.locate("paintbrush_info"); + public static @Nullable InkCapability hoveredCapability = null; + public static void register(RegisterGuiLayersEvent event) { event.registerAbove(VanillaGuiLayers.PLAYER_HEALTH, AZURE_DIKE_OVERLAY_ID, new AzureDikeLayer()); + event.registerAbove(VanillaGuiLayers.CROSSHAIR, PAINTBRUSH_INFO_OVERLAY_ID, new PaintbrushInfoLayer()); + event.registerAbove(VanillaGuiLayers.CROSSHAIR, STAFF_OVERLAY_ID, new StaffInfoLayer()); } - public static void registerPost(RenderGuiLayerEvent.Post event) { - if (event.getName().equals(VanillaGuiLayers.CROSSHAIR)) { - renderSelectedStaffStack(event.getGuiGraphics()); + private static class PaintbrushInfoLayer implements LayeredDraw.Layer { + + protected static final ResourceLocation SPLASH_SPRITE = SpectrumCommon.locate("splash"); + + @Override + public void render(GuiGraphics drawContext, DeltaTracker deltaTracker) { + if(hoveredCapability != null) { + float partialTick = deltaTracker.getGameTimeDeltaPartialTick(true); + Minecraft client = Minecraft.getInstance(); + GuiGraphics guiGraphics = new GuiGraphics(client, drawContext.bufferSource()); + PoseStack poseStack = guiGraphics.pose(); + + poseStack.pushPose(); + int x = drawContext.guiWidth() / 2; + int y = drawContext.guiHeight() / 2; + poseStack.translate(x, y, 0); + guiGraphics.blitSprite(SPLASH_SPRITE, 8, -50, 100, 100); + InkPieWidget inkPieWidget = new InkPieWidget(30, -21, () -> hoveredCapability).setThickOutline(); + inkPieWidget.render(guiGraphics, 0, 0, partialTick); + StackedInkBarWidget stackedInkBarWidget = new StackedInkBarWidget(80, -21, hoveredCapability).setThickOutline(); + stackedInkBarWidget.render(guiGraphics, 0, 0, partialTick); + poseStack.popPose(); + } } } @@ -44,14 +86,14 @@ private static class AzureDikeLayer implements LayeredDraw.Layer { @Override public void render(GuiGraphics drawContext, DeltaTracker deltaTracker) { var minecraft = Minecraft.getInstance(); + Player cameraPlayer = minecraft.player; - if (minecraft.options.hideGui || minecraft.gameMode == null || !minecraft.gameMode.canHurtPlayer()) { + if (minecraft.options.hideGui || minecraft.gameMode == null || !minecraft.gameMode.canHurtPlayer() || cameraPlayer == null) { return; } - Player cameraPlayer = Minecraft.getInstance().player; int x = drawContext.guiWidth() / 2 - 91; - int y = drawContext.guiHeight() - Minecraft.getInstance().gui.leftHeight; + int y = drawContext.guiHeight() - minecraft.gui.leftHeight; AzureDikeAttachmentType azureDikeAttachment = cameraPlayer.getData(AzureDikeAttachmentType.ATTACHMENT_TYPE); int maxCharges = (int) Math.ceil(azureDikeAttachment.getMaxCharges()); @@ -123,30 +165,34 @@ public void render(GuiGraphics drawContext, DeltaTracker deltaTracker) { } } - private static void renderSelectedStaffStack(GuiGraphics drawContext) { - Minecraft client = Minecraft.getInstance(); - if (amount > -1 && itemStackToRender != null) { - // Render the item stack next to the cursor - Window window = Minecraft.getInstance().getWindow(); - int x = window.getGuiScaledWidth() / 2 + 3; - int y = window.getGuiScaledHeight() / 2 + 3; - - var poseStack = drawContext.pose(); - poseStack.pushPose(); - poseStack.scale(0.5F, 0.5F, 1F); - - var textRenderer = client.font; - drawContext.renderItem(itemStackToRender, (x + 8) * 2, (y + 8) * 2); // TODO: make this render 2x the size, so it spans all 2 rows of text - poseStack.scale(2F, 2F, 1F); - drawContext.drawString(textRenderer, itemStackToRender.getHoverName(), x + 18, y + 8, 0xFFFFFF, false); - if (amount == 0) { - drawContext.drawString(textRenderer, NONE_TEXT, x + 18, y + 19, 0xDDDDDD, false); - } else if (missingInk) { - drawContext.drawString(textRenderer, MISSING_INK_TEXT, x + 18, y + 19, 0xDDDDDD, false); - } else { - drawContext.drawString(textRenderer, amount + "x", x + 18, y + 19, 0xDDDDDD, false); + private static class StaffInfoLayer implements LayeredDraw.Layer { + + @Override + public void render(GuiGraphics drawContext, DeltaTracker deltaTracker) { + Minecraft client = Minecraft.getInstance(); + if (amount > -1 && itemStackToRender != null) { + // Render the item stack next to the cursor + Window window = Minecraft.getInstance().getWindow(); + int x = window.getGuiScaledWidth() / 2 + 3; + int y = window.getGuiScaledHeight() / 2 + 3; + + var poseStack = drawContext.pose(); + poseStack.pushPose(); + poseStack.scale(0.5F, 0.5F, 1F); + + var textRenderer = client.font; + drawContext.renderItem(itemStackToRender, (x + 8) * 2, (y + 8) * 2); // TODO: make this render 2x the size, so it spans all 2 rows of text + poseStack.scale(2F, 2F, 1F); + drawContext.drawString(textRenderer, itemStackToRender.getHoverName(), x + 18, y + 8, 0xFFFFFF, false); + if (amount == 0) { + drawContext.drawString(textRenderer, NONE_TEXT, x + 18, y + 19, 0xDDDDDD, false); + } else if (missingInk) { + drawContext.drawString(textRenderer, MISSING_INK_TEXT, x + 18, y + 19, 0xDDDDDD, false); + } else { + drawContext.drawString(textRenderer, amount + "x", x + 18, y + 19, 0xDDDDDD, false); + } + poseStack.popPose(); } - poseStack.popPose(); } } diff --git a/src/main/resources/assets/spectrum/textures/gui/sprites/splash.png b/src/main/resources/assets/spectrum/textures/gui/sprites/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..b9911afeb1630be0bfcaf98289ad7ab23368d6f8 GIT binary patch literal 10713 zcmV;~DJIs5P)EX>4Tx04R}tk-tmBKpe$i(~6~39PA(>n4vn^MMWG-6^me@v=v%)FuC*>G-*gu zTpR`0f`dO6s}3&Cx;nTDg5VDj{{V4PbdeIjmlRsWcyQc@clRE5?*O4yW2za51FB{j znPfuD7gojoR|FA22xACK%+yoa#T-1x*FAiEy^HZI?{j~S0i|d%z$X&NnQmCb8^p7l zmd<&fIKnEDLVQj)eySFkIADvRtP*iX@hhLK-4uG*Cqi7Gkt&q?pLie!{~);`r0#lF3yC zBgX>jP$4;f@IUz7ty!9$a+AUdpzp=DKgNOnU7+2x?eAmTZl3`DXW&Zf`s*!V?vwOp zSBoA2gWJHxbyt)3fXf|V_(_)x$&vgtg;EK4KcjCd07JJxXwB`dvyamUAV*y--v9@P zz(kp{*FD}H?CtH}GoAi^0A)pTp{sau%>V!Z24YJ`L;(K){{a7>y{D4^000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2kHm}3m`Ond~qZI000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}001BWNklTa@(;x4&^ zD+Xh13?vN9WG00Wk}xoY5Rw2Pn6$}2CNm*SGNcXQhQSaFwy|;VmTg(K+EaaMua{d+ z*?Y|&=RV1bn*=tN_0jr#-aq%^Dridycz zLfTmE#CTSHyZ^8jN)Ya1y!wp;K0E%K>ov&&uKhvZ0drsRz$87}Gy0ZRc&ycu38?0O z1rxCGtm_Y3r@n7uCw+U5K6BOdBPQy4`d!QQ_y1E5|JD_Pw|Mago|&ai`cM1T;V+Qm zZ|K*S0zCT8*++~}N)KPDP90>9f<#m_VE5TKy?NGm{Eb`n)El=bN9pj0vb+j47jpW| zn_hRJ#PPpsqkh{_;lGkVL@nMpoD^U82WOdpwMQjzFwn{Jn|A5bSI>M?`jYrZYt(uH z8$cl>ICr7E=>>A!&AYTq5+1nfm^am8k{>*)elo^Q))6b1whB6}LTTmVS6xSN?-i=5 zSP_zQzW0W$`z5ig=ifb3PPlo;o6f$gbGV5bRAVrZ4NhXCnXmX8d*9{iCB>^l6kH%g z4_vOKp5(mSe(r*KS?DCt^pFNxar4$UT!10~7AJzo;J&w-`d9CG`Q3Q`rRr6|S=8r= zqt77Cl++59`>)i)Mj%gLz2J~`N2`h7c>7x{BJCkzIfB**J!vMTOHO_1g+Fwede=VV;X~fc6yM*c*?0}7!joENr+D6f`Jw~X+57nWbi6u=H=a-e1VOw~ zBgr8a3`P~TaC$I{htK?bdBZhiiq84=<~NNm8F}yj)X_Vh;nD-S7;|K$6bRB&T)E6#L_btamqJ7{F3vD?!R0!@4*|q@y#48|7x2l(NSn+B&kw& z4a9g()?OYx=O2GAYdffl;mJ2_)~DWcAhQQz;q32i)BCQNCpIcFn%C!kCaV4Y0~&b6 z`3xIHXt6=z{TI9{BR<<0Wr?+%YeTLq6p0*|M|ZyL_q_pe1{J?g5L5ee+&8Gz8kB<) z$CP?;n)2xB|9JSAEPy%@XMT6!0MqsSdl$%9W_jn`8`YE(vKNT}-ks#_1< z+|~cbovK>~sXw!o^r`K{Yd2s={+i_GZ))w%=U#H0Q~&xw{o4f}*H4#Q`Eap?WkE=& z0(dmZ7+m^$FZnz1iWte4FYNnMQ3NG3%7m*ioQ^TiPJ7k4hYwz+UH89Jf37C$_;2r4 zaS3a$nI`~CZ`h@QfH5_s;voshY9Sg3s!CDdsjKH4)cDC?-KCAb-MHOj$an*%5H1KP zF1nR8{2=v(Z{dkbk&EA!`-4-zwMl!daN9Mx$sC;bdn)S5L=Xi8xA%5AvFrtYfe5(_^oH1?XLxF}iaYpJz~_ z0ce1aEvOKbGQ{k!U*jE$p-?Kk?67Wc4L3A^8Jb|MA*`>o@R(ILwUz1Jw2gC~e1Z!e zdyI1%LoYi<@76yNYb`dN1Q!!jqE{6LKzjOZ5_-Xk0r9AM_BO^Db20OSc0SN~F&};A zFJ6`>t@pk?Pgz_>td32tpWcVB)z?fzmfW;W%c=6z`}Sj4C*0VtN}6X*df-nKMHEC8 zLQhah$Wnu^M@Vjzi6rI=h1+?@l`kFfJojgJ>(&jM+0mFr$8g3;Pe06zkv_z<6DCDy z4@r;f!C!SMh4vz)|8(|Cjx)006WXXvAST3ADooq>rw6@Li}zio(}Ow{s|=+f1I}W7 z$V_AS%&h;&)71_9-S}N(G&h?u`I^c)hF5-P-?NuK{6SrR#y`o=WU@~9 z<`&g31O@LM`KC8CCGrA+ObsCU1Pdua=x}j}OASVZrFMjW)DICAETwlmcEI!g>;K)T z$Bzzj+NK|I%pH3u?Fcc60$UKXAQ!n9(xOG@R?y|M2tRN(#Y;~-V4OYkKBb{pP~A5} z352e`KY4X?^Weq0*j72KeUPr8&bCGe_mB0m(?wWSPO-gwXvURXx9eZ&mjf&24lV4JplMe<25E9#UqPChcXcEI znJP9+@h(K2p|`D#hCPch?}5hvxbBf1dTJW8ti43#@w?IIZlgF<0)HZ~384ej=RuGW zOqSuc*U-1NAoUk_j6?*eI#dLsN+ycU0(PG9S)KLpXJ1h$)(dkhb>50uMr&kHKK{9 zz&!%`9fUhj?n2EVsj)Z%&R9S(1KUV9Z)N27zM=nq5h{YBID~CJ3C1NBC7*5L!CPfC4BBL%MA5HM$8S+B*?{?xoVZ0pj45;Mu$`pw6M07$^ zRzCVGddP{P!QftClwKA328=2O!6%kdF}Xv>Zyw{HUyU)T)3v-O#aYTb$q_u3(B2%nFg(07`52pQFO8$ zx3C>1Mi_h7|JGpsG~9-5$RpbkpHj6&ZgmqhmUk2Nv=TkJh4I!3PkirJHEB7AtoRAM zj$?dul54KV`#;NfRQ2|Tn(!dr_QIk$8@q1}N{Al+0}8BL%cOxzDv$+|7|z5+p-Vtz3o z`+`G?4(|=saV7JLvIR>Y73sk1Sp;%1CJAtvMLWB2^*Vm{0H(c-V0sIFU=Y_9qKg({ z&s<3IH$TB`7-P5`(Em=u;t#|Gwv#lRM1#|qUAdN|@dc(?$0;od8{@g`8Xts4i~#jW ziAph1;Mn7eQ%L>KRz#EB6sijNjFPvnt|7->zeCB~K1@Ny0~S$_3VBGICmK!XrOc2j zzuA5VZz=zP9=nNO?0;x$7U3@cL4vRg`w zSNfRq=g&7Me@BmV$|>x*7-k;}yxH2*z1z#RGj&aQt`rRkVObP*)>J>QD%XGYdWi?+Cq+8HYE5 z^)v;vf4fZA8h<|htDF@5Uo15Yx?kA!s|c1b^jN24MT1E^m1@jKheqg$tE_fKx-DEP9Tcr4 znzKK`X?gHcoy|5r)Ha>j-D|LtakA{<$+31?f;M6!1f?M=rpmKfJKhIalLw!9?Ar_y z)RDPb)7cz?hY>|p7|tdR6v%T|&X$wExlRib@yL4*gf~vSew$(qR~CQFfSb#`jit?& zOl{^z0_yqImb+M9_&SzqGda<`=mV%zj5Z?j|Q%-l1ohInzGpI^Cy#;71PLTE#=xiTnbrLe1goL65ra(y|2D9<0tYgX! z9gvqCtWZ=uLoTN4zAJV3?C;1yVOb~KxJwIJOu;r7_2s;9(~PmtkG61TWi1!C{xj3` z5zJJ{Q}-(-MPL?40dRS;q(%_~88+W}fs%dBAm7iB*dvL-O*qt>+;S!!s}P96$VGs~ z>j=iqLCkD0RTM$AfDi&HssSKmMM!!|46U3?^@3jJ9zQ_)%3qV=`JYthGe-SG)ciBF zpY}`q@YiOut^01?weV@49Gb(9MwtgEid5PrxO=>dszN1bWip+>nVfa1Q?>k`%A){6 zw=FWb^4oGy@VknqZVY2uMx+T@H(`;}!tK1j512t1VLu!QD;f(e93*`E`5#mP8-WOUae`HoWRG<5WID{V+TbMF&DL3)h*x;dZXY6(j5a&YMKjj0yV1#T(#aVe z+qq?MIwHzsR--#=qnb3DSe61xXaZu*4mn#%71~VY)iuPs7Y{DLIi(G}r}K*xbz3v^ zZ6d$TZ>s~crY6utgJr)!P-zARiY=s=C?r`bWM>ALA32D@c`yydrU&8$f&;B#{8M<{ zj_OQQwgM5jNu0kQwZ}E>Vgo0zmyA6+j$Sm5yj$S-VZuAc;cJe&M}>Dx&uIMCPF9^e z#{9wrqXg_p935tuj$o4aOn3ArErd3J462&ZsY)aPiDvtJs(AhB{D~-a$zHjHd))Oq z)YwAPW9{<}D2`j}D{!ua#15S>_%Vw%@}06TBJ`3MuN{aJ#0jK=sN_g~Fa^LFYHK4J z4;GOBYH3^?pgjTKEgSyH8fs$l2yF_lk|v_7lZfAr=;MeEAie|980%Yb>1xvK0Wx+o zCZp^Ppfsx!d#b_DbtK&i7b`4}7z>5?!V;&QzLzECNeWgOQ>7|~4m_h-z{#!K=(cU7 zRLHlIXI$%a+A=Ep^OClxmB0raa{lOr&DjtO?zvW9Rv=LbUA}?w9un2+eb~DX7Df014o++Kr_Z7^SHFEI54!7kpxXV5T8# zEl}7c_>UXh?N#18q0Ic=1Oxv|$i@Oh;0YsqRfW1n48}#Qz(@uk?%B@el?i%DDCih1 zK{N&Qf(RpN6*rZm9ine63RA>V!31-Tinf(sWOlgq=CyEISQgL_#j6@_)TU_4+>6(Y2HqPcq zSW(L%hxItxMOeBI?pC~*rm@_OV+_#_3^TCWg)uD%eVmcjX^kVcb%(6g6ul?JJrmPi zw9KqQ;Dq{*64LiXjJI0~UU)i!wa)OCwgEy6*UWerr*QtXA`1t4c%s(Ip0txt3`ujH zY14U%9;(Gs8XCW{54q>6`7#B?Pkna!ODql3)KEziEggbnKrm2+{>-Tu~!VJM~$cME%O8%dBrXdB}~(T zE21^>wuNbU8o3E&4tm;lmi?0Bll_Jd-)NY;F+;pyo${C#**1_;9Ea`e0v?%@L5rhL zWB$7l{@Fxqb<=ombQ<>$bu#J4=&cOU5ybQ-o{EV`d?OE5_5qN3h&ZIs?h1@?h&MS* zi(W8<@n|!enu_(TQ*=zxQDCm%S``!KHW%NlD(;(UzORkuf6MfMemriPC3#LZxD7@PxAGHI{{2D5t~hiCY*= zmG+>8kz^|TZJJU&G|wJNz_zn*5Drx!i=)Z?0%_z>2q;GK<8bN}&GN8U_vZbwloSaB z@%cpc-&G&;=)@2tingWL(-YE>h;(y-dzs`PGS+T(*jWMgQ$l)jijy?=Q3?&C zJSZ6?lStX4IQ9mM>D=ANhFY0ADXn3EQG*vxiz!fZac;&BMMYj<<6hROzvJeOFS3MB z)>`vUk?V`<)gqFIdHe9nNHOi?LTGr1Z2nK>z(`FEnG|s3-71K~o2J=Gl(03X<-|$K z?@XEh;S%@Th^K8U4@ik0OE;Uf%qClAC=Bsp_NhnK)H{_Fl^UKD5l`9?u=Ki^E8bEg ztE42wI`O3m!PgDZ*Gky0LvnIVCMnI7B2Q3V9@Y70vrA-BH!z*9#jexqN9nv!g2MA24rGc=Wnlt9`A?+p?+ zov!tHBqiEx-vpzUSX!CTcG~?Q#xyXQA`QV$3eqWP*&tT1Gad4vV^S@D=(-t`A{%@O zHLyjCoHbEefLC{r+L2c{1y5)LwygT*!C_hZ zejZvzjB^)-Xk12hfr;)s}}Ai~Z3E+g3~ zq?^pc1Rg7iZ@D%Rs|>sT2dG{xT>P{X5LX$Tg6>(u>Y1ox50%) ze%Lvef%*VJ>_K8u4MB=LQ<%+IHUYK<3iq0s{H5z=o=tdvkYEZ*7J&~8?e91I^))Ho z+TfB-%OBK3{vnQYb5v?JTu*_5%@|$i0TPrUL}sG)Gzey6Sb+KvrB2dw4z=MmOnOI` zEszl*-jLS_=(mkbFjbjU*X6k1s4dRa`Jb!Hyllw-KYtmW;&W~PS;X+coyG2Rd?Fm#y) zG$0!iHbiE>|Fb~cOj^S{4>txdC6q;AMo_Z@+)`-F!eKBbLM2AhnA9~;pki8SxEN>M z3qYio^54zOUOZ6{{&dF?j2JW!N}6%c3r^-bLM%QHXD4%r#D^ed#is&8xyh2@ygH?U z!kED$m_1NDFQz#76W*r%+$F!weSD0LXqXwjgKX~`Z zi!6(OI)OZU?fjQ~M0iyy*-fE3g}^DIim`dVAy#k&fvRb04p0>&1v3j|kHVe|CY0jX zMi#a|$y0^n8KjpjgAp6Qd>fP7x8MU$Rm)hJ#sm?q6B(8aXFQ4YvO_H$>Nvq{#bz0S z=DAHcnm;m~5RwNi{;U$F1osp?abX3T^dZ3j(hyuK2rZa&Ilk0~NoJunfp85{b|7a# zV_FW)6t|)2f+jxKg{!w**316n ztXYUstI(O7P2c=nU5INDs3}@g?6`+iNrNu#tF2_v71L5XKN>BdCrs zOb(NHLTbK1pM=yE5>7Jm4!;K@f_iNRH$q?piy#)3+XdWv z`d0+tiC5z1YjqSWEzBUu#!wrh9#Wab-_-t$jqTIX<btWUeogJo? zzTE}x>N%6`dzO)7NN+EwNQP*g*=C6CzKhk&p;i_qf{?e4 zrx-5`nJyfy?5HM8P7_oiR!iy)#zK6}6@=5yfc|Y55?tRVv>d>RiwRG^2&Dx-xCfli zk3@8IGXLVs`Q*BfQ7-i{7WI;iY^2Rk5aKw+De3LA`N)|OKVH>Oe_%1$JS1EJ$&>g( z8$?48d_Ql0(mVuHjqrsMX6~i9;XARde~o0HK&71lDbjz+fmhB>#h@`Tb$)mK+5d9T zILd2&O{{YTq}Ya}qg++`Z(Qj*8Az5e(b3Ip_dFH90TGXi#ru%=ELg!k;k)=F-pe2% zs^9|fNk(-CJ40`|&~9bk@^zpIJ$T$a zi;OfYj=mG!a~^HqH&hnS!b~3lGXYTpu`5A$gWrJ03n18wN)s?FLL1I*G3an%Q4 z_j3e=3+Ofl`d?%Iz2*WbUOK*SH#ENAs$sN?*{!>v2pSu(KF{opBfv8~c#yZ7EsXna zJ}sA$*}NG~c5WxVe>HY!D@J=s`!*meF9fl9lZ6QVJspgvc~jl_yY{fW@eHy31xg)H zp?J4DnUa zmS%%o8`AhRL2E1X!;q(!o$;EV&V5}kQudF&jo`eS@nI1c%^*y-BZ0>!7C}i0$MQU9 z(4`xxni8Uh$SE{Dc5e+=A0+j43c3ZYjbmyPD6{qfnllyB)^ObJwV3u%%y>k3bI1*LoE2G-`K1DlWf}7B8u8Veh}|>P zCwr(qzMNm5egz9=Kfs-ZF2*Ipn*@p0q!OFfz>DgH)s4Bi$ClT>fS1Iw51oH<~U_H_BG&+}kR{-|jG++N^ z_DXK7%%JQ%>k5`>X@j%eAf-|dA02s`d1u}Gy7KI>xP0ci)w}i9jddox!%|{b$zW3@ z`{$eB?)4NVwnNuU%)5UXnRyK5H18VhSi6Rgq%q64Zv^j{JvvGw5^g?mB}RmE`!+Iv zLmvh2fq=B2#64xY`uPLY#xA6_^09q<==;u66{A$LD*aI>o#P2T)e#yqK19zI zfBCxe>kSu3t^O^2bmw%=TXg<@ZMmsm3u#6?*dV+8S-ATq!Ye;awrDZEbz$CE9UqVL z?gwt>@$;|dg8ucK`_yBo7(@-JwWw8|n7xF1#|Alf&t6tG98$7)<4LBKnf}BdN_FBg zt+f8&C3%qCSkWvvpXAAzn6-7BnS<0EZnPUak2dL z*DyOzU(~yv1bkiW8l7*pV!uHp+-RqGiQy6JeFb;LrO|eYJ<#h z;?6DjLK`|(q(I>{=gS-Rb_9_!Eu}N5RL-ZSZ{g23%;mwW_McCg+h1e$xq{+3zHc)hzyB5rPWg)!m+B=VddJL5W#+7r{IbBdBAEd@rwa-p*&r}lz_yP==#V%) z@_fkf$k+7C>sRr)GfsHPxqPGJ6Z-bLa$8VidCMv_*{<*1YHCZ(bdp_xqZb zgm7*b7{TwEz)wtKXN}_H5R*=$^ELJ*Z}=N_x;kIko?ket4c$9Q+Pi?>>Ina~U>S?z zDxKpK9M`vrhnBCPUTLR1IgarGRy_-MZDGl-t(?|7i~ARyNL&gDZ39Drxp#arZveb{ z{;M+5ngG{ZK~slhidGwF7NX-NO!pXBTt9M5*1=M>x6JtTh}!%UK$Lf^dz2{2Ks>e( z@WH;d6w`XMx4>iaei0OyKCqK(AHAKnw{9T(?bQTwXqQ^HZuy*q#R#`|lB9nGiSr60 z6A_Y?>3!f!a>SUdTdw@BZtm>n1NYxf?}pF5>O8)A;SKt>O^@d{5ar!hFF2;qY;G3W z*YBYy5(Rj*Fnbu^;Rv4U$XkU(NQvp)a&QbCKIRYAs?UpG;?Xdmd*dG;IbrYP=Y36o zJoh->_xN3uYB50=(6RAzuR53Ug`ZY@h|>f=bvu#d%s0&wDrkOr8JR=HVDSWMXqdda z#AyCKtA@$h0dpSu>_PKj@Yqjl&$=(Zt~~p>o2)N1fXa0e#VSl{6Dl> zP@?{EqPh|%2__85ipsRrpWpYr$$6hq-!x{%gBL^8QF+bQ)v^6L89C!RWz(C`WDOqs zIkicK6$|s*i7P_yt-te{%w_VjFRL~nkp|sA{@s0Jjvn(F&G7k(%OO!$E6MCKJ>U9` z!|F2WBl1n3V;6lzeZ|mu%WuADeZ%Mdg%(Q%>Me%u8$WW`t^bI8(`Tv~QTEcXM%Pb1 zaaeD{Bl5+P1vS`1KsBn>TlA+wUxtW?nk5#8942W8X!oy zfP@Ac7+P-otvAJ5k2ryhU-XsyE?x4sMT-hnAS-*izVoree!WMaQ+4y3~AB7NjB6G zN+XwiSwj_!SSCA!X@?m^a+HqJQ94RT=_nngqjZ#x(os4}hYS6Gq_=7S(bBO?00000 LNkvXXu0mjfS67hi literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/spectrum/textures/gui/sprites/widget/ink_pie_background.png b/src/main/resources/assets/spectrum/textures/gui/sprites/widget/ink_pie_background.png new file mode 100644 index 0000000000000000000000000000000000000000..703925e7bf8e8187050ed2a269e0697ea7ab0ee0 GIT binary patch literal 8348 zcmeHMdtA%y-(Q5JD58U5%`j|jtJMzHxs}P%QLPkf`>sZ{)z(o+4%H}H43%P(Td61& zh3JSR3Au$7Ns>-d5}s>uyWP+8d%d35{d#`S@2|Vs;d^~Q*ZcZ>-q-tcU7zb)f}?|- zx~iTk3wvbqmc2vinYNEmx0D!Vk?5ix`H5;2HS+4MR2;|X|)ZgiJ zxc%IHn@(Pw>luo_{6U+@U+ugBKBXmgm-)QhnFe>usFze@U(C|@1`Bo;C(o`pqUBi~ zA$%GaKC&>p4|dXxlcO6yIftivjB9mAdwtDUcV$fr6^@Giod+(z*T89YEvC`YSN9EI z`b0aDl(PH{uP>WjcPz-GdVY0Ln(S_5Cb@Ej)GFG6#=kcuVbNuS^6}cs@6KO0T5M}z zv<|L6uig|hg3r}iF`yRg>STOdd(dEIdMP=#cxunnlnVTY2kQ$roS{fivV&H7NG{Ql zu0GHA;^xywZ{FKpS!Lca+Wbm-%WcZyx=C*x^(ou?%}1Z*u~IWaQYxpP=&LC)uig38 z`^2-0y?vb4piJ0TzZYwI#(J=u-lu%vx$j%3w5#=cO{jayNKE~LO{0t>YPXWdiF=%< zN0^@ytbkdUTKG5g<`o@io`$gV#?^N8BKTZWq`NT_ z&lFli{`}QZA&^UygDWR$3x~o*nwzQ8BB%f$5E8Qy5rF|gB5H&wasrnMzAKt>NW_GR zc#A30gXxH{7KA_uq5;tWkEKWO!wivTst8&Lmq&HBvHbx7u1t~sVzH2l!-a>38-yDf z2txdD1PXxUqQwe`?-(|ah!esWiur;dgaVW8D+m>vB9Y)e z;t&4yi1989h5Q*tw0OW^5|FVb36{IuH84?LXLpTsU z38WJ!O4wr+20-!)(DgvVt{xYN;gX#FQhk^n>exPuo7a;pDmSR5d zPqO~vo8rzyIKMgqy8p!ei}fF|PZ$F$CX;F-;DjpNW7wD?72{L60uG-`o%l*(lerWQ zkBv2ijM!MB5yZig2?PksF)}jZ5jkWMiGu$HiV-9dvx7L00t$c|@BxkyfsN;JNfa!Y zRy=^<@URpT*B8s>nGm=XVE{AF>2nl3^>Es8p{UDq$$Zz6?f^e#(Bf}JFXz<BYDA{\?Qb$Z$iM6D1REQheAX^iwaZ% z-oS`BaYr#RR1glJmaR}K0GMb8(NL{JAhuW#;wlgXm?9M}AQU}+-e!V?;}}f%W5uVE<_6{|hltz|&Bzl|={KTrBl5Gc>X!8zVKao`1b1~Apv-p&S=qxjV) z=c|C0>B7}45eznCj^d>ROHJ1Sjnl*oCVkpl6=iiS=DAT%B52YT(>=u2fIj_ z(=kJygmK4nuac;9z|-;k!VF(R8m$mm$YRqKb?dp38lch1!y<%*f z-o1SvRYCggy{G8QLQZK>e%IO0ZKC&=N3=(eS2Q#<48C{~^XXIM*cY?7xH#C_0}J5r z^H;9i*)v0XciYgy_RJ|QeIt=$AC_0OYs9!0_*^)D{<@I->dl+@ni{&#m57~Pk?9oC zRA#e>kI(D={)5BAq3z$a-e|qZ^C~?bI6tOk{8MY+zc+Xmbfl)H zrVS3Ymtt@+FUhc{*S3|L?dZB2Xyb%pINv8)YAqo$t+l4yE`0T6ExCeR$enURx#;(Nl9&yU*nsw@(pF;ZtWYY70QD}jbA3uDQeh>22ZAx2ZKheK|MpeHuHs^26B83hx5Mqio5xp$Z`Vp0b)oQC^X%>I0|bJhfx1OQ z-s&&tDf6KyZHV!D>22=)miK+7vZBI$KI!FmJ zn}5IC<7jpQS~9xb0$#UTx;FP=Z3)&hZyv} zy3@hz<&hbudff7JawLfOSCI}<6zp+HB0m)^sr>SJLzIjFP>=sJv=3;W_Tdm%(G+JY@=>a)&Qq!%pO&$1Cv{& z&sx8HuN+++d}m;Q@N(ejv{?)LM+Z3Yx|3~vnfu?oe$BgFS{j$LzMcY~nIMlRCk59T zWb`nP!VjXR2gB!#nqBLA`B~{&pXOdoM!JTbrsaz{$~RtJS*JxeZjWv(n5(ZcJ{FnL zL(ogqIZ$VO$*VNzq0?a{uw?AI5d(5&sI=nQ^^(9!JR)gMYQxeppH6RC)|IGX38o&e zHiy~lsC7(^1{1=NI?JZWpi_K3scYw{mt?S7p(P)pt}?zJws8U?mUdA}0-FOiA6hd0 zrLXkTw$CQHxw)aPHQj|cELI7>YSlirPK3{Ju?%YJ4Fd^{&bg>@qPhECZx}%>h1NLm zWsTi@^|`Gj=X+HHq^C!>4`aMry2Apg$7f1W?wTLBaaolmftY$*4do3jxu?cHbT_NM z0coJCNM@x?I!i4z9JQvD1afq!ax@c#wrB~()LXR-GY%O=x1GV*1DxKl`OGbkmO?B1 zfDfCG6??jtrEN-G+8cI;7pbAVTI#y02qZ4xd->IY+WFr;HIUl+yU%0}-ddLVKzfS* zPQ)n+K6Zm4#fR0YsQ9O@w|CK^ zyQv2{$!i!V0dC8I%$jb z*VkzRFCH}VTG^(nN&{zN?#BlaaZK32sw*84=-etNGo#cdt%Vopm`AGrR7r&F>{xwW`yY8I^c0 zQE#0`n{A6a>a5|4mlwR!q&@*kANRSW#$(W-au+}Wf< zWyuH&-JPci#bVbB*Favg)(_hq@-OxTi4LzrORUPD-)|R3cA5=a`gj+%v0jC>_7wpQr_!r>za1i&)TTH13Wa zi%vMaCp$Q5?QuBcQqO=dLop=$lBKgx>#HF7sURPL5;wTapz~n|QH;Di8N}AHZRjT_ z-736dLXq4*fw8Z|r@j)-y`qit!JC_JOg`JvqjaJNJgenr@l$U~*23#TuVx%Sew>Ur zY33taQWChBF>J|yGK-KHoq-2eHh$KOh!#- zyI3N>PHY(KwA2C1*8pu6OSZD-%-Ped+d^XX@Y6M3%#_l$?P;J?xSLL?8XPnn92+a^ zZ;x9f+q!kDas42z!27;GF=w&91X-4!lFi4iJABY6S^q-Fx|9RQ4O{SP0DffK(+gg> z3bg8PIks@OyhKz&d~CcNy-dEny>g1BGCBPH25&EBvqkfRvbM9HNh?Y_$i759&2$aF zQ0Ja)wx_^ibk86CrYuR0KFybOUEW{EkR`CR#%p(aTT4HU4>d*(bWCCE-0yvI(Gy#UsSB;Ul)nqb@R04{>#4+g z&~Go8LwC~yyGAN=+iZG)jM_}ZH{9;73*O(8G(gMbxp2Zh8iQodU-f$3j;PEnE%{(! z>tV^rx|dbl^EaG5wSwW?TgfciylRkEH#E-Zb0N4jr-q(fEj`35l4dVID!(~EJ0QPF zP}{XWSBj-O#mnOnDoe92x{P?Zn1St}qr>-EPs_}2{rwuPB`j}mC^Yo2Pk|kf?+Q1W zv#fJuss2Ojq4CqpyTwZlR&SEFP~_-`(ntQTvkzr=b8YWc7oKA%{kEcI}d z34b>@*lGWKYoF<(M~^^tw@m(N@(ECMR(=}l`n|2q4}$iDKaY$64KD&}+3@6C#GJ1c7mrrwvs*=7E9U?V76 zh)gH9!^e&-JnnF2-qx1TgqK_^bgr4Z)|8hQ?44evEN2)899@5kz_3rkB&HI;XQx7BL26{lPxtYU`i*0_PDvxoes_E ztu61n<~1v9WMpKA`1yylX_rUdKjYwagkXcz>rb3d0=ZCyKYFZN-gB5V`t|Vzy-wG~ zw}{Nh;L%v~Z=W-jJiNVYg5h^FOzQ#DJK7KSUQr24oDXyUeQsK!%{= zOUd)emqI#k3!X3d%Qs=+rE7vMV56xIj1`WPHHe1gYICHZ?!4*zX0y3V?6)> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/spectrum/textures/gui/sprites/widget/ink_pie_foreground.png b/src/main/resources/assets/spectrum/textures/gui/sprites/widget/ink_pie_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..69522f60f9c1bcbe61e369fa4b2e68e864964476 GIT binary patch literal 5743 zcmeHKYg7~079J=FQc$#7LD7!ECo;(-nS>-J@(d6(yyc;wOfnM)k_SmJfl@)dKER3! z0s<-`Y89$hP!z2~MMP^ATk1uNp!HF$NU2Y}O7)%uR9v@f-Q~LN{bkmg%*;M}e`oJ+ ze`jV+c5tAdoy}Mq2!iZH{yw4L>|#8uhk*a4#xwK5>0VlRlr9w4!)lF6CQl+^U8~m;N6?JUA(JQ&JeRue7|2Pi1Df!ZZ76E_Qde?7u zZjffLha=oC1R{Qo_Gt(Lyi|svf!aj{UdEbtc{^ame`w5RLzE>YUQM%XX zu^IpB{mbJ5UMO$cZg@`2`y;v)U0(V#MI}?R!)_8^P1z9Y`g_f~ z$@jE^Rf&l=rhhK_z~TP1(ds;L^w5Zlyx9UQv8lN9V5V1ucign93&#y7BD2iL7Ihlj zGpc^Lt=v2Qk98SaMtAuKJ)-=2%R4eK#he=|!Z)2oGzi_3ZC{47=Rq z#BXjBq^BQSec!c5n~`g_BZ1K{b!2m~GV0{GlQpG<=Tpl#CtUKp(gXSO3zpfR)KQQ2 zovOR{RRh!6m&y!sn)vZqfom^X<=}GPHaR?m_3fAk)ES!&ajFgu>AI3%kH-8MQ62LI zH)m4eI^Si+lxl4X`f7-Dpx@3zc z|HRO(Jx#Ulro2A|^UHbLk3d)?hvnVVlM zfk>gIyrSwbQ0Q<>4ulvbp2L%>6jYp0Nl2U}atVt2EE~Ro2LKeL4u=hjB&C*T5Kv6GJaBC^ z(GgW5 zo=H_{;%Rg)mrFw#GzJ3!9*8zoslyG3QtNDl=*RFOwNi~-t&^*iun`lNs8VzS3I&YA zukur<#p2iSO6>p(fDf7hSJUWJl%`P721jUh!o>h&AfZ2v(1wHcObaEosuYcs6fP!} zI_JR;)Y-n6lY6G z3Cm3;F+mYhp07%yz(G6Z3Ot^qsg?1j0VCl&&tQ>&!l0sWEWt^*P6h(N8jvdqm0tU1 zC|s@}!*sZjPr4h2#lhT+1+h46H^v*M2vVa3S~Q~4Q7RKNjTjrl1LXi}aidZJfXNQ3 z;dyIFT&L26t5it>iZLnJ82Nfw3>FlD>u?`jM*>ik!RDbH9*Tw2F&@U`G0_<)gNF|C zR}peq>VNY#E+3fR-*kVu7R;Y&GWD;iFfzISuKzYkZdyz*Y+4pPT-slP7GF#fraS>w z|By5RSH_dz`7t2aS9bZIh=GkV*<3Hqff+Z)c-VAdP(hlp!bwF;d3hVHl6)Mxp)vRNje|aCx09QlR{?S?p`tT#;VFs0KasWmvok%RSx@&D= zJ7a=py8dfma?}Z6uvo7sAp;2nd>_n@cAbRCNs<2a^y8JR8&;AA1WZvq`elt2`67M$1|zibl$691G7**3>yUtXR5jnmTsOk-cH= zHe=16qzTkcR?z9&5AQ5KI{%}#=tUZj!#gEK0d!9p?U0q$bJ*Oq! z=KRBcA2j@+)>8n_Esuf$at1`g05ndSj=uSNBz{3mKYnG}gisYOlphrd*!cQCXSiTX8=q?AY4s9iiC? zCBB_mI~I6%c6MHW`qbf%B`^I7(ucEu8XXuEbm&QYMGIP19*DIp1W}yQ|Sl6*5>>c?=M=pyGr&gn%jC{O=b49?rK-(T)NY+G7oX_gltN zi(1-0g0NC?pRD5RAXQ}-4|IH#(9^3eC5MdW&zf~AP`mN4BN>{Crm8!FjGfd@^2S*mBhno&C~vOyz=o%>m~gr`d_}*td6zSN0sCa&njL zlv~X$u=lFG=n_$NaZ306ts_!zBI6mL;hfy|>eSl6@@>;7w%!NY74}}IC+42Lm^hl> zqS{^8s&Xj^s8@PmW9_z8-Yp$+@}=wMfE`}3F)>iXzHal7Wpi4wZ*M&)J>MCa|2Y}` zW!oa%(T-18XTH6~fIJFs>BZHXafcxxa|;qmo=9t@RTtCRR6ouBzHP~d+o`8zHFtWS zmom>qnwfdDVo#5+t*K#dDl5xKxcM8a7<9SX71#*I(2||s|EjAUCVAc+5XTVijFDV#P$zx_`yiT)u({j`vh7*q8Ba@y+>dZiVDTTkknjKH45S zonSbA?(4k0RsNOh>idSTe@%%l6z-4e+uT(e>*80mFeGDKY_727xOp$*h56)DbK?Sg SLyC+K9FZ{4XRlXW*1rLy2Wm6` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/spectrum/textures/gui/sprites/widget/ink_pie_foreground_thick.png b/src/main/resources/assets/spectrum/textures/gui/sprites/widget/ink_pie_foreground_thick.png new file mode 100644 index 0000000000000000000000000000000000000000..fe206a1f178e8da25a25564b49fcffb464e79e88 GIT binary patch literal 5789 zcmeHLc~leE8XuHR6huV?M2yjg3nZB&leIy%pezOf0VAj|$xL9BEG7Yh3%FvH3Mh5K zr3e-)D5!v-MGq(KNZVG;#Hb)qNOV8?1u{H!vB&pO&84-t*v`H$Q zgzE?y1nKVV2#!pzfzA70&i>W>{KL9c2c38RYU-9elZ_nk-)&njwKMy(&{OG=%m1m+W+9?p}w3!J`a|0Jhvlu`cK_*BusdlzeBG7gM=a4ciq1J%}w zrQ6yLMfLPQwaiaut4*$I81jJ)oRC#M?DnlLSBv(vHka!n#23nULzb&zXAfqjWw|9`AxA&XWLBa>u?W_u@@o=n-YTlk7 z>i83hyf2skosW-Wz{IrZ+_H%g@$k9llMuo;WT~S`%f?Oaw#TigH@@bdwb*!nto0wz zsu1nY@l|_mA};Gx-)~KP>6F+5<%UTM?LQq^D6`MTysk|OuN_!yJkG;hY94Uy)}rrf z9R+nQZfnUY%2s^2@0+INOEvBfUp4=*t3J$RdfkYpLDP82KfAxWTeM{V z7wW7_qYn4fmb+isFtF_K-LkG8X{#a!8i={?-}$ zrbNH;+dHOyXFswfWR%YRh;k0(UEvXXy{o7+quGo!e;MT-WVW?hm|fE1);8s*uC9B` zLj%bW?xW5>G@TE#Q6~&YioT`(nfJh-o;I31l(v`TDB*9|{g&Vo2 zvWiS1FgNmImIxN9yzyAVceNT{v^p?Ux_YIQhmqaqS_pJ}03gS;C`l)eQ)u`)H?jej z5AOBNG&0FxqFw1m7K?&N-byu2LZ}E8rugWH1O|Do1xcXBWc(1}ydenit$$0TvWZl0u8>C<@JVJ;We}5Z6f6gi1>&6(l_-DpAI3 z-Nymv<7xLO0Ws7Iy4R3>8R(N7E?qywl$ z^-2W*hIWt*-&>8NTBSNvsf=?Y>w_ZcJ>PbVKtW-s78Rme9Du?MHXr8lVI-7}@DU~- zL0n)4A0B3}#0Xi^f3wz?4@odM>Ar*pjGts^8my^B_^QFD!N)klP)sC}p)B~QbT9=C znt)@5I04pRmoyet#Nc547!vH8cH%F@z=oM@9wwzz=m?AeJxPF`V3bEeWegq{XK|Q3 zY>>RS=o+O=n~17$<cX;0g%Tz!hoM&{WNSKbpi?Tt5$hG78M4=qY0WzW6K-nfA}8 z$CWUoY&wuR7vnN02$w0NfUGbI7swo;V>~WK=e!^8|DGOGFAX5M|3i9o84lC+rHo4v zI;cM;kHV925DE&`1RjIMp-bq}zdOAl!M{mQK+~`HZ?r0){YlM(2E#T8FzbVDVB-P% z813ywHY5k2w14t5R7L;f5G2yaK|YAzk92*c>w_5hAmfkf`bgIYG4MggAJz4@(Pi=O zD2yw>`)eXN=*HQe;DbZ5sU%>&&~RLae)FzO0e7QRzDqO^GrYgW;WZz}NQs0tmZX2pU%bI;5(F9Z{DhvN;+pH( zCzY=w?5^Zc?|q4TmSJC-lO~pBA28;aSOtvBx_-^v!p7GzJx=yyDwGhf(U4*yjqS}H zd?P)*f;+aaY3;FSufyY>@3xe?3j`gH&Nt?&_LI$$(_eR|9b4p4Sh)RWtg)wcb+2GS zvoZ9?omj++eZc3mxc}G60;y+Mm`P*rk1zXFj%E;?)3~!9yU(?fmD&q~FKhX=lG7e@ zc8{omzmb)~q6ypc9BVzMjK1?kTfNE=A{`1ma#zuFeo3$mJZ9vwmT_sdr0oyCetK*6 zhHWoPN3NH*LhI}5>Z-=(9Xr%W-u%jT1^a-wC|pe4d!O6Q=MfHVZEZgf3|OVN zH+85>dx3RYtturY1%5tPOm1Khh{I)vX6f?fd97Uo$4XicU!bbj zt?PQRGUq|#Ys*a+p*{G6M~@!0pl)ldy?k?npc?oSw*`o3lf2c}Ig6W^l;U4lXxhK_ zbg^Q_cwXAXZ^OD@tUe{5ENDzAfP=#(rlRYQ5}OP7hXOtDdo_Z_niAKth@#TM%5Hqg zo{@8+)|PLY;b$&=(f2z9-$X2nJ1@oGZMt~0nc$|kw?54Hs#_KhzUx!hr^VqepXS-^>l`s*E3qF)ti&}Z4EHjhy|)1f!swF|BNr{t z`w@@nI8l#{NN;C9Jien~iM8?B;xt+5C@*tf-9DfUpfL8Wy9d5{)caf1*pL-x9A@wK zkKFY6$-Fs*V%LY=-BwU?(MsLq`29zNXW5iHXRoR8*n^*rC~8tvq#$ElZNNWbe!CJ< zH>}CYFPsB>g?k=NO^ckonYewqy#4WG(~61; zGm|@JQ|)8-r(TSPTFb|66M8fw5k=wA(E{UtM^4IVpXF)I_NwX`(N~{lrm!=0ZP+-& zPqnONa!p0}h2<|fivckaMa4PJha9<3_aSFX(~%&xXS&Z~k?lgVQ4MUJQFpP#HMJ(U zsztWM_T19$Sxr5VS+)D|?kVKeeJgu1Z&sF@Cf({=c>Cx#$_u?y<87iM+Se>S3|1P* M&nHk=>=nK7KZ+WCBLDyZ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/spectrum/textures/gui/sprites/widget/stacked_ink_bar.png b/src/main/resources/assets/spectrum/textures/gui/sprites/widget/stacked_ink_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..76fe6dcd508e8e41838c031a39a4e5fed1487bc1 GIT binary patch literal 4409 zcmeHKeNYo;8ef#}iXS~I+Cy)Nt=EE^Y&HwoY>6mIlt_aVqF}Wxo85PlJxMku3kjUk zisyk^Tac>N<4~-Qwv4rYq10L^irQi+t=@5JTfN>#I|9<$PGLHh-n-#@t}{2xT>m4P zWOtwE_x#@H`MuBk&bym4(w9U@|CjHN3xSurMb;cClkuT$ zkH`yo0F?^e00n-5M-cywZBN~dI*(4eZ{PCL?d(Y}8unQ4gwAe=#+PQjp1G{)Z>7hk zRDR$7ZG|iBKFqmSMV&N&qqm0q*q)T((M1&!>N@q2%0o;YFYv5xTC;D(K*A5Cj_ zG-;lnv1hW@-%{ANKj>(7@wSr8cOTd^;a?x`t~)bzlQpGcTko7L@9bPxc%$G@{0H?< zp6LCeD(bI)@O&TH5Weza(rLrte}7*6Nhi5^)<@P2^RDmMk-OY^_!?WE*m-bOS}Ip= z+2xAeKc)KX9px`Hs7x;kf2S1!H{7#7zQhc z^;WH~Xh=K1FsAvrt6L6QV>(gAt2Oj>lPM;s&S=rk@4;(l#(gtst@Wvd52EiW z|xR5nHI>u#<~zPO?9nSGy~?CNH3y7nS{_S;K4e(1n* z?^b@tXK$SowDD$RbAEPZ&kHTHb9>FZCcR&ApWKug;ZJ@|j6)2k7dk%dI&$LWt6}Jp zXRupHSZSki_wjc9=d(Mzx^8Ly+*gbMlc(mj+B2|6qY4DriaC}iX;yS98BVkTrQhj> zJ&GVn$$mG(t^pEi19risS9G6kP@n>*S7awxaEsdj971Z52V@ncTiK#Dtd3J8FNjR? z(~!UkBnI_6^ITrquU7-kkr7_WQ~*f^68hN) zuNAInRVMI?`5qRS3V=(RJCcH9hvMD&p1eRg9IFC(zzLyVII4QokW0*#jG+iw0=wXJ z2cn?ZqmYuo4~sP_H`x;?XJjHUe28}xda(8Y7@{l|+930rHSG002)B7)R*< zMryShjMA}MjMb7Lkzmy}wJl);#WIfoyOPNpnUze%K`M@7SjI+hn3mGOY*=24Q2@s= zB0+1@P&x|mJP1&6EWKFtI2kydf|IcWmD^7eamW(_`;$Z+>1A>ba zecoZ0Rd9kViIMeGYpDc^#I=bOp~H1*au~D%c)YL|WmYw=)bxAgiJ@URP+CUrR7enr zfYs0j4`3wGV->|by+Te3l_Q7T7Pz1|Mq-SN1RyC+B+@uVArwU#;eqq4WzoxRl+Wx2h$2=jhm{2sZENF)9FTu+c04|Ux`+Ij6>QLeR_J2`Q}y_0yw3sTd4Q5(IE4*MMk!PS#j4~TW3bvJ)qm-c6ab9aVqjdq z4Q^dg#&uYo6axz8JLG(a0Ey_KFFB#9hYldt}!VvCh&N7jmtGA1;zv(@2>xw zT#>^sQ@{mJKtA}YG$*wBWB8gCYD-&UM1GRL`_3Jzgq8?*>PjzyJn$>|7liDonhA|z zlG$PkyAvK9N#fS^;m<+SEXkB38APXiCPxAXMZlpxL2{t-K{0#7ayKuSAXyMFQG&F?vWJX^{%-k6Z9Enu~MY+KK{va$oyA3gY3Y;Z*EUm zAE>BR?i70}qSl@;dY6~R zK0e>?_w)Pye)IdSwInYN37Q!MK~RV(AwCs61HrX0a4fiI;osGQM{99R__tvkLHa-g@t^YnvhHmPL zB}N`9+rQUR`^`VYs&-nQ@4OUz`G@OuF9VYIJ)WF>y(&6op>|ouTNm=hn+==zEu=Ad ztPnT9se}y9F4=V@`VZgU&o3dG7)8WYF_ zCSARqcCRTs>f&A9s#Ry!KU>)Dd3WQ8PxA1F*C$=v?#ybO)p+#xTfZo(BF`<@61OTj zioY>t?W?EcpLJe1)q1!=IcJevxg`9xsaJFhJJ8zc3!aT%nVzD$JngwWa>og>_So1b z%@y@%&h3mNIiG6R&E5J@+)NouSd1Z4t#$ePDlgqweeS&e@ylC(-SYXHW9D2O*X~hd$=K9$q zO7Ax`6=YU){N_r;@|UJ<<3HcrNxYvr&ZpliEPxCrV)CxF9Xz_}Rsg(s8S*t0@L@yz z_9J(74{<~h-3P#Jy^wB|4J_-OhIFW{Z z4!hGs`E)WrE(P8tu|fv>O~e&CS(e!X8w5886LLb1B1Ruyh|8jb;3zk1qf+A+^+13x zoh(ljU6exM^?K!ArCf05Dln~9t3YuDjw8SV@f0~l+J`tjb0mmvjCjt&xOtbz3r<+V zq^&}MsFTTn9`4Q0;WC^1;GLcx762a#AMH|La#Z1PC+}$^a-rjUuFywIV7lsZ`-= zoWwAVABttDMS|NwgW=>IbS|fGIdlCAiEt{`V$#WQIodC=*lE!Q9Kamlovh&X^sCZ& z2bU(&5}%lcRFMRRY6-1ULn^U;qYTdN0lg@pVyIk6_%+hNP@o(@EiH8_0PxE}HI%{4 z(W2l^7X-UbCM5++o_%UFm{2S&(($y&0ZgNic*E3Y}2WR8W>z z^&h4!*JrEQ;S-M6*AMcnBgaM+- zYz$}#934bW2(BWFfoO(k%n}WPL)w!={*5BX!d_m?gQbmP=9&r9fYDJ?d~7;-rR}%6 z2_-R8-m5P-a62#dK+4mYJ*qGFJ{-BRvHIkwc^mXE@(YVHV(fKw_YUl@Ec$MLQP9M* zmqwAZUnze*E$Se4=Xr5-**6i{Td|Rq*Z$U8@m^cudH0{-b+Vg8gj}qtnH)Ru(f83Z ze02FS!fcrS0hDuS+gYOJjqI(>?HZ`XvmrG<(6_XsZO^={KW0`%hLC?Bx`V$ve#}}P%9KNUR-bvSSz|`IqoWJ6LHdx%m>hp7Zh6Un0Y)E6CIA2c literal 0 HcmV?d00001 From 6ae336bdaa0e9ba02659ddf45579d7c85056a86f Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 4 Aug 2026 16:15:53 +0200 Subject: [PATCH 146/477] add missing packageinfo --- .../java/de/dafuqs/spectrum/blocks/ink/package-info.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/main/java/de/dafuqs/spectrum/blocks/ink/package-info.java diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/package-info.java new file mode 100644 index 0000000000..fc2cb17dc9 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/package-info.java @@ -0,0 +1,7 @@ +@NullMarked +@MethodsReturnNonnullByDefault +@FieldsAreNonnullByDefault +package de.dafuqs.spectrum.blocks.ink; + +import net.minecraft.*; +import org.jspecify.annotations.*; From accf21555bcd08efe5c2f3f611f5788daf5eb6a2 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 4 Aug 2026 16:16:13 +0200 Subject: [PATCH 147/477] improve mixin naming; move fire overlay mixin to event --- .../spectrum/mixin/client/BipedEntityModelMixin.java | 2 +- .../dafuqs/spectrum/mixin/client/ClientLanguageMixin.java | 2 +- .../spectrum/mixin/client/InGameOverlayRendererMixin.java | 7 ------- .../registries/client/SpectrumClientEventListeners.java | 7 +++++++ 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/mixin/client/BipedEntityModelMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/client/BipedEntityModelMixin.java index f1129f619d..2b5ed7782b 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/client/BipedEntityModelMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/client/BipedEntityModelMixin.java @@ -26,7 +26,7 @@ public class BipedEntityModelMixin { public ModelPart leftLeg; @Inject(method = {"setupAnim(Lnet/minecraft/world/entity/LivingEntity;FFFFF)V"}, at = @At("TAIL"), cancellable = true) - public void poseArms(LivingEntity livingEntity, float f, float g, float h, float i, float j, CallbackInfo ci) { + public void spectrum$tpose(LivingEntity livingEntity, float f, float g, float h, float i, float j, CallbackInfo ci) { if (SpectrumCurioItem.hasEquipped(livingEntity, SpectrumItems.NEAT_RING.get())) { this.rightLeg.xRot = 0; this.rightLeg.yRot = 0; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/client/ClientLanguageMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/client/ClientLanguageMixin.java index 4b43d7be66..e6b9a2d5a1 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/client/ClientLanguageMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/client/ClientLanguageMixin.java @@ -18,7 +18,7 @@ public class ClientLanguageMixin { private Map storage; @Inject(method = "(Ljava/util/Map;ZLjava/util/Map;)V", at = @At("TAIL")) - private void addTranslations(Map translations, boolean rightToLeft, Map componentStorage, CallbackInfo ci) { + private void spectrum$addTranslations(Map translations, boolean rightToLeft, Map componentStorage, CallbackInfo ci) { Calendar calendar = Calendar.getInstance(); if (calendar.get(Calendar.MONTH) != Calendar.APRIL || calendar.get(Calendar.DAY_OF_MONTH) != 1) return; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/client/InGameOverlayRendererMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/client/InGameOverlayRendererMixin.java index a5cefea2a4..bda86acef3 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/client/InGameOverlayRendererMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/client/InGameOverlayRendererMixin.java @@ -27,13 +27,6 @@ public class InGameOverlayRendererMixin { } } - @Inject(method = "renderFire", at = @At(value = "HEAD"), cancellable = true) - private static void spectrum$cancelFireOverlayWithPrimordialFire(Minecraft client, PoseStack matrices, CallbackInfo ci) { - if (PrimordialFireAttachmentType.isOnPrimordialFire(client.player)) { - ci.cancel(); - } - } - // [VanillaCopy] uses different texture for fire overlay @Unique private static void spectrum$renderPrimordialFireOverlay(Minecraft client, PoseStack matrices) { diff --git a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java index 04e7177b4c..4999237f10 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java @@ -110,6 +110,13 @@ private static void registerClientTooltipComponentFactoriesEvent(RegisterClientT event.register(BottomlessBundleTooltipData.class, BottomlessBundleTooltipComponent::new); } + @SubscribeEvent + private static void registerRenderBlockScreenEffectEvent(RenderBlockScreenEffectEvent event) { + if(event.getOverlayType() == RenderBlockScreenEffectEvent.OverlayType.FIRE && PrimordialFireAttachmentType.isOnPrimordialFire(event.getPlayer())) { + event.setCanceled(true); + } + } + @SubscribeEvent private static void registerDimensionSpecialEffectsEvent(RegisterDimensionSpecialEffectsEvent event) { event.register(SpectrumDimensionKeys.DIMENSION_EFFECTS_ID, new DeeperDownDimensionEffects()); From f72b545d02be4608dbfe519c613902f4cc14d8d4 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 4 Aug 2026 16:25:09 +0200 Subject: [PATCH 148/477] suppliers --- src/main/java/de/dafuqs/spectrum/api/ink/InkPowered.java | 3 --- .../dafuqs/spectrum/blocks/cinderhearth/package-info.java | 7 ------- .../de/dafuqs/spectrum/inventories/CinderhearthScreen.java | 5 ++++- .../de/dafuqs/spectrum/inventories/ColorPickerScreen.java | 2 +- .../de/dafuqs/spectrum/inventories/InkStorageScreen.java | 2 +- src/main/java/de/dafuqs/spectrum/render/HudRenderers.java | 2 +- 6 files changed, 7 insertions(+), 14 deletions(-) delete mode 100644 src/main/java/de/dafuqs/spectrum/blocks/cinderhearth/package-info.java diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/InkPowered.java b/src/main/java/de/dafuqs/spectrum/api/ink/InkPowered.java index a5495caed8..f67832b209 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/InkPowered.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/InkPowered.java @@ -78,9 +78,6 @@ private static long tryDrainEnergy(ItemStack stack, InkColor color, long amount, long drained = inkStorage.drainEnergy(color, amount); if (drained > 0) { - if (player instanceof ServerPlayer serverPlayer) { - SpectrumAdvancementCriteria.INK_CONTAINER_INTERACTION.trigger(serverPlayer, stack, inkStorage, color, -amount); - } inkStorageItem.setEnergyStorage(stack, inkStorage); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/cinderhearth/package-info.java b/src/main/java/de/dafuqs/spectrum/blocks/cinderhearth/package-info.java deleted file mode 100644 index 7e0e9c2c0e..0000000000 --- a/src/main/java/de/dafuqs/spectrum/blocks/cinderhearth/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@NullMarked -@MethodsReturnNonnullByDefault -@FieldsAreNonnullByDefault -package de.dafuqs.spectrum.blocks.cinderhearth; - -import net.minecraft.*; -import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java index d5d9509c63..b8c24c9f3a 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java @@ -1,6 +1,7 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.inventories.widgets.ink.*; @@ -10,6 +11,8 @@ import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; +import java.util.function.*; + public class CinderhearthScreen extends AbstractContainerScreen { protected final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/cinderhearth.png"); @@ -24,7 +27,7 @@ public CinderhearthScreen(CinderhearthScreenHandler handler, Inventory playerInv @Override protected void init() { super.init(); - this.inkListWidget = new InkListWidget(getGuiLeft() + 140, getGuiTop() + 34, 40, this.menu.getBlockEntity()); + this.inkListWidget = new InkListWidget(getGuiLeft() + 140, getGuiTop() + 34, 40, () -> menu.getBlockEntity().getLevel().getCapability(InkCapabilities.BLOCK, menu.getBlockEntity().getBlockPos())); addRenderableWidget(inkListWidget); } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java index be86166414..615f4ccf19 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java @@ -29,7 +29,7 @@ protected void init() { this.inkPieWidget = new InkPieWidget(getGuiLeft() + 54, getGuiTop() + 20, () -> menu.getBlockEntity().getInkCapability()); addRenderableWidget(this.inkPieWidget); - this.stackedInkBarWidget = new StackedInkBarWidget(getGuiLeft() + 99, getGuiTop() + 20, this.menu.getBlockEntity().getInkCapability()); + this.stackedInkBarWidget = new StackedInkBarWidget(getGuiLeft() + 99, getGuiTop() + 20, () -> this.menu.getBlockEntity().getInkCapability()); addRenderableWidget(stackedInkBarWidget); } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java index 071c2e2d52..4d62f29b2e 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java @@ -29,7 +29,7 @@ protected void init() { this.inkPieWidget = new InkPieWidget(getGuiLeft() + 54, getGuiTop() + 21, () -> menu.getBlockEntity().getInkCapability()); addRenderableWidget(this.inkPieWidget); - this.stackedInkBarWidget = new StackedInkBarWidget(getGuiLeft() + 100, getGuiTop() + 21, this.menu.getBlockEntity().getInkCapability()); + this.stackedInkBarWidget = new StackedInkBarWidget(getGuiLeft() + 100, getGuiTop() + 21, () -> this.menu.getBlockEntity().getInkCapability()); addRenderableWidget(stackedInkBarWidget); } diff --git a/src/main/java/de/dafuqs/spectrum/render/HudRenderers.java b/src/main/java/de/dafuqs/spectrum/render/HudRenderers.java index 34db471ada..a17ba7c934 100644 --- a/src/main/java/de/dafuqs/spectrum/render/HudRenderers.java +++ b/src/main/java/de/dafuqs/spectrum/render/HudRenderers.java @@ -71,7 +71,7 @@ public void render(GuiGraphics drawContext, DeltaTracker deltaTracker) { guiGraphics.blitSprite(SPLASH_SPRITE, 8, -50, 100, 100); InkPieWidget inkPieWidget = new InkPieWidget(30, -21, () -> hoveredCapability).setThickOutline(); inkPieWidget.render(guiGraphics, 0, 0, partialTick); - StackedInkBarWidget stackedInkBarWidget = new StackedInkBarWidget(80, -21, hoveredCapability).setThickOutline(); + StackedInkBarWidget stackedInkBarWidget = new StackedInkBarWidget(80, -21, () -> hoveredCapability).setThickOutline(); stackedInkBarWidget.render(guiGraphics, 0, 0, partialTick); poseStack.popPose(); } From ef40ac7b7c52207876cd7ca1d9f2e261a58d776d Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 4 Aug 2026 17:15:01 +0200 Subject: [PATCH 149/477] migrate ink advancements --- .../api/predicate/item/InkPredicate.java | 51 ++++++++ .../SpectrumAdvancementCriteria.java | 2 - .../InkContainerInteractionCriterion.java | 52 -------- .../SpectrumItemSubPredicateTypes.java | 1 + .../midgame/fill_ink_container.json | 18 ++- .../midgame/fill_pigment_palette.json | 116 +++++++++--------- 6 files changed, 127 insertions(+), 113 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/api/predicate/item/InkPredicate.java delete mode 100644 src/main/java/de/dafuqs/spectrum/progression/advancement/InkContainerInteractionCriterion.java diff --git a/src/main/java/de/dafuqs/spectrum/api/predicate/item/InkPredicate.java b/src/main/java/de/dafuqs/spectrum/api/predicate/item/InkPredicate.java new file mode 100644 index 0000000000..13c4960951 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/api/predicate/item/InkPredicate.java @@ -0,0 +1,51 @@ +package de.dafuqs.spectrum.api.predicate.item; + +import com.mojang.serialization.*; +import com.mojang.serialization.codecs.*; +import de.dafuqs.spectrum.api.ink.color.*; +import de.dafuqs.spectrum.components.*; +import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.progression.advancement.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.advancements.critereon.*; +import net.minecraft.core.component.*; +import net.minecraft.world.item.*; + +import java.util.*; + +public record InkPredicate(LongRange totalRange, Map colorRanges) implements SingleComponentItemPredicate { + + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + LongRange.CODEC.optionalFieldOf("total", LongRange.ANY).forGetter(InkPredicate::totalRange), + CodecHelper.registryMap(SpectrumRegistries.INK_COLOR, LongRange.CODEC).fieldOf("colors").forGetter(InkPredicate::colorRanges) + ).apply(instance, InkPredicate::new)); + + public InkPredicate(LongRange totalRange, Map colorRanges) { + this.totalRange = totalRange; + this.colorRanges = colorRanges; + } + + @Override + public DataComponentType componentType() { + return SpectrumDataComponentTypes.INK_STORAGE.get(); + } + + public boolean matches(ItemStack stack, InkStorageComponent value) { + Map storedEnergy = value.storedEnergy(); + + long total = 0L; + for(long i : storedEnergy.values()) { + total += i; + } + if(!totalRange.test(total)) { + return false; + } + + Map colorRanges = colorRanges(); + return !colorRanges.isEmpty() && colorRanges.entrySet().stream().allMatch(entry -> { + LongRange required = colorRanges.get(entry.getKey()); + Long stored = storedEnergy.getOrDefault(entry.getKey(), 0L); + return required.test(stored); + }); + } + } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/progression/SpectrumAdvancementCriteria.java b/src/main/java/de/dafuqs/spectrum/progression/SpectrumAdvancementCriteria.java index df3761239e..a2927485be 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/SpectrumAdvancementCriteria.java +++ b/src/main/java/de/dafuqs/spectrum/progression/SpectrumAdvancementCriteria.java @@ -27,7 +27,6 @@ public class SpectrumAdvancementCriteria { public static PotionWorkshopBrewingCriterion POTION_WORKSHOP_BREWING = new PotionWorkshopBrewingCriterion(); public static PotionWorkshopCraftingCriterion POTION_WORKSHOP_CRAFTING = new PotionWorkshopCraftingCriterion(); public static TakeOffBeltJumpCriterion TAKE_OFF_BELT_JUMP = new TakeOffBeltJumpCriterion(); - public static InkContainerInteractionCriterion INK_CONTAINER_INTERACTION = new InkContainerInteractionCriterion(); public static JeopardantKillCriterion JEOPARDANT_KILL = new JeopardantKillCriterion(); public static MemoryManifestingCriterion MEMORY_MANIFESTING = new MemoryManifestingCriterion(); public static SpiritInstillerCraftingCriterion SPIRIT_INSTILLER_CRAFTING = new SpiritInstillerCraftingCriterion(); @@ -68,7 +67,6 @@ public static void register(IEventBus modBus) { REGISTRAR.register(PotionWorkshopBrewingCriterion.NAME, () -> POTION_WORKSHOP_BREWING); REGISTRAR.register(PotionWorkshopCraftingCriterion.NAME, () -> POTION_WORKSHOP_CRAFTING); REGISTRAR.register(TakeOffBeltJumpCriterion.NAME, () -> TAKE_OFF_BELT_JUMP); - REGISTRAR.register(InkContainerInteractionCriterion.NAME, () -> INK_CONTAINER_INTERACTION); REGISTRAR.register(JeopardantKillCriterion.NAME, () -> JEOPARDANT_KILL); REGISTRAR.register(MemoryManifestingCriterion.NAME, () -> MEMORY_MANIFESTING); REGISTRAR.register(SpiritInstillerCraftingCriterion.NAME, () -> SPIRIT_INSTILLER_CRAFTING); diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/InkContainerInteractionCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/InkContainerInteractionCriterion.java deleted file mode 100644 index 665c9e3c85..0000000000 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/InkContainerInteractionCriterion.java +++ /dev/null @@ -1,52 +0,0 @@ -package de.dafuqs.spectrum.progression.advancement; - -import com.mojang.serialization.*; -import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.ink.color.*; -import de.dafuqs.spectrum.api.ink.storage.*; -import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.advancements.critereon.*; -import net.minecraft.server.level.*; -import net.minecraft.world.item.*; - -import java.util.*; - -public class InkContainerInteractionCriterion extends SimpleCriterionTrigger { - - public static final String NAME = "ink_container_interaction"; - - public void trigger(ServerPlayer player, ItemStack stack, InkStorage storage, InkColor changeColor, long changeAmount) { - this.trigger(player, (conditions) -> conditions.matches(stack, storage.getEnergy(), changeColor, changeAmount)); - } - - @Override - public Codec codec() { - return Conditions.CODEC; - } - - public record Conditions( - Optional player, - ItemPredicate itemPredicate, - Map colorRanges, - InkColorPredicate changeInkColorPredicate, - LongRange changeRange - ) implements SimpleCriterionTrigger.SimpleInstance { - - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - ContextAwarePredicate.CODEC.optionalFieldOf("player").forGetter(Conditions::player), - ItemPredicate.CODEC.optionalFieldOf("item", ItemPredicate.Builder.item().build()).forGetter(Conditions::itemPredicate), - CodecHelper.registryMap(SpectrumRegistries.INK_COLOR, LongRange.CODEC).forGetter(Conditions::colorRanges), - InkColorPredicate.CODEC.optionalFieldOf("change_color", InkColorPredicate.ANY).forGetter(Conditions::changeInkColorPredicate), - LongRange.CODEC.optionalFieldOf("change_amount", LongRange.ANY).forGetter(Conditions::changeRange) - ).apply(instance, Conditions::new)); - - public boolean matches(ItemStack stack, Map colors, InkColor changeColor, long change) { - return itemPredicate.test(stack) - && changeRange.test(change) - && changeInkColorPredicate.test(changeColor) - && colorRanges.entrySet().stream().allMatch(entry -> colorRanges.get(entry.getKey()).test(colors.getOrDefault(entry.getKey(), 0L))); - } - } - -} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemSubPredicateTypes.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemSubPredicateTypes.java index a1aa41359c..de0b66e11a 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemSubPredicateTypes.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemSubPredicateTypes.java @@ -17,6 +17,7 @@ public class SpectrumItemSubPredicateTypes { public static ItemSubPredicate.Type INFUSED_BEVERAGE = register("infused_beverage", InfusedBeveragePredicate.CODEC); public static ItemSubPredicate.Type BOTTOMLESS_STACK = register("bottomless_stack", BottomlessStackPredicate.CODEC); public static ItemSubPredicate.Type STORED_EXPERIENCE = register("stored_experience", StoredExperiencePredicate.CODEC); + public static ItemSubPredicate.Type INK = register("ink", InkPredicate.CODEC); private static ItemSubPredicate.Type register(String id, Codec codec) { ItemSubPredicate.Type type = new ItemSubPredicate.Type<>(codec); diff --git a/src/main/resources/data/spectrum/advancement/midgame/fill_ink_container.json b/src/main/resources/data/spectrum/advancement/midgame/fill_ink_container.json index 9f2482b5a1..913f688b86 100644 --- a/src/main/resources/data/spectrum/advancement/midgame/fill_ink_container.json +++ b/src/main/resources/data/spectrum/advancement/midgame/fill_ink_container.json @@ -22,11 +22,21 @@ }, "criteria": { "filled_ink_container": { - "trigger": "spectrum:ink_container_interaction", + "trigger": "minecraft:inventory_changed", "conditions": { - "change_amount": { - "min": 1 - } + "items": [ + { + "items": "#spectrum:ink_containers", + "predicates": { + "spectrum:ink": { + "total": { + "min": 1 + }, + "colors": {} + } + } + } + ] } }, "gotten_previous": { diff --git a/src/main/resources/data/spectrum/advancement/midgame/fill_pigment_palette.json b/src/main/resources/data/spectrum/advancement/midgame/fill_pigment_palette.json index 0a20d3719e..c23b1de679 100644 --- a/src/main/resources/data/spectrum/advancement/midgame/fill_pigment_palette.json +++ b/src/main/resources/data/spectrum/advancement/midgame/fill_pigment_palette.json @@ -13,62 +13,68 @@ } }, "criteria": { - "filled_pigment_palette_with_cmyk_colors": { - "trigger": "spectrum:ink_container_interaction", + "filled_pigment_palette": { + "trigger": "minecraft:inventory_changed", "conditions": { - "spectrum:black": { - "min": 1 - }, - "spectrum:blue": { - "min": 1 - }, - "spectrum:brown": { - "min": 1 - }, - "spectrum:cyan": { - "min": 1 - }, - "spectrum:gray": { - "min": 1 - }, - "spectrum:green": { - "min": 1 - }, - "spectrum:light_blue": { - "min": 1 - }, - "spectrum:light_gray": { - "min": 1 - }, - "spectrum:lime": { - "min": 1 - }, - "spectrum:magenta": { - "min": 1 - }, - "spectrum:orange": { - "min": 1 - }, - "spectrum:pink": { - "min": 1 - }, - "spectrum:purple": { - "min": 1 - }, - "spectrum:red": { - "min": 1 - }, - "spectrum:white": { - "min": 1 - }, - "spectrum:yellow": { - "min": 1 - }, - "item": { - "items": [ - "spectrum:pigment_palette" - ] - } + "items": [ + { + "items": "spectrum:pigment_palette", + "predicates": { + "spectrum:ink": { + "colors": { + "spectrum:black": { + "min": 1 + }, + "spectrum:blue": { + "min": 1 + }, + "spectrum:brown": { + "min": 1 + }, + "spectrum:cyan": { + "min": 1 + }, + "spectrum:gray": { + "min": 1 + }, + "spectrum:green": { + "min": 1 + }, + "spectrum:light_blue": { + "min": 1 + }, + "spectrum:light_gray": { + "min": 1 + }, + "spectrum:lime": { + "min": 1 + }, + "spectrum:magenta": { + "min": 1 + }, + "spectrum:orange": { + "min": 1 + }, + "spectrum:pink": { + "min": 1 + }, + "spectrum:purple": { + "min": 1 + }, + "spectrum:red": { + "min": 1 + }, + "spectrum:white": { + "min": 1 + }, + "spectrum:yellow": { + "min": 1 + } + } + } + } + } + ] } }, "gotten_previous": { From 24323726a058bc55ad87318e6841c902d1b97290 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 4 Aug 2026 17:56:56 +0200 Subject: [PATCH 150/477] expand ink items to a system that allows/denies filling / draining --- .../dafuqs/spectrum/api/ink/InkPowered.java | 13 ++---- .../spectrum/api/ink/InkTransferHelper.java | 46 +++++++++++-------- .../capability/BlockEntityInkCapability.java | 12 +++++ .../api/ink/capability/InkCapability.java | 3 +- .../api/ink/capability/ItemInkCapability.java | 12 +++++ .../api/ink/storage/InkStorageItem.java | 30 +++--------- .../blocks/ink/BaseInkBlockEntity.java | 8 ++-- .../ink/gen/InkGeneratorBlockEntity.java | 2 +- .../ink/sink/CinderhearthBlockEntity.java | 2 +- .../ink/sink/TintingStationBlockEntity.java | 2 +- .../inventories/slots/InkInputSlot.java | 8 ++-- .../items/ink/ArtistsPaletteItem.java | 4 +- .../items/ink/CreativeInkAssortmentItem.java | 5 -- .../spectrum/items/ink/InkAssortmentItem.java | 5 -- .../spectrum/items/ink/InkFlaskItem.java | 5 -- .../items/ink/PigmentPaletteItem.java | 4 +- .../items/trinkets/InkDrainCurioItem.java | 4 +- .../registries/SpectrumAdvancements.java | 3 +- 18 files changed, 82 insertions(+), 86 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/InkPowered.java b/src/main/java/de/dafuqs/spectrum/api/ink/InkPowered.java index f67832b209..c681949f55 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/InkPowered.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/InkPowered.java @@ -1,19 +1,17 @@ package de.dafuqs.spectrum.api.ink; import de.dafuqs.revelationary.api.advancements.*; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.compat.*; import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.progression.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.*; import net.minecraft.client.*; import net.minecraft.core.*; import net.minecraft.core.registries.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; -import net.minecraft.server.level.*; import net.minecraft.world.*; import net.minecraft.world.effect.*; import net.minecraft.world.entity.player.*; @@ -28,11 +26,6 @@ public interface InkPowered { - /** - * The advancement the player needs to have in order to use ink powered tools - */ - ResourceLocation REQUIRED_ADVANCEMENT = SpectrumCommon.locate("milestones/unlock_ink_use"); - @OnlyIn(Dist.CLIENT) static boolean canUseClient() { @@ -41,7 +34,7 @@ static boolean canUseClient() { } static boolean canUse(@Nullable Player playerEntity) { - return AdvancementHelper.hasAdvancement(playerEntity, InkPowered.REQUIRED_ADVANCEMENT); + return AdvancementHelper.hasAdvancement(playerEntity, SpectrumAdvancements.UNLOCK_INK_USE); } /** @@ -70,7 +63,7 @@ default void addInkPoweredTooltip(List tooltip) { private static long tryDrainEnergy(ItemStack stack, InkColor color, long amount, @Nullable Player player) { if (stack.getItem() instanceof InkStorageItem inkStorageItem) { - if (!inkStorageItem.getDrainability().canDrain(player != null)) { + if (!inkStorageItem.canDrain(player != null)) { return 0; } diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java b/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java index 87ca292674..40d0b23f20 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java @@ -63,30 +63,35 @@ private static void equalizeInk(List targets, InkColor color) { } double avg = (double) total / map.size(); - for (Map.Entry entry : map.entrySet()) { - InkStorage s = entry.getKey(); - long current = s.getEnergy(color); + for (Map.Entry source : map.entrySet()) { + InkCapability sourceCapability = source.getValue(); + InkStorage sourceStorage = source.getKey(); + long current = sourceStorage.getEnergy(color); double diff = avg - current; if (diff > 0) { // Needs ink + if (!sourceCapability.canFill()) continue; + long remainingNeed = (long) Math.ceil(diff * PRESSURE_FACTOR); for (Map.Entry other : map.entrySet()) { - if (other == s) continue; + if (other == sourceStorage) continue; + InkCapability otherCapability = other.getValue(); + if (!otherCapability.canDrain(false)) continue; - long available = other.getKey().getEnergy(color); + InkStorage otherStorage = other.getKey(); + long available = otherStorage.getEnergy(color); if (available <= 0) continue; - long room = s.getRoom(color); + long room = sourceStorage.getRoom(color); if (room <= 0) break; long toTransfer = Math.min(Math.min(available, remainingNeed), room); - if (toTransfer > 0) { - long drained = other.getKey().drainEnergy(color, toTransfer); - s.addEnergy(color, drained); - dirtyCapabilities.add(other.getValue()); - dirtyCapabilities.add(entry.getValue()); + long drained = otherStorage.drainEnergy(color, toTransfer); + sourceStorage.addEnergy(color, drained); + dirtyCapabilities.add(otherCapability); + dirtyCapabilities.add(sourceCapability); remainingNeed -= drained; if (remainingNeed <= 0) break; @@ -94,20 +99,25 @@ private static void equalizeInk(List targets, InkColor color) { } } else if (diff < 0) { // Has excess + if (!sourceCapability.canDrain(false)) continue; + long remainingExcess = (long) Math.ceil(-diff * PRESSURE_FACTOR); - for (Map.Entry other : map.entrySet()) { - if (other == s) continue; + for (Map.Entry destination : map.entrySet()) { + if (destination == sourceStorage) continue; + InkCapability destinationCapability = destination.getValue(); + if (!destinationCapability.canFill()) continue; - long room = other.getKey().getRoom(color); + InkStorage destinationStorage = destination.getKey(); + long room = destinationStorage.getRoom(color); if (room <= 0) continue; long toTransfer = Math.min(room, remainingExcess); if (toTransfer > 0) { - long drained = s.drainEnergy(color, toTransfer); - other.getKey().addEnergy(color, drained); - dirtyCapabilities.add(other.getValue()); - dirtyCapabilities.add(entry.getValue()); + long drained = sourceStorage.drainEnergy(color, toTransfer); + destinationStorage.addEnergy(color, drained); + dirtyCapabilities.add(destinationCapability); + dirtyCapabilities.add(sourceCapability); remainingExcess -= drained; if (remainingExcess <= 0) break; diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/capability/BlockEntityInkCapability.java b/src/main/java/de/dafuqs/spectrum/api/ink/capability/BlockEntityInkCapability.java index d7f5c8821e..a9a6655cc8 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/capability/BlockEntityInkCapability.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/capability/BlockEntityInkCapability.java @@ -27,12 +27,24 @@ private BlockEntityInkCapability(InkStorageBlockEntity inkBlockEntity) { this.storage = inkBlockEntity.getInkStorage(); } + @Override public InkStorage getStorage() { return storage; } + @Override public void markDirty() { inkStorageBlockEntity.setInkDirty(); } + @Override + public boolean canFill() { + return true; + } + + @Override + public boolean canDrain(boolean player) { + return true; + } + } diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/capability/InkCapability.java b/src/main/java/de/dafuqs/spectrum/api/ink/capability/InkCapability.java index 9fa17c369d..3973516913 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/capability/InkCapability.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/capability/InkCapability.java @@ -4,6 +4,7 @@ public interface InkCapability { InkStorage getStorage(); - void markDirty(); + boolean canFill(); + boolean canDrain(boolean player); } diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/capability/ItemInkCapability.java b/src/main/java/de/dafuqs/spectrum/api/ink/capability/ItemInkCapability.java index 7ea6c2eef9..945fa6405b 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/capability/ItemInkCapability.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/capability/ItemInkCapability.java @@ -23,12 +23,24 @@ private ItemInkCapability(ItemStack stack, InkStorageItem inkStorageItem) { this.storage = inkStorageItem.getEnergyStorage(stack); } + @Override public InkStorage getStorage() { return storage; } + @Override public void markDirty() { item.setEnergyStorage(stack, storage); } + @Override + public boolean canFill() { + return item.canFill(); + } + + @Override + public boolean canDrain(boolean player) { + return item.canDrain(player); + } + } diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorageItem.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorageItem.java index 20dc5ad43c..8706e23f36 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorageItem.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorageItem.java @@ -11,32 +11,14 @@ * @param */ public interface InkStorageItem { - - enum Drainability { - ALWAYS, // ink storage should be able to be used via both machines and players - MACHINE_ONLY, // ink storage should only be drained via machines (block entities) - PLAYER_ONLY, // ink storage should only be drained via a player (ink storage trinkets) - NEVER; // ink storage should never be drained, only filled (upgradeable trinkets) - - public boolean canDrain(boolean isPlayer) { - switch (this) { - case NEVER -> { - return false; - } - case PLAYER_ONLY -> { - return isPlayer; - } - case MACHINE_ONLY -> { - return !isPlayer; - } - default -> { - return true; - } - } - } + + default boolean canFill() { + return true; } - Drainability getDrainability(); + default boolean canDrain(boolean player) { + return true; + } PStorage getEnergyStorage(ItemStack itemStack); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlockEntity.java index 73d7f93770..b070881876 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlockEntity.java @@ -139,12 +139,12 @@ public int getContainerSize() { return INVENTORY_SIZE; } - public void tryFillInkContainer(int slotId) { + public void equalizeInkContainer(int slotId) { ItemStack slotStack = inventory.get(slotId); - InkCapability itemCapability = slotStack.getCapability(InkCapabilities.ITEM, null); - if (itemCapability != null) { + InkCapability inkCapability = slotStack.getCapability(InkCapabilities.ITEM, null); + if (inkCapability != null) { InkCapability blockCapability = getInkCapability(); - InkTransferHelper.equalizeInk(blockCapability, itemCapability, this.selectedColor.map(Holder::value).orElse(null)); + InkTransferHelper.equalizeInk(blockCapability, inkCapability, this.selectedColor.map(Holder::value).orElse(null)); } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/InkGeneratorBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/InkGeneratorBlockEntity.java index 6cbbafac59..9e4eb262c7 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/InkGeneratorBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/InkGeneratorBlockEntity.java @@ -41,7 +41,7 @@ public static void serverTick(Level level, BlockPos pos, BlockState state, InkGe blockEntity.paused = true; } } - blockEntity.tryFillInkContainer(OUTPUT_SLOT_ID); + blockEntity.equalizeInkContainer(OUTPUT_SLOT_ID); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java index 1db8c0a104..00e1ef2e25 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java @@ -86,7 +86,7 @@ public class CinderhearthBlockEntity extends BaseContainerBlockEntity implements public boolean canPlaceItemThroughFace(int slot, ItemStack stack, @Nullable Direction dir) { switch (slot) { case INK_PROVIDER_SLOT_ID -> { - return stack.getItem() instanceof InkStorageItem inkStorageItem && (inkStorageItem.getDrainability().canDrain(false)); + return stack.getItem() instanceof InkStorageItem inkStorageItem && (inkStorageItem.canDrain(false)); } case EXPERIENCE_STORAGE_ITEM_SLOT_ID -> { return stack.getItem() instanceof ExperienceStorageItem; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/TintingStationBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/TintingStationBlockEntity.java index 221459e114..0afdcd2d9a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/TintingStationBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/TintingStationBlockEntity.java @@ -98,7 +98,7 @@ public static void serverTick(Level world, BlockPos pos, BlockState state, Tinti } } - blockEntity.tryFillInkContainer(OUTPUT_SLOT_ID); + blockEntity.equalizeInkContainer(OUTPUT_SLOT_ID); } // Cleaned up version of net.minecraft.world.item.component.DyedItemColor diff --git a/src/main/java/de/dafuqs/spectrum/inventories/slots/InkInputSlot.java b/src/main/java/de/dafuqs/spectrum/inventories/slots/InkInputSlot.java index 5ac10d3919..d7e4e9389f 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/slots/InkInputSlot.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/slots/InkInputSlot.java @@ -1,6 +1,8 @@ package de.dafuqs.spectrum.inventories.slots; +import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.api.ink.storage.*; +import de.dafuqs.spectrum.capabilities.*; import net.minecraft.world.*; import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; @@ -13,9 +15,9 @@ public InkInputSlot(Container inventory, int index, int x, int y) { @Override public boolean mayPlace(ItemStack stack) { - return super.mayPlace(stack) - && stack.getItem() instanceof InkStorageItem inkStorageItem - && (inkStorageItem.getDrainability() == InkStorageItem.Drainability.ALWAYS || inkStorageItem.getDrainability() == InkStorageItem.Drainability.MACHINE_ONLY); + InkCapability inkCapability = InkCapabilities.ITEM.getCapability(stack, null); + if(inkCapability == null) return false; + return super.mayPlace(stack); } } diff --git a/src/main/java/de/dafuqs/spectrum/items/ink/ArtistsPaletteItem.java b/src/main/java/de/dafuqs/spectrum/items/ink/ArtistsPaletteItem.java index 8267e24d25..c1dd592ad3 100644 --- a/src/main/java/de/dafuqs/spectrum/items/ink/ArtistsPaletteItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ink/ArtistsPaletteItem.java @@ -29,8 +29,8 @@ public ArtistsPaletteItem(Properties settings, long maxEnergyTotal) { } @Override - public Drainability getDrainability() { - return Drainability.PLAYER_ONLY; + public boolean canDrain(boolean player) { + return player; } @Override diff --git a/src/main/java/de/dafuqs/spectrum/items/ink/CreativeInkAssortmentItem.java b/src/main/java/de/dafuqs/spectrum/items/ink/CreativeInkAssortmentItem.java index 85e957d372..509c48c7f2 100644 --- a/src/main/java/de/dafuqs/spectrum/items/ink/CreativeInkAssortmentItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ink/CreativeInkAssortmentItem.java @@ -36,11 +36,6 @@ public InteractionResult useOn(UseOnContext context) { return super.useOn(context); } - @Override - public Drainability getDrainability() { - return Drainability.ALWAYS; - } - @Override public CreativeInkStorage getEnergyStorage(ItemStack itemStack) { return new CreativeInkStorage(); diff --git a/src/main/java/de/dafuqs/spectrum/items/ink/InkAssortmentItem.java b/src/main/java/de/dafuqs/spectrum/items/ink/InkAssortmentItem.java index e91ca82e47..76484c4580 100644 --- a/src/main/java/de/dafuqs/spectrum/items/ink/InkAssortmentItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ink/InkAssortmentItem.java @@ -22,11 +22,6 @@ public InkAssortmentItem(Properties settings, long maxEnergy) { this.maxEnergy = maxEnergy; } - @Override - public Drainability getDrainability() { - return Drainability.ALWAYS; - } - @Override public IndividualCappedInkStorage getEnergyStorage(ItemStack itemStack) { var storage = itemStack.get(SpectrumDataComponentTypes.INK_STORAGE); diff --git a/src/main/java/de/dafuqs/spectrum/items/ink/InkFlaskItem.java b/src/main/java/de/dafuqs/spectrum/items/ink/InkFlaskItem.java index eda4409816..fa1c413d6c 100644 --- a/src/main/java/de/dafuqs/spectrum/items/ink/InkFlaskItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ink/InkFlaskItem.java @@ -24,11 +24,6 @@ public InkFlaskItem(Properties settings, long maxEnergy) { this.maxEnergy = maxEnergy; } - @Override - public Drainability getDrainability() { - return Drainability.ALWAYS; - } - @Override public SingleInkStorage getEnergyStorage(ItemStack itemStack) { var storage = itemStack.get(SpectrumDataComponentTypes.INK_STORAGE); diff --git a/src/main/java/de/dafuqs/spectrum/items/ink/PigmentPaletteItem.java b/src/main/java/de/dafuqs/spectrum/items/ink/PigmentPaletteItem.java index d97c238300..9735c0557e 100644 --- a/src/main/java/de/dafuqs/spectrum/items/ink/PigmentPaletteItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ink/PigmentPaletteItem.java @@ -29,8 +29,8 @@ public PigmentPaletteItem(Properties settings, long maxEnergyPerColor) { } @Override - public Drainability getDrainability() { - return Drainability.PLAYER_ONLY; + public boolean canDrain(boolean player) { + return player; } @Override diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/InkDrainCurioItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/InkDrainCurioItem.java index 675e762273..fb6b4396c4 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/InkDrainCurioItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/InkDrainCurioItem.java @@ -68,8 +68,8 @@ public ItemStack getDefaultInstance() { } @Override - public Drainability getDrainability() { - return Drainability.NEVER; + public boolean canDrain(boolean player) { + return false; } @Override diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumAdvancements.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumAdvancements.java index 98f82c0353..19321cd727 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumAdvancements.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumAdvancements.java @@ -26,11 +26,11 @@ public class SpectrumAdvancements { public static final ResourceLocation REVEAL_SHIMMERSTONE = locate("milestones/reveal_shimmerstone"); public static final ResourceLocation REVEAL_STORM_STONES = SpectrumCommon.locate("milestones/reveal_storm_stones"); public static final ResourceLocation REVEAL_STRATINE = locate("milestones/reveal_stratine"); - public static final ResourceLocation REVEAL_FROSTBITE_RESOURCES = SpectrumCommon.locate("milestones/reveal_frostbite_resources"); public static final ResourceLocation REVEAL_INCANDESCENT_RESOURCES = SpectrumCommon.locate("milestones/reveal_incandescent_resources"); // Milestones with unlocks + public static final ResourceLocation UNLOCK_INK_USE = locate("milestones/unlock_ink_use"); public static final ResourceLocation APPLY_CONFLICTING_ENCHANTMENTS = SpectrumCommon.locate("milestones/unlock_conflicted_enchanting_with_enchanter"); public static final ResourceLocation UNLOCK_COMPLEX_REAGENTS = SpectrumCommon.locate("milestones/unlock_complex_reagents"); public static final ResourceLocation FOURTH_BREWING_SLOT = SpectrumCommon.locate("milestones/unlock_fourth_potion_workshop_reagent_slot"); @@ -145,5 +145,4 @@ public class SpectrumAdvancements { public static final ResourceLocation FAILED_CREATING_PLAYER_SPAWNER = SpectrumCommon.locate("midgame/failed_creating_player_spawner"); public static final ResourceLocation FAILED_CREATING_EMPTY_OR_BLACKLISTED_SPAWNER = SpectrumCommon.locate("midgame/failed_creating_empty_or_blacklisted_spawner"); public static final ResourceLocation PLACE_FORGOTTEN_MEMORY = SpectrumCommon.locate("place_forgotten_memory"); - } \ No newline at end of file From 89417c74829a7c3d615adcfbf8fc2ea671e08892 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 4 Aug 2026 18:15:36 +0200 Subject: [PATCH 151/477] dimension portal config --- .../de/dafuqs/spectrum/blocks/decay/RuinBlock.java | 11 +++++++++++ .../de/dafuqs/spectrum/config/SpectrumConfig.java | 13 +++++++++++++ src/main/resources/assets/spectrum/lang/en_us.json | 1 + 3 files changed, 25 insertions(+) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/decay/RuinBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/decay/RuinBlock.java index 32cfae31f8..624cd8f28c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/decay/RuinBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/decay/RuinBlock.java @@ -58,6 +58,9 @@ public void setPlacedBy(Level world, BlockPos pos, BlockState state, @Nullable L if (SpectrumDimensionTags.is(world, SpectrumDimensionTags.RUIN_SAFE)) { return null; } + if(world.dimension() == Level.OVERWORLD && stateToSpreadToPos.getY() == world.getMinBuildHeight() && SpectrumConfig.CONFIG.DimensionPortals.get() == SpectrumConfig.DimensionPortalSetting.PROTECT_LOWEST_OVERWORLD_LEVEL) { + return null; + } if (stateToSpreadTo.is(SpectrumBlockTags.RUIN_SPECIAL_CONVERSIONS)) { return this.defaultBlockState().setValue(CONVERSION, Conversion.SPECIAL); @@ -82,6 +85,10 @@ public BlockState playerWillDestroy(Level level, BlockPos pos, BlockState state, @Override protected void spawnAfterBreak(BlockState state, ServerLevel level, BlockPos pos, ItemStack stack, boolean dropExperience) { + if(SpectrumConfig.CONFIG.DimensionPortals.get() == SpectrumConfig.DimensionPortalSetting.NO_PORTALS) { + return; + } + BlockState portalBlock = shouldCreatePortalFacingUp(level, pos, state); if (portalBlock != null) { level.setBlockAndUpdate(pos, portalBlock); @@ -89,6 +96,10 @@ protected void spawnAfterBreak(BlockState state, ServerLevel level, BlockPos pos } protected @Nullable BlockState shouldCreatePortalFacingUp(Level level, BlockPos pos, BlockState state) { + if(SpectrumConfig.CONFIG.DimensionPortals.get() == SpectrumConfig.DimensionPortalSetting.NO_PORTALS) { + return null; + } + DecayBlock.Conversion conversion = state.getValue(RuinBlock.CONVERSION); if (level.dimension() == Level.NETHER) { if (pos.getY() == level.getMinBuildHeight() + level.dimensionType().logicalHeight() - 1) { // Attempt to match the nether ceiling. Tricky... diff --git a/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java b/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java index 1a1766249d..79ea737222 100644 --- a/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java +++ b/src/main/java/de/dafuqs/spectrum/config/SpectrumConfig.java @@ -151,7 +151,20 @@ public class SpectrumConfig { public final ModConfigSpec.ConfigValue LiquidCrystalDripstoneDripChance; public final ModConfigSpec.ConfigValue MidnightSolutionDripstoneDripChance; + public final ModConfigSpec.ConfigValue DimensionPortals; + + public enum DimensionPortalSetting { + CREATE_PORTALS, + PROTECT_LOWEST_OVERWORLD_LEVEL, + NO_PORTALS + } + private SpectrumConfig(ModConfigSpec.Builder builder) { + DimensionPortals = builder + .translation("config.spectrum.dimension_portals") + .comment("Allow the creation of portals using Ruin") + .defineEnum("dimension_portals", DimensionPortalSetting.CREATE_PORTALS); + ToastTimeMilliseconds = builder .translation("config.spectrum.toast_milliseconds") .comment("The duration in milliseconds ingame recipe/unlock popups stay on the screen") diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 4dda1a18fd..6c750c053c 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -5839,6 +5839,7 @@ "config.spectrum.pastel_network_particles": "Pastel Network transfers spawn particles", "config.spectrum.repair_anything_recipe_repair_percentage": "How much an item gets repaired when crafting it with Moonstruck Nectar", "config.spectrum.charged_creepers_drop_spectrum_mob_heads": "Charged Creepers will drop Spectrum exclusive mob head when killing creatures", + "config.spectrum.dimension_portals": "Create Portals", "config.spectrum.gemstone_durability": "Durability of Gemstone tools", "config.spectrum.gemstone_mining_speed": "Mining speed of Gemstone tools", From e8e4ee1bc1f9141826c05fac419dab766d535b65 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 4 Aug 2026 18:29:03 +0200 Subject: [PATCH 152/477] cleanup --- .../api/ink/storage/IndividualCappedInkStorage.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/storage/IndividualCappedInkStorage.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/IndividualCappedInkStorage.java index 8d5eb656fa..82c7d16033 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/storage/IndividualCappedInkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/IndividualCappedInkStorage.java @@ -40,6 +40,12 @@ public IndividualCappedInkStorage(long maxEnergyPerColor, Map co } } + // Overridden for speed and to preserve order + @Override + public Collection acceptedColors() { + return this.storedEnergy.keySet(); + } + @Override public boolean accepts(InkColor color) { return this.storedEnergy.containsKey(color); @@ -148,7 +154,7 @@ public void fillCompletely() { @Override public void clearContent() { Set supportedColors = this.storedEnergy.keySet(); - Map newContent = new HashMap<>(); + Map newContent = new Object2LongArrayMap<>(); for (InkColor color : supportedColors) { newContent.put(color, 0L); } @@ -156,8 +162,4 @@ public void clearContent() { this.currentTotal = 0L; } - public Set getSupportedColors() { - return this.storedEnergy.keySet(); - } - } \ No newline at end of file From 0bb09eeeebf190affede6dc7c851acc11b5c92fb Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 4 Aug 2026 18:34:27 +0200 Subject: [PATCH 153/477] bump version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 6a514b4d7b..b2fdaffd8b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,7 +14,7 @@ neoforge_version_range=[21.1.186,) # Mod Properties mod_id=spectrum -mod_version=1.12.0-1.21.1-neo +mod_version=1.12.1-1.21.1-neo maven_group=de.dafuqs archives_base_name=Spectrum From 1a0d2383a98b6ec494fde9e8527f2994fda4e952 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 4 Aug 2026 18:54:29 +0200 Subject: [PATCH 154/477] update cristalararium guidebook entry with the ink change --- src/main/resources/assets/spectrum/lang/en_us.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 6c750c053c..09c5cfb45b 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -2494,7 +2494,7 @@ "book.spectrum.guidebook.crystal_gardens.moss_balls.title": "Moss Balls", "book.spectrum.guidebook.crystal_gardens.page0.text": "Lakes of [Liquid Crystal](entry://general/liquid_crystal) and giant [crystalline structures](entry://dimension/hummingstone) define its appearance.", "book.spectrum.guidebook.crystal_gardens.page1.text": "The ground is covered with a small layer of soil. Not much, but more than enough to cover it with a thick carpet of moss.\\\n\\\nUnlike most other biomes, the many natural light sources in this one seem to allow for the growth of plants here, which I can also find on the surface.", - "book.spectrum.guidebook.crystallarieum.page0.text": "With budding blocks in mind, I designed an Ink-powered device that is able to grow chunks of raw ore into sparkling crystals.\\\n\\\nGrowing resources requires:\n- it being filled with the matching fluid\n- a starter bud thrown in\n- additives thrown in\n- a specific color of Ink, supplied via [Flask](entry://ink/ink_flask)", + "book.spectrum.guidebook.crystallarieum.page0.text": "With budding blocks in mind, I designed an Ink-powered device that is able to grow chunks of raw ore into sparkling crystals.\\\n\\\nGrowing resources requires:\n- it being filled with the matching fluid\n- a starter bud thrown in\n- additives thrown in\n- a specific color of [Ink](entry://pastel_network/ink_nodes)", "book.spectrum.guidebook.crystallarieum.page1.text": "Though my best efforts at growing [gems](entry://general/shards) failed, I quickly realised that it could grow all sorts of other resources.", "book.spectrum.guidebook.crystallarieum.page10.title": "Gold", "book.spectrum.guidebook.crystallarieum.page11.title": "Iron", From ab735d588203febcc99e7c4f2c2fa33ec84fb67b Mon Sep 17 00:00:00 2001 From: Eisus <2hh8899@naver.com> Date: Wed, 5 Aug 2026 05:14:30 +0900 Subject: [PATCH 155/477] Update ko_kr.json (apply changes from en_us.json) --- .../resources/assets/spectrum/lang/ko_kr.json | 95 ++++++++++++++----- 1 file changed, 72 insertions(+), 23 deletions(-) diff --git a/src/main/resources/assets/spectrum/lang/ko_kr.json b/src/main/resources/assets/spectrum/lang/ko_kr.json index 44ef1cb9a9..a724a5f0d3 100644 --- a/src/main/resources/assets/spectrum/lang/ko_kr.json +++ b/src/main/resources/assets/spectrum/lang/ko_kr.json @@ -270,7 +270,7 @@ "advancements.spectrum.equip_pigment_palette.description": "안료 팔레트를 장착하여 마법의 정수를 더 쉽게 보관하세요. 잉크를 채워 마법 도구를 작동시킬 수 있습니다", "advancements.spectrum.equip_pigment_palette.title": "예술가", "advancements.spectrum.fail_to_glitch_into_preservation_ruin.description": "당신이 초대받지 않았다는 사실을 깨달으세요", - "advancements.spectrum.fail_to_glitch_into_preservation_ruin.title": "던져", + "advancements.spectrum.fail_to_glitch_into_preservation_ruin.title": "야 나가", "advancements.spectrum.fail_to_take_item_out_of_pedestal.description": "붓으로 건드리거나 레드스톤 신호를 가해 조합을 시작하세요", "advancements.spectrum.fail_to_take_item_out_of_pedestal.title": "붓으로 건드리거나 레드스톤 신호를 가해 조합을 시작하세요", "advancements.spectrum.fill_bottomless_bundle.description": "바닥 없는 꾸러미를 꽉 채우세요", @@ -1112,7 +1112,7 @@ "block.spectrum.colorful_shooting_star": "다채로운 별똥별", "block.spectrum.compacting_chest": "압축 상자", "block.spectrum.compacting_chest.toggle_crafting_mode": "조합 모드 전환", - "block.spectrum.connection_node": "§7파스텔 네트워크 연결 노드", + "block.spectrum.connection_node": "§7파스텔 연결 노드", "block.spectrum.connection_node.tooltip": "네트워크의 범위를 확장합니다", "block.spectrum.copper_cluster": "구리 군집", "block.spectrum.courier_statue": "고대 석상", @@ -1268,7 +1268,7 @@ "block.spectrum.fusion_shrine": "융합의 성소", "block.spectrum.fusion_shrine_basalt": "융합의 성소", "block.spectrum.fusion_shrine_calcite": "융합의 성소", - "block.spectrum.gather_node": "§8파스텔 네트워크 수집 노드", + "block.spectrum.gather_node": "§8파스텔 아이템 수집 노드", "block.spectrum.gather_node.tooltip": "송신, 제공 및 저장 노드로부터 아이템을 수집합니다", "block.spectrum.gemstone_shooting_star": "보석 별똥별", "block.spectrum.ghast_head": "가스트 머리", @@ -1730,7 +1730,7 @@ "block.spectrum.prismarine_cluster": "프리즈머린 군집", "block.spectrum.pristine_shooting_star": "순수한 별똥별", "block.spectrum.projectile_idol.tooltip": "§7%s§7(을)를 발사합니다", - "block.spectrum.provider_node": "§d파스텔 네트워크 제공 노드", + "block.spectrum.provider_node": "§d파스텔 아이템 제공 노드", "block.spectrum.provider_node.tooltip": "수집 노드에 아이템을 공급합니다", "block.spectrum.pufferfish_head": "복어 머리", "block.spectrum.pufferfish_idol": "미묘한 우상", @@ -1845,7 +1845,7 @@ "block.spectrum.sawblade_grass": "톱날 풀", "block.spectrum.sawblade_holly_bush": "톱날 호랑가시나무 덤불", "block.spectrum.semi_permeable_glass": "반투과성 유리", - "block.spectrum.sender_node": "§e파스텔 네트워크 송신 노드", + "block.spectrum.sender_node": "§e파스텔 아이템 송신 노드", "block.spectrum.sender_node.tooltip": "수집 및 저장 노드로 아이템을 보냅니다", "block.spectrum.shale_clay": "셰일 점토", "block.spectrum.shale_clay_brick_slab": "셰일 점토 벽돌 반 블록", @@ -1960,7 +1960,7 @@ "block.spectrum.squid_idol": "서투른 우상", "block.spectrum.stardust_block": "별가루 블록", "block.spectrum.stone_shimmerstone_light": "돌 미광석 광원", - "block.spectrum.storage_node": "§b파스텔 네트워크 저장 노드", + "block.spectrum.storage_node": "§b파스텔 아이템 저장 노드", "block.spectrum.storage_node.tooltip": "송신 및 수집 노드를 위한 저장소 역할을 합니다", "block.spectrum.stratine_floatblock": "스트라틴 부유 블록", "block.spectrum.stratine_ore": "스트라틴 광석", @@ -2260,7 +2260,7 @@ "book.spectrum.guidebook.biomes.page0.text": "저 아래 깊은 곳의 구역이 얼마나 다채로울 수 있을지 여전히 상상조차 되지 않는다. 그러니까... 햇빛이 전혀 닿지 않는 곳에서 대체 무엇이 자랄 수 있다는 말인가? 햇빛과 물은 생명의 기본 조건이고, 적어도 햇빛만큼은...", "book.spectrum.guidebook.biomes.page1.text": "내 입으로 뱉은 그 말을 스스로 반박할 수 있다면 정말 기쁠 것이다.", "book.spectrum.guidebook.bismuth.cluster_crushing.text": "완전히 다 자란 군집을 분쇄하면 더 많은 조각을 얻을 수 있다.\\\n계산을 좀 해봤는데, 이 과정만으로도 충분히 자급자족이 가능해 보인다!", - "book.spectrum.guidebook.bismuth.crystal_crushing.text": "*뭐, 필요한 촉매와 잉크를 무시한다면 말이지만...*", + "book.spectrum.guidebook.bismuth.crystal_crushing.text": "*뭐, 필요한 첨가물과 잉크를 무시한다면 말이지만...*", "book.spectrum.guidebook.bismuth.name": "비스무트", "book.spectrum.guidebook.bismuth.page0.text": "무지개의 모든 색으로 반짝이는 금속이다.\\\n내가 수집한 작은 새싹들은 의미 있게 사용하기엔 너무 작다.\\\n\\\n싹 틔우는 블록 없이 이걸 어떻게 기를 수 있을까? 한 가지 눈치챈 점이 있다면, 이 봉오리들은 마치 신호기처럼 근처에 있는 금속 블록에 반응하는 것 같다는 것이다.", "book.spectrum.guidebook.bismuth.page1.text": "금속 블록 전체를 희생하는 대신, [결정생성기](entry://ink/crystallarieum)가 제어 가능한 기질을 제공하여 훨씬 더 효율적으로 영양분을 공급할 수 있게 해 준다.", @@ -2406,7 +2406,8 @@ "book.spectrum.guidebook.cheong.page1.text": "*마멀레이드도 아니고... 시럽도 아니고... 바로 청이다!*", "book.spectrum.guidebook.chrysocolla.page0.text": "가장 최근에 시도한 와인 발효 결과물은 *조금* 너무 강력했다.\\\n엄청나게 쓰고 약간의 산미가 느껴지는 맛이다.\\\n본래의 속성을 일부 유지하고 있긴 하지만, 내 생각에 이건 마시는 것보다는 약으로 쓰는 게 더 유용할 것 같다.", "book.spectrum.guidebook.cinderhearth.page0.text": "[#](e16201)주황색 잉크[#]()를 소모하여 광석 따위를 제련하는 내 예술 작품 같은 최첨단 용광로다.\\\n\\\n[강화기](entry://magical_blocks/upgrades)를 사용하여 그 능력을 한층 더 끌어올릴 수 있다.", - "book.spectrum.guidebook.cinderhearth.page1.text": "[지식의 보석](entry://enchanting/knowledge_gem)을 넣으면 제련을 통해 얻는 경험치가 보석 안으로 빨려 들어갈 것이다.", + "book.spectrum.guidebook.cinderhearth.knowledge_gem.title": "경험치 처리", + "book.spectrum.guidebook.cinderhearth.knowledge_gem.text": "[지식의 보석](entry://enchanting/knowledge_gem)을 넣으면 제련을 통해 얻는 모든 경험치가 보석 안으로 빨려 들어갈 것이다.", "book.spectrum.guidebook.cinderhearth.page2.text": "강화기는 두 개의 조각된 블록 위에 배치해야 한다.", "book.spectrum.guidebook.cinderhearth.page3.text": "- 1 잿불화로\n- 21 윤나는 블록\n- 6 문장 블록\n- 5 유리와 유사한 블록\n- 2 조각된 블록\n- 6 용암 양동이\n\n\\\n*어차피 [#](e16201)잉크[#]()가 있는데 굳이 밑에 [#](bb00bb)용암[#]()을 깔아야 했냐고*?\\\n아니, 사실 그럴 필요는 없었다. 하지만 이렇게 해놓는 게 보기에. 훨씬. 더. 좋잖아.", "book.spectrum.guidebook.cinderhearth.page4.text": "[#](bb00bb)조각된 블록[#]() 위에 배치된 [강화기](entry://magical_blocks/upgrades)는 그 종류에 따라 추가적인 [잉크](entry://ink/ink)를 요구한다. 강화기의 레벨이 높을수록 잉크 소모량도 증가한다.", @@ -2466,7 +2467,7 @@ "book.spectrum.guidebook.crafting_tablet.page0.text": "제작 석판은 그저 휴대용 [](item://minecraft:crafting_table)를 훌쩍 뛰어넘는 물건이다. 내가 입력한 레시피를 기억해 두었다가, 나중에 내가 원할 때마다 언제든 그 조합을 수행하게 해준다.", "book.spectrum.guidebook.crafting_tablet.page1.text": "살다 보면 특정 재료가 너무 자주 필요해서 아예 자동화해 버리고 싶어지는 때가 올 수도 있다. 아니면 어쩌면 내가 그저 할 수 있다는 이유만으로 모든 아이템을 자동화해 버리는 마조히스트가 될지도 모른다.\\\n\\\n[안료 받침대](entry://general/pedestal)에는 제작 석판을 위한 전용 슬롯이 마련되어 있다. 제작 석판을 끼워 넣고 호퍼를 통해 아이템을 공급해 주면, 저장된 레시피에 맞춰 척척 아이템들이 조합되어 나올 것이다.", "book.spectrum.guidebook.crafting_tablet.page1.title": "받침대 자동화", - "book.spectrum.guidebook.crawfish.page0.text": "지난번 낚시 여행에서 뭍으로 건져 올린 게 뭔지 봐라! 이건 물고기가 아니라 *갑각류*다.\\\n\\\n이 녀석들은 심지어 그 [기괴하기 짝이 없는 연못](entry://magical_blocks/sludge)에서도 아주 잘 번식하는 것 같다.", + "book.spectrum.guidebook.crawfish.page0.text": "지난번 낚시 여행에서 뭍으로 건져 올린 게 뭔지 봐라! 이건 물고기가 아니라 *갑각류*다.\\\n\\\n이 녀석들은 기괴하기 짝이 없는 연못에서도 아주 잘 번식하는 것 같다.", "book.spectrum.guidebook.creating_enchanted_books.name": "마법이 부여된 책 만들기", "book.spectrum.guidebook.creating_enchanted_books.page0.text": "[안료](entry://general/pigment), 엄선된 재료들, 약간의 경험치를 사용하면 [마법 부여기](entry://enchanting/enchanter)를 통해 [평범한 책](item://minecraft:book)에 마법 부여를 새겨 넣을 수 있다.\\\n\\\n이 과정은 일반적인 마법 부여대를 사용할 때보다 더 많은 경험치를 소모하지만, 내가 원하는 마법 부여를 아주 세밀하게 통제하고 창조해 낼 수 있다는 장점이 있다.", "book.spectrum.guidebook.creating_enchanted_books.page1.text": "나는 이 과정을 사용하여 나의 마법 도구들에 직접 마법을 부여할 수도 있다.", @@ -2493,7 +2494,7 @@ "book.spectrum.guidebook.crystal_gardens.moss_balls.title": "마리모", "book.spectrum.guidebook.crystal_gardens.page0.text": "[액체 수정](entry://general/liquid_crystal)으로 이루어진 호수와 거대한 [결정질 구조물들](entry://dimension/hummingstone)이 이 공간의 풍경을 정의한다.", "book.spectrum.guidebook.crystal_gardens.page1.text": "바닥은 얇은 흙으로 덮여 있다. 그리 두껍진 않지만, 그 위를 두터운 이끼 양탄자로 덮기에는 충분하고도 남는다.\\\n\\\n대부분의 다른 생물군계와는 달리, 이곳에는 수많은 천연 광원들이 존재하여 식물들이 자랄 수 있는 환경을 만들어 주는 것 같다. 지상에서 흔히 볼 수 있는 식물들마저 이곳에서 발견할 수 있을 정도니 말이다.", - "book.spectrum.guidebook.crystallarieum.page0.text": "싹 틔우는 블록의 원리를 염두에 두고, 나는 원석 덩어리를 잉크의 힘으로 배양하여 반짝이는 수정으로 길러낼 수 있는 장치를 고안해 냈다.\\\n\\\n자원을 성장시키기 위해서는 다음 조건들이 필요하다.\n- 알맞은 액체로 장치가 채워져 있을 것\n- 시작 역할을 할 씨앗을 던져 넣을 것\n- 촉매를 던져 넣을 것\n- [플라스크](entry://ink/ink_flask)를 통해 특정 색상의 잉크를 공급할 것", + "book.spectrum.guidebook.crystallarieum.page0.text": "싹 틔우는 블록의 원리를 염두에 두고, 나는 원석 덩어리를 잉크의 힘으로 배양하여 반짝이는 수정으로 길러낼 수 있는 장치를 고안해 냈다.\\\n\\\n자원을 성장시키기 위해서는 다음 조건들이 필요하다.\n- 알맞은 액체로 장치가 채워져 있을 것\n- 시작 역할을 할 씨앗을 던져 넣을 것\n- 첨가물을 던져 넣을 것\n- 특정 색상의 [잉크를 공급](entry://pastel_network/ink_nodes)할 것", "book.spectrum.guidebook.crystallarieum.page1.text": "[보석](entry://general/shards)을 직접 성장시키려던 내 최고의 노력들은 실패로 돌아갔지만, 나는 곧 이 장치가 온갖 다른 종류의 자원들을 길러낼 수 있다는 사실을 깨달았다.", "book.spectrum.guidebook.crystallarieum.page10.title": "금", "book.spectrum.guidebook.crystallarieum.page11.title": "철", @@ -2502,8 +2503,8 @@ "book.spectrum.guidebook.crystallarieum.page14.title": "프리즈머린", "book.spectrum.guidebook.crystallarieum.page15.title": "석영", "book.spectrum.guidebook.crystallarieum.page16.title": "레드스톤", - "book.spectrum.guidebook.crystallarieum.page2.text": "각 촉매는 봉오리의 성장에 저마다 다른 영향을 미친다.\\\n어떤 촉매는 요구되는 잉크의 양을 줄여주지만, 또 다른 촉매는 성장에 필요한 시간을 단축시켜 줄 수도 있다.", - "book.spectrum.guidebook.crystallarieum.page2.title": "촉매", + "book.spectrum.guidebook.crystallarieum.page2.text": "각 첨가물은 봉오리의 성장에 저마다 다른 영향을 미친다.\\\n어떤 첨가물은 요구되는 잉크의 양을 줄여주지만, 또 다른 첨가물은 성장에 필요한 시간을 단축시켜 줄 수도 있다.", + "book.spectrum.guidebook.crystallarieum.page2.title": "첨가물", "book.spectrum.guidebook.crystallarieum.page3.text": "[#](449900)금속 계열 자원[#]()은 [#](bb00bb)원석[#]() 같은 정제되지 않은 재료를 필요로 하며, 이를 통해 [#](bb00bb)작은 금속 봉오리[#]()가 생성된다. 이 봉오리는 안전하게 수확할 수 있을 때까지 꾸준히 자라난다.\\\n\\\n[#](449900)수정 계열 자원[#]()의 경우, 이미 존재하는 수정을 씨앗으로 삼아 자신과 완전히 똑같은 복제품을 길러낼 수 있다.", "book.spectrum.guidebook.crystallarieum.page3.title": "금속 vs 수정", "book.spectrum.guidebook.crystallarieum.page4.title": "석탄", @@ -2653,6 +2654,7 @@ "book.spectrum.guidebook.failing.name": "실험 #2: 결함", "book.spectrum.guidebook.failing.page0.text": "내 가슴속에 야망이 끓어오르지 않는다고 하면 거짓말일 것이다. 이것이 바로 세상을 바꿀 나의 위대한 첫걸음이란 것이 뼛속까지 느껴진다!\\\n강력한 [오닉스](entry://general/onyx_shards)[#]()와 [스트라틴](entry://general/stratine)의 힘을 불어넣어 탄생한 이 두 번째 유기체는, 지난번 피조물보다 확실히... 더 활동적이다.\\\n**그리고 확실히 더 굶주려 있다.\\\n압도적으로 말이다.**", "book.spectrum.guidebook.failing.page1.text": "아마도 내가 아는 가장 단단한 물질 중 하나라면 그 굶주림을 채워줄 수 있지 않을까?", + "book.spectrum.guidebook.failing.essence_recipe.text": "이건 자극적이다.", "book.spectrum.guidebook.fatal_slumber.page0.text": "[#](449900)이 효과가 끝까지 지속되도록 방치하면 대상은 즉사한다.[#]() 내가 죽음의 문턱을 헤맬 때, 무언가를 보았다. 바닥 없는 바다, 끝없는 꿈, 벨벳 사이로 희미한 빛의 파편들이 반짝거렸고, 거의 은빛 실에 가까운 무언가가 나를 더 깊은 곳으로 유혹하고 있었다.... 물론 나는 그것을 따라갈 만큼 멍청하지 않았다.", "book.spectrum.guidebook.fatal_slumber.page1.text": "이것은 근원적인 벨벳의 마법이 잠재된 밤의 연금술이 낳은 위대한 걸작이다. 따라서 대상의 정신력과 수면 저항력에 영향을 받는다.\\\n\\\n물론, 그 고요한 바다의 유혹을 견뎌낼 수 있는 건 오직 압도적인 힘을 지닌 존재들뿐이겠지만 말이다.", "book.spectrum.guidebook.first_strike.page0.text": "심사숙고하여 내지른 단 한 번의 일격이면 충분하다... 뭐 그런 옛말이 있지 않았던가.\\\n\\\n어쨌든.\\\n그와 관련하여, 나는 선제공격 마법을 발명해 냈다! 약한 적들이 떼거지로 몰려올 때 엄청난 도움이 될 거라 확신한다.", @@ -2680,8 +2682,7 @@ "book.spectrum.guidebook.fusion_shrine.page2.text": "크기: 9x9x5 블록.", "book.spectrum.guidebook.fusion_shrine.page3.text": "- 1 융합의 성소\n- 4 윤나는 보석 블록\n- 4 조각된 윤나는 블록\n- 8 윤나는 기둥\n- 12 윤나는 반 블록\n- 77 윤나는 블록\n\n\\\n언제나 그렇듯 [#](bb00bb)현무암[#]()을 [#](bb00bb)방해석[#]()으로 바꿀 수 있고, [보석 블록](entry://decoration/gemstone_deco) 역시 내 취향에 맞게 선택할 수 있다.", "book.spectrum.guidebook.gather_node.name": "수집 노드", - "book.spectrum.guidebook.gather_node.about.text": "수집 노드는 다른 노드들로부터 아이템을 능동적으로 요청하여 연결된 인벤토리에 집어넣는다.\\\n\\\n어떤 아이템을 수집할지는 [#](449900)필터[#]()를 통해 지정할 수 있다.", - "book.spectrum.guidebook.gather_node.page1.text": "수집 우선순위:\n1. [송신 노드](entry://pastel_network/sender_node)\n2. [제공 노드](entry://pastel_network/provider_node)\n3. [저장 노드](entry://pastel_network/storage_node)", + "book.spectrum.guidebook.gather_node.about.text": "수집 노드는 다른 노드들로부터 아이템을 능동적으로 요청하여 연결된 인벤토리에 집어넣는다.\\\n\\\n어떤 아이템을 수집할지는 [#](449900)필터[#]()를 통해 지정할 수 있다.\\\n\\\n수집 우선순위:\n1. [송신 노드](entry://pastel_network/sender_node)\n2. [제공 노드](entry://pastel_network/provider_node)\n3. [저장 노드](entry://pastel_network/storage_node)", "book.spectrum.guidebook.gemstone_armor.name": "보석 방어구", "book.spectrum.guidebook.gemstone_armor.page0.text": "나만의 독자적인 전투 스타일을 개발할 시간은 차고 넘쳤다.\\\n그 전투를 가장 잘 보조해 줄 일련의 장비들을 직접 설계했다.\\\n\\\n단점이 있다면, 제작에 쓰인 재료들이 무척이나 깨지기 쉽다는 점이다. 따라서 이 장비들의 내구도는 상대적으로 낮은 편이다.", "book.spectrum.guidebook.gemstone_armor.checklist.helmet": "투구: 공허와 지옥의 조우", @@ -2819,7 +2820,7 @@ "book.spectrum.guidebook.ideas.preservation_ruins.page0.text": "어떤 주민이 말하길, 오버월드의 상층 심층암 지대 근처에서 부서지지 않는 돌로 만들어진 각기 다른 세 종류의 은밀한 구조물들을 보았다고 한다. 심지어 모든 생물군계에 걸쳐서 존재한다고 한다.", "book.spectrum.guidebook.ideas.preservation_ruins.page1.text": "입구는 아주 강력한 역장에 의해 가로막혀 있는 것 같다. 하지만, 이 구조물을 지은 자는 다행히도 내게 몇 가지 단서를 남겨둘 만큼은 친절했다! 역장 양옆에 새겨진 하트 문양은 내게 [#](2c2e8e)담청 방벽[#]()을 활성화해야 함을 암시하고 있다.", "book.spectrum.guidebook.ideas.preservation_ruins.page1.title": "파란 하트", - "book.spectrum.guidebook.ideas.preservation_ruins.page2.text": "천장에 달린 채색된 포자 꽃들과 그 뒤 벽에 새겨진 조각들이 해답의 실마리다. 가루가 새겨진 문양은 내가 예전에 알아냈던, [보석 가루 혼합](entry://general/color_mixing_cmy)에 대한 힌트다.", + "book.spectrum.guidebook.ideas.preservation_ruins.page2.text": "천장에 달린 채색된 포자 꽃들과 그 뒤 벽에 새겨진 조각들이 해답의 실마리다. 가루가 새겨진 문양은 내가 예전에 알아냈던, [보석 가루를 혼합한 방식](entry://general/color_mixing_cmy)을 암시하고 있다.", "book.spectrum.guidebook.ideas.preservation_ruins.page2.title": "채색된 포자 꽃", "book.spectrum.guidebook.ideas.preservation_ruins.page3.text": "이 기반암을 깨트릴 방법이 있을까?\\\n일단 안으로 들어가기만 한다면, 그곳에서 발견한 블록들에 대해 알기 위해 내 일지에서 관련된 페이지들을 뒤져보는 편이 좋을 것이다.", "book.spectrum.guidebook.ideas.preservation_ruins.page3.title": "기반암 봉인", @@ -4003,6 +4004,18 @@ "book.spectrum.guidebook.pastel_network_coloring.page0.text": "내 위대한 파스텔 네트워크에 점차 익숙해질수록, 그 한계점도 명확하게 보이기 시작했다. 특히 좁은 방에 노드들을 잔뜩 쓰고 싶을 때 말이다.\\\n\\\n어떤 노드든 설치하기만 하면 사방팔방으로 닥치는 대로 연결돼버리는 건, 내가 설계한... 가장 흥미로운 결함 중 하나였다.", "book.spectrum.guidebook.pastel_network_coloring.page1.title": "그 해결책은?", "book.spectrum.guidebook.pastel_network_coloring.page1.text": "**색깔!**\\\n\\\n내가 같은 색의 안료로 물들인 노드들끼리만 연결되도록 만들었다.\\\n이제 비좁은 공간에도 작은 네트워크들을 잔뜩 박을 수 있게 되었다.", + "book.spectrum.guidebook.gather_node.recipe.text": "오닉스로 조합한다.", + "book.spectrum.guidebook.provider_node.recipe.text": "자수정으로 조합한다.", + "book.spectrum.guidebook.sender_node.recipe.text": "황수정으로 조합한다.", + "book.spectrum.guidebook.storage_node.recipe.text": "토파즈로 조합한다.", + "book.spectrum.guidebook.item_nodes.name": "아이템 전송", + "book.spectrum.guidebook.item_nodes.about.text": "내 구조물들은 이제 스스로 짤랑거리며 알아서 돌아간다.\\\n\\\n이것들에 필요한 재료들을 자동으로 제공해 줄 수 있다면 정말 편리할 것이다.", + "book.spectrum.guidebook.fluid_nodes.name": "액체 전송", + "book.spectrum.guidebook.fluid_nodes.about.text": "대량의 액체를 옮겨야 할 때마다 양동이를 잔뜩 들고 뛰어다니는 건 장기적으로 봤을 때 전혀 유쾌한 일이 아니다.\\\n이것들이라면 그 땀나는 중노동에서 깔끔하게 해방될 수 있을 것이다.", + "book.spectrum.guidebook.ink_nodes.name": "잉크 전송", + "book.spectrum.guidebook.ink_nodes.about.text": "잉크는 까다롭다!\\\n이 노드는 단순히 [잉크](entry://ink/ink)를 A에서 B로 보내는 것이 아니라, 터널을 뚫는 것에 더 가깝다. 네트워크의 모든 구조물들이 잉크를 서로 공유하게 된다.\\\n\\\n잉크는 넘치는 곳에서부터 매마른 곳으로 자연스럽게 흘러갈 것이다.", + "book.spectrum.guidebook.omni_nodes.name": "만물 노드", + "book.spectrum.guidebook.omni_nodes.about.text": "이 팔방미인 같은 노드는 [아이템 전송](entry://pastel_network/item_nodes), [액체 전송](entry://pastel_network/fluid_nodes), [잉크 전송](entry://pastel_network/ink_nodes)을 모두 수행한다!\\\n\\\n다른 종류의 노드들에서 이미 깨우친 지식들이 있었기에, 이 기능들을 하나로 합치는 건 그리 어려운 일이 아니었다. 어쨌든 근본적인 원리는 모두 똑같으니까.", "book.spectrum.guidebook.turn_back_to_polished": "화로에 구워내면 모든 블록을 다시 원래의 윤나는 상태로 되돌릴 수 있다.", "book.spectrum.guidebook.two_upgrade_slots": "2개의 강화 슬롯", @@ -4123,12 +4136,12 @@ "container.spectrum.rei.crafting_time_one_second": "%f초", "container.spectrum.rei.crafting_time_and_xp": "%f초 – %f XP", "container.spectrum.rei.crafting_time_one_second_and_xp": "%f초 – %f XP", - "container.spectrum.rei.crystallarieum.additive": "촉매:", + "container.spectrum.rei.crystallarieum.additive": "첨가물:", "container.spectrum.rei.crystallarieum.speed": "성장 속도:", "container.spectrum.rei.crystallarieum.ink_drain": "잉크 소모:", "container.spectrum.rei.crystallarieum.depletion": "고갈:", "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds": "단계당 %f초", - "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_additive_optional": "%f초 – 촉매 선택", + "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_additive_optional": "%f초 – 첨가물 선택", "container.spectrum.rei.dragonrot_converting.title": "용부액 담그기", "container.spectrum.rei.enchanter_recipe": "마법 부여기 레시피", "container.spectrum.rei.enchanting.title": "아이템 마법 부여", @@ -4379,7 +4392,7 @@ "item.spectrum.artisans_atlas.set_structure": "감지 대상 변경: ", "item.spectrum.artisans_atlas.unlocatable": "이 구조물의 기운은 뭔가 특별한 것 같습니다", "item.spectrum.artists_palette": "예술가의 팔레트", - "item.spectrum.artists_palette.tooltip": "§7원소 잉크를 총 %d§7까지 저장합니다", + "item.spectrum.artists_palette.tooltip": "§7원소 색 잉크를 총 %d§7까지 저장합니다", "item.spectrum.artists_palette.tooltip.mix_on_demand": "§7필요에 따라 다른 종류의 잉크를 혼합합니다", "item.spectrum.ash_flakes": "재 파편", "item.spectrum.ashen_circlet": "잿빛의 서클릿", @@ -4689,8 +4702,8 @@ "item.spectrum.infused_beverage.tooltip.variant.crown_jewel": "크라운 쥬얼", "item.spectrum.ink_assortment": "잉크 모음집", "item.spectrum.ink_flask": "잉크 플라스크", - "item.spectrum.ink_storage.stores_ink_per_type": "§7종류별로 잉크를 최대 %d§7까지 저장합니다", - "item.spectrum.ink_storage.stores_up_to_ink_per_type": "§7한 종류의 잉크를 최대 %d§7까지 저장합니다", + "item.spectrum.ink_storage.stores_ink_per_type": "§7색깔별로 잉크를 최대 %d§7까지 저장합니다", + "item.spectrum.ink_storage.stores_up_to_ink_per_type": "§7한 색상의 잉크를 최대 %d§7까지 저장합니다", "item.spectrum.jade_jelly": "비취 젤리", "item.spectrum.jade_jelly.tooltip": "맛있을 뿐만 아니라 영양가도 높습니다", "item.spectrum.jade_vine_petals": "비취 꽃잎", @@ -4866,7 +4879,7 @@ "item.spectrum.perturbed_eye.tooltip": "엔드 차원문 틀에 끼울 수 있습니다", "item.spectrum.phantom_frame": "팬텀 액자", "item.spectrum.pigment_palette": "안료 팔레트", - "item.spectrum.pigment_palette.tooltip.target": "도구와 장신구에 잉크를 공급합니다", + "item.spectrum.pigment_palette.tooltip.target": "장비에 잉크를 공급합니다", "item.spectrum.pink_pigment": "분홍색 안료", "item.spectrum.pipe_bomb": "파이프 폭탄", "item.spectrum.pipe_bomb.tooltip": "생명체에게 매우 치명적입니다 – 블록에는 피해를 주지 않습니다", @@ -4992,7 +5005,7 @@ "item.spectrum.topaz_glass_arrow.tooltip": "대상을 당신의 방향으로 끌어당깁니다", "item.spectrum.topaz_powder": "토파즈 가루", "item.spectrum.topaz_shard": "토파즈 조각", - "item.spectrum.total_capped_simple_pigment_energy_storage.tooltip": "§7잉크를 최대 %d§7까지 저장합니다", + "item.spectrum.total_capped_energy_storage.tooltip": "§7잉크를 최대 %d§7까지 저장합니다", "item.spectrum.totem_pendant": "불사의 펜던트", "item.spectrum.totem_pendant.tooltip": "§7일회성 죽음 방지 보호", "item.spectrum.triple_meat_pot_pie": "삼종 고기 팟 파이", @@ -5826,6 +5839,7 @@ "config.spectrum.pastel_network_particles": "파스텔 네트워크 전송 시 입자 생성", "config.spectrum.repair_anything_recipe_repair_percentage": "달빛에 취한 넥타르와 함께 조합할 때 아이템이 수리되는 비율", "config.spectrum.charged_creepers_drop_spectrum_mob_heads": "충전된 크리퍼가 생물을 처치할 때 스펙트럼 전용 몬스터 머리를 떨어뜨리는 여부", + "config.spectrum.dimension_portals": "차원문 생성", "config.spectrum.gemstone_durability": "보석 도구의 내구도", "config.spectrum.gemstone_mining_speed": "보석 도구의 채굴 속도", @@ -6028,5 +6042,40 @@ "book.spectrum.guidebook.mysterious_locket.page4.title": "로켓의 내용물", "book.spectrum.guidebook.mysterious_locket.page4.text": "안에는 작은 쪽지도 들어있었다... 도대체 누구의 것이었을까?", "book.spectrum.guidebook.mysterious_locket.page5.text": "이제 드레이톤의 언어를 이해하게 되었으니, 뒷면에 새겨진 문구를 해독하는 건 식은 죽 먹기다:\\\n\\\n*바보같이 굴지 마, 아스테라스. 달은 스스로 빛날 수 없어. 그저 태양빛을 반사할 뿐이지.*", - "book.spectrum.guidebook.mysterious_locket.page5.title": "신원 미상의 쪽지" + "book.spectrum.guidebook.mysterious_locket.page5.title": "신원 미상의 쪽지", + + "block.spectrum.tinting_station": "염색대", + "block.spectrum.tinting_station.tooltip": "잉크 장비를 충전하고 염색 가능한 아이템을 칠합니다", + "block.spectrum.twill": "직조기", + "block.spectrum.twill.tooltip": "허공에서 미세한 안료 파편들을 낚아채어 잉크를 만듭니다", + "block.spectrum.twill.tooltip2": "색깔 나무 근처에 배치해야 합니다", + "block.spectrum.vantaclast": "색채분해기", + "block.spectrum.vantaclast.tooltip": "색깔 블록을 소모하여 잉크를 만듭니다", + "block.spectrum.vantaclast.tooltip2": "색깔 나무 근처에 배치해야 합니다", + "block.spectrum.dawnbrush": "여명붓", + "block.spectrum.dawnbrush.tooltip": "날씨와 시간에 따라 잉크를 만듭니다", + + "block.spectrum.ink_node": "파스텔 잉크 노드", + "block.spectrum.ink_node.tooltip": "연결된 모든 블록들 간의 잉크를 균등하게 분배합니다", + "block.spectrum.ink_pastel_network_nodes.tooltip.placing": "마법 기계에 붙여서 배치해야 합니다", + + "block.spectrum.fluid_provider_node": "§d파스텔 액체 제공 노드", + "block.spectrum.fluid_provider_node.tooltip": "수집 노드에 액체를 공급합니다", + "block.spectrum.fluid_sender_node": "§e파스텔 액체 송신 노드", + "block.spectrum.fluid_sender_node.tooltip": "수집 및 저장 노드로 액체를 보냅니다", + "block.spectrum.fluid_storage_node": "§b파스텔 액체 저장 노드", + "block.spectrum.fluid_storage_node.tooltip": "송신 및 수집 노드를 위한 저장소 역할을 합니다", + "block.spectrum.fluid_gather_node": "§8파스텔 액체 수집 노드", + "block.spectrum.fluid_gather_node.tooltip": "송신, 제공 및 저장 노드로부터 액체를 수집합니다", + "block.spectrum.fluid_pastel_network_nodes.tooltip.placing": "액체 저장소 역할의 블록에 붙여서 배치해야 합니다", + + "block.spectrum.omni_provider_node": "§d파스텔 만물 제공 노드", + "block.spectrum.omni_provider_node.tooltip": "수집 노드에 아이템과 액체를 공급합니다", + "block.spectrum.omni_sender_node": "§e파스텔 만물 송신 노드", + "block.spectrum.omni_sender_node.tooltip": "수집 및 저장 노드로 아이템과 액체를 보냅니다", + "block.spectrum.omni_storage_node": "§b파스텔 만물 저장 노드", + "block.spectrum.omni_storage_node.tooltip": "송신 및 수집 노드를 위한 저장소 역할을 합니다", + "block.spectrum.omni_gather_node": "§8파스텔 만물 수집 노드", + "block.spectrum.omni_gather_node.tooltip": "송신, 제공 및 저장 노드로부터 아이템과 액체를 수집합니다", + "block.spectrum.omni_pastel_network_nodes.tooltip.placing": "무언가에 붙여서 배치해야 합니다. 아마도 작동할 겁니다." } From 659bfe3f549c33315790c8046b6a71673f35b1d1 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Wed, 5 Aug 2026 20:44:37 +0200 Subject: [PATCH 156/477] rebalance rgb resource values. Allow crystallarieum recipes without ink requirement --- .../ink/sink/CrystallarieumBlockEntity.java | 25 ++++++++++--------- .../CrystallarieumBlockEntityRenderer.java | 17 ++++--------- .../crystallarieum/CrystallarieumRecipe.java | 23 +++++++++-------- .../crystallarieum/spectrum/azurite.json | 18 ++++++------- .../crystallarieum/spectrum/bloodstone.json | 24 +++++++++--------- .../crystallarieum/spectrum/malachite.json | 4 +-- 6 files changed, 54 insertions(+), 57 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java index 9a048e6691..cef8604924 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java @@ -2,8 +2,6 @@ import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.fluid.*; -import de.dafuqs.spectrum.api.ink.*; -import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.components.*; @@ -55,7 +53,7 @@ public class CrystallarieumBlockEntity extends InWorldInteractionBlockEntity imp protected int currentGrowthStageTicks; protected boolean canWork = true; - float rotation = 0F; + protected float rotation = 0F; protected @Nullable FlowAnimator animator; protected FlowData _alpha = FlowData.NULL(), _speed = FlowData.NULL(), _bounce = FlowData.NULL(); @@ -75,8 +73,8 @@ public static void clientTick(Level world, BlockPos blockPos, BlockState blockSt if (crystallarieum.canWork && crystallarieum.currentRecipe != null) { ParticleOptions particleEffect = ColoredSparkleRisingParticleEffect.of(crystallarieum.currentRecipe.value().getInkColor().getColorInt()); - int amount = 1 + crystallarieum.currentRecipe.value().getInkPerSecond(); - if (Support.getIntFromDecimalWithChance(amount / 80.0, world.getRandom()) > 0) { + int amount = 1 + crystallarieum.currentRecipe.value().getInkCostTier(); + if (Support.getIntFromDecimalWithChance(amount / 20.0, world.getRandom()) > 0) { double randomX = world.getRandom().nextDouble() * 0.8; double randomZ = world.getRandom().nextDouble() * 0.8; world.addAlwaysVisibleParticle(particleEffect, blockPos.getX() + 0.1 + randomX, blockPos.getY() + 1, blockPos.getZ() + 0.1 + randomZ, 0.0D, 0.03D, 0.0D); @@ -129,13 +127,16 @@ private static void tickRecipe(Level world, BlockPos blockPos, CrystallarieumBlo } // advance growing - float consumedInkFloat = (recipe.value().getInkPerSecond() * crystallarieum.currentAdditive.growthAccelerationMod() * crystallarieum.currentAdditive.inkConsumptionMod()); - int consumedInt = Support.getIntFromDecimalWithChance(consumedInkFloat, world.getRandom()); - if (crystallarieum.inkStorage.drainEnergy(recipe.value().getInkColor(), consumedInt) < consumedInt) { - crystallarieum.canWork = false; - crystallarieum.setInkDirty(); - crystallarieum.updateInClientWorld(); - return; + int inkCostBase = recipe.value().getInkCost(); + if(inkCostBase > 0) { + float consumedInkFloat = inkCostBase * crystallarieum.currentAdditive.growthAccelerationMod() * crystallarieum.currentAdditive.inkConsumptionMod(); + int consumedInt = Support.getIntFromDecimalWithChance(consumedInkFloat, world.getRandom()); + if (crystallarieum.inkStorage.drainEnergy(recipe.value().getInkColor(), consumedInt) < consumedInt) { + crystallarieum.canWork = false; + crystallarieum.setInkDirty(); + crystallarieum.updateInClientWorld(); + return; + } } crystallarieum.setInkDirty(); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntityRenderer.java index e9d7614819..4d40b55360 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntityRenderer.java @@ -144,21 +144,14 @@ public int getViewDistance() { public static LayerDefinition getTexturedModelData() { MeshDefinition modelData = new MeshDefinition(); PartDefinition modelPartData = modelData.getRoot(); - PartDefinition active = modelPartData.addOrReplaceChild("active", CubeListBuilder.create().texOffs(40, 34).addBox(-5.0F, -3.0F, -5.0F, 10.0F, 4.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 22.0F, 0.0F)); - - PartDefinition inactive = modelPartData.addOrReplaceChild("inactive", CubeListBuilder.create().texOffs(80, 34).addBox(-5.0F, -3.0F, -5.0F, 10.0F, 4.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 22.0F, 0.0F)); - + modelPartData.addOrReplaceChild("active", CubeListBuilder.create().texOffs(40, 34).addBox(-5.0F, -3.0F, -5.0F, 10.0F, 4.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 22.0F, 0.0F)); + modelPartData.addOrReplaceChild("inactive", CubeListBuilder.create().texOffs(80, 34).addBox(-5.0F, -3.0F, -5.0F, 10.0F, 4.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 22.0F, 0.0F)); PartDefinition halo = modelPartData.addOrReplaceChild("halo", CubeListBuilder.create().texOffs(77, 48).addBox(-8.5F, 1.0F, -8.5F, 17.0F, 0.0F, 17.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, -9.0F, 0.0F)); - - PartDefinition diamond_r1 = halo.addOrReplaceChild("diamond_r1", CubeListBuilder.create().texOffs(80, 65).addBox(-7.5F, 0.0F, -7.5F, 15.0F, 0.0F, 15.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 1.0F, 0.0F, 0.0F, -0.7854F, 0.0F)); - + halo.addOrReplaceChild("diamond_r1", CubeListBuilder.create().texOffs(80, 65).addBox(-7.5F, 0.0F, -7.5F, 15.0F, 0.0F, 15.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 1.0F, 0.0F, 0.0F, -0.7854F, 0.0F)); PartDefinition echo = halo.addOrReplaceChild("echo", CubeListBuilder.create(), PartPose.offset(0.0F, 0.5F, 0.0F)); - - PartDefinition echoring_r1 = echo.addOrReplaceChild("echoring_r1", CubeListBuilder.create().texOffs(80, 80).addBox(-7.5F, 0.0F, -7.5F, 15.0F, 0.0F, 15.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.0F, -0.7854F, 0.0F)); - + echo.addOrReplaceChild("echoring_r1", CubeListBuilder.create().texOffs(80, 80).addBox(-7.5F, 0.0F, -7.5F, 15.0F, 0.0F, 15.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.0F, -0.7854F, 0.0F)); PartDefinition upperecho = echo.addOrReplaceChild("upperecho", CubeListBuilder.create(), PartPose.offset(0.0F, -0.5F, 0.0F)); - - PartDefinition echoring_r2 = upperecho.addOrReplaceChild("echoring_r2", CubeListBuilder.create().texOffs(80, 95).addBox(-7.5F, 0.0F, -7.5F, 15.0F, 0.0F, 15.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.0F, -0.7854F, 0.0F)); + upperecho.addOrReplaceChild("echoring_r2", CubeListBuilder.create().texOffs(80, 95).addBox(-7.5F, 0.0F, -7.5F, 15.0F, 0.0F, 15.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.0F, -0.7854F, 0.0F)); return LayerDefinition.create(modelData, 128, 128); } } diff --git a/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java index fcf57743bc..4c1d66dfd4 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java @@ -34,20 +34,22 @@ public class CrystallarieumRecipe extends GatedSpectrumRecipe protected final List growthStages; protected final int secondsPerGrowthStage; protected final InkColor inkColor; - protected final int inkPerSecond; + protected final int inkCostTier; + protected final int inkCost; protected final boolean growsWithoutAdditive; protected final List additives; protected final FluidIngredient medium; protected final List additionalResults; // these aren't actual results, but recipe managers will treat it as such, showing this recipe as a way to get them. Use for drops of the growth blocks, for example - public CrystallarieumRecipe(String group, boolean secret, Optional requiredAdvancementIdentifier, Ingredient ingredient, List growthStages, int secondsPerGrowthStage, InkColor inkColor, int inkPerSecond, boolean growsWithoutAdditive, List additives, FluidIngredient medium, List additionalResults) { + public CrystallarieumRecipe(String group, boolean secret, Optional requiredAdvancementIdentifier, Ingredient ingredient, List growthStages, int secondsPerGrowthStage, InkColor inkColor, int inkCostTier, boolean growsWithoutAdditive, List additives, FluidIngredient medium, List additionalResults) { super(group, secret, requiredAdvancementIdentifier); this.ingredient = ingredient; this.growthStages = growthStages; this.secondsPerGrowthStage = secondsPerGrowthStage; this.inkColor = inkColor; - this.inkPerSecond = inkPerSecond; + this.inkCostTier = inkCostTier; + this.inkCost = inkCostTier * inkCostTier; this.growsWithoutAdditive = growsWithoutAdditive; this.additives = additives; this.medium = medium; @@ -199,8 +201,12 @@ public InkColor getInkColor() { return inkColor; } - public int getInkPerSecond() { - return inkPerSecond; + public int getInkCost() { + return inkCost; + } + + public int getInkCostTier() { + return inkCostTier; } public boolean growsWithoutAdditive() { @@ -237,10 +243,7 @@ public static class Serializer implements RecipeSerializer BlockState.CODEC.listOf().fieldOf("growth_stage_states").forGetter(recipe -> recipe.growthStages), Codec.INT.fieldOf("seconds_per_growth_stage").forGetter(recipe -> recipe.secondsPerGrowthStage), InkColor.CODEC.fieldOf("ink_color").forGetter(recipe -> recipe.inkColor), - Codec.INT.xmap( - d -> d == 0 ? 0 : (1 << (d - 1)), - e -> e == 0 ? 0 : (31 - Integer.numberOfLeadingZeros(e)) + 1 - ).fieldOf("ink_cost_tier").forGetter(recipe -> recipe.inkPerSecond), + Codec.INT.fieldOf("ink_cost_tier").forGetter(recipe -> recipe.inkCostTier), Codec.BOOL.optionalFieldOf("grows_without_additive", false).forGetter(recipe -> recipe.growsWithoutAdditive), CrystallarieumAdditive.CODEC.listOf().fieldOf("additives").forGetter(recipe -> recipe.additives), FluidIngredient.CODEC.fieldOf("fluid").forGetter(recipe -> recipe.medium), @@ -255,7 +258,7 @@ public static class Serializer implements RecipeSerializer PacketCodecHelper.BLOCK_STATE.apply(ByteBufCodecs.list()), recipe -> recipe.growthStages, ByteBufCodecs.VAR_INT, recipe -> recipe.secondsPerGrowthStage, InkColor.PACKET_CODEC, recipe -> recipe.inkColor, - ByteBufCodecs.VAR_INT, recipe -> recipe.inkPerSecond, + ByteBufCodecs.VAR_INT, recipe -> recipe.inkCostTier, ByteBufCodecs.BOOL, recipe -> recipe.growsWithoutAdditive, CrystallarieumAdditive.PACKET_CODEC.apply(ByteBufCodecs.list()), recipe -> recipe.additives, FluidIngredient.STREAM_CODEC, recipe -> recipe.medium, diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/azurite.json b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/azurite.json index 90d5271548..efa7afca99 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/azurite.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/azurite.json @@ -11,28 +11,28 @@ ], "additives": [ { - "consume_chance_per_second": 0.05, - "growth_acceleration_mod": 7.5, "ingredient": { "item": "minecraft:raw_copper" }, - "ink_consumption_mod": 10.0 + "consume_chance_per_second": 0.1, + "growth_acceleration_mod": 1.0, + "ink_consumption_mod": 1.0 }, { - "consume_chance_per_second": 0.15, - "growth_acceleration_mod": 1.0, "ingredient": { "item": "minecraft:copper_ingot" }, - "ink_consumption_mod": 0.5 + "consume_chance_per_second": 0.05, + "growth_acceleration_mod": 0.75, + "ink_consumption_mod": 0.75 }, { - "consume_chance_per_second": 0.01, - "growth_acceleration_mod": 1.708, "ingredient": { "item": "spectrum:pure_copper" }, - "ink_consumption_mod": 0.707 + "consume_chance_per_second": 0.01, + "growth_acceleration_mod": 0.5, + "ink_consumption_mod": 0.5 } ], "growth_stage_states": [ diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bloodstone.json b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bloodstone.json index a02a4604e2..eea9026026 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bloodstone.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bloodstone.json @@ -11,28 +11,28 @@ ], "additives": [ { - "consume_chance_per_second": 0.05, - "growth_acceleration_mod": 7.5, "ingredient": { - "item": "minecraft:raw_copper" + "item": "minecraft:spider_eye" }, - "ink_consumption_mod": 10.0 + "consume_chance_per_second": 0.1, + "growth_acceleration_mod": 1.0, + "ink_consumption_mod": 1.0 }, { - "consume_chance_per_second": 0.15, - "growth_acceleration_mod": 1.0, "ingredient": { - "item": "minecraft:copper_ingot" + "item": "minecraft:fermented_spider_eye" }, - "ink_consumption_mod": 0.5 + "consume_chance_per_second": 0.05, + "growth_acceleration_mod": 0.75, + "ink_consumption_mod": 0.75 }, { - "consume_chance_per_second": 0.01, - "growth_acceleration_mod": 1.708, "ingredient": { - "item": "spectrum:pure_copper" + "item": "spectrum:armadillo_scute" }, - "ink_consumption_mod": 0.707 + "consume_chance_per_second": 0.01, + "growth_acceleration_mod": 0.5, + "ink_consumption_mod": 0.5 } ], "growth_stage_states": [ diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/malachite.json b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/malachite.json index 860806e66e..5ea9885883 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/malachite.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/malachite.json @@ -11,11 +11,11 @@ ], "additives": [ { - "consume_chance_per_second": 0.04, - "growth_acceleration_mod": 1.0, "ingredient": { "item": "spectrum:moonstone_powder" }, + "consume_chance_per_second": 0.04, + "growth_acceleration_mod": 1.0, "ink_consumption_mod": 1.0 } ], From 880846d6aa73215655650d73ed326b9b1e4a3342 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Wed, 5 Aug 2026 21:05:20 +0200 Subject: [PATCH 157/477] revamp crystallarieum code --- .../ink/sink/CrystallarieumBlockEntity.java | 40 ++++++++++--------- .../crystallarieum/spectrum/bloodstone.json | 2 +- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java index cef8604924..423f219428 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java @@ -98,17 +98,19 @@ public void updateAnimator() { @SuppressWarnings("unused") public static void serverTick(Level world, BlockPos blockPos, BlockState blockState, CrystallarieumBlockEntity crystallarieum) { - if (crystallarieum.canWork) { - crystallarieum.canWork = false; - - var recipe = crystallarieum.currentRecipe; - if (recipe != null) { - crystallarieum.tickLooper.tick(); - if (crystallarieum.tickLooper.reachedCap()) { - tickRecipe(world, blockPos, crystallarieum, recipe); - crystallarieum.tickLooper.reset(); - } - } + if (!crystallarieum.canWork) { + return; + } + + RecipeHolder recipe = crystallarieum.currentRecipe; + if (recipe == null) { + return; + } + + crystallarieum.tickLooper.tick(); + if (crystallarieum.tickLooper.reachedCap()) { + tickRecipe(world, blockPos, crystallarieum, recipe); + crystallarieum.tickLooper.reset(); } } @@ -116,7 +118,7 @@ public static void serverTick(Level world, BlockPos blockPos, BlockState blockSt * Progress the recipe * gets called 1/second */ - private static void tickRecipe(Level world, BlockPos blockPos, CrystallarieumBlockEntity crystallarieum, RecipeHolder recipe) { + private static void tickRecipe(Level level, BlockPos pos, CrystallarieumBlockEntity crystallarieum, RecipeHolder recipe) { if (crystallarieum.currentAdditive == CrystallarieumAdditive.EMPTY && !recipe.value().growsWithoutAdditive()) { return; } @@ -130,7 +132,7 @@ private static void tickRecipe(Level world, BlockPos blockPos, CrystallarieumBlo int inkCostBase = recipe.value().getInkCost(); if(inkCostBase > 0) { float consumedInkFloat = inkCostBase * crystallarieum.currentAdditive.growthAccelerationMod() * crystallarieum.currentAdditive.inkConsumptionMod(); - int consumedInt = Support.getIntFromDecimalWithChance(consumedInkFloat, world.getRandom()); + int consumedInt = Support.getIntFromDecimalWithChance(consumedInkFloat, level.getRandom()); if (crystallarieum.inkStorage.drainEnergy(recipe.value().getInkColor(), consumedInt) < consumedInt) { crystallarieum.canWork = false; crystallarieum.setInkDirty(); @@ -143,7 +145,7 @@ private static void tickRecipe(Level world, BlockPos blockPos, CrystallarieumBlo crystallarieum.currentGrowthStageTicks += (int) (SECOND * crystallarieum.currentAdditive.growthAccelerationMod()); // check if a catalyst should get used up - if (world.getRandom().nextFloat() < crystallarieum.currentAdditive.consumeChancePerSecond()) { + if (level.getRandom().nextFloat() < crystallarieum.currentAdditive.consumeChancePerSecond()) { ItemStack catalystStack = crystallarieum.getItem(ADDITIVE_SLOT_ID); catalystStack.shrink(1); crystallarieum.updateInClientWorld(); @@ -157,14 +159,14 @@ private static void tickRecipe(Level world, BlockPos blockPos, CrystallarieumBlo // advanced enough? grow! if (crystallarieum.currentGrowthStageTicks >= recipe.value().getSecondsPerGrowthStage() * SECOND) { - BlockPos topPos = blockPos.above(); - BlockState topState = world.getBlockState(topPos); + BlockPos topPos = pos.above(); + BlockState topState = level.getBlockState(topPos); Optional nextState = recipe.value().getNextState(recipe, topState); if (nextState.isPresent()) { - world.setBlockAndUpdate(topPos, nextState.get()); - ServerPlayer owner = (ServerPlayer) crystallarieum.getOwnerIfOnline(world); + level.setBlockAndUpdate(topPos, nextState.get()); + ServerPlayer owner = (ServerPlayer) crystallarieum.getOwnerIfOnline(level); if (owner != null) { - SpectrumAdvancementCriteria.CRYSTALLARIEUM_GROWING.trigger(owner, (ServerLevel) world, topPos, crystallarieum.getItem(ADDITIVE_SLOT_ID)); + SpectrumAdvancementCriteria.CRYSTALLARIEUM_GROWING.trigger(owner, (ServerLevel) level, topPos, crystallarieum.getItem(ADDITIVE_SLOT_ID)); } } else { crystallarieum.canWork = false; diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bloodstone.json b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bloodstone.json index eea9026026..73c688b191 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bloodstone.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bloodstone.json @@ -28,7 +28,7 @@ }, { "ingredient": { - "item": "spectrum:armadillo_scute" + "item": "minecraft:armadillo_scute" }, "consume_chance_per_second": 0.01, "growth_acceleration_mod": 0.5, From 14a36853692a448e6f8328a6ca115ec17bf47947 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Wed, 5 Aug 2026 21:56:22 +0200 Subject: [PATCH 158/477] - added status effect tag to always be eternal. - fixed nectardew burgeon tooltip not listing eternal slumber as infinite - removed a mixin --- .../spectrum/helpers/TooltipHelper.java | 21 +++++++------ .../mixin/StatusEffectInstanceMixin.java | 15 ++++++++++ .../spectrum/mixin/StatusEffectUtilMixin.java | 30 ------------------- .../registries/SpectrumMobEffectTags.java | 1 + .../client/SpectrumClientEventListeners.java | 2 +- .../resources/assets/spectrum/lang/en_us.json | 2 -- .../resources/assets/spectrum/lang/ko_kr.json | 2 -- .../resources/assets/spectrum/lang/ru_ru.json | 2 -- .../resources/assets/spectrum/lang/zh_cn.json | 2 -- .../tags/mob_effect/always_infinite.json | 5 ++++ src/main/resources/spectrum.mixins.json | 1 - 11 files changed, 34 insertions(+), 49 deletions(-) delete mode 100644 src/main/java/de/dafuqs/spectrum/mixin/StatusEffectUtilMixin.java create mode 100644 src/main/resources/data/spectrum/tags/mob_effect/always_infinite.json diff --git a/src/main/java/de/dafuqs/spectrum/helpers/TooltipHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/TooltipHelper.java index 20d04cb404..062d4074d8 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/TooltipHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/TooltipHelper.java @@ -3,9 +3,12 @@ import com.google.common.collect.*; import com.mojang.datafixers.util.*; import net.minecraft.*; +import net.minecraft.client.*; +import net.minecraft.core.*; import net.minecraft.core.component.*; import net.minecraft.network.chat.*; import net.minecraft.util.*; +import net.minecraft.world.effect.*; import net.minecraft.world.entity.ai.attributes.*; import net.minecraft.world.food.*; import net.minecraft.world.inventory.tooltip.*; @@ -16,25 +19,25 @@ public class TooltipHelper { - public static void addFoodComponentEffectTooltip(ItemStack stack, List> tooltip, float updateTickRate) { + public static void addFoodComponentEffectTooltip(Minecraft minecraft, ItemStack stack, List> tooltip, float updateTickRate) { FoodProperties foodComponent = stack.get(DataComponents.FOOD); if (foodComponent != null) { - buildEffectTooltipWithChance(tooltip, foodComponent.effects(), stack.getUseAnimation() == UseAnim.DRINK ? Component.translatable("spectrum.food.whenDrunk") : Component.translatable("spectrum.food.whenEaten"), updateTickRate); + buildEffectTooltipWithChance(minecraft, tooltip, foodComponent.effects(), stack.getUseAnimation() == UseAnim.DRINK ? Component.translatable("spectrum.food.whenDrunk") : Component.translatable("spectrum.food.whenEaten"), updateTickRate); } } - public static void buildEffectTooltipWithChance(List> tooltip, List entries, MutableComponent attributeModifierText, float updateTickRate) { + public static void buildEffectTooltipWithChance(Minecraft minecraft, List> tooltip, List entries, MutableComponent attributeModifierText, float updateTickRate) { if (entries.isEmpty()) { return; } List> modifiersList = Lists.newArrayList(); - for (var entry : entries) { - var statusEffectInstance = entry.effect(); - var chance = entry.probability(); + for (FoodProperties.PossibleEffect entry : entries) { + MobEffectInstance statusEffectInstance = entry.effect(); + float chance = entry.probability(); + MutableComponent translatableText = Component.translatable(statusEffectInstance.getDescriptionId()); + Holder statusEffect = statusEffectInstance.getEffect(); - var translatableText = Component.translatable(statusEffectInstance.getDescriptionId()); - var statusEffect = statusEffectInstance.getEffect(); statusEffect.value().createModifiers(statusEffectInstance.getAmplifier(), (attribute, modifier) -> modifiersList.add(new Pair<>(attribute.value(), modifier))); @@ -42,7 +45,7 @@ public static void buildEffectTooltipWithChance(List 20) { - translatableText = Component.translatable("potion.withDuration", translatableText, StringUtil.formatTickDuration(statusEffectInstance.getDuration(), updateTickRate)); + translatableText = Component.translatable("potion.withDuration", translatableText, MobEffectUtil.formatDuration(entry.effect(), 1.0F, minecraft.level.tickRateManager().tickrate())); } if (chance < 1.0F) { translatableText = Component.translatable("spectrum.food.withChance", translatableText, Math.round(chance * 100)); diff --git a/src/main/java/de/dafuqs/spectrum/mixin/StatusEffectInstanceMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/StatusEffectInstanceMixin.java index ce6d7d32a3..1ad0f93144 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/StatusEffectInstanceMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/StatusEffectInstanceMixin.java @@ -1,8 +1,12 @@ package de.dafuqs.spectrum.mixin; import de.dafuqs.spectrum.injectors.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.core.*; import net.minecraft.world.effect.*; import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; @Mixin(MobEffectInstance.class) public abstract class StatusEffectInstanceMixin implements StatusEffectInstanceInjector { @@ -12,6 +16,10 @@ public abstract class StatusEffectInstanceMixin implements StatusEffectInstanceI @Shadow private int amplifier; + @Shadow + @Final + private Holder effect; + @Override public void spectrum$setDuration(int newDuration) { this.duration = newDuration; @@ -22,4 +30,11 @@ public abstract class StatusEffectInstanceMixin implements StatusEffectInstanceI this.amplifier = newAmplifier; } + @Inject(at = @At("HEAD"), method = "isInfiniteDuration", cancellable = true) + public void isInfiniteDuration(CallbackInfoReturnable cir) { + if(this.effect.is(SpectrumMobEffectTags.ALWAYS_INFINITE)) { + cir.setReturnValue(true); + } + } + } diff --git a/src/main/java/de/dafuqs/spectrum/mixin/StatusEffectUtilMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/StatusEffectUtilMixin.java deleted file mode 100644 index 72e283da72..0000000000 --- a/src/main/java/de/dafuqs/spectrum/mixin/StatusEffectUtilMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package de.dafuqs.spectrum.mixin; - -import com.llamalad7.mixinextras.injector.wrapoperation.*; -import com.llamalad7.mixinextras.sugar.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.network.chat.*; -import net.minecraft.util.*; -import net.minecraft.world.effect.*; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.*; - -@Mixin(MobEffectUtil.class) -public class StatusEffectUtilMixin { - - @WrapOperation(method = "formatDuration", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/chat/Component;literal(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;")) - private static MutableComponent spectrum$modifyDurationText(String string, Operation original, @Local int i, @Local(argsOnly = true) MobEffectInstance effect, @Local(argsOnly = true, ordinal = 0) float multiplier, @Local(argsOnly = true, ordinal = 1) float tickRate) { - if (effect.getEffect().is(SpectrumMobEffects.ETERNAL_SLUMBER)) { - return Component.translatable("effect.spectrum.eternal_slumber.duration", StringUtil.formatTickDuration(i, tickRate)); - } - return original.call(string); - } - - @WrapOperation(method = "formatDuration", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/chat/Component;translatable(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;")) - private static MutableComponent spectrum$modifyDurationTextInfinite(String string, Operation original, @Local(argsOnly = true) MobEffectInstance effect) { - if (effect.getEffect().is(SpectrumMobEffects.ETERNAL_SLUMBER)) { - return Component.translatable("effect.spectrum.eternal_slumber.duration_inf"); - } - return original.call(string); - } -} diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumMobEffectTags.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumMobEffectTags.java index bab153251f..cff7d38f47 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumMobEffectTags.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumMobEffectTags.java @@ -15,6 +15,7 @@ public class SpectrumMobEffectTags { public static TagKey SOPORIFIC = of("soporific"); public static TagKey NIGHT_ALCHEMY = of("night_alchemy"); public static TagKey STACKING = of("stacking"); + public static TagKey ALWAYS_INFINITE = of("always_infinite"); private static TagKey of(String id) { return TagKey.create(Registries.MOB_EFFECT, SpectrumCommon.locate(id)); diff --git a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java index 4999237f10..68256c26cb 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java @@ -155,7 +155,7 @@ private static void onDrawTooltips(RenderTooltipEvent.GatherComponents event) { if (stack.has(DataComponents.FOOD)) { if (BuiltInRegistries.ITEM.getKey(stack.getItem()).getNamespace().equals(SpectrumCommon.MOD_ID)) { - TooltipHelper.addFoodComponentEffectTooltip(stack, event.getTooltipElements(), Item.TooltipContext.EMPTY.tickRate()); + TooltipHelper.addFoodComponentEffectTooltip(Minecraft.getInstance(), stack, event.getTooltipElements(), Item.TooltipContext.EMPTY.tickRate()); } } if (stack.is(SpectrumItemTags.COMING_SOON_TOOLTIP)) { diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 09c5cfb45b..3e3dd8518c 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -4245,8 +4245,6 @@ "effect.spectrum.effect_prolonging.desc": "Increases the duration of other status effects applied to you.", "effect.spectrum.eternal_slumber": "Eternal Slumber", "effect.spectrum.eternal_slumber.desc": "Locks the target into a deep, dreamless sleep, from which few can escape.", - "effect.spectrum.eternal_slumber.duration": "everlasting | %1$s", - "effect.spectrum.eternal_slumber.duration_inf": "everlasting", "effect.spectrum.fatal_slumber": "Fatal Slumber", "effect.spectrum.fatal_slumber.desc": "Induces instant death upon timing out.", "effect.spectrum.frenzy": "Frenzy", diff --git a/src/main/resources/assets/spectrum/lang/ko_kr.json b/src/main/resources/assets/spectrum/lang/ko_kr.json index 44ef1cb9a9..830d9ac1c8 100644 --- a/src/main/resources/assets/spectrum/lang/ko_kr.json +++ b/src/main/resources/assets/spectrum/lang/ko_kr.json @@ -4232,8 +4232,6 @@ "effect.spectrum.effect_prolonging.desc": "자신에게 부여된 다른 상태 효과들의 지속 시간을 증가시킵니다.", "effect.spectrum.eternal_slumber": "영면", "effect.spectrum.eternal_slumber.desc": "대상을 꿈조차 꾸지 않는 깊은 잠에 빠뜨립니다. 그 누구도 쉽게 벗어날 수 없습니다.", - "effect.spectrum.eternal_slumber.duration": "영원함 | %1$s", - "effect.spectrum.eternal_slumber.duration_inf": "영원함", "effect.spectrum.fatal_slumber": "치명적 수면", "effect.spectrum.fatal_slumber.desc": "지속 시간이 끝나면 즉사합니다.", "effect.spectrum.frenzy": "광란", diff --git a/src/main/resources/assets/spectrum/lang/ru_ru.json b/src/main/resources/assets/spectrum/lang/ru_ru.json index 1815adaf56..f9b657289c 100644 --- a/src/main/resources/assets/spectrum/lang/ru_ru.json +++ b/src/main/resources/assets/spectrum/lang/ru_ru.json @@ -4231,8 +4231,6 @@ "effect.spectrum.effect_prolonging.desc": "Увеличивает длительность других эффектов.", "effect.spectrum.eternal_slumber": "Вечная дремота", "effect.spectrum.eternal_slumber.desc": "Закрывает цель в глубоком, бессонном сне, из которого только некоторые смогут сбежать.", - "effect.spectrum.eternal_slumber.duration": "Вечный | %1$s", - "effect.spectrum.eternal_slumber.duration_inf": "Вечный", "effect.spectrum.fatal_slumber": "Фатальная дремота", "effect.spectrum.fatal_slumber.desc": "Вызывает мгновенную смерть по истечению времени.", "effect.spectrum.frenzy": "Неистовство", diff --git a/src/main/resources/assets/spectrum/lang/zh_cn.json b/src/main/resources/assets/spectrum/lang/zh_cn.json index 6a99327a4a..23c9340afd 100644 --- a/src/main/resources/assets/spectrum/lang/zh_cn.json +++ b/src/main/resources/assets/spectrum/lang/zh_cn.json @@ -2583,8 +2583,6 @@ "effect.spectrum.calming.desc": "减少敌人的生成率和攻击性。", "effect.spectrum.eternal_slumber": "长梦无醒", "effect.spectrum.eternal_slumber.desc": "将目标禁锢于无梦的深度睡眠中,极少有人能挣脱。", - "effect.spectrum.eternal_slumber.duration": "永恒 | %1$s", - "effect.spectrum.eternal_slumber.duration_inf": "永恒", "effect.spectrum.fatal_slumber": "绝命长眠", "effect.spectrum.fatal_slumber.desc": "在时间结束时瞬间暴毙身亡。", "effect.spectrum.somnolence": "嗜睡", diff --git a/src/main/resources/data/spectrum/tags/mob_effect/always_infinite.json b/src/main/resources/data/spectrum/tags/mob_effect/always_infinite.json new file mode 100644 index 0000000000..a2de1421f0 --- /dev/null +++ b/src/main/resources/data/spectrum/tags/mob_effect/always_infinite.json @@ -0,0 +1,5 @@ +{ + "values": [ + "spectrum:eternal_slumber" + ] +} \ No newline at end of file diff --git a/src/main/resources/spectrum.mixins.json b/src/main/resources/spectrum.mixins.json index 9c8168681f..1bf49f58ff 100644 --- a/src/main/resources/spectrum.mixins.json +++ b/src/main/resources/spectrum.mixins.json @@ -62,7 +62,6 @@ "ShearsDispenserBehaviorMixin", "SpawnDensityCapperMixin", "StatusEffectInstanceMixin", - "StatusEffectUtilMixin", "TemptGoalMixin", "TridentEntityMixin", "WitherEntityMixin", From 05b7567e3af437b67f6fb6d450265e26bfad5c3d Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Wed, 5 Aug 2026 22:01:16 +0200 Subject: [PATCH 159/477] fixed one of the leaves of the omni node not having a back texture --- .../assets/spectrum/models/technical/pastel_omni_base.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/spectrum/models/technical/pastel_omni_base.json b/src/main/resources/assets/spectrum/models/technical/pastel_omni_base.json index 78dce8f3d2..ce499723f8 100644 --- a/src/main/resources/assets/spectrum/models/technical/pastel_omni_base.json +++ b/src/main/resources/assets/spectrum/models/technical/pastel_omni_base.json @@ -23,7 +23,7 @@ "rotation": {"angle": -22.5, "axis": "x", "origin": [-0.5, 2, 1]}, "faces": { "up": {"uv": [5, 6, 0, 0], "texture": "#particle"}, - "down": {"uv": [10, 0, 5, 6], "texture": "#missing"} + "down": {"uv": [10, 0, 5, 6], "texture": "#particle"} } }, { From 3efc201e820502220636113d78d58d1d374be008 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Wed, 5 Aug 2026 22:49:08 +0200 Subject: [PATCH 160/477] improve recipe component copying --- .../spectrum/recipe/GatedSpectrumRecipe.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/recipe/GatedSpectrumRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/GatedSpectrumRecipe.java index fe41f2ef80..457f18beb9 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/GatedSpectrumRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/GatedSpectrumRecipe.java @@ -1,7 +1,10 @@ package de.dafuqs.spectrum.recipe; import de.dafuqs.spectrum.api.recipe.*; +import de.dafuqs.spectrum.helpers.*; +import it.unimi.dsi.fastutil.objects.*; import net.minecraft.core.*; +import net.minecraft.core.component.*; import net.minecraft.resources.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; @@ -59,12 +62,18 @@ protected static ItemStack getDefaultStackWithCount(Item item, int count) { } protected static ItemStack copyComponents(ItemStack recipeOutput, ItemStack stackToCopyComponentsFrom) { - var originalEnchantments = recipeOutput.getEnchantments(); - recipeOutput = stackToCopyComponentsFrom.transmuteCopy(recipeOutput.getItem(), recipeOutput.getCount()); - for (Holder enchantment : originalEnchantments.keySet()) { - recipeOutput.enchant(enchantment, originalEnchantments.getLevel(enchantment)); + ItemEnchantments recipeOutputEnchantments = recipeOutput.getTagEnchantments(); + ItemEnchantments stackToCopyComponentsFromEnchantments = stackToCopyComponentsFrom.getTagEnchantments(); + + ItemStack newOutput = stackToCopyComponentsFrom.transmuteCopy(recipeOutput.getItem(), recipeOutput.getCount()); + if(!recipeOutputEnchantments.isEmpty()) { + EnchantmentHelper.setEnchantments(newOutput, recipeOutputEnchantments); } - return recipeOutput; + for (Object2IntMap.Entry> entry : stackToCopyComponentsFromEnchantments.entrySet()) { + SpectrumEnchantmentHelper.addOrUpgradeEnchantment(newOutput, entry.getKey(), entry.getIntValue(), false, false); + } + + return newOutput; } } From 1a02705a60c09660405b3fde9de1997f20d07e14 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Wed, 5 Aug 2026 23:09:49 +0200 Subject: [PATCH 161/477] tiny buff to modular explosions --- .../de/dafuqs/spectrum/blocks/boom/ExplosionWithStack.java | 6 +++--- src/main/resources/assets/spectrum/lang/en_us.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/boom/ExplosionWithStack.java b/src/main/java/de/dafuqs/spectrum/blocks/boom/ExplosionWithStack.java index 8c2b919fbd..47887122d0 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/boom/ExplosionWithStack.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/boom/ExplosionWithStack.java @@ -24,7 +24,7 @@ public class ExplosionWithStack extends Explosion { - public static final int BASE_EXPLOSION_LEVEL = 3; + public static final int BASE_EXPLOSION_LEVEL = 4; private final ItemStack stack; @@ -89,8 +89,8 @@ public static void explode(ServerLevel level, @Nullable Entity source, ItemStack boolean damagesEntities = SpectrumEnchantmentHelper.hasEnchantment(enchantmentLookup, EnchantmentTags.DAMAGE_EXCLUSIVE, stack); boolean causesFire = enchantments.getLevel(enchantmentLookup.getOrThrow(Enchantments.FLAME)) > 0; - @Nullable DamageSource damageSource = Explosion.getDefaultDamageSource(level, source); - @Nullable ExplosionDamageCalculator damageCalculator = new EnhancedExplosionDamageCalculator(level, damageSource, stack, powerLevel > 0, damagesEntities, Optional.empty(), Optional.empty(), preserveBlockAtExplosionCenter ? Optional.of(BlockPos.containing(pos)) : Optional.empty()); + DamageSource damageSource = Explosion.getDefaultDamageSource(level, source); + ExplosionDamageCalculator damageCalculator = new EnhancedExplosionDamageCalculator(level, damageSource, stack, powerLevel > 0, damagesEntities, Optional.empty(), Optional.empty(), preserveBlockAtExplosionCenter ? Optional.of(BlockPos.containing(pos)) : Optional.empty()); int explosionRadius = BASE_EXPLOSION_LEVEL + powerLevel; diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 3e3dd8518c..b472c7ef28 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -3425,7 +3425,7 @@ "book.spectrum.guidebook.arcane_charges.enchanting.title": "Enchanting", "book.spectrum.guidebook.arcane_charges.enchanting.text": "Running them through an [](item://minecraft:enchanting_table) improves them immensely.\\\n\\\nAnd boy, these little beauties don’t judge. They soak up whatever magic I cram into them and then express it in the most dramatic way possible. Honestly, I respect that level of commitment.", "book.spectrum.guidebook.arcane_charges.parametric_mining_device.text": "Can be thrown, as well as placed on walls and detonated.\\\n\\\nHarmless to living beings by default.", - "book.spectrum.guidebook.arcane_charges.threat_conflux.text": "Primes a few seconds after being placed and detonates when a creature touches it from thereon after. Can only be disarmed by using a [](item://spectrum:midnight_chip).\\\n\\\nVery much not harmless to living beings by default.", + "book.spectrum.guidebook.arcane_charges.threat_conflux.text": "Primes a few seconds after being placed and detonates when a creature touches it from thereon after. Can only be disarmed by using a [](item://spectrum:midnight_chip).\\\nVery much not harmless to living beings by default.", "book.spectrum.guidebook.arcane_charges.enchanting2.text": "I found that most enchantments work exactly as expected:\n- **Fortune** multiplies drops\n- **Sharpness** and its relatives increase the damage to creatures\n- **Looting** affects, well, *loot*\n- ...", "book.spectrum.guidebook.arcane_charges.enchanting3.text": "There are a few more interesting ones, though:\n- **Power** makes the explosive break blocks. The level increases the explosion radius.\n- **Sharpness (or any other damaging enchantment)** makes the explosion deal damage to creatures (including me).\n- **Flame** will spawn fire\n- **Unbreaking** grants a chance to preserve the explosive", "book.spectrum.guidebook.molten_rod.page0.text": "Orange, representing warmth, can be used to do the most interesting things.\\\n\\\nUnlike a normal [](item://minecraft:fishing_rod), this one is a lot more sturdy and can fish where a normal rod fails.", From 56ae294dce1874a0f2ac1625cbd494aaa4f1aea8 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 7 Aug 2026 14:40:16 +0200 Subject: [PATCH 162/477] do not copy azure dike data when dying --- .../spectrum/attachment_types/AzureDikeAttachmentType.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/attachment_types/AzureDikeAttachmentType.java b/src/main/java/de/dafuqs/spectrum/attachment_types/AzureDikeAttachmentType.java index 8515ed4e9f..dd731f614b 100644 --- a/src/main/java/de/dafuqs/spectrum/attachment_types/AzureDikeAttachmentType.java +++ b/src/main/java/de/dafuqs/spectrum/attachment_types/AzureDikeAttachmentType.java @@ -53,8 +53,6 @@ public class AzureDikeAttachmentType { public static final AttachmentType ATTACHMENT_TYPE = AttachmentType.builder(AzureDikeAttachmentType::new) .serialize(CODEC) - .copyOnDeath() - .copyHandler(COPY_HANDLER) .sync(STREAM_CODEC) .build(); From 9fa8e134d8188c249db8baf6322869ea69c297df Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 7 Aug 2026 14:40:41 +0200 Subject: [PATCH 163/477] amaranth fires neoforge crop growth events --- .../de/dafuqs/spectrum/blocks/TallCropBlock.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/TallCropBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/TallCropBlock.java index 6290425ea5..43c5bad5b2 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/TallCropBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/TallCropBlock.java @@ -15,6 +15,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.shapes.*; +import net.neoforged.neoforge.common.*; import org.jspecify.annotations.*; /** @@ -86,20 +87,27 @@ private boolean canGrowUp(Level world, BlockPos pos, BlockState state, int age) protected void tryGrow(BlockState state, ServerLevel world, BlockPos pos, RandomSource random, float upperBound) { if (state.getValue(HALF) == DoubleBlockHalf.UPPER) return; + if (!CommonHooks.canCropGrow(world, pos, state, random.nextInt((int)(25.0F / getGrowthSpeed(state, world, pos)) + 1) == 0)) { + return; + } + if (world.getRawBrightness(pos, 0) >= 9) { int age = this.getAge(state); if (age < this.getMaxAge()) { float moisture = getGrowthSpeed(state, world, pos); + // More likely if there's more moisture if (random.nextInt((int) (upperBound / moisture) + 1) == 0) { + BlockState newState = this.getStateForAge(age + 1); if (age >= Block.UPDATE_CLIENTS) { if (world.getBlockState(pos.above()).is(this) || world.getBlockState(pos.above()).canBeReplaced()) { - world.setBlock(pos, this.getStateForAge(age + 1), Block.UPDATE_CLIENTS); + world.setBlock(pos, newState, Block.UPDATE_CLIENTS); world.setBlock(pos.above(), this.withAgeAndHalf(age + 1, DoubleBlockHalf.UPPER), Block.UPDATE_CLIENTS); } } else { - world.setBlock(pos, this.getStateForAge(age + 1), Block.UPDATE_CLIENTS); + world.setBlock(pos, newState, Block.UPDATE_CLIENTS); } + CommonHooks.fireCropGrowPost(world, pos, state); } } } From 359180d37536fb6216d4f9528eb1556aecafcc66 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 7 Aug 2026 14:41:04 +0200 Subject: [PATCH 164/477] dedup inexorable code (whyyy) --- .../enchantments/InexorableHelper.java | 42 +++++++------------ 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/helpers/enchantments/InexorableHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/enchantments/InexorableHelper.java index 5a783cc585..cba2ef3193 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/enchantments/InexorableHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/enchantments/InexorableHelper.java @@ -17,37 +17,27 @@ public static void checkAndRemoveSlowdownModifiers(LivingEntity entity) { var toolAttributes = BuiltInRegistries.ATTRIBUTE.getTag(SpectrumAttributeKeys.INEXORABLE_HANDHELD_EFFECTIVE); if (armorInexorable && armorAttributes.isPresent()) { - for (Holder attributeRegistryEntry : armorAttributes.get()) { - - var attributeInstance = entity.getAttribute(attributeRegistryEntry); - - if (attributeInstance == null) - continue; - - var badMods = attributeInstance.getModifiers() - .stream() - .filter(modifier -> modifier.amount() < 0) - .toList(); - - badMods.forEach(modifier -> attributeInstance.removeModifier(modifier.id())); - } + removeAttributes(entity, armorAttributes.get()); } if (toolInexorable && toolAttributes.isPresent()) { - for (Holder attributeRegistryEntry : toolAttributes.get()) { - + removeAttributes(entity, toolAttributes.get()); + } + } + + private static void removeAttributes(LivingEntity entity, HolderSet.Named entries) { + for (Holder attributeRegistryEntry : entries) { var attributeInstance = entity.getAttribute(attributeRegistryEntry); - if (attributeInstance == null) - continue; - - var badMods = attributeInstance.getModifiers() - .stream() - .filter(modifier -> modifier.amount() < 0) - .toList(); - - badMods.forEach(modifier -> attributeInstance.removeModifier(modifier.id())); - } + if (attributeInstance == null) + return; + + var badMods = attributeInstance.getModifiers() + .stream() + .filter(modifier -> modifier.amount() < 0) + .toList(); + + badMods.forEach(modifier -> attributeInstance.removeModifier(modifier.id())); } } From 32563ac751f5f5023758dc5805499962398c5ad7 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 7 Aug 2026 14:42:15 +0200 Subject: [PATCH 165/477] migrate maaaaany mixins to events --- .../entity/render/BidentEntityRenderer.java | 3 +- .../spectrum/items/tools/NightSaltsItem.java | 5 + ...ttackRingItem.java => JeopardantItem.java} | 17 +- .../mixin/AbstractBlockStateMixin.java | 40 --- .../de/dafuqs/spectrum/mixin/BlockMixin.java | 1 - .../dafuqs/spectrum/mixin/CatEntityMixin.java | 50 ---- .../spectrum/mixin/CropAndStemBlockMixin.java | 7 - .../dafuqs/spectrum/mixin/CropBlockMixin.java | 40 --- .../spectrum/mixin/DamageSourceMixin.java | 26 -- .../spectrum/mixin/EffectCommandMixin.java | 41 --- .../mixin/FishingHookPredicateMixin.java | 31 --- .../spectrum/mixin/GlassBottleItemMixin.java | 53 ---- .../spectrum/mixin/InfestedBlockMixin.java | 4 - .../dafuqs/spectrum/mixin/ItemStackMixin.java | 2 - .../spectrum/mixin/LivingEntityMixin.java | 156 +---------- .../LivingEntityPreventStatusClearMixin.java | 45 ---- .../spectrum/mixin/PlayerEntityMixin.java | 176 ------------ .../spectrum/mixin/PotionItemMixin.java | 2 +- .../BundleContentsComponentAccessor.java | 17 -- .../mixin/accessors/LivingEntityAccessor.java | 19 ++ .../mixin/client/ItemRendererMixin.java | 19 +- .../spectrum/mixin/client/MouseMixin.java | 3 - .../client/PlayerEntityRendererMixin.java | 17 -- .../mob_effect/AscensionMobEffect.java | 2 +- .../mob_effect/DivinityMobEffect.java | 2 +- .../mob_effect/ImmunityMobEffect.java | 2 +- .../registries/SpectrumEffectCures.java | 1 - .../registries/SpectrumEventListeners.java | 255 ++++++++++++++++-- .../spectrum/registries/SpectrumItems.java | 2 +- .../client/SpectrumClientEventListeners.java | 8 + .../SpectrumModelPredicateProviders.java | 11 +- src/main/resources/spectrum.mixins.json | 12 +- 32 files changed, 299 insertions(+), 770 deletions(-) rename src/main/java/de/dafuqs/spectrum/items/trinkets/{AttackRingItem.java => JeopardantItem.java} (63%) delete mode 100644 src/main/java/de/dafuqs/spectrum/mixin/CatEntityMixin.java delete mode 100644 src/main/java/de/dafuqs/spectrum/mixin/CropBlockMixin.java delete mode 100644 src/main/java/de/dafuqs/spectrum/mixin/DamageSourceMixin.java delete mode 100644 src/main/java/de/dafuqs/spectrum/mixin/EffectCommandMixin.java delete mode 100644 src/main/java/de/dafuqs/spectrum/mixin/FishingHookPredicateMixin.java delete mode 100644 src/main/java/de/dafuqs/spectrum/mixin/GlassBottleItemMixin.java delete mode 100644 src/main/java/de/dafuqs/spectrum/mixin/LivingEntityPreventStatusClearMixin.java delete mode 100644 src/main/java/de/dafuqs/spectrum/mixin/PlayerEntityMixin.java delete mode 100644 src/main/java/de/dafuqs/spectrum/mixin/accessors/BundleContentsComponentAccessor.java create mode 100644 src/main/java/de/dafuqs/spectrum/mixin/accessors/LivingEntityAccessor.java diff --git a/src/main/java/de/dafuqs/spectrum/entity/render/BidentEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/entity/render/BidentEntityRenderer.java index dd662682ca..eec678b7ba 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/render/BidentEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/entity/render/BidentEntityRenderer.java @@ -39,8 +39,7 @@ public void render(BidentBaseEntity bidentBaseEntity, float yaw, float tickDelta } private void renderAsItemStack(BidentBaseEntity entity, float tickDelta, PoseStack poseStack, MultiBufferSource vertexConsumerProvider, int light, ItemStack itemStack) { - SpectrumModelPredicateProviders.DISPLAY_CONTEXT = ItemDisplayContext.FIRST_PERSON_LEFT_HAND; // allow for oversized shenanigans - BakedModel bakedModel = this.itemRenderer.getModel(itemStack, entity.level(), null, entity.getId()); + BakedModel bakedModel = this.itemRenderer.getModel(itemStack, entity.level(), null, SpectrumModelPredicateProviders.MAGIC_OVERSIZED_SEED); poseStack.pushPose(); poseStack.translate(0, entity.getBoundingBox().getSize() / 2, 0); diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/NightSaltsItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/NightSaltsItem.java index a9ef2f816b..d02b29c9cc 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/NightSaltsItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/NightSaltsItem.java @@ -43,4 +43,9 @@ public int getUseDuration(ItemStack stack, LivingEntity user) { return 40; } + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.TOOT_HORN; + } + } diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/AttackRingItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/JeopardantItem.java similarity index 63% rename from src/main/java/de/dafuqs/spectrum/items/trinkets/AttackRingItem.java rename to src/main/java/de/dafuqs/spectrum/items/trinkets/JeopardantItem.java index 22a326f675..73ec56bd56 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/AttackRingItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/JeopardantItem.java @@ -15,15 +15,13 @@ import java.util.*; -public class AttackRingItem extends SpectrumCurioItem { +public class JeopardantItem extends SpectrumCurioItem { - public static final ResourceLocation ATTACK_RING_DAMAGE_ID = SpectrumCommon.locate("jeopardant"); - - public AttackRingItem(Properties settings) { + public JeopardantItem(Properties settings) { super(settings, SpectrumCommon.locate("unlocks/trinkets/jeopardant")); } - public static double getAttackModifierForEntity(@Nullable LivingEntity entity) { + public static double getAttackModifierForWearer(@Nullable LivingEntity entity) { if (entity == null) { return 0; } else { @@ -35,13 +33,6 @@ public static double getAttackModifierForEntity(@Nullable LivingEntity entity) { @Override public void onUnequip(SlotContext slotContext, ItemStack newStack, ItemStack stack) { super.onUnequip(slotContext, newStack, stack); - - LivingEntity entity = slotContext.entity(); - if (entity.getAttributes().hasModifier(Attributes.ATTACK_DAMAGE, AttackRingItem.ATTACK_RING_DAMAGE_ID)) { - Multimap, AttributeModifier> map = Multimaps.newMultimap(Maps.newLinkedHashMap(), ArrayList::new); - map.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(AttackRingItem.ATTACK_RING_DAMAGE_ID, AttackRingItem.getAttackModifierForEntity(entity), AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL)); - entity.getAttributes().removeAttributeModifiers(map); - } } @OnlyIn(Dist.CLIENT) @@ -49,7 +40,7 @@ public void onUnequip(SlotContext slotContext, ItemStack newStack, ItemStack sta public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag type) { super.appendHoverText(stack, context, tooltip, type); Minecraft client = Minecraft.getInstance(); - long mod = Math.round(getAttackModifierForEntity(client.player) * 100); + long mod = Math.round(getAttackModifierForWearer(client.player) * 100); if (mod == 0) { tooltip.add(Component.translatable("item.spectrum.jeopardant.tooltip.damage_zero")); } else { diff --git a/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java index dc690d486d..3319cb7d9b 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java @@ -28,44 +28,4 @@ public abstract class AbstractBlockStateMixin { return dropExperience; } - // https://github.com/apace100/water-walking-fix - // dummied out due to sable crash - /*@ModifyReturnValue(method = "getCollisionShape(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/phys/shapes/CollisionContext;)Lnet/minecraft/world/phys/shapes/VoxelShape;", at = @At("RETURN")) - public VoxelShape getFluidloggedCollisionShape(VoxelShape original, BlockGetter level, BlockPos pos, CollisionContext context) { - FluidState fluidState = spectrum$getFluidStateHelper(level, pos); - if(fluidState == null || fluidState.isEmpty()) { - return original; - } - int fluidLevel = fluidState.getAmount(); - if (fluidLevel == 0) return original; - VoxelShape fluidShape = FLUID_LEVEL_SHAPES[fluidLevel]; - - if (context.isAbove(fluidShape, pos, true) && context.canStandOnFluid(spectrum$getFluidStateHelper(level, pos.above()), fluidState)) { - return Shapes.or(original, fluidShape); - } - return original; - } - - // Thank you, sable - @Unique - private static FluidState spectrum$getFluidStateHelper(BlockGetter level, BlockPos pos) { - if (level.isOutsideBuildHeight(pos)) { - return Fluids.EMPTY.defaultFluidState(); - } else { - if (level instanceof LevelAccessor levelAccessor) { - ChunkAccess chunk = levelAccessor.getChunk(pos); - return chunk.getFluidState(pos); - } - return level.getFluidState(pos); - } - } - - @Unique - private static final VoxelShape[] FLUID_LEVEL_SHAPES; - static { - FLUID_LEVEL_SHAPES = new VoxelShape[16]; - for (int i = 0; i <= 8; i++) { - FLUID_LEVEL_SHAPES[i] = Block.box(0.0, 0.0, 0.0, 16.0, i, 16.0); - } - }*/ } diff --git a/src/main/java/de/dafuqs/spectrum/mixin/BlockMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/BlockMixin.java index 5856848939..2e0ca0c3ff 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/BlockMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/BlockMixin.java @@ -24,7 +24,6 @@ @Mixin(Block.class) public abstract class BlockMixin { - // TODO: move to event @ModifyReturnValue(method = "getDrops(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/BlockEntity;Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/item/ItemStack;)Ljava/util/List;", at = @At("RETURN")) private static List spectrum$getDroppedStacks(List original, BlockState state, ServerLevel world, BlockPos pos, BlockEntity blockEntity, Entity entity, ItemStack stack) { List droppedStacks = original; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/CatEntityMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/CatEntityMixin.java deleted file mode 100644 index aa214def96..0000000000 --- a/src/main/java/de/dafuqs/spectrum/mixin/CatEntityMixin.java +++ /dev/null @@ -1,50 +0,0 @@ -package de.dafuqs.spectrum.mixin; - -import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.resources.*; -import net.minecraft.server.level.*; -import net.minecraft.world.*; -import net.minecraft.world.effect.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.entity.animal.*; -import net.minecraft.world.entity.player.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.*; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.*; -import org.spongepowered.asm.mixin.injection.callback.*; - -import java.util.*; - -@Mixin(Cat.class) -public abstract class CatEntityMixin extends TamableAnimal { - - protected CatEntityMixin(EntityType entityType, Level world) { - super(entityType, world); - } - - @Inject(at = @At("HEAD"), method = "mobInteract") - private void spectrum$feedKitten(Player player, InteractionHand hand, CallbackInfoReturnable cir) { - ItemStack itemStack = player.getItemInHand(hand); - - if (this.level().isClientSide()) return; - if (!this.hasCustomName()) return; - - assert this.getCustomName() != null; - String customName = this.getCustomName().getString().toUpperCase(Locale.ROOT); - - boolean howMany = customName.equals("AAA") || customName.equals("AAA ❣"); - if (player instanceof ServerPlayer serverPlayerEntity) { - if (itemStack.is(SpectrumItems.STRATINE_GEM) && this.hasEffect(MobEffects.LEVITATION) && howMany) { - Support.grantAdvancementCriterion(serverPlayerEntity, ResourceLocation.fromNamespaceAndPath("spectrum", "midgame/become_enlightened"), "confirmed"); - this.removeEffect(MobEffects.LEVITATION); - this.addEffect(new MobEffectInstance( - MobEffects.SLOW_FALLING, - 600, - 1 - )); - } - } - } -} diff --git a/src/main/java/de/dafuqs/spectrum/mixin/CropAndStemBlockMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/CropAndStemBlockMixin.java index c4a69cb1c2..c0c6425a10 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/CropAndStemBlockMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/CropAndStemBlockMixin.java @@ -35,11 +35,4 @@ public abstract class CropAndStemBlockMixin { } } - @Inject(at = @At("HEAD"), method = "randomTick", cancellable = true) - public void spectrum$isFertilizable(BlockState state, ServerLevel world, BlockPos pos, RandomSource random, CallbackInfo ci) { - if (world.getBlockState(pos.below()).is(SpectrumBlocks.TILLED_SHALE_CLAY)) { - ci.cancel(); - } - } - } diff --git a/src/main/java/de/dafuqs/spectrum/mixin/CropBlockMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/CropBlockMixin.java deleted file mode 100644 index c47897b68c..0000000000 --- a/src/main/java/de/dafuqs/spectrum/mixin/CropBlockMixin.java +++ /dev/null @@ -1,40 +0,0 @@ -package de.dafuqs.spectrum.mixin; - -import com.llamalad7.mixinextras.injector.*; -import de.dafuqs.spectrum.blocks.farming.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.core.*; -import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.state.*; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.*; -import org.spongepowered.asm.mixin.injection.callback.*; - -@Mixin(CropBlock.class) -public abstract class CropBlockMixin { - - @ModifyExpressionValue(method = "getGrowthSpeed", at = @At(value = "INVOKE", ordinal = 0, target = "net/minecraft/world/level/BlockGetter.getBlockState (Lnet/minecraft/core/BlockPos;)Lnet/minecraft/world/level/block/state/BlockState;")) - private static BlockState spectrum$getAvailableMoisture(BlockState original) { - Block originalBlock = original.getBlock(); - if (originalBlock instanceof SpectrumFarmlandBlock) { - return Blocks.FARMLAND.defaultBlockState().setValue(FarmBlock.MOISTURE, original.getValue(FarmBlock.MOISTURE)); - } - return original; - } - - @Inject(method = "growCrops", at = @At("HEAD"), cancellable = true) - private void spectrum$cancelGrowthAttempts(Level world, BlockPos pos, BlockState state, CallbackInfo ci) { - if (world.getBlockState(pos.below()).is(SpectrumBlocks.TILLED_SHALE_CLAY)) { - ci.cancel(); - } - } - - @Inject(method = "growCrops", at = @At("HEAD"), cancellable = true) - public void spectrum$hasRandomTicks(Level world, BlockPos pos, BlockState state, CallbackInfo ci) { - if (world.getBlockState(pos.below()).is(SpectrumBlocks.TILLED_SHALE_CLAY)) { - ci.cancel(); - } - } - -} diff --git a/src/main/java/de/dafuqs/spectrum/mixin/DamageSourceMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/DamageSourceMixin.java deleted file mode 100644 index 07f82419bf..0000000000 --- a/src/main/java/de/dafuqs/spectrum/mixin/DamageSourceMixin.java +++ /dev/null @@ -1,26 +0,0 @@ -package de.dafuqs.spectrum.mixin; - -import de.dafuqs.spectrum.api.damage_type.*; -import net.minecraft.world.damagesource.*; -import net.minecraft.world.item.*; -import org.jspecify.annotations.*; -import org.spongepowered.asm.mixin.*; - -import java.util.*; - -@Mixin(DamageSource.class) -public class DamageSourceMixin implements StackTracking { - - @Unique - private Optional trackedStack = Optional.empty(); - - @Override - public Optional spectrum$getTrackedStack() { - return trackedStack; - } - - @Override - public void spectrum$setTrackedStack(@Nullable ItemStack stack) { - trackedStack = Optional.ofNullable(stack); - } -} diff --git a/src/main/java/de/dafuqs/spectrum/mixin/EffectCommandMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/EffectCommandMixin.java deleted file mode 100644 index a006d1ae0b..0000000000 --- a/src/main/java/de/dafuqs/spectrum/mixin/EffectCommandMixin.java +++ /dev/null @@ -1,41 +0,0 @@ -package de.dafuqs.spectrum.mixin; - -import com.llamalad7.mixinextras.sugar.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.commands.*; -import net.minecraft.core.*; -import net.minecraft.core.registries.*; -import net.minecraft.server.commands.*; -import net.minecraft.world.effect.*; -import net.minecraft.world.entity.*; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.*; -import org.spongepowered.asm.mixin.injection.callback.*; - -import java.util.*; - -// TODO: needed? -@Mixin(EffectCommands.class) -public class EffectCommandMixin { - - @Inject(method = "clearEffects", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;removeAllEffects()Z")) - private static void clearUncurableEffects(CommandSourceStack source, Collection targets, CallbackInfoReturnable cir, @Local Entity target) { - if (target instanceof LivingEntity living) { - for (MobEffectInstance effect : living.getActiveEffects()) { - effect.getCures().remove(SpectrumEffectCures.COMMAND_ONLY); - } - // manually remove fatal slumber to bypass turning it into eternal slumber - living.removeEffect(SpectrumMobEffects.FATAL_SLUMBER); - } - } - - @Inject(method = "clearEffect", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;removeEffect(Lnet/minecraft/core/Holder;)Z")) - private static void clearUncurableEffect(CommandSourceStack source, Collection targets, Holder statusEffect, CallbackInfoReturnable cir, @Local Entity target, @Local MobEffect ref) { - if (target instanceof LivingEntity living) { - var effect = living.getEffect(living.level().registryAccess().registryOrThrow(Registries.MOB_EFFECT).wrapAsHolder(ref)); - if (effect != null) { - effect.getCures().remove(SpectrumEffectCures.COMMAND_ONLY); - } - } - } -} diff --git a/src/main/java/de/dafuqs/spectrum/mixin/FishingHookPredicateMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/FishingHookPredicateMixin.java deleted file mode 100644 index cb9f434e76..0000000000 --- a/src/main/java/de/dafuqs/spectrum/mixin/FishingHookPredicateMixin.java +++ /dev/null @@ -1,31 +0,0 @@ -package de.dafuqs.spectrum.mixin; - -import de.dafuqs.spectrum.entity.entity.*; -import net.minecraft.advancements.critereon.*; -import net.minecraft.server.level.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.phys.*; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.*; -import org.spongepowered.asm.mixin.injection.callback.*; - -import java.util.*; - -@Mixin(FishingHookPredicate.class) -public abstract class FishingHookPredicateMixin { - - @Shadow - @Final - private Optional inOpenWater; - - @Inject(method = "matches", at = @At(value = "HEAD"), cancellable = true) - public void spectrum$test(Entity entity, ServerLevel world, Vec3 pos, CallbackInfoReturnable cir) { - if (entity instanceof SpectrumFishingHook spectrumFishingHook) { - if (this.inOpenWater.isEmpty()) { - cir.setReturnValue(true); - } - cir.setReturnValue(this.inOpenWater.get() == spectrumFishingHook.isOpenWaterFishing()); - } - } - -} diff --git a/src/main/java/de/dafuqs/spectrum/mixin/GlassBottleItemMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/GlassBottleItemMixin.java deleted file mode 100644 index 45ca50adc3..0000000000 --- a/src/main/java/de/dafuqs/spectrum/mixin/GlassBottleItemMixin.java +++ /dev/null @@ -1,53 +0,0 @@ -package de.dafuqs.spectrum.mixin; - -import com.llamalad7.mixinextras.sugar.*; -import de.dafuqs.revelationary.api.advancements.*; -import de.dafuqs.spectrum.config.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.core.*; -import net.minecraft.server.level.*; -import net.minecraft.sounds.*; -import net.minecraft.world.*; -import net.minecraft.world.entity.player.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.state.*; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.*; -import org.spongepowered.asm.mixin.injection.callback.*; - -@Mixin(BottleItem.class) -public abstract class GlassBottleItemMixin { - - @Shadow - protected abstract ItemStack turnBottleIntoItem(ItemStack stack, Player player, ItemStack outputStack); - - @Inject(method = "use", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/material/FluidState;is(Lnet/minecraft/tags/TagKey;)Z"), cancellable = true) - public void onUse(Level world, Player user, InteractionHand hand, CallbackInfoReturnable> cir, @Local ItemStack handStack, @Local BlockPos blockPos) { - BlockState blockState = world.getBlockState(blockPos); - - if (blockState.is(SpectrumBlocks.FADING) && SpectrumConfig.CONFIG.CanBottleUpFading.get() && AdvancementHelper.hasAdvancement(user, SpectrumAdvancements.UNLOCK_BOTTLE_OF_FADING)) { - cir.setReturnValue(spectrum$bottleUpDecay(world, user, handStack, blockPos, blockState, SpectrumItems.BOTTLE_OF_FADING.get())); - } else if (blockState.is(SpectrumBlocks.FAILING) && SpectrumConfig.CONFIG.CanBottleUpFailing.get() && AdvancementHelper.hasAdvancement(user, SpectrumAdvancements.UNLOCK_BOTTLE_OF_FAILING)) { - cir.setReturnValue(spectrum$bottleUpDecay(world, user, handStack, blockPos, blockState, SpectrumItems.BOTTLE_OF_FAILING.get())); - } else if (blockState.is(SpectrumBlocks.RUIN) && SpectrumConfig.CONFIG.CanBottleUpRuin.get() && AdvancementHelper.hasAdvancement(user, SpectrumAdvancements.UNLOCK_BOTTLE_OF_RUIN)) { - cir.setReturnValue(spectrum$bottleUpDecay(world, user, handStack, blockPos, blockState, SpectrumItems.BOTTLE_OF_RUIN.get())); - } else if (blockState.is(SpectrumBlocks.FORFEITURE) && SpectrumConfig.CONFIG.CanBottleUpForfeiture.get() && AdvancementHelper.hasAdvancement(user, SpectrumAdvancements.UNLOCK_BOTTLE_OF_FORFEITURE)) { - cir.setReturnValue(spectrum$bottleUpDecay(world, user, handStack, blockPos, blockState, SpectrumItems.BOTTLE_OF_FORFEITURE.get())); - } - } - - @Unique - private InteractionResultHolder spectrum$bottleUpDecay(Level world, Player user, @Local ItemStack handStack, @Local BlockPos blockPos, BlockState blockState, Item item) { - if(!world.isClientSide) { - blockState.getBlock().playerWillDestroy(world, blockPos, blockState, user); - world.setBlockAndUpdate(blockPos, Blocks.AIR.defaultBlockState()); - blockState.spawnAfterBreak((ServerLevel) world, blockPos, handStack, false); - } - - world.playSound(user, user.getX(), user.getY(), user.getZ(), SoundEvents.BOTTLE_FILL_DRAGONBREATH, SoundSource.NEUTRAL, 1.0F, 1.0F); - return InteractionResultHolder.sidedSuccess(this.turnBottleIntoItem(handStack, user, item.getDefaultInstance()), world.isClientSide()); - } - -} diff --git a/src/main/java/de/dafuqs/spectrum/mixin/InfestedBlockMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/InfestedBlockMixin.java index 9139f847de..1ff14de7b4 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/InfestedBlockMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/InfestedBlockMixin.java @@ -23,10 +23,6 @@ public abstract class InfestedBlockMixin { */ @Inject(at = @At("HEAD"), method = "spawnAfterBreak", cancellable = true) public void onStacksDropped(BlockState state, ServerLevel world, BlockPos pos, ItemStack stack, boolean dropExperience, CallbackInfo ci) { - if (EnchantmentHelper.hasTag(stack, SpectrumEnchantmentTags.RESONANT_BLOCK_DROPS)) { - ci.cancel(); - } - if (EnchantmentHelper.hasTag(stack, SpectrumEnchantmentTags.AUTO_KILLS_SILVERFISH)) { Silverfish silverfishEntity = EntityType.SILVERFISH.create(world); if (silverfishEntity != null) { diff --git a/src/main/java/de/dafuqs/spectrum/mixin/ItemStackMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/ItemStackMixin.java index 8d814643be..6ebc1fdfea 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/ItemStackMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/ItemStackMixin.java @@ -59,7 +59,6 @@ public abstract class ItemStackMixin { } } - // TODO: move to event @Inject(method = "getTooltipLines", at = @At(value = "INVOKE", target = "net/minecraft/world/item/TooltipFlag.isAdvanced ()Z", shift = At.Shift.BEFORE, ordinal = 1)) public void spectrum$AppendTooltip(Item.TooltipContext context, Player player, TooltipFlag type, CallbackInfoReturnable> cir, @Local Consumer consumer) { var stack = (ItemStack) (Object) this; @@ -76,7 +75,6 @@ public abstract class ItemStackMixin { if (canvasEnchantments != null && !canvasEnchantments.isEmpty()) { canvasEnchantments.addToTooltip(context, consumer, type); } - } } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityMixin.java index eba51849bb..618fa5bc05 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityMixin.java @@ -69,18 +69,9 @@ public abstract class LivingEntityMixin { @Shadow public abstract void travel(Vec3 movementInput); - @Shadow - protected ItemStack useItem; - @Shadow public abstract double getAttributeValue(Holder attribute); - @Shadow - protected abstract @Nullable SoundEvent getDeathSound(); - - @Shadow - protected abstract float getSoundVolume(); - @Shadow protected boolean dead; @@ -187,26 +178,6 @@ public abstract class LivingEntityMixin { return original; } - @ModifyExpressionValue(method = {"hurt"}, at = {@At(value = "CONSTANT", args = {"floatValue=0F"}, ordinal = 2)}) - private float spectrum$parryingSwordShielding(float original, @Local(argsOnly = true) DamageSource source, @Local(ordinal = 2) float shieldedDamage) { - var entity = (LivingEntity) (Object) this; - var activeStack = entity.getUseItem(); - var useTime = entity.getTicksUsingItem(); - - if (!(activeStack.getItem() instanceof ParryingSwordItem parryingSword)) - return original; - - if (entity instanceof Player player && parryingSword.canBluffParry(activeStack, entity, useTime)) { - var comp = MiscPlayerDataAttachmentType.get(player); - comp.setParryTicks(15); - - if (parryingSword.canPerfectParry(activeStack, entity, useTime)) - comp.markForPerfectCounter(); - } - - return shieldedDamage * parryingSword.getBlockingMultiplier(source, activeStack, entity, useTime); - } - @ModifyExpressionValue(method = "isDamageSourceBlocked", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/projectile/AbstractArrow;getPierceLevel()B")) private byte spectrum$parryPiercingProjectiles(byte original) { var entity = (LivingEntity) (Object) this; @@ -277,16 +248,10 @@ public abstract class LivingEntityMixin { @Unique private Optional> spectrum$getArmorPiercing(DamageSource source) { - if (!(source instanceof StackTracking stackTracking)) + ItemStack stack = source.getWeaponItem(); + if (stack == null || stack.isEmpty()) return Optional.empty(); - var stackOptional = stackTracking.spectrum$getTrackedStack(); - - if (stackOptional.isEmpty()) - return Optional.empty(); - - var stack = stackOptional.get(); - if (!(stack.getItem() instanceof ArmorPiercingItem ap)) return Optional.empty(); @@ -307,112 +272,6 @@ public abstract class LivingEntityMixin { return false; } - // TODO: move to event - @Inject(method = "addEffect(Lnet/minecraft/world/effect/MobEffectInstance;Lnet/minecraft/world/entity/Entity;)Z", at = @At("HEAD"), cancellable = true) - private void spectrum$addEffect(MobEffectInstance effect, Entity source, CallbackInfoReturnable cir) { - var entity = (LivingEntity) (Object) this; - var effectType = effect.getEffect(); - - // if it is a stacking effect, stack it - MobEffectInstance existingInstance = this.getEffect(effectType); - if (existingInstance != null && effectType.is(SpectrumMobEffectTags.STACKING)) { - SpectrumMobEffects.effectsAreGettingStacked = true; - - int newAmplifier = 1 + existingInstance.getAmplifier() + effect.getAmplifier(); - effect.spectrum$setAmplifier(newAmplifier); - SpectrumMobEffects.effectsAreGettingStacked = false; - } - - if ((!entity.hasEffect(SpectrumMobEffects.IMMUNITY)) && AetherGracedNectarGlovesItem.testEffectFor(entity, effectType)) { - int cost = (effect.getAmplifier() + 1) * AetherGracedNectarGlovesItem.HARMFUL_EFFECT_COST; - - if (AetherGracedNectarGlovesItem.tryBlockEffect(entity, cost)) { - cir.setReturnValue(false); - return; - } - } - - float resistanceModifier = Mth.clamp(SleepMobEffect.getSleepResistance(effect, entity), 0.1F, 10F); - if (effectType.is(SpectrumMobEffects.ETERNAL_SLUMBER)) { - if (SleepMobEffect.isImmuneish(entity)) { - effect.spectrum$setDuration(Math.round(effect.getDuration() / resistanceModifier)); - } else if (!entity.getType().is(SpectrumEntityTypeTags.SLEEP_RESISTANT)) { - effect.spectrum$setDuration(MobEffectInstance.INFINITE_DURATION); - } - } else if (effectType.is(SpectrumMobEffects.FATAL_SLUMBER)) { - if (SleepMobEffect.isImmuneish(entity) && entity.getType().is(Tags.EntityTypes.BOSSES)) { - effect.spectrum$setDuration(20 * 60); - } else { - effect.spectrum$setDuration(Math.max(Math.round(effect.getDuration() * resistanceModifier * 3), 20 * 10)); - } - } - } - - // TODO: move to event - @Inject(method = "hurt", at = @At("HEAD"), cancellable = true) - private void spectrum$applyBonusDamage(DamageSource source, float amount, CallbackInfoReturnable cir) { - LivingEntity target = (LivingEntity) (Object) this; - - // SetHealth damage does exactly that - if (amount > 0 && source.is(SpectrumDamageTypeTags.USES_SET_HEALTH)) { - float h = target.getHealth(); - target.setHealth(h - amount); - target.getCombatTracker().recordDamage(source, amount); - if (target.isDeadOrDying()) { - if (!dead) { - var deathSound = getDeathSound(); - if (deathSound != null) - target.playSound(deathSound, getSoundVolume(), target.getVoicePitch()); - } - target.die(source); - } - cir.setReturnValue(true); - return; - } - - // If this entity is hit with a SplitDamageItem, damage() gets called recursively for each type of damage dealt - if (!SpectrumDamageTypes.recursiveDamageFlag && amount > 0 && source.getDirectEntity() instanceof LivingEntity livingSource) { - ItemStack mainHandStack = livingSource.getMainHandItem(); - if (mainHandStack.getItem() instanceof SplitDamageItem splitDamageItem) { - SpectrumDamageTypes.recursiveDamageFlag = true; - SplitDamageItem.DamageComposition composition = splitDamageItem.getDamageComposition(livingSource, target, mainHandStack, amount); - - boolean damaged = false; - for (Tuple entry : composition.get()) { - int invulnerableTimeStore = target.invulnerableTime; - target.invulnerableTime = 0; - damaged |= hurt(entry.getA(), entry.getB()); - target.invulnerableTime = invulnerableTimeStore; - } - - SpectrumDamageTypes.recursiveDamageFlag = false; - cir.setReturnValue(damaged); - } - } - } - - // TODO: move to event - @Inject(method = "hurt", at = @At(value = "INVOKE", target = "net/minecraft/world/entity/LivingEntity.isDeadOrDying ()Z", ordinal = 1)) - private void spectrum$TriggerArmorWithHitEffect(DamageSource source, float amount, CallbackInfoReturnable cir) { - LivingEntity thisEntity = (LivingEntity) (Object) this; - Level world = thisEntity.level(); - if (!world.isClientSide()) { - if (thisEntity instanceof Mob thisMobEntity) { - for (ItemStack armorItemStack : thisMobEntity.getArmorSlots()) { - if (armorItemStack.getItem() instanceof ArmorWithHitEffect armorWithHitEffect) { - armorWithHitEffect.onHit(armorItemStack, source, thisMobEntity, amount); - } - } - } else if (thisEntity instanceof ServerPlayer thisPlayerEntity) { - for (ItemStack armorItemStack : thisPlayerEntity.getArmorSlots()) { - if (armorItemStack.getItem() instanceof ArmorWithHitEffect armorWithHitEffect) { - armorWithHitEffect.onHit(armorItemStack, source, thisPlayerEntity, amount); - } - } - } - } - } - @ModifyVariable(method = "setSprinting(Z)V", at = @At("HEAD"), argsOnly = true) private boolean spectrum$setSprinting(boolean sprinting) { var entity = (LivingEntity) (Object) this; @@ -430,17 +289,6 @@ public abstract class LivingEntityMixin { } } - @Inject(method = "addEffect(Lnet/minecraft/world/effect/MobEffectInstance;Lnet/minecraft/world/entity/Entity;)Z", at = @At(value = "INVOKE", target = "Ljava/util/Map;get(Ljava/lang/Object;)Ljava/lang/Object;")) - private void spectrum$addStatusEffect(MobEffectInstance effect, Entity source, CallbackInfoReturnable cir) { - if (MobEffectHelper.canBeExtended(effect.getEffect())) { - MobEffectInstance effectProlongingInstance = this.getEffect(SpectrumMobEffects.EFFECT_PROLONGING); - if (effectProlongingInstance != null) { - effect.spectrum$setDuration(MobEffectHelper.getExtendedDuration(effect.getDuration(), effectProlongingInstance.getAmplifier())); - } - } - } - - @Inject(method = "dropAllDeathLoot", at = @At("HEAD"), cancellable = true) protected void drop(ServerLevel world, DamageSource damageSource, CallbackInfo ci) { LivingEntity thisEntity = (LivingEntity) (Object) this; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityPreventStatusClearMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityPreventStatusClearMixin.java deleted file mode 100644 index aa28d71b4a..0000000000 --- a/src/main/java/de/dafuqs/spectrum/mixin/LivingEntityPreventStatusClearMixin.java +++ /dev/null @@ -1,45 +0,0 @@ -package de.dafuqs.spectrum.mixin; - -import com.llamalad7.mixinextras.injector.v2.*; -import com.llamalad7.mixinextras.sugar.*; -import com.llamalad7.mixinextras.sugar.ref.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.world.effect.*; -import net.minecraft.world.entity.*; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.*; -import org.spongepowered.asm.mixin.injection.callback.*; - -import java.util.*; - -@Mixin(value = LivingEntity.class) -public abstract class LivingEntityPreventStatusClearMixin { - - @Shadow - public abstract boolean addEffect(MobEffectInstance effect); - - @Shadow - public abstract Map getActiveEffectsMap(); - - @Inject(method = "removeAllEffects", at = @At("HEAD")) - private void spectrum$detectFatalSlumber(CallbackInfoReturnable cir, @Share("hasFatalSlumber") LocalBooleanRef hasFatalSlumber) { - hasFatalSlumber.set(getActiveEffectsMap().containsKey(SpectrumMobEffects.FATAL_SLUMBER.value())); - } - - @Inject(method = "removeAllEffects", at = @At("TAIL")) - private void spectrum$applyEternalSlumberIfFatalSlumberRemoved(CallbackInfoReturnable cir, @Share("hasFatalSlumber") LocalBooleanRef hasFatalSlumber) { - if (hasFatalSlumber.get()) { - addEffect(new MobEffectInstance(SpectrumMobEffects.ETERNAL_SLUMBER, 6000)); - } - } - - @WrapWithCondition(method = "removeAllEffects", at = @At(value = "INVOKE", target = "Ljava/util/Iterator;remove()V")) - private boolean spectrum$preventStatusClear2(Iterator instance, @Share("blockRemoval") LocalBooleanRef blockRemoval) { - if (blockRemoval.get()) { - blockRemoval.set(false); - return false; - } - return true; - } - -} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/mixin/PlayerEntityMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/PlayerEntityMixin.java deleted file mode 100644 index 7bc7fa85dd..0000000000 --- a/src/main/java/de/dafuqs/spectrum/mixin/PlayerEntityMixin.java +++ /dev/null @@ -1,176 +0,0 @@ -package de.dafuqs.spectrum.mixin; - -import com.google.common.collect.*; -import com.llamalad7.mixinextras.injector.*; -import com.llamalad7.mixinextras.injector.wrapoperation.*; -import de.dafuqs.spectrum.api.entity.*; -import de.dafuqs.spectrum.api.item.*; -import de.dafuqs.spectrum.attachment_types.*; -import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.items.tools.*; -import de.dafuqs.spectrum.items.trinkets.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.core.*; -import net.minecraft.core.particles.*; -import net.minecraft.server.level.*; -import net.minecraft.sounds.*; -import net.minecraft.world.*; -import net.minecraft.world.damagesource.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.entity.ai.attributes.*; -import net.minecraft.world.entity.player.*; -import net.minecraft.world.item.*; -import net.minecraft.world.item.enchantment.*; -import net.minecraft.world.level.*; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.*; -import org.spongepowered.asm.mixin.injection.callback.*; - -import java.util.*; - -@Mixin(Player.class) -public abstract class PlayerEntityMixin extends LivingEntity implements PlayerEntityAccessor { - - protected PlayerEntityMixin(EntityType entityType, Level world) { - super(entityType, world); - } - - @Shadow - public abstract Iterable getHandSlots(); - - @Shadow - private int sleepCounter; - - @Shadow - public abstract boolean hurt(DamageSource source, float amount); - - @Shadow - protected abstract boolean canPlayerFitWithinBlocksAndEntitiesWhen(Pose pose); - - - @ModifyVariable(method = "attack", name = "entityReachSq", at = @At(value = "STORE")) - protected double spectrum$increaseSweepMaxDistance(double original) { - var stack = this.getItemInHand(InteractionHand.MAIN_HAND); - if (stack.getItem() == SpectrumItems.DRACONIC_TWINSWORD.get()) { - int channeling = SpectrumEnchantmentHelper.getLevel(level().registryAccess(), Enchantments.CHANNELING, stack); - return original * 3 * ((channeling + 1) * 1.5); - } - return original; - } - - @Inject(method = "updateSwimming()V", at = @At("HEAD"), cancellable = true) - public void spectrum$updateSwimming(CallbackInfo ci) { - if (SpectrumCurioItem.hasEquipped(this, SpectrumItems.RING_OF_DENSER_STEPS.get())) { - this.setSwimming(false); - ci.cancel(); - } - } - //TODO: move to event - @Inject(method = "attack", at = @At(value = "INVOKE", target = "net/minecraft/world/entity/player/Player.getAttributeValue (Lnet/minecraft/core/Holder;)D")) - protected void spectrum$calculateModifiers(Entity target, CallbackInfo ci) { - Player player = (Player) (Object) this; - - Multimap, AttributeModifier> map = Multimaps.newMultimap(Maps.newLinkedHashMap(), ArrayList::new); - - AttributeModifier jeopardantModifier; - if (SpectrumCurioItem.hasEquipped(player, SpectrumItems.JEOPARDANT.get())) { - jeopardantModifier = new AttributeModifier(AttackRingItem.ATTACK_RING_DAMAGE_ID, AttackRingItem.getAttackModifierForEntity(player), AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL); - } else { - jeopardantModifier = new AttributeModifier(AttackRingItem.ATTACK_RING_DAMAGE_ID, 0, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL); - } - map.put(Attributes.ATTACK_DAMAGE, jeopardantModifier); - - player.getAttributes().addTransientAttributeModifiers(map); - } - - @ModifyExpressionValue(method = "attack", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;getEntitiesOfClass(Ljava/lang/Class;Lnet/minecraft/world/phys/AABB;)Ljava/util/List;")) - protected List spectrum$increaseSweepRadius(List original, Entity target) { - var stack = this.getItemInHand(InteractionHand.MAIN_HAND); - if (stack.getItem() == SpectrumItems.DRACONIC_TWINSWORD.get()) { - var channeling = spectrum$getChanneling(stack) + 1; - var size = channeling * 2 + 0.5; - var entities = this.level().getEntitiesOfClass(LivingEntity.class, target.getBoundingBox().inflate(size, 0.4 * channeling, size)); - if (!level().isClientSide() && (channeling - 1) > 0) { - for (LivingEntity living : entities) { - if (living.canBeSeenAsEnemy()) { - for (int i = 0; i < 5; i++) { - ((ServerLevel) level()).sendParticles(ParticleTypes.ENCHANTED_HIT, - living.getRandomX(1.25), - living.getY() + living.getBbHeight() * random.nextFloat(), - living.getRandomZ(1.25), - random.nextInt(2), 0, random.nextFloat() / 6F, 0, 0); - } - } - } - } - - return entities; - } - return original; - } - - @WrapOperation(method = "attack", at = @At(value = "INVOKE", target = "net/minecraft/world/level/Level.playSound (Lnet/minecraft/world/entity/player/Player;DDDLnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FF)V", ordinal = 2)) - protected void spectrum$switchCritSound(Level instance, Player except, double x, double y, double z, SoundEvent sound, SoundSource category, float volume, float pitch, Operation original) { - var player = (Player) (Object) this; - var stack = this.getItemInHand(InteractionHand.MAIN_HAND); - var component = MiscPlayerDataAttachmentType.get(player); - if (stack.getItem() instanceof LightGreatswordItem && component.isLunging()) { - original.call(instance, except, x, y, z, SpectrumSoundEvents.LUNGE_CRIT, category, 1F, 1F + random.nextFloat() * 0.2F); - return; - } - original.call(instance, except, x, y, z, sound, category, volume, pitch); - } - - @WrapOperation(method = "attack", at = @At(value = "INVOKE", target = "net/minecraft/world/level/Level.playSound (Lnet/minecraft/world/entity/player/Player;DDDLnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FF)V", ordinal = 1)) - protected void spectrum$switchSweepSound(Level instance, Player except, double x, double y, double z, SoundEvent sound, SoundSource category, float volume, float pitch, Operation original) { - var stack = this.getItemInHand(InteractionHand.MAIN_HAND); - if (stack.getItem() == SpectrumItems.DRACONIC_TWINSWORD.get() && spectrum$getChanneling(stack) > 0) { - this.level().playSound(except, x, y, z, SpectrumSoundEvents.ELECTRIC_DISCHARGE, category, 0.75F, 0.9F + random.nextFloat() * 0.2F); - return; - } - original.call(instance, except, x, y, z, sound, category, volume, pitch); - } - - @Unique - protected int spectrum$getChanneling(ItemStack stack) { - return SpectrumEnchantmentHelper.getLevel(level().registryAccess(), Enchantments.CHANNELING, stack); - } - - @Override - public void spectrum$setSleepTimer(int ticks) { - this.sleepCounter = ticks; - } - - // If the player holds an ExperienceStorageItem in their hands - // experience is tried to get put in there first - @ModifyVariable(at = @At("HEAD"), method = "giveExperiencePoints", argsOnly = true) - public int addExperience(int experience) { - if (experience < 0) { // draining XP, like Botanias Rosa Arcana - return experience; - } - - // if the player has a ExperienceStorageItem in hand add the XP to that - Player player = (Player) (Object) this; - for (ItemStack stack : getHandSlots()) { - if (!player.isUsingItem() && stack.getItem() instanceof ExperienceStorageItem) { - experience = ExperienceStorageItem.addStoredExperience(level().registryAccess(), stack, experience); - player.takeXpDelay = 0; - if (experience == 0) { - break; - } - } - } - return experience; - } - - @WrapOperation(method = "updatePlayerPose", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;setPose(Lnet/minecraft/world/entity/Pose;)V")) - public void spectrum$forceSwimmingState(Player instance, Pose entityPose, Operation original) { - var component = MiscPlayerDataAttachmentType.get(instance); - if ((component.shouldLieDown() || instance.hasEffect(SpectrumMobEffects.FATAL_SLUMBER)) && canPlayerFitWithinBlocksAndEntitiesWhen(Pose.SWIMMING)) { - instance.setPose(Pose.SWIMMING); - return; - } - original.call(instance, entityPose); - } - -} diff --git a/src/main/java/de/dafuqs/spectrum/mixin/PotionItemMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/PotionItemMixin.java index 695410dd34..7e96737d15 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/PotionItemMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/PotionItemMixin.java @@ -15,7 +15,7 @@ public abstract class PotionItemMixin { CustomPotionDataComponent component = stack.get(SpectrumDataComponentTypes.CUSTOM_POTION_DATA); if (component != null) { int additionalDrinkDuration = component.additionalDrinkDuration(); - drinkTime += Math.max(4, drinkTime + additionalDrinkDuration); + drinkTime = Math.max(4, drinkTime + additionalDrinkDuration); } return drinkTime; } diff --git a/src/main/java/de/dafuqs/spectrum/mixin/accessors/BundleContentsComponentAccessor.java b/src/main/java/de/dafuqs/spectrum/mixin/accessors/BundleContentsComponentAccessor.java deleted file mode 100644 index 1547ae42c5..0000000000 --- a/src/main/java/de/dafuqs/spectrum/mixin/accessors/BundleContentsComponentAccessor.java +++ /dev/null @@ -1,17 +0,0 @@ -package de.dafuqs.spectrum.mixin.accessors; - -import net.minecraft.world.item.*; -import net.minecraft.world.item.component.*; -import org.apache.commons.lang3.math.*; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.gen.*; - -@Mixin(BundleContents.class) -public interface BundleContentsComponentAccessor { - - @Invoker - static Fraction invokeGetWeight(ItemStack stack) { - throw new AssertionError(); - } - -} diff --git a/src/main/java/de/dafuqs/spectrum/mixin/accessors/LivingEntityAccessor.java b/src/main/java/de/dafuqs/spectrum/mixin/accessors/LivingEntityAccessor.java new file mode 100644 index 0000000000..83d4e3e9a7 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/mixin/accessors/LivingEntityAccessor.java @@ -0,0 +1,19 @@ +package de.dafuqs.spectrum.mixin.accessors; + + +import net.minecraft.sounds.*; +import net.minecraft.world.entity.*; +import net.minecraft.world.entity.animal.*; +import org.jspecify.annotations.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.gen.*; + +import java.util.*; + +@Mixin(LivingEntity.class) +public interface LivingEntityAccessor { + + @Invoker + @Nullable SoundEvent invokeGetDeathSound(); + +} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/mixin/client/ItemRendererMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/client/ItemRendererMixin.java index 1ef64e08b0..27b38c89bd 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/client/ItemRendererMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/client/ItemRendererMixin.java @@ -1,16 +1,20 @@ package de.dafuqs.spectrum.mixin.client; +import com.llamalad7.mixinextras.injector.*; import com.llamalad7.mixinextras.injector.wrapoperation.*; +import com.llamalad7.mixinextras.sugar.*; import com.mojang.blaze3d.vertex.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.registries.client.*; +import net.minecraft.client.multiplayer.*; import net.minecraft.client.renderer.*; import net.minecraft.client.renderer.entity.*; import net.minecraft.client.resources.model.*; import net.minecraft.world.entity.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; +import org.jspecify.annotations.*; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.*; @@ -27,14 +31,13 @@ public abstract class ItemRendererMixin { original.call(instance, model, stack, light, overlay, matrices, vertices); } - @Inject(at = @At("HEAD"), method = "renderStatic(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemDisplayContext;ZLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/world/level/Level;III)V") - private void spectrum$handleOversizedItemModels(LivingEntity entity, ItemStack itemStack, ItemDisplayContext displayContext, boolean leftHand, PoseStack poseStack, MultiBufferSource bufferSource, Level level, int combinedLight, int combinedOverlay, int seed, CallbackInfo ci) { - SpectrumModelPredicateProviders.DISPLAY_CONTEXT = displayContext; - } - - @Inject(at = @At("HEAD"), method = "render(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemDisplayContext;ZLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;IILnet/minecraft/client/resources/model/BakedModel;)V") - private void spectrum$handleOversizedItemModels2(ItemStack itemStack, ItemDisplayContext displayContext, boolean leftHand, PoseStack poseStack, MultiBufferSource bufferSource, int combinedLight, int combinedOverlay, BakedModel p_model, CallbackInfo ci) { - SpectrumModelPredicateProviders.DISPLAY_CONTEXT = displayContext; + @ModifyExpressionValue(method = "renderStatic(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemDisplayContext;ZLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/world/level/Level;III)V", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getModel(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/LivingEntity;I)Lnet/minecraft/client/resources/model/BakedModel;")) + private BakedModel spectrum$handleOversizedItemModels(BakedModel original, @Local(argsOnly = true) ItemStack stack, @Local(argsOnly = true) @Nullable Level world, @Local(argsOnly = true) @Nullable LivingEntity entity) { + if (world instanceof ClientLevel clientWorld) { + return original.getOverrides().resolve(original, stack, clientWorld, entity, SpectrumModelPredicateProviders.MAGIC_OVERSIZED_SEED); + } + return original; } } diff --git a/src/main/java/de/dafuqs/spectrum/mixin/client/MouseMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/client/MouseMixin.java index 17e8316c2f..5af84052b3 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/client/MouseMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/client/MouseMixin.java @@ -28,16 +28,13 @@ public class MouseMixin { return (T) (Object) Mth.clampedLerp(sensitivity, sensitivity / 2, potency / 2.5); } - // AHAHAHAH, I FINALLY FIGURED OUT HOW TO DO IT! @ModifyExpressionValue(method = "turnPlayer", at = @At(value = "FIELD", opcode = Opcodes.GETFIELD, target = "Lnet/minecraft/client/Options;smoothCamera:Z")) public boolean spectrum$forceSmoothCamera(boolean original) { var player = Minecraft.getInstance().player; - if (player == null) return original; var potency = SleepMobEffect.getSleepScaling(player); - if (potency < 1.9) return original; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/client/PlayerEntityRendererMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/client/PlayerEntityRendererMixin.java index cc626d9b15..d2eca85489 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/client/PlayerEntityRendererMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/client/PlayerEntityRendererMixin.java @@ -15,23 +15,6 @@ @Mixin(PlayerRenderer.class) public class PlayerEntityRendererMixin { - @ModifyExpressionValue(method = "getArmPose", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;getUseAnimation()Lnet/minecraft/world/item/UseAnim;")) - private static UseAnim spectrum$modifyUseAction(UseAnim original, @Local ItemStack itemStack, @Local(argsOnly = true) AbstractClientPlayer player) { - if (itemStack.getItem() == SpectrumItems.NIGHT_SALTS.get()) { - return UseAnim.TOOT_HORN; - } - return original; - } - - @ModifyReturnValue(method = "getArmPose", at = @At(value = "RETURN", ordinal = 1)) - private static HumanoidModel.ArmPose spectrum$modifyArmPose(HumanoidModel.ArmPose original, @Local ItemStack itemStack, @Local(argsOnly = true) AbstractClientPlayer player) { - if (itemStack.getItem() instanceof LightGreatswordItem) { - return HumanoidModel.ArmPose.CROSSBOW_HOLD; - } - - return original; - } - @ModifyReturnValue(method = "getArmPose", at = @At(value = "TAIL")) private static HumanoidModel.ArmPose spectrum$lungeAction(HumanoidModel.ArmPose original, @Local(argsOnly = true) AbstractClientPlayer player) { if (MiscPlayerDataAttachmentType.get(player).isLunging()) { diff --git a/src/main/java/de/dafuqs/spectrum/mob_effect/AscensionMobEffect.java b/src/main/java/de/dafuqs/spectrum/mob_effect/AscensionMobEffect.java index e42ad20a4d..dcb70e1b60 100644 --- a/src/main/java/de/dafuqs/spectrum/mob_effect/AscensionMobEffect.java +++ b/src/main/java/de/dafuqs/spectrum/mob_effect/AscensionMobEffect.java @@ -50,7 +50,7 @@ public void onEffectStarted(LivingEntity entity, int amplifier) { @Override public void fillEffectCures(Set cures, MobEffectInstance effectInstance) { - cures.add(SpectrumEffectCures.COMMAND_ONLY); + } } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/mob_effect/DivinityMobEffect.java b/src/main/java/de/dafuqs/spectrum/mob_effect/DivinityMobEffect.java index ebbe32740f..13fe77fa07 100644 --- a/src/main/java/de/dafuqs/spectrum/mob_effect/DivinityMobEffect.java +++ b/src/main/java/de/dafuqs/spectrum/mob_effect/DivinityMobEffect.java @@ -74,7 +74,7 @@ public void onEffectStarted(LivingEntity entity, int amplifier) { @Override public void fillEffectCures(Set cures, MobEffectInstance effectInstance) { - cures.add(SpectrumEffectCures.COMMAND_ONLY); + } } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/mob_effect/ImmunityMobEffect.java b/src/main/java/de/dafuqs/spectrum/mob_effect/ImmunityMobEffect.java index 37591d658f..6fa23429c3 100644 --- a/src/main/java/de/dafuqs/spectrum/mob_effect/ImmunityMobEffect.java +++ b/src/main/java/de/dafuqs/spectrum/mob_effect/ImmunityMobEffect.java @@ -47,7 +47,7 @@ public static void removeOtherMobEffects(LivingEntity entity) { @Override public void fillEffectCures(Set cures, MobEffectInstance effectInstance) { - cures.add(SpectrumEffectCures.COMMAND_ONLY); + } } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEffectCures.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEffectCures.java index 639345e296..3291978bbb 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEffectCures.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEffectCures.java @@ -5,6 +5,5 @@ public class SpectrumEffectCures { public static final EffectCure SEDATIVES = EffectCure.get("sedatives"); - public static final EffectCure COMMAND_ONLY = EffectCure.get("command_only"); } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index e2520202cf..0e7e035a2f 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -1,6 +1,8 @@ package de.dafuqs.spectrum.registries; +import com.llamalad7.mixinextras.sugar.*; import de.dafuqs.arrowhead.api.*; +import de.dafuqs.revelationary.api.advancements.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.item.*; @@ -29,17 +31,21 @@ import net.minecraft.core.*; import net.minecraft.core.component.*; import net.minecraft.core.particles.*; +import net.minecraft.network.chat.*; +import net.minecraft.resources.*; import net.minecraft.server.*; import net.minecraft.server.level.*; import net.minecraft.server.packs.resources.*; import net.minecraft.sounds.*; import net.minecraft.stats.*; import net.minecraft.tags.*; +import net.minecraft.util.*; import net.minecraft.world.*; import net.minecraft.world.damagesource.*; import net.minecraft.world.effect.*; import net.minecraft.world.entity.*; import net.minecraft.world.entity.EntityEvent; +import net.minecraft.world.entity.animal.*; import net.minecraft.world.entity.animal.horse.*; import net.minecraft.world.entity.item.*; import net.minecraft.world.entity.monster.*; @@ -58,11 +64,13 @@ import net.neoforged.fml.common.*; import net.neoforged.fml.loading.*; import net.neoforged.neoforge.client.event.*; +import net.neoforged.neoforge.common.*; import net.neoforged.neoforge.event.*; import net.neoforged.neoforge.event.entity.*; import net.neoforged.neoforge.event.entity.living.*; import net.neoforged.neoforge.event.entity.player.*; import net.neoforged.neoforge.event.level.*; +import net.neoforged.neoforge.event.level.block.*; import net.neoforged.neoforge.event.server.*; import net.neoforged.neoforge.event.tick.*; import net.neoforged.neoforge.fluids.*; @@ -134,6 +142,36 @@ public static InteractionResult exchangeBlock(PlayerInteractEvent.LeftClickBlock return InteractionResult.PASS; } + @SubscribeEvent + public static void playerInteraction(PlayerInteractEvent.EntityInteractSpecific event) { + if (event.getLevel().isClientSide()) return; + + Entity target = event.getTarget(); + Component entityCustomName = target.getCustomName(); + if (entityCustomName == null || !(target instanceof Cat cat)) return; + + Player player = event.getEntity(); + InteractionHand hand = event.getHand(); + ItemStack itemStack = player.getItemInHand(hand); + + String customName = target.getCustomName().getString().toUpperCase(Locale.ROOT); + boolean howMany = customName.equals("AAA") || customName.equals("AAA ❣"); + if (player instanceof ServerPlayer serverPlayerEntity) { + if (itemStack.is(SpectrumItems.STRATINE_GEM) && cat.hasEffect(MobEffects.LEVITATION) && howMany) { + Support.grantAdvancementCriterion(serverPlayerEntity, ResourceLocation.fromNamespaceAndPath("spectrum", "midgame/become_enlightened"), "confirmed"); + cat.removeEffect(MobEffects.LEVITATION); + cat.addEffect(new MobEffectInstance(MobEffects.SLOW_FALLING, 600, 1)); + } + } + } + + @SubscribeEvent + public static void canCropGrow(CropGrowEvent.Pre event) { + if (event.getLevel().getBlockState(event.getPos().below()).is(SpectrumBlocks.TILLED_SHALE_CLAY)) { + event.setResult(CropGrowEvent.Pre.Result.DO_NOT_GROW); + } + } + @SubscribeEvent public static void resetColorProviders(TagsUpdatedEvent event) { if (event.getUpdateCause() == TagsUpdatedEvent.UpdateCause.CLIENT_PACKET_RECEIVED) { @@ -144,7 +182,7 @@ public static void resetColorProviders(TagsUpdatedEvent event) { @SubscribeEvent public static void fatalSlumberKill(MobEffectEvent.Expired event) { MobEffectInstance effectInstance = event.getEffectInstance(); - if (effectInstance.getEffect().is(SpectrumMobEffects.FATAL_SLUMBER)) { + if (effectInstance.is(SpectrumMobEffects.FATAL_SLUMBER)) { LivingEntity entity = event.getEntity(); if (entity.level().isClientSide()) @@ -265,6 +303,14 @@ public static void tickSpawners(LevelTickEvent.Pre event) { } } + @SubscribeEvent + public static void levelTickPost(LevelTickEvent.Post event) { + for(LivingEntity entity : FATAL_SLUMBER_CURES) { + entity.addEffect(new MobEffectInstance(SpectrumMobEffects.ETERNAL_SLUMBER, 6000)); + } + FATAL_SLUMBER_CURES.clear(); + } + @SubscribeEvent public static void injectDynamicRecipe(ServerStartedEvent event) { MinecraftServer server = event.getServer(); @@ -372,7 +418,7 @@ public static void onLivingDeath(LivingDeathEvent event) { // Heal and add effects killedEntity.setHealth(1.0F); - killedEntity.removeAllEffects(); + killedEntity.removeEffectsCuredBy(EffectCures.PROTECTED_BY_TOTEM); killedEntity.addEffect(new MobEffectInstance(MobEffects.REGENERATION, 900, 1)); killedEntity.addEffect(new MobEffectInstance(MobEffects.ABSORPTION, 100, 1)); killedEntity.addEffect(new MobEffectInstance(MobEffects.FIRE_RESISTANCE, 800, 0)); @@ -390,6 +436,54 @@ public static void onLivingDeath(LivingDeathEvent event) { } } + + private static final List FATAL_SLUMBER_CURES = new ArrayList<>(); + + @SubscribeEvent + private static void mobEffectRemoval(MobEffectEvent.Remove event) { + if(event.getCure() == null && event.getEffect().is(SpectrumMobEffects.FATAL_SLUMBER)) { + FATAL_SLUMBER_CURES.add(event.getEntity()); + } + } + + @SubscribeEvent + private static void onIncomingDamage(PlayerInteractEvent.RightClickBlock event) { + ItemStack handStack = event.getItemStack(); + if(!handStack.is(Items.GLASS_BOTTLE)) { + return; + } + + Level level = event.getLevel(); + BlockPos blockPos = event.getPos(); + Player user = event.getEntity(); + BlockState blockState = level.getBlockState(blockPos); + + if (blockState.is(SpectrumBlocks.FADING) && SpectrumConfig.CONFIG.CanBottleUpFading.get() && AdvancementHelper.hasAdvancement(user, SpectrumAdvancements.UNLOCK_BOTTLE_OF_FADING)) { + bottleUpDecay(level, user, handStack, blockPos, blockState, SpectrumItems.BOTTLE_OF_FADING.get()); + event.setCanceled(true); + } else if (blockState.is(SpectrumBlocks.FAILING) && SpectrumConfig.CONFIG.CanBottleUpFailing.get() && AdvancementHelper.hasAdvancement(user, SpectrumAdvancements.UNLOCK_BOTTLE_OF_FAILING)) { + bottleUpDecay(level, user, handStack, blockPos, blockState, SpectrumItems.BOTTLE_OF_FAILING.get()); + event.setCanceled(true); + } else if (blockState.is(SpectrumBlocks.RUIN) && SpectrumConfig.CONFIG.CanBottleUpRuin.get() && AdvancementHelper.hasAdvancement(user, SpectrumAdvancements.UNLOCK_BOTTLE_OF_RUIN)) { + bottleUpDecay(level, user, handStack, blockPos, blockState, SpectrumItems.BOTTLE_OF_RUIN.get()); + event.setCanceled(true); + } else if (blockState.is(SpectrumBlocks.FORFEITURE) && SpectrumConfig.CONFIG.CanBottleUpForfeiture.get() && AdvancementHelper.hasAdvancement(user, SpectrumAdvancements.UNLOCK_BOTTLE_OF_FORFEITURE)) { + bottleUpDecay(level, user, handStack, blockPos, blockState, SpectrumItems.BOTTLE_OF_FORFEITURE.get()); + event.setCanceled(true); + } + } + + private static void bottleUpDecay(Level world, Player user, @Local ItemStack handStack, @Local BlockPos blockPos, BlockState blockState, Item item) { + if(!world.isClientSide) { + blockState.getBlock().playerWillDestroy(world, blockPos, blockState, user); + world.setBlockAndUpdate(blockPos, Blocks.AIR.defaultBlockState()); + blockState.spawnAfterBreak((ServerLevel) world, blockPos, handStack, false); + } + world.playSound(user, user.getX(), user.getY(), user.getZ(), SoundEvents.BOTTLE_FILL_DRAGONBREATH, SoundSource.NEUTRAL, 1.0F, 1.0F); + user.awardStat(Stats.ITEM_USED.get(handStack.getItem())); + ItemUtils.createFilledResult(handStack, user, item.getDefaultInstance(), world.isClientSide()); + } + @SubscribeEvent private static void onIncomingDamage(LivingIncomingDamageEvent event) { LivingEntity entity = event.getEntity(); @@ -621,13 +715,137 @@ private static void applyImprovedCriticalDamage(CriticalHitEvent event) { } } + @SubscribeEvent + private static void applySetHealthDamage(LivingIncomingDamageEvent event) { + float amount = event.getAmount(); + DamageSource source = event.getSource(); + LivingEntity target = event.getEntity(); + + // SetHealth damage does exactly that + if (amount > 0 && source.is(SpectrumDamageTypeTags.USES_SET_HEALTH)) { + float h = target.getHealth(); + target.setHealth(h - amount); + target.getCombatTracker().recordDamage(source, amount); + if (target.isDeadOrDying()) { + var deathSound = ((LivingEntityAccessor) target).invokeGetDeathSound(); + if (deathSound != null) { + target.makeSound(deathSound); + } + target.die(source); + } + event.setCanceled(true); + return; + } + + // If this entity is hit with a SplitDamageItem, damage() gets called recursively for each type of damage dealt + if (!SpectrumDamageTypes.recursiveDamageFlag && amount > 0 && source.getDirectEntity() instanceof LivingEntity livingSource) { + if (source.getWeaponItem().getItem() instanceof SplitDamageItem splitDamageItem) { + SpectrumDamageTypes.recursiveDamageFlag = true; + SplitDamageItem.DamageComposition composition = splitDamageItem.getDamageComposition(livingSource, target, source.getWeaponItem(), amount); + + for (Tuple entry : composition.get()) { + int invulnerableTimeStore = target.invulnerableTime; + target.invulnerableTime = 0; + target.hurt(entry.getA(), entry.getB()); + target.invulnerableTime = invulnerableTimeStore; + } + + SpectrumDamageTypes.recursiveDamageFlag = false; + event.setCanceled(true); + } + } + } + + @SubscribeEvent + private static void addMobEffect(MobEffectEvent.Applicable event) { + LivingEntity entity = event.getEntity(); + if(entity.level().isClientSide()) { + return; + } + + if (entity.hasEffect(SpectrumMobEffects.IMMUNITY)) { + event.setResult(MobEffectEvent.Applicable.Result.DO_NOT_APPLY); + return; + } + + MobEffectInstance effect = event.getEffectInstance(); + Holder effectType = effect.getEffect(); + + if (AetherGracedNectarGlovesItem.testEffectFor(entity, effectType)) { + int cost = (effect.getAmplifier() + 1) * AetherGracedNectarGlovesItem.HARMFUL_EFFECT_COST; + + if (AetherGracedNectarGlovesItem.tryBlockEffect(entity, cost)) { + event.setResult(MobEffectEvent.Applicable.Result.DO_NOT_APPLY); + return; + } + } + + if (MobEffectHelper.canBeExtended(effect.getEffect())) { + MobEffectInstance effectProlongingInstance = entity.getEffect(SpectrumMobEffects.EFFECT_PROLONGING); + if (effectProlongingInstance != null) { + effect.spectrum$setDuration(MobEffectHelper.getExtendedDuration(effect.getDuration(), effectProlongingInstance.getAmplifier())); + } + } + + // if it is a stacking effect, stack it + MobEffectInstance existingInstance = entity.getEffect(effectType); + if (existingInstance != null && effectType.is(SpectrumMobEffectTags.STACKING)) { + SpectrumMobEffects.effectsAreGettingStacked = true; + + int newAmplifier = 1 + existingInstance.getAmplifier() + effect.getAmplifier(); + effect.spectrum$setAmplifier(newAmplifier); + SpectrumMobEffects.effectsAreGettingStacked = false; + } + + float resistanceModifier = Mth.clamp(SleepMobEffect.getSleepResistance(effect, entity), 0.1F, 10F); + if (effectType.is(SpectrumMobEffects.ETERNAL_SLUMBER)) { + if (SleepMobEffect.isImmuneish(entity)) { + effect.spectrum$setDuration(Math.round(effect.getDuration() / resistanceModifier)); + } else if (!entity.getType().is(SpectrumEntityTypeTags.SLEEP_RESISTANT)) { + effect.spectrum$setDuration(MobEffectInstance.INFINITE_DURATION); + } + } else if (effectType.is(SpectrumMobEffects.FATAL_SLUMBER)) { + if (SleepMobEffect.isImmuneish(entity) && entity.getType().is(Tags.EntityTypes.BOSSES)) { + effect.spectrum$setDuration(20 * 60); + } else { + effect.spectrum$setDuration(Math.max(Math.round(effect.getDuration() * resistanceModifier * 3), 20 * 10)); + } + } + } + + @SubscribeEvent + private static void shieldBlock(LivingShieldBlockEvent event) { + var entity = event.getEntity(); + var activeStack = entity.getUseItem(); + var useTime = entity.getTicksUsingItem(); + + if (!(activeStack.getItem() instanceof ParryingSwordItem parryingSword)) + return; + + if (entity instanceof Player player && parryingSword.canBluffParry(activeStack, entity, useTime)) { + var comp = MiscPlayerDataAttachmentType.get(player); + comp.setParryTicks(15); + + if (parryingSword.canPerfectParry(activeStack, entity, useTime)) + comp.markForPerfectCounter(); + } + + event.setBlockedDamage(event.getBlockedDamage() * parryingSword.getBlockingMultiplier(event.getDamageSource(), activeStack, entity, useTime)); + } + @SubscribeEvent private static void onLivingDamagePre(LivingDamageEvent.Pre event) { - LivingEntity hurtEntity = event.getEntity(); Entity sourceEntity = event.getSource().getEntity(); - float newDamage = event.getNewDamage(); + + if(sourceEntity instanceof LivingEntity livingSource && SpectrumCurioItem.hasEquipped(livingSource, SpectrumItems.JEOPARDANT.get())) { + double jeopardantMod = JeopardantItem.getAttackModifierForWearer(livingSource); + float newDamage = (float) (event.getNewDamage() * (1+ jeopardantMod)); + event.setNewDamage(newDamage); + } if (sourceEntity instanceof LivingEntity livingAttacker) { + LivingEntity hurtEntity = event.getEntity(); + float newDamage = event.getNewDamage(); if (newDamage != 0F && hurtEntity.getHealth() == hurtEntity.getMaxHealth()) { ItemStack mainHandStack = livingAttacker.getMainHandItem(); int level = SpectrumEnchantmentHelper.getLevel(livingAttacker.level().registryAccess(), SpectrumEnchantmentKeys.FIRST_STRIKE, mainHandStack); @@ -672,6 +890,23 @@ private static void lovingDamagePost(LivingDamageEvent.Post event) { } } } + + // Gemstone Armor + if (!level.isClientSide()) { + if (hurtEntity instanceof Mob thisMobEntity) { + for (ItemStack armorItemStack : thisMobEntity.getArmorSlots()) { + if (armorItemStack.getItem() instanceof ArmorWithHitEffect armorWithHitEffect) { + armorWithHitEffect.onHit(armorItemStack, source, thisMobEntity, event.getNewDamage()); + } + } + } else if (hurtEntity instanceof ServerPlayer thisPlayerEntity) { + for (ItemStack armorItemStack : thisPlayerEntity.getArmorSlots()) { + if (armorItemStack.getItem() instanceof ArmorWithHitEffect armorWithHitEffect) { + armorWithHitEffect.onHit(armorItemStack, source, thisPlayerEntity, event.getNewDamage()); + } + } + } + } } private static void disarmEntity(LivingEntity entity) { @@ -834,16 +1069,6 @@ private static void onEntityAttributeModification(EntityAttributeModificationEve } } - @SubscribeEvent - private static void onMobEffectAdded(MobEffectEvent.Applicable event) { - LivingEntity entity = event.getEntity(); - if (entity.hasEffect(SpectrumMobEffects.IMMUNITY)) { - event.setResult(MobEffectEvent.Applicable.Result.DO_NOT_APPLY); - return; - } - event.setResult(MobEffectEvent.Applicable.Result.DEFAULT); - } - @SubscribeEvent private static void tickGravity(EntityTickEvent.Pre event) { Entity entity = event.getEntity(); @@ -870,7 +1095,7 @@ private static void tickGravity(EntityTickEvent.Pre event) { } // if falling very slowly => reset fall distance / damage - if (entity.getDeltaMovement().y > -0.4) { + if (appliedGravity > 0.48) { entity.fallDistance = 0; } } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java index f0b2e236c2..01e8a99505 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java @@ -465,7 +465,7 @@ public Map, Integer> getDefaultEnchantments() { public static final DeferredItem FANCIFUL_BISMUTH_RING = register("fanciful_bismuth_ring", () -> new Item(IS.of(16, Rarity.UNCOMMON))); public static final DeferredItem GLOW_VISION_GOGGLES = register("glow_vision_goggles", () -> new GlowVisionGogglesItem(IS.of(1, Rarity.UNCOMMON))); - public static final DeferredItem JEOPARDANT = register("jeopardant", () -> new AttackRingItem(IS.of(1, Rarity.UNCOMMON))); + public static final DeferredItem JEOPARDANT = register("jeopardant", () -> new JeopardantItem(IS.of(1, Rarity.UNCOMMON))); public static final DeferredItem SEVEN_LEAGUE_BOOTS = register("seven_league_boots", () -> new SevenLeagueBootsItem(IS.of(1, Rarity.UNCOMMON))); public static final DeferredItem COTTON_CLOUD_BOOTS = register("cotton_cloud_boots", () -> new CottonCloudBootsItem(IS.of(1, Rarity.UNCOMMON))); public static final DeferredItem RADIANCE_PIN = register("radiance_pin", () -> new RadiancePinItem(IS.of(1, Rarity.UNCOMMON))); diff --git a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java index 68256c26cb..25328fd108 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java @@ -41,6 +41,7 @@ import net.minecraft.network.chat.*; import net.minecraft.server.packs.resources.*; import net.minecraft.util.*; +import net.minecraft.world.*; import net.minecraft.world.entity.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; @@ -102,6 +103,13 @@ private HumanoidModel provideArmorModelForSlot(EquipmentSlot slot) return new BedrockArmorModel(root, slot); } }, SpectrumItems.BEDROCK_HELMET, SpectrumItems.BEDROCK_CHESTPLATE, SpectrumItems.BEDROCK_LEGGINGS, SpectrumItems.BEDROCK_BOOTS); + + event.registerItem(new IClientItemExtensions() { + @Override + public HumanoidModel.ArmPose getArmPose(LivingEntity entityLiving, InteractionHand hand, ItemStack itemStack) { + return HumanoidModel.ArmPose.CROSSBOW_HOLD; + } + }, SpectrumItems.NECTAR_LANCE); } @SubscribeEvent diff --git a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumModelPredicateProviders.java b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumModelPredicateProviders.java index a107968d14..f6eb7e0e50 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumModelPredicateProviders.java +++ b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumModelPredicateProviders.java @@ -58,9 +58,6 @@ public static void registerClient(FMLClientSetupEvent event) { registerOversizedItemPredicate(SpectrumItems.DRAGON_TALON.get()); registerOversizedItemPredicate(SpectrumItems.OMNI_ACCELERATOR.get()); - registerBlockingPredicate(SpectrumItems.NECTAR_LANCE.get()); - registerBlockingPredicate(SpectrumItems.KNOTTED_SWORD.get()); - registerBidentThrowingItemPredicate(SpectrumItems.MALACHITE_BIDENT.get()); registerBidentThrowingItemPredicate(SpectrumItems.FEROCIOUS_GLASS_CREST_BIDENT.get()); registerBidentThrowingItemPredicate(SpectrumItems.FRACTAL_GLASS_CREST_BIDENT.get()); @@ -192,15 +189,11 @@ private static void registerSlotReservingItem(Item item) { SlotReservingItem.isReservingSlot(stack) ? 1.0F : 0.0F); } - public static ItemDisplayContext DISPLAY_CONTEXT = ItemDisplayContext.FIXED; + public static int MAGIC_OVERSIZED_SEED = -567877769; private static void registerOversizedItemPredicate(Item item) { ItemProperties.register(item, ResourceLocation.parse("oversized"), (stack, world, entity, seed) -> - DISPLAY_CONTEXT == ItemDisplayContext.FIRST_PERSON_LEFT_HAND - || DISPLAY_CONTEXT == ItemDisplayContext.FIRST_PERSON_RIGHT_HAND - || DISPLAY_CONTEXT == ItemDisplayContext.THIRD_PERSON_LEFT_HAND - || DISPLAY_CONTEXT == ItemDisplayContext.THIRD_PERSON_RIGHT_HAND - ? 1.0F : 0.0F + seed == MAGIC_OVERSIZED_SEED ? 1.0F : 0.0F ); } diff --git a/src/main/resources/spectrum.mixins.json b/src/main/resources/spectrum.mixins.json index 1bf49f58ff..a3b1bd73eb 100644 --- a/src/main/resources/spectrum.mixins.json +++ b/src/main/resources/spectrum.mixins.json @@ -15,14 +15,10 @@ "BlockMixin", "BrainMixin", "BrewingRecipeRegistryMixin", - "CatEntityMixin", "ChunkNoiseSamplerMixin", "CropAndStemBlockMixin", - "CropBlockMixin", - "DamageSourceMixin", - "EnchantmentHelperMixin", "EatBerriesGoalMixin", - "EffectCommandMixin", + "EnchantmentHelperMixin", "EnderEyeItemMixin", "EndermanEntityMixin", "EntityMixin", @@ -30,11 +26,9 @@ "ExplosionMixin", "FallingBlockEntityMixin", "FireBlockMixin", - "FishingHookPredicateMixin", "FoodComponentBuilderMixin", "FoxEntityMixin", "GeodesGenerateWithGemstoneOresMixin", - "GlassBottleItemMixin", "InfestedBlockMixin", "InventoryMenuMixin", "ItemEntityMixin", @@ -43,7 +37,6 @@ "LightningEntityMixin", "LilyPadBlockMixin", "LivingEntityMixin", - "LivingEntityPreventStatusClearMixin", "LoomContainerPatternSlotMixin", "LoomScreenHandlerMixin", "MapDecorationMixin", @@ -53,7 +46,6 @@ "MobEntityMixin", "NoteBlockMixin", "PistonBlockMixin", - "PlayerEntityMixin", "PlayerInventoryMixin", "PotionItemMixin", "RandomChanceLootConditionMixin", @@ -67,7 +59,6 @@ "WitherEntityMixin", "WorldMixin", "accessors.BiomeAccessor", - "accessors.BundleContentsComponentAccessor", "accessors.BundleContentsComponentBuilderAccessor", "accessors.CachedRegistryInfoGetterAccessor", "accessors.DensityCapAccessor", @@ -77,6 +68,7 @@ "accessors.FoxEntityAccessor", "accessors.GoatHornItemAccessor", "accessors.ItemEntityAccessor", + "accessors.LivingEntityAccessor", "accessors.MapStateAccessor", "accessors.MobEntityAccessor", "accessors.MooshroomEntityAccessor", From 5937c9e96c3b98dc785fa7cfbd870a11f176ca9a Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 7 Aug 2026 14:42:35 +0200 Subject: [PATCH 166/477] mmonstruck nectar reagent is a tad less effective --- .../recipe/potion_workshop_reacting/moonstruck_nectar.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/data/spectrum/recipe/potion_workshop_reacting/moonstruck_nectar.json b/src/main/resources/data/spectrum/recipe/potion_workshop_reacting/moonstruck_nectar.json index b7f28075af..579c52de75 100644 --- a/src/main/resources/data/spectrum/recipe/potion_workshop_reacting/moonstruck_nectar.json +++ b/src/main/resources/data/spectrum/recipe/potion_workshop_reacting/moonstruck_nectar.json @@ -2,7 +2,7 @@ "type": "spectrum:potion_workshop_reacting", "item": "spectrum:moonstruck_nectar", "modifiers": { - "additional_drink_duration_ticks": -28 + "additional_drink_duration_ticks": -24 }, "required_advancement": "spectrum:unlocks/reagents/moonstruck_nectar" } \ No newline at end of file From 104f94e3bf3641fb2fe2c676c02435960b31885e Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 7 Aug 2026 14:42:43 +0200 Subject: [PATCH 167/477] we do not need these anymore --- .../assets/spectrum/models/item/knotted_sword.json | 13 ------------- .../models/item/knotted_sword_blocking.json | 6 ------ .../item/knotted_sword_blocking_oversized.json | 6 ------ .../assets/spectrum/models/item/nectar_lance.json | 13 ------------- .../spectrum/models/item/nectar_lance_blocking.json | 6 ------ .../item/nectar_lance_blocking_oversized.json | 6 ------ 6 files changed, 50 deletions(-) delete mode 100644 src/main/resources/assets/spectrum/models/item/knotted_sword_blocking.json delete mode 100644 src/main/resources/assets/spectrum/models/item/knotted_sword_blocking_oversized.json delete mode 100644 src/main/resources/assets/spectrum/models/item/nectar_lance_blocking.json delete mode 100644 src/main/resources/assets/spectrum/models/item/nectar_lance_blocking_oversized.json diff --git a/src/main/resources/assets/spectrum/models/item/knotted_sword.json b/src/main/resources/assets/spectrum/models/item/knotted_sword.json index 5dad6e9a32..b86bd8ebef 100644 --- a/src/main/resources/assets/spectrum/models/item/knotted_sword.json +++ b/src/main/resources/assets/spectrum/models/item/knotted_sword.json @@ -4,24 +4,11 @@ "layer0": "spectrum:item/knotted_sword" }, "overrides": [ - { - "predicate": { - "blocking": 1.0 - }, - "model": "spectrum:item/knotted_sword_blocking" - }, { "predicate": { "oversized": 1.0 }, "model": "spectrum:item/knotted_sword_oversized" - }, - { - "predicate": { - "blocking": 1.0, - "oversized": 1.0 - }, - "model": "spectrum:item/knotted_sword_blocking_oversized" } ] } \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/knotted_sword_blocking.json b/src/main/resources/assets/spectrum/models/item/knotted_sword_blocking.json deleted file mode 100644 index 021383a002..0000000000 --- a/src/main/resources/assets/spectrum/models/item/knotted_sword_blocking.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "spectrum:templates_item/blocking_sword", - "textures": { - "layer0": "spectrum:item/knotted_sword" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/knotted_sword_blocking_oversized.json b/src/main/resources/assets/spectrum/models/item/knotted_sword_blocking_oversized.json deleted file mode 100644 index c91f6ac9bc..0000000000 --- a/src/main/resources/assets/spectrum/models/item/knotted_sword_blocking_oversized.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "spectrum:templates_item/blocking_sword_oversized", - "textures": { - "layer0": "spectrum:item/knotted_sword_oversized" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/nectar_lance.json b/src/main/resources/assets/spectrum/models/item/nectar_lance.json index ffc6fc9e37..ec16d7ee11 100644 --- a/src/main/resources/assets/spectrum/models/item/nectar_lance.json +++ b/src/main/resources/assets/spectrum/models/item/nectar_lance.json @@ -4,24 +4,11 @@ "layer0": "spectrum:item/nectar_lance" }, "overrides": [ - { - "predicate": { - "blocking": 1.0 - }, - "model": "spectrum:item/knotted_sword_blocking" - }, { "predicate": { "oversized": 1.0 }, "model": "spectrum:item/nectar_lance_oversized" - }, - { - "predicate": { - "blocking": 1.0, - "oversized": 1.0 - }, - "model": "spectrum:item/nectar_lance_blocking_oversized" } ] } \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/nectar_lance_blocking.json b/src/main/resources/assets/spectrum/models/item/nectar_lance_blocking.json deleted file mode 100644 index 03336d29ea..0000000000 --- a/src/main/resources/assets/spectrum/models/item/nectar_lance_blocking.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "spectrum:templates_item/blocking_sword", - "textures": { - "layer0": "spectrum:item/nectar_lance" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/nectar_lance_blocking_oversized.json b/src/main/resources/assets/spectrum/models/item/nectar_lance_blocking_oversized.json deleted file mode 100644 index db8e93ec1e..0000000000 --- a/src/main/resources/assets/spectrum/models/item/nectar_lance_blocking_oversized.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "spectrum:templates_item/blocking_sword_oversized", - "textures": { - "layer0": "spectrum:item/nectar_lance_oversized" - } -} \ No newline at end of file From 428bf8349bb44824ce3be4d5bb29ca284820f62a Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Fri, 7 Aug 2026 14:47:12 +0200 Subject: [PATCH 168/477] fix enchanter/cinderhearth particles not moving --- .../particle/client/ColoredCraftingParticle.java | 6 +++++- .../effect/ColoredCraftingParticleEffect.java | 15 +++------------ 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/particle/client/ColoredCraftingParticle.java b/src/main/java/de/dafuqs/spectrum/particle/client/ColoredCraftingParticle.java index e284cd33bc..0ab208c90f 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/client/ColoredCraftingParticle.java +++ b/src/main/java/de/dafuqs/spectrum/particle/client/ColoredCraftingParticle.java @@ -20,6 +20,10 @@ protected ColoredCraftingParticle(ClientLevel clientWorld, double x, double y, d this.rCol = red; this.gCol = green; this.bCol = blue; + + this.xd = velocityX; + this.yd = velocityY; + this.zd = velocityZ; } @Override @@ -53,7 +57,7 @@ public Factory(SpriteSet spriteProvider) { @Override public @Nullable Particle createParticle(ColoredCraftingParticleEffect parameters, ClientLevel world, double x, double y, double z, double velocityX, double velocityY, double velocityZ) { - Vector3f color = parameters.getColor(); + Vector3f color = parameters.color(); ColoredCraftingParticle coloredCraftingParticle = new ColoredCraftingParticle(world, x, y, z, velocityX, velocityY, velocityZ, color.x, color.y, color.z); coloredCraftingParticle.setLifetime((int) (8.0D / (world.getRandom().nextDouble() * 0.8D + 0.2D))); coloredCraftingParticle.pickSprite(this.spriteProvider); diff --git a/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredCraftingParticleEffect.java b/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredCraftingParticleEffect.java index be5bfcbc35..9f30382fa3 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredCraftingParticleEffect.java +++ b/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredCraftingParticleEffect.java @@ -11,7 +11,7 @@ import net.minecraft.util.*; import org.joml.*; -public class ColoredCraftingParticleEffect implements ParticleOptions { +public record ColoredCraftingParticleEffect(Vector3f color) implements ParticleOptions { public static final ColoredCraftingParticleEffect BLACK = new ColoredCraftingParticleEffect(InkColors.BLACK_COLOR); public static final ColoredCraftingParticleEffect BLUE = new ColoredCraftingParticleEffect(InkColors.BLUE_COLOR); @@ -33,29 +33,20 @@ public class ColoredCraftingParticleEffect implements ParticleOptions { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec((instance) -> instance.group( ExtraCodecs.VECTOR3F.fieldOf("color").forGetter((effect) -> effect.color) ).apply(instance, ColoredCraftingParticleEffect::new)); + public static final StreamCodec PACKET_CODEC = StreamCodec.composite( ByteBufCodecs.VECTOR3F, (effect) -> effect.color, ColoredCraftingParticleEffect::new ); - private final Vector3f color; - public ColoredCraftingParticleEffect(int color) { - this.color = SpectrumColorHelper.colorIntToVec(color); - } - - public ColoredCraftingParticleEffect(Vector3f color) { - this.color = color; + this(SpectrumColorHelper.colorIntToVec(color)); } public ParticleType getType() { return SpectrumParticleTypes.COLORED_CRAFTING; } - public Vector3f getColor() { - return this.color; - } - public static ParticleOptions of(int color) { return new ColoredCraftingParticleEffect(color); } From c71c54207c8b530b3c2c7376f78e62c27155d4b5 Mon Sep 17 00:00:00 2001 From: Eisus <2hh8899@naver.com> Date: Sat, 8 Aug 2026 17:03:36 +0900 Subject: [PATCH 169/477] Update ko_kr.json (fix potion pendant's description) --- src/main/resources/assets/spectrum/lang/ko_kr.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/spectrum/lang/ko_kr.json b/src/main/resources/assets/spectrum/lang/ko_kr.json index a724a5f0d3..19f4bdab7a 100644 --- a/src/main/resources/assets/spectrum/lang/ko_kr.json +++ b/src/main/resources/assets/spectrum/lang/ko_kr.json @@ -3071,7 +3071,7 @@ "book.spectrum.guidebook.lava_sponge.page1.text": "...라고 생각했었지. 용암을 흠뻑 머금은 스펀지가 아주 *치명적인* 부작용을 가지고 있다는 걸 깨닫기 전까지는 말이다.\\\n당연히 그럴 거라 예상했어야 했는데.", "book.spectrum.guidebook.lava_sponge.page2.text": "용암 스펀지는 상당히 효율적인 연료로 땔 수 있으며, 이 과정에서 스펀지는 바싹 마르게 된다.", "book.spectrum.guidebook.lava_sponge.page2.title": "화로 연료", - "book.spectrum.guidebook.lesser_potion_pendant.page0.text": "물약은 정말 편리하다. 하지만 그걸 인벤토리에 절반이나 꽉꽉 채워 들고 다니는 건 전혀 편리하지 않다.\\\n물약 펜던트에는 물약을 딱 채워 넣을 수 있는 조그마한 공간이 하나 달려있다. 이 펜던트를 목에 걸고 잉크를 가지고 있는 한, 그 물약의 효과는 계속해서 내 몸을 타고 흐를 것이다.\\\n\\\n다만 물약을 직접 들이켜는 게 아니기 때문에, 그 효과는 최대 레벨 III까지만 발휘된다.", + "book.spectrum.guidebook.lesser_potion_pendant.page0.text": "물약은 정말 편리하다. 하지만 그걸 인벤토리에 절반이나 꽉꽉 채워 들고 다니는 건 전혀 편리하지 않다.\\\n물약 펜던트에는 물약을 채워 넣을 수 있는 조그마한 공간이 하나 달려있다. 이 펜던트를 목에 걸고 잉크를 가지고 있는 한, 그 물약의 효과는 계속해서 내 몸을 타고 흐를 것이다.\\\n\\\n다만 물약을 직접 들이켜는 게 아니기 때문에, 그 효과는 최대 레벨 III까지만 발휘된다.", "book.spectrum.guidebook.life_drain.page0.text": "생명력 흡수는 내가 처음 겪었을 때 문자 그대로 속을 다 뒤집어놓았던 끔찍하기 짝이 없는 효과다.\\\n이 효과는 [#](449900)내 최대 체력을 서서히 갉아먹어[#](), 스치기만 해도 골로 갈 만큼 나를 한없이 나약하게 만들었다.", "book.spectrum.guidebook.light_level_detector.page0.text": "[#](bb00bb)햇빛 감지기[#]()는 빛을 정밀하게 측정하는 데 있어서는 형편없다. 거기에 쓰이는 [](item://minecraft:quartz)은 워낙 거칠게 가공된 터라 오직 내리쬐는 직사광선에만 반응하기 때문이다.\\\n그에 비해 자수정은 빛을 포착하는 데 있어 훨씬, 훨씬 더 예민하다.\\\n\\\n심지어 [](item://minecraft:torch)의 은은한 불빛조차도 꽤나 쓸만한 측정값을 뽑아낼 수 있다.", "book.spectrum.guidebook.light_level_detector.page1.text": "블록 빛 감지기는 햇빛뿐만 아니라 빛을 뿜어내는 다른 모든 블록 등 다양한 광원에 반응한다.", @@ -4891,7 +4891,7 @@ "item.spectrum.potion.slower_to_drink": "느리게 마심", "item.spectrum.potion.tooltip.unidentifiable": "§0알아볼 수 없을 정도로 새까맣습니다", "item.spectrum.potion_pendant.tooltip_max_level": "§7다음 레벨까지의 효과를 지원합니다: ", - "item.spectrum.potion_pendant.tooltip_not_full_count": "§f물약 작업장§7에서 최대 f%d§7개의 효과를 채울 수 있습니다", + "item.spectrum.potion_pendant.tooltip_not_full_count": "§f물약 작업장§7에서 최대 §f%d§7개의 효과를 채울 수 있습니다", "item.spectrum.potion_pendant.tooltip_not_full_one": "§f물약 작업장§7에서 효과를 채울 수 있습니다", "item.spectrum.potion_pendant.when_worn": "착용 시:", "item.spectrum.preservation_turret_spawn_egg": "보호 포탑 생성 알", From 7a72696cdb9f3ec4a18336110decaa69a6df5950 Mon Sep 17 00:00:00 2001 From: SmallYii <112681916+SmallYii@users.noreply.github.com> Date: Sun, 9 Aug 2026 12:30:53 +0800 Subject: [PATCH 170/477] Sync translations and improve wording --- .../resources/assets/spectrum/lang/zh_cn.json | 183 ++++++++++-------- 1 file changed, 104 insertions(+), 79 deletions(-) diff --git a/src/main/resources/assets/spectrum/lang/zh_cn.json b/src/main/resources/assets/spectrum/lang/zh_cn.json index f6e95dcca0..447058d10d 100644 --- a/src/main/resources/assets/spectrum/lang/zh_cn.json +++ b/src/main/resources/assets/spectrum/lang/zh_cn.json @@ -367,8 +367,19 @@ "block.spectrum.spirit_instiller": "灵魂灌注台", "block.spectrum.crystallarieum": "结晶器", "block.spectrum.cinderhearth": "炼化炉", + "block.spectrum.color_picker": "拾色器", "block.spectrum.color_picker.tooltip": "将§2颜§3料§7转变为墨水", + "block.spectrum.tinting_station": "调色工作站", + "block.spectrum.tinting_station.tooltip": "为墨水装备充能,还可以对具有颜色变体的物品重新着色", + "block.spectrum.twill": "风织机", + "block.spectrum.twill.tooltip": "从空气中捕捉细微色素微粒来产出墨水", + "block.spectrum.twill.tooltip2": "需放置在彩色树木附近", + "block.spectrum.vantaclast": "蚀彩碎解机", + "block.spectrum.vantaclast.tooltip": "消耗彩色方块来产生墨水", + "block.spectrum.vantaclast.tooltip2": "需放置在彩色树木附近", + "block.spectrum.dawnbrush": "拂晓仪", + "block.spectrum.dawnbrush.tooltip": "根据天气与昼夜时间来产生墨水", "block.spectrum.crystal_apothecary": "水晶收集器", "block.spectrum.crystal_apothecary.owner": "%s 的水晶收集器", "block.spectrum.crystal_apothecary.tooltip": "将其放置于晶洞中来收集宝石晶碎片", @@ -390,20 +401,41 @@ "item.spectrum.upgrade_yield2.tooltip": "一定概率增加合成产量", "item.spectrum.upgrade_experience.tooltip": "小幅提升经验获取量/降低消耗", "item.spectrum.upgrade_experience2.tooltip": "大幅提升经验获取量/降低消耗", + "block.spectrum.ink_node": "绘彩墨水节点", + "block.spectrum.ink_node.tooltip": "在所有相连方块之间均衡分配墨水", + "block.spectrum.ink_pastel_network_nodes.tooltip.placing": "贴在魔法机械上放置", "block.spectrum.pastel_node": "绘彩节点", - "block.spectrum.provider_node": "§d绘彩网络提供节点", - "block.spectrum.gather_node": "§8绘彩网络收集节点", - "block.spectrum.sender_node": "§e绘彩网络发送节点", - "block.spectrum.storage_node": "§b绘彩网络存储节点", - "block.spectrum.connection_node": "§7绘彩网络连接节点", - "block.spectrum.pastel_network_nodes.tooltip.placing": "放置在如 箱子、熔炉的容器上", - "block.spectrum.pastel_network_nodes.tooltip.range": "可连接半径 %d 格内的其他节点", - "block.spectrum.pastel_network_nodes.connection_debug": "此节点已连接至:", - "block.spectrum.sender_node.tooltip": "将物品发送到收集和存储节点", - "block.spectrum.gather_node.tooltip": "从发送、提供和存储节点收集物品", + "block.spectrum.provider_node": "§d绘彩物品供给节点", "block.spectrum.provider_node.tooltip": "为收集节点提供物品", - "block.spectrum.storage_node.tooltip": "为发送节点与收集节点提供存储服务", + "block.spectrum.gather_node": "§8绘彩物品收集节点", + "block.spectrum.gather_node.tooltip": "从发送、提供、存储节点处收集物品", + "block.spectrum.sender_node": "§e绘彩物品发送节点", + "block.spectrum.sender_node.tooltip": "向收集节点、存储节点输送物品", + "block.spectrum.storage_node": "§b绘彩物品存储节点", + "block.spectrum.storage_node.tooltip": "供发送节点和收集节点使用的储存单元", + "block.spectrum.connection_node": "§7绘彩连接节点", "block.spectrum.connection_node.tooltip": "延长网络的连接范围", + "block.spectrum.fluid_provider_node": "§d绘彩流体供给节点", + "block.spectrum.fluid_provider_node.tooltip": "为收集节点提供流体", + "block.spectrum.fluid_sender_node": "§e绘彩流体发送节点", + "block.spectrum.fluid_sender_node.tooltip": "向收集节点与存储节点输送流体", + "block.spectrum.fluid_storage_node": "§b绘彩流体存储节点", + "block.spectrum.fluid_storage_node.tooltip": "供发送节点和收集节点使用的流体储存单元", + "block.spectrum.fluid_gather_node": "§8绘彩流体收集节点", + "block.spectrum.fluid_gather_node.tooltip": "从发送、供给、存储节点处收集流体", + "block.spectrum.omni_provider_node": "§d绘彩全能供给节点", + "block.spectrum.omni_provider_node.tooltip": "为收集节点提供物品与流体", + "block.spectrum.omni_sender_node": "§e绘彩全能发送节点", + "block.spectrum.omni_sender_node.tooltip": "向收集节点、存储节点输送物品与流体", + "block.spectrum.omni_storage_node": "§b绘彩全能存储节点", + "block.spectrum.omni_storage_node.tooltip": "供发送节点和收集节点使用的储存单元", + "block.spectrum.omni_gather_node": "§8绘彩全能收集节点", + "block.spectrum.omni_gather_node.tooltip": "从发送、供给、存储节点收集物品与流体", + "block.spectrum.omni_pastel_network_nodes.tooltip.placing": "贴在任意方块放置,一般都能正常工作", + "block.spectrum.fluid_pastel_network_nodes.tooltip.placing": "贴在储液容器上放置", + "block.spectrum.pastel_network_nodes.tooltip.placing": "贴在任意容器类方块上放置", + "block.spectrum.pastel_network_nodes.tooltip.range": "可与 %d 格范围内的其他节点建立连接", + "block.spectrum.pastel_network_nodes.connection_debug": "该节点已连接至:", "block.spectrum.player_detector": "玩家探测器", "block.spectrum.player_detector.owner": "%s的玩家检测器", "block.spectrum.item_detector": "物品探测器", @@ -916,9 +948,6 @@ "block.spectrum.stuck_storm_stone": "风暴之石", "block.spectrum.radiating_ender": "末影辐光", "item.spectrum.bone_ash": "龙骨灰", - "item.spectrum.sludge_bucket": "泥浆桶", - "block.spectrum.sludge": "泥浆", - "block.spectrum.flowing_sludge": "泥浆", "item.spectrum.liquid_crystal_bucket": "液态水晶桶", "block.spectrum.liquid_crystal": "液态水晶", "block.spectrum.flowing_liquid_crystal": "液态水晶", @@ -1979,13 +2008,13 @@ "item.spectrum.ink_flask": "墨水瓶", "item.spectrum.ink_assortment": "混合墨水", "item.spectrum.pigment_palette": "调色板", - "item.spectrum.pigment_palette.tooltip.target": "为你的工具和饰品提供墨水", + "item.spectrum.pigment_palette.tooltip.target": "为你的装备供给墨水", "item.spectrum.artists_palette": "艺术家的调色板", - "item.spectrum.artists_palette.tooltip": "§7总共可以存储最多%d§7的墨水", + "item.spectrum.artists_palette.tooltip": "§7总共最多可储存 %d§7 份元素彩墨", "item.spectrum.artists_palette.tooltip.mix_on_demand": "§7可即时调配其他类型的墨水", - "item.spectrum.total_capped_simple_pigment_energy_storage.tooltip": "§7总共可以存储最多%d§7的墨水", - "item.spectrum.ink_storage.stores_ink_per_type": "§7每种类型最多存储 %d§7 墨水", - "item.spectrum.ink_storage.stores_up_to_ink_per_type": "§7总共可以存储最多%d§7的墨水", + "item.spectrum.ink_storage.stores_ink_per_type": "§7每种颜色墨水最多储存 %d§7 份", + "item.spectrum.ink_storage.stores_up_to_ink_per_type": "§7单一颜色墨水最多可存储 %d§7 份", + "item.spectrum.total_capped_energy_storage.tooltip": "§7总共最多储存 %d§7 份墨水", "item.spectrum.creative_only": "创造模式专属", "item.spectrum.pedestal_tier_1_structure_placer": "光谱注魔基座生成器", @@ -2446,7 +2475,6 @@ "gui.spectrum.quick_navigation.controls1": "使用移动键来移动", "gui.spectrum.quick_navigation.controls2": "使用丢弃/背包键进行选择", - "recipe.spectrum.fusion_shrine.no_rgb.hint": "抛弃你的 CMYK 合成方式", "recipe.spectrum.liquid_crystal.liquid_crystal_converting.hint": "", "recipe.spectrum.pedestal.tier1.food.salted_jaramel_tart.hint": "齁咸的蛋挞", "recipe.spectrum.pedestal.tier1.food.salted_jaramel_trifle.hint": "齁咸的松糕", @@ -2587,8 +2615,6 @@ "effect.spectrum.calming.desc": "减少敌人的生成率和攻击性。", "effect.spectrum.eternal_slumber": "长梦无醒", "effect.spectrum.eternal_slumber.desc": "将目标禁锢于无梦的深度睡眠中,极少有人能挣脱。", - "effect.spectrum.eternal_slumber.duration": "永恒 | %1$s", - "effect.spectrum.eternal_slumber.duration_inf": "永恒", "effect.spectrum.fatal_slumber": "绝命长眠", "effect.spectrum.fatal_slumber.desc": "在时间结束时瞬间暴毙身亡。", "effect.spectrum.somnolence": "嗜睡", @@ -2599,7 +2625,6 @@ "container.spectrum.rei.pedestal_crafting.recipe_not_unlocked_line_2": "这个配方", "container.spectrum.rei.enchanting.title": "附魔物品", "container.spectrum.rei.enchantment_upgrading.title": "附魔升级", - "container.spectrum.rei.sludge_converting.title": "泥浆:侵染", "container.spectrum.rei.liquid_crystal_converting.title": "液态水晶:侵染", "container.spectrum.rei.midnight_solution_converting.title": "午夜溶液:侵染", "container.spectrum.rei.dragonrot_converting.title": "龙腐脓浆:侵染", @@ -2610,13 +2635,12 @@ "container.spectrum.rei.cinderhearth_recipe": "炼化炉配方", "container.spectrum.rei.ink_converting.color": "颜色: %s", "container.spectrum.rei.ink_converting.amount": "数量: %d", - "container.spectrum.rei.crystallarieum.requires_catalyst": "需要催化剂", "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds": "每生长阶段需要%f秒", - "container.spectrum.rei.crystallarieum.catalyst": "催化剂:", + "container.spectrum.rei.crystallarieum.additive": "添加剂:", "container.spectrum.rei.crystallarieum.speed": "生长速度:", "container.spectrum.rei.crystallarieum.ink_drain": "墨水消耗:", "container.spectrum.rei.crystallarieum.depletion": "消耗速度:", - "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_catalyst_optional": "%f 秒 – 催化剂可选", + "container.spectrum.rei.crystallarieum.crafting_time_per_stage_seconds_additive_optional": "%f 秒 – 添加剂可选", "container.spectrum.modonomicon.crystallarieum.catalyst": "催化剂:", "container.spectrum.modonomicon.crystallarieum.speed": "生长速度:", "container.spectrum.modonomicon.crystallarieum.ink_drain": "墨水消耗:", @@ -2653,7 +2677,7 @@ "container.spectrum.rei.enchantment_upgrade.required_item_count": "%f 个物品", "container.spectrum.rei.enchantment_upgrade.tooltip": "支持超限附魔", "container.spectrum.rei.enchantment_upgrade.button": "切换等级", - "container.spectrum.rei.pure_recipe": "提纯配方", + "container.spectrum.rei.pure_recipe": "纯化配方", "container.spectrum.rei.enchanter_recipe": "附魔基座配方", "container.spectrum.rei.fusion_recipe": "融合圣坛配方", "container.spectrum.rei.pedestal_recipe": "七彩基座配方", @@ -2950,7 +2974,6 @@ "spectrum.subtitles.celestial_pocket_watch_ticking": "天体怀表:滴答作响", "spectrum.subtitles.shooting_star_cracker": "流星:破裂", "spectrum.subtitles.block.memory.advance": "记忆:再塑", - "spectrum.subtitles.block.sludge.ambient": "泥浆:冒泡", "spectrum.subtitles.block.liquid_crystal.ambient": "液态水晶:鸣响", "spectrum.subtitles.block.midnight_solution.ambient": "午夜溶液:嘶嘶作响", "spectrum.subtitles.howling_wind_high": "风声:呼啸", @@ -3125,6 +3148,7 @@ "spectrum.toast.message.pastel_node_coloring.title": "已创建链接", "spectrum.toast.message.pastel_node_coloring.text": "你现在可以给绘彩节点上色了。", + "config.spectrum.dimension_portals": "生成传送门", "config.spectrum.add_item_tooltips": "为刷怪笼、告示牌、幽匿尖啸体等添加高级提示信息", "config.spectrum.bedrock_anvil_can_exceed_max_vanilla_enchantment_level": "基岩铁砧可突破原版附魔等级上限", "config.spectrum.bedrock_armor_helmet_protection": "基岩头盔护甲值", @@ -3235,7 +3259,6 @@ "config.spectrum.dragonrot_dripstone_drip_chance": "龙腐脓浆钟乳石滴落概率", "config.spectrum.liquid_crystal_dripstone_drip_chance": "液体水晶钟乳石滴落概率", "config.spectrum.midnight_solution_dripstone_drip_chance": "午夜溶液钟乳石滴落概率", - "config.spectrum.sludge_dripstone_drip_chance": "泥浆钟乳石滴落概率", "item.spectrum.least_black_lotus": "淡黑莲花", "item.spectrum.least_black_lotus.tooltip": "是不是洗掉色了?", @@ -3501,7 +3524,6 @@ "tag.spectrum.mob_heads.lizard_heads": "恶蜥的头", "tag.spectrum.weeping_gala_logs": "乳脂原木", "tag.spectrum.requires_omni_accelerator_pvp_enabled": "需要启用全能发射器 PvP", - "tag.spectrum.sludge": "泥浆", "tag.spectrum.dragonrot": "龙腐脓浆", "tag.spectrum.liquid_crystal": "液态水晶", "tag.spectrum.midnight_solution": "午夜溶液", @@ -3516,7 +3538,6 @@ "tag.spectrum.pastel_node_upgrades": "绘彩节点升级用品", "tag.spectrum.tag_filtering_items": "标签筛选物品", "tag.spectrum.unlocks_bag_of_holding": "解锁手持末影袋", - "tag.spectrum.crossbows": "光谱弩", "spectrum.gui.guidebook.reveal_hint_button.text": "解锁线索", "spectrum.gui.guidebook.reveal_hint_button.tooltip.pay": "支付少量费用以解锁提示", @@ -3692,7 +3713,7 @@ "book.spectrum.guidebook.bismuth.page1.text": "与其供给大量的金属方块,不如使用[结晶器](entry://ink/crystallarieum)提供的更为可控,高效且细致的培育基来培育铋金属吧。", "book.spectrum.guidebook.bismuth.page1.title": "培育铋晶", "book.spectrum.guidebook.bismuth.cluster_crushing.text": "等晶簇完全长成后,在把它粉碎,就可以获得更多的铋晶。\\\n我算了一下,这个过程居然是可以自给自足的!", - "book.spectrum.guidebook.bismuth.crystal_crushing.text": "好吧...至少不算上需要的催化剂和墨水的话。", + "book.spectrum.guidebook.bismuth.crystal_crushing.text": "好吧...至少不算上需要的添加剂和墨水的话。", "book.spectrum.guidebook.bismuth_trinkets.name": "铋晶饰品", "book.spectrum.guidebook.bismuth_trinkets.page0.text": "铋这种材料一下子就勾起了我的兴趣!它的光泽注定是成为珠宝的理想材料。凭借我如今娴熟的技艺,我竟能将其塑形,真是美不胜收。", @@ -3847,7 +3868,8 @@ "book.spectrum.guidebook.cheong.page1.text": "*说是果酱也行,说是糖浆也行...这就是 果味糖浆!*", "book.spectrum.guidebook.cinderhearth.page0.text": "特制高炉,消耗[#](e16201)橙色墨水[#]()来熔炼矿石等物品。\\\n\\\n我可以使用[升级组件](entry://magical_blocks/upgrades)进一步增强其能力。", - "book.spectrum.guidebook.cinderhearth.page1.text": "放入[知识宝石](entry://enchanting/knowledge_gem)会将熔炼获得的经验存入其中。", + "book.spectrum.guidebook.cinderhearth.knowledge_gem.title": "经验处理", + "book.spectrum.guidebook.cinderhearth.knowledge_gem.text": "放入[知识宝石](entry://enchanting/knowledge_gem)后,熔炉冶炼获得的全部经验都会存到宝石里面。", "book.spectrum.guidebook.cinderhearth.page2.text": "[升级组件](entry://magical_blocks/upgrades)必须放置在两个雕纹岩石方块上。", "book.spectrum.guidebook.cinderhearth.page3.text": "- 1个炼化炉\n- 21个磨制岩石方块\n- 6个磨制饰纹岩石方块\n- 5个玻璃类方块\n- 2个雕纹磨制岩石方块\n- 6桶熔岩\\\n\\\n*明明已经用了[#](e16201)墨水[#](),底下真的还需要[#](bb00bb)熔岩[#]()吗?*\\\n其实并不需要。只是这样看起来...酷毙了。", "book.spectrum.guidebook.cinderhearth.page4.title": "升级组件", @@ -3913,17 +3935,28 @@ "book.spectrum.guidebook.pastel_network.page2.title": "标签过滤", "book.spectrum.guidebook.pastel_network.page2.text": "虽然我这小脑袋瓜挺聪明的,但我的节点却不怎么灵光。这在需要更细节的过滤时可是个问题。\\\n好在我可以利用这些水晶完全没脑子这一点,在[命名牌](item://minecraft:name_tag)上写下[#](449900)物品标签[#]()就能骗过节点,这样节点就只会听我的命令什么该过滤什么不该过滤!", "book.spectrum.guidebook.connection_node.name": "连接节点", - "book.spectrum.guidebook.connection_node.page0.text": "作为最基本的节点,连接节点本身没有主动功能。\\\n\\\n它仅作为一种低成本、不显眼的方式用来拓展网络范围。", - "book.spectrum.guidebook.connection_node.page1.text": "和所有节点一样,连接节点的范围为 12 格。", + "book.spectrum.guidebook.connection_node.about.text": "作为最基本的节点,连接节点本身没有主动功能。\\\n\\\n它仅作为一种低成本、不显眼的方式用来拓展网络范围。", + "book.spectrum.guidebook.connection_node.recipe.text": "和所有节点一样,连接节点的范围为 12 格。", "book.spectrum.guidebook.gather_node.name": "收集节点", - "book.spectrum.guidebook.gather_node.page0.text": "收集节点会主动向其他节点请求物品,并将其放入与之相连的容器中。\\\n\\\n打开[#](449900)过滤器[#]()可以指定要收集的物品。", - "book.spectrum.guidebook.gather_node.page1.text": "收集顺序:\n1. [发送节点](entry://pastel_network/sender_node)\n2. [提供节点](entry://pastel_network/provider_node)\n3. [存储节点](entry://pastel_network/storage_node)", + "book.spectrum.guidebook.gather_node.about.text": "收集节点会主动向其他节点请求物品,并将物品存入相连的容器当中。\\\n\\\n你可以在它的[#](449900)过滤器[#]()里设置需要收集的物品。\\\n\\\n收集优先级:\n1. [发送节点](entry://pastel_network/sender_node)\n2. [供给节点](entry://pastel_network/provider_node)\n3. [存储节点](entry://pastel_network/storage_node)", "book.spectrum.guidebook.provider_node.name": "提供节点", - "book.spectrum.guidebook.provider_node.page0.text": "将相连容器内的物品接入[绘彩网络](entry://pastel_network/pastel_network)。\\\n\\\n物品不会被主动推送,但可以被[收集节点](entry://pastel_network/gather_node)请求。", + "book.spectrum.guidebook.provider_node.page0.text": "让相连容器内的物品可以在[绘彩网络](entry://pastel_network/pastel_network)中被调用。\\\n\\\n它不会主动推送物品,但[收集节点](entry://pastel_network/gather_node)可以向它索取物品。", "book.spectrum.guidebook.sender_node.name": "发送节点", - "book.spectrum.guidebook.sender_node.page0.text": "发送节点会主动尝试清空相连的容器。\\\n\\\n推送顺序:\n1. [收集节点](entry://pastel_network/gather_node)\n2. [存储节点](entry://pastel_network/storage_node)", + "book.spectrum.guidebook.sender_node.about.text": "发送节点会主动把相连容器里的物品全部推送出去,尽量让容器保持空的状态。\\\n\\\n推送顺序:\n1. [收集节点](entry://pastel_network/gather_node)\n2. [存储节点](entry://pastel_network/storage_node)", "book.spectrum.guidebook.storage_node.name": "存储节点", - "book.spectrum.guidebook.storage_node.page0.text": "存储节点与[发送节点](entry://pastel_network/sender_node)(推送物品)和[收集节点](entry://pastel_network/gather_node)(提供物品)配合时效果最佳。\\\n\\\n其[#](449900)过滤器[#]()可指定接收与提供的物品。过滤器为空时,相连容器会作为通用储物仓库,接收所有类型物品。", + "book.spectrum.guidebook.storage_node.about.text": "存储节点搭配[发送节点](entry://pastel_network/sender_node)(会向它推送物品)和[收集节点](entry://pastel_network/gather_node)(会从它提取物品)使用时,才能发挥最大作用。\\\n\\\n借助它的[#](449900)过滤器[#](),我可以设定该节点接收和输出哪些物品。过滤器留空时,相连的容器就会变成可以存放所有物品的通用仓库。", + "book.spectrum.guidebook.gather_node.recipe.text": "需要缟玛瑙合成。", + "book.spectrum.guidebook.provider_node.recipe.text": "需要紫水晶合成。", + "book.spectrum.guidebook.sender_node.recipe.text": "需要黄水晶合成。", + "book.spectrum.guidebook.storage_node.recipe.text": "需要托帕石合成。", + "book.spectrum.guidebook.item_nodes.name": "物品传输", + "book.spectrum.guidebook.item_nodes.about.text": "我造出的这些装置已经可以自行运转作响。\\\n\\\n如果能自动为它们供给所需材料,那将会十分方便。", + "book.spectrum.guidebook.fluid_nodes.name": "流体传输", + "book.spectrum.guidebook.fluid_nodes.about.text": "每次要搬运大量液体都得抱着一大堆桶来回跑,长久下来实在让人头疼。\\\n这些方块可以帮我摆脱这份费力的工作。", + "book.spectrum.guidebook.ink_nodes.name": "墨水传输", + "book.spectrum.guidebook.ink_nodes.about.text": "墨水的性质十分特殊!\\\n这些节点不只是简单把[墨水](entry://ink/ink)从一处搬运到另一处,更像是搭建了一条通道。网络内所有装置会共享墨水。\\\n\\\n墨水会从储量充足的地方流向储量不足的地方。", + "book.spectrum.guidebook.omni_nodes.name": "全能节点", + "book.spectrum.guidebook.omni_nodes.about.text": "这类万能节点可以同时实现[物品传输](entry://pastel_network/item_nodes)、[流体传输](entry://pastel_network/fluid_nodes)以及[墨水传输](entry://pastel_network/ink_nodes)!\\\n\\\n有了其他节点的研究基础,把这些功能整合到一起并不算难事,毕竟它们底层原理本就相通。", "book.spectrum.guidebook.pastel_upgrades.name": "绘彩节点升级", "book.spectrum.guidebook.pastel_upgrades.about.text": "唉,太残酷了,实在太残酷了——我的创造竟然 *还不够完美!* 这简直有辱我之名,这绝不能容忍。\\\n\\\n想了一会儿,答案显而易见。我可以利用环绕节点的光环来强化它们(这当然也是我设计好的一部分),现在所需的只是合适的材料...", "book.spectrum.guidebook.pastel_upgrades.enhancing.title": "节点强化", @@ -3971,7 +4004,7 @@ "book.spectrum.guidebook.crafting_tablet.page1.title": "基座自动化", "book.spectrum.guidebook.crafting_tablet.page1.text": "总有一天,我需要频繁反复合成某样材料,以至于想过搞自动化。或许我也会变成某种流水生产线每个物品都搞自动生产的肝帝人皇。\\\n\\\n[七彩基座](entry://general/pedestal)有专门放置合成模板的槽位。使用漏斗或者类似的器件填充基座的时候,物品会按照合成模板中配方的指示均匀地落在对应的槽位上。", - "book.spectrum.guidebook.crawfish.page0.text": "看看我上次钓鱼钓上来了什么!这其实不是鱼,而是一种**甲壳动物**。\\\n\\\n它们似乎即使在[最泥泞的池塘](entry://magical_blocks/sludge)里也能活得好好的。", + "book.spectrum.guidebook.crawfish.page0.text": "看看我上次钓鱼钓上来了什么!这其实不是鱼,而是一种**甲壳动物**。\\\n\\\n它们似乎即使在最泥泞的池塘里也能活得好好的。", "book.spectrum.guidebook.creating_enchanted_books.name": "制作附魔书", "book.spectrum.guidebook.creating_enchanted_books.page0.text": "[附魔基座](entry://enchanting/enchanter)可以消耗[颜料](entry://general/pigment),原材料与经验对[#](bb00bb)普通书本[#]()添加附魔。 \\\n\\\n虽然经验开销略高于附魔台,但我可以对附魔的附魔进行更为细致入微的选取。", @@ -4002,10 +4035,10 @@ "book.spectrum.guidebook.crystal_gardens.page0.text": "这片区域的风貌由[液态水晶](entry://general/liquid_crystal)湖和巨型[晶体结构](entry://dimension/hummingstone)共同构成。", "book.spectrum.guidebook.crystal_gardens.page1.text": "地面覆盖着一层薄薄的泥土。不算厚实,却足以让苔藓繁茂生长。\\\n\\\n与大多数生物群系不同,这里繁多的自然光源让植物得以在这里生长,其中有些我在地表世界也能见到。", - "book.spectrum.guidebook.crystallarieum.page0.text": "受到宝石晶母岩的启发,我设计了一种由墨水驱动的装置,能够自动生长出其上方的矿物资源的结晶。\\\n\\\n培育矿物资源需要满足这些条件:\n- 装入对应的液体\n- 投入一个原矿\n- 投入催化剂\n- 提供特定颜色的[墨水瓶](entry://ink/ink_flask)[#]()", + "book.spectrum.guidebook.crystallarieum.page0.text": "参考宝石晶母岩的特性,我设计了一种由墨水驱动的装置,能够将原矿块培育成闪闪发光的晶体。\\\n\\\n培育矿物资源需要满足这些条件:\n- 装入对应的流体\n- 投入一个原矿\n- 投入添加剂\n- 提供特定颜色的[墨水](entry://pastel_network/ink_nodes)", "book.spectrum.guidebook.crystallarieum.page1.text": "虽然我无论怎么努力都没法长出[宝石晶碎片](entry://general/shards)。但我很快发现,把其他各类资源放上去,它都能培育。", - "book.spectrum.guidebook.crystallarieum.page2.title": "催化剂", - "book.spectrum.guidebook.crystallarieum.page2.text": "每种催化剂对矿芽的生长有不同的影响:\\\n有的能减少墨水消耗,有的则能改变培育所需时间。", + "book.spectrum.guidebook.crystallarieum.page2.title": "添加剂", + "book.spectrum.guidebook.crystallarieum.page2.text": "每种添加剂对矿芽的生长有不同的影响:\\\n有的能减少墨水消耗,有的则能改变培育生长时间。", "book.spectrum.guidebook.crystallarieum.page3.title": "金属与晶体的区别", "book.spectrum.guidebook.crystallarieum.page3.text": "培育[#](449900)金属资源[#]()需要使用[#](bb00bb)粗铁[#]()之类的未加工材料,我可以看到[#](bb00bb)小小的铁矿芽[#]()逐渐生长。完全长大之后,就可以被安全地采集了。\\\n\\\n对于[#](449900)晶体资源[#](),可以使用现有的晶体作为种子来培育相同的副本。", "book.spectrum.guidebook.crystallarieum.page4.title": "煤", @@ -4191,6 +4224,7 @@ "book.spectrum.guidebook.failing.name": "实验#2:蚀解", "book.spectrum.guidebook.failing.page0.text": "如果说我没有被野心所驱使,那肯定是在撒谎。我能感觉到,这是我迈向改变世界的一大步!\\\n在[缟玛瑙](entry://general/onyx_shards)[#]()和[绯红碎片](entry://general/stratine)[#]()的加持下,我创造的第二种生物体显然...比上一个更活跃。\\\n**而且绝对更贪吃。\\\n非常非常贪吃。**", "book.spectrum.guidebook.failing.page1.text": "也许用我所知最坚硬的材料之一可以满足它们的食欲?", + "book.spectrum.guidebook.failing.essence_recipe.text": "这个是辣的。", "book.spectrum.guidebook.fatal_slumber.page0.text": "[#](449900)如果让效果任其持续下去会直接致死。[#]()就在我濒临死亡的那一刻,我看见了一些东西; 一片无底之海,一场无尽之梦; 微弱的光线在黑暗中闪烁——宛如一缕银线,引诱我不断深入...我深知不可跟随。", "book.spectrum.guidebook.fatal_slumber.page1.text": "这是夜幕炼金术的杰作,潜藏着最本源的丝绒魔法。因此它会受精神强度与睡眠抗性影响。\\\n\\\n不过,只有拥有极强力量的存在,才能抵挡这片平静的水域。", @@ -4688,7 +4722,6 @@ "book.spectrum.guidebook.liquid_crystal.page0.text": "宝石晶的纯净能量以液态形式存在,似乎具有治疗效果。", "book.spectrum.guidebook.liquid_crystal.page1.text": "使其与其他液体结合会产生具有有趣特性的各种材料。", - "book.spectrum.guidebook.liquid_crystal.page2.text": "液态水晶与[液态泥浆](entry://magical_blocks/sludge)[#]()碰撞,产生了[#](bb00bb)黏土[#]()!肯定还有更多组合等待发现!\\\n\\\n*从未见过如此不平衡的现象。*", "book.spectrum.guidebook.liquid_crystal.page3.text": "完整的一格液态水晶在吸收了[#](bb00bb)熔岩[#]()的巨大热量之后形成了这个东西。\\\n感觉很像[](item://minecraft:magma_block),但要热得多。", "book.spectrum.guidebook.liquid_crystal.page4.text": "当[#](bb00bb)水[#]()流入液态水晶的源头时,水晶固化了。\\\n只是轻轻触碰,我就感受到了凛冽而刺骨的严寒。我将其命名为霜冻水晶。", @@ -4807,7 +4840,7 @@ "book.spectrum.guidebook.arcane_charges.enchanting.title": "附魔", "book.spectrum.guidebook.arcane_charges.enchanting.text": "把炸药放进[附魔台](item://minecraft:enchanting_table)里一附魔,直接强得离谱。\\\n\\\n而且啊,这些小东西一点都不挑食。我塞进去什么魔法,它们就用最夸张的方式给你炸出来。说实话,我挺佩服这种敬业精神的。", "book.spectrum.guidebook.arcane_charges.parametric_mining_device.text": "可以直接扔,也能贴墙上再引爆。\\\n\\\n默认状态下对生物无害。", - "book.spectrum.guidebook.arcane_charges.threat_conflux.text": "放下后过几秒进入待爆状态,之后只要有生物碰到就会炸。只能用[午夜残片](item://spectrum:midnight_chip)拆除。\\\n\\\n默认状态下对生物那是相当有害。", + "book.spectrum.guidebook.arcane_charges.threat_conflux.text": "放置数秒后完成充能,此后生物触碰就会引发爆炸。只能用[午夜残片](item://spectrum:midnight_chip)拆除。\\\n默认状态下对生物具备极强的杀伤能力。", "book.spectrum.guidebook.arcane_charges.enchanting2.text": "大部分附魔效果都很好理解:\n- **时运**会增加掉落物数量\n- **锋利**之类的伤害附魔\n会提高对生物的伤害\n- **抢夺**自然是影响掉落战利品\n- .....", "book.spectrum.guidebook.arcane_charges.enchanting3.text": "不过还有几种更有意思的:\n- **力量**让爆炸能破坏方块,等级越高范围越大\n- **锋利**之类的伤害附魔会让爆炸对生物造成伤害(包括我自己)\n- **火矢**会炸出火焰\n- **耐久**有概率让炸药不被消耗", @@ -4827,12 +4860,6 @@ "book.spectrum.guidebook.moving_budding_blocks": "可移动的母岩", - "book.spectrum.guidebook.sludge.page0.text": "这东西...也算个成果吧。我本来想做出点厉害的玩意儿,结果失败了,最后就搞出了这东西。而且我连当初想做什么都忘了,真服了。\\\n泥浆本身既不好看,也没什么用,有用的*是*和其他液体混合的效果,例如和[#](bb00bb)水[#]()混合会变成[](item://minecraft:dirt),和[#](bb00bb)熔岩[#]()混合则会变成[](item://minecraft:mud)。", - "book.spectrum.guidebook.sludge.page1.text": "*虽然泥浆浴听起来挺养生的,但千万别试。相信我,我试过了。*", - "book.spectrum.guidebook.sludge.page2.text": "有些物品接触泥浆后会发生鞣化。\\\n比如把[](item://minecraft:rotten_flesh)扔进去,就会变成[](item://minecraft:rabbit_hide)。", - "book.spectrum.guidebook.sludge.page3.text": "还有些物品则会被纯化。\\\n为什么小麦会变成线呢?怎么会事呢? 莫非是线面?", - "book.spectrum.guidebook.sludge.page4.text": "我不小心把一片[四叶草](entry://general/clover)掉进了泥浆里。\\\n我找了半天也没找着,可运气不错,我居然捡到了一片[翠绿的龟壳!](item://minecraft:turtle_scute)", - "book.spectrum.guidebook.multitool.page0.text": "每次出门冒险的时候,我总要带上一大包工具,虽说我连成吨的石头都能随便扛,这点工具根本不算什么。但如果有一把能集镐、斧、锹、锄于一体的万用工具,那肯定方便多了。", "book.spectrum.guidebook.multitool.page1.text": "虽然单独做某件事时效率没那么高,但总好过每隔三秒就要切一次工具。", @@ -6369,7 +6396,6 @@ "structure.minecraft.village_taiga": "针叶林村庄", "fluid_type.spectrum.liquid_crystal": "液态水晶", - "fluid_type.spectrum.sludge": "泥浆", "fluid_type.spectrum.midnight_solution": "午夜溶液", "fluid_type.spectrum.dragonrot": "龙腐脓浆", @@ -6378,31 +6404,30 @@ "subtitles.block.amethyst_block.chime": "宝石风铃", "______vanilla_additions": "新增附魔等级:", - "potion.potency.6": "VI", - "potion.potency.7": "VII", - "potion.potency.8": "VIII", - "potion.potency.9": "IX", - "potion.potency.10": "X", - "potion.potency.11": "XI", - "potion.potency.12": "XII", - "potion.potency.13": "XIII", - "potion.potency.14": "XIV", - "potion.potency.15": "XV", - "potion.potency.16": "XVI", - "potion.potency.17": "XVII", - "potion.potency.18": "XVIII", - "potion.potency.19": "XIX", - "potion.potency.20": "XX", - "potion.potency.21": "XXI", - "potion.potency.22": "XXII", - "potion.potency.23": "XXIII", - "potion.potency.24": "XXIV", - "potion.potency.25": "XXV", - "potion.potency.26": "XXVI", - "potion.potency.27": "XXVII", - "potion.potency.28": "XXVIII", - "potion.potency.29": "XXIX", - "potion.potency.30": "XXX", + "potion.potency.6": "VII", + "potion.potency.7": "VIII", + "potion.potency.8": "IX", + "potion.potency.9": "X", + "potion.potency.10": "XI", + "potion.potency.11": "XII", + "potion.potency.12": "XIII", + "potion.potency.13": "XIV", + "potion.potency.14": "XV", + "potion.potency.15": "XVI", + "potion.potency.16": "XVII", + "potion.potency.17": "XVIII", + "potion.potency.18": "XIX", + "potion.potency.19": "XX", + "potion.potency.20": "XXI", + "potion.potency.21": "XXII", + "potion.potency.22": "XXIII", + "potion.potency.23": "XXIV", + "potion.potency.24": "XXV", + "potion.potency.25": "XXVI", + "potion.potency.26": "XXVII", + "potion.potency.27": "XXVIII", + "potion.potency.28": "XXIX", + "potion.potency.29": "XXX", "______sign_text_used_in_structures": "", "signtext.spectrum.stall_to_let.1": "摊位出租", @@ -6458,7 +6483,7 @@ "book.spectrum.guidebook.mysterious_locket.page4.title": "挂坠中的秘密", "book.spectrum.guidebook.mysterious_locket.page4.text": "里面还夹着一张小纸条……它会是谁留下的呢?", - "book.spectrum.guidebook.mysterious_locket.page5.title": "无名字条", + "book.spectrum.guidebook.mysterious_locket.page5.title": "来历不明的纸条", "book.spectrum.guidebook.mysterious_locket.page5.text": "现在我已经通晓德雷顿语,背面的铭文很容易就能解读:\n\n“别傻了,阿斯忒拉斯——月亮不会发光,它只是反射太阳的光芒。”" } From f1e8aa3afcd51edc69784d24c1168816168eb603 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 10:29:31 +0200 Subject: [PATCH 171/477] data driven pastel upgrades! --- .../de/dafuqs/spectrum/SpectrumCommon.java | 1 - .../PastelUpgradeSignature.java | 313 ++++++------------ .../api/pastel_network/PastelUpgradeable.java | 6 +- .../pastel_network/nodes/PastelNodeBlock.java | 8 +- .../nodes/PastelNodeBlockEntity.java | 95 ++++-- .../SpectrumPastelUpgradeSignatures.java | 75 ----- .../registries/SpectrumRegistries.java | 3 +- .../pastel_upgrade/always_active.json | 6 + .../pastel_upgrade/always_inactive.json | 6 + .../spectrum/pastel_upgrade/inverted.json | 6 + .../spectrum/pastel_upgrade/lamp.json | 6 + .../spectrum/pastel_upgrade/light.json | 6 + .../spectrum/pastel_upgrade/rate.json | 6 + .../spectrum/pastel_upgrade/sensor.json | 6 + .../pastel_upgrade/strong_filter.json | 6 + .../spectrum/pastel_upgrade/strong_speed.json | 7 + .../spectrum/pastel_upgrade/strong_stack.json | 7 + .../spectrum/pastel_upgrade/trigger.json | 6 + .../spectrum/pastel_upgrade/weak_filter.json | 6 + .../spectrum/pastel_upgrade/weak_speed.json | 7 + .../spectrum/pastel_upgrade/weak_stack.json | 7 + 21 files changed, 262 insertions(+), 327 deletions(-) delete mode 100644 src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java create mode 100644 src/main/resources/data/spectrum/spectrum/pastel_upgrade/always_active.json create mode 100644 src/main/resources/data/spectrum/spectrum/pastel_upgrade/always_inactive.json create mode 100644 src/main/resources/data/spectrum/spectrum/pastel_upgrade/inverted.json create mode 100644 src/main/resources/data/spectrum/spectrum/pastel_upgrade/lamp.json create mode 100644 src/main/resources/data/spectrum/spectrum/pastel_upgrade/light.json create mode 100644 src/main/resources/data/spectrum/spectrum/pastel_upgrade/rate.json create mode 100644 src/main/resources/data/spectrum/spectrum/pastel_upgrade/sensor.json create mode 100644 src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_filter.json create mode 100644 src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_speed.json create mode 100644 src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_stack.json create mode 100644 src/main/resources/data/spectrum/spectrum/pastel_upgrade/trigger.json create mode 100644 src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_filter.json create mode 100644 src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_speed.json create mode 100644 src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_stack.json diff --git a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java index 32610366b9..34bc82fe07 100644 --- a/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java +++ b/src/main/java/de/dafuqs/spectrum/SpectrumCommon.java @@ -123,7 +123,6 @@ public SpectrumCommon(ModContainer container, IEventBus modBus) { SpectrumPastelPayloadTypes.register(modBus); SpectrumPastelPayloads.register(modBus); modBus.addListener(SpectrumBlockEntities::addBlockEntityTypeBlocks); - SpectrumPastelUpgradeSignatures.register(modBus); // Worldgen logInfo("Registering Features..."); diff --git a/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java b/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java index 45a9d17cad..601acdd573 100644 --- a/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java +++ b/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java @@ -1,32 +1,103 @@ package de.dafuqs.spectrum.api.pastel_network; +import com.mojang.serialization.*; +import com.mojang.serialization.codecs.*; +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.api.predicate.block.*; +import de.dafuqs.spectrum.data_loaders.*; +import de.dafuqs.spectrum.recipe.pedestal.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.resources.*; +import net.minecraft.util.*; import net.minecraft.world.*; +import net.minecraft.world.entity.animal.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; +import net.minecraft.world.level.levelgen.feature.configurations.*; -public final class PastelUpgradeSignature { +import java.util.*; +import java.util.function.*; +public final class PastelUpgradeSignature { + + public static Holder.Reference of(Level level, Item item) { + return level.registryAccess().registry(SpectrumRegistryKeys.PASTEL_UPGRADE).get().holders() + .filter(pastelUpgradeSignature -> pastelUpgradeSignature.value().upgradeItem.value().equals(item)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Attempted to fetch an upgrade that does not exist")); + } + + public enum RedstoneBehavior implements StringRepresentable { + NONE("none"), + ALWAYS_ACTIVE("always_active"), + ALWAYS_INACTIVE("always_inactive"), + INVERTED("inverted"), + LAMP("lamp"), + SENSOR("sensor"); + + public static final Codec CODEC = StringRepresentable.fromEnum(RedstoneBehavior::values); + + private final String name; + + RedstoneBehavior(String name) { + this.name = name; + } + + @Override + public String getSerializedName() { + return name; + } + } + + public static final Codec CODEC = RecordCodecBuilder.create((i -> i.group( + ItemStack.ITEM_NON_AIR_CODEC.fieldOf("item").forGetter(c -> c.upgradeItem), + Codec.STRING.fieldOf("name").forGetter(c -> c.name), + Codec.INT.optionalFieldOf("stack_mod", 0).forGetter(c -> c.stack), + Codec.INT.optionalFieldOf("speed_mod", 0).forGetter(c -> c.speed), + Codec.INT.optionalFieldOf("filter_row_mod", 0).forGetter(c -> c.slotRows), + Codec.FLOAT.optionalFieldOf("stack_multi", 1.0F).forGetter(c -> c.stackMult), + Codec.FLOAT.optionalFieldOf("speed_multi", 1.0F).forGetter(c -> c.speedMult), + Codec.FLOAT.optionalFieldOf("transfer_rate_mod", 1.0F).forGetter(c -> c.transferRateMult), + Codec.BOOL.optionalFieldOf("light", false).forGetter(c -> c.light), + Codec.BOOL.optionalFieldOf("trigger", false).forGetter(c -> c.triggerTransfer), + Codec.BOOL.optionalFieldOf("lamp", false).forGetter(c -> c.lamp), + Codec.BOOL.optionalFieldOf("sensor", false).forGetter(c -> c.sensor), + Category.CODEC.fieldOf("category").forGetter(c -> c.category), + RedstoneBehavior.CODEC.optionalFieldOf("redstone", RedstoneBehavior.NONE).forGetter(c -> c.redstone) + ).apply(i, PastelUpgradeSignature::new))); + public static final String INNER_RING_BASE_PATH = "textures/block/pastel_node_inner_ring_"; public static final String OUTER_RING_BASE_PATH = "textures/block/pastel_node_outer_ring_"; public static final String REDSTONE_RING_BASE_PATH = "textures/block/pastel_node_redstone_ring_"; - - public final Item upgradeItem; + + public final Holder upgradeItem; public final String name; public final ResourceLocation outerRing, innerRing; public final int stack, speed, slotRows; public final float stackMult, speedMult, transferRateMult; public final boolean light, triggerTransfer, lamp, sensor; public final Category category; + public final RedstoneBehavior redstone; public final RedstoneStateModifier preProcessor; public final RedstoneStateModifier postProcessor; - private PastelUpgradeSignature(Item upgradeItem, String name, ResourceLocation outerRing, ResourceLocation innerRing, int stack, int speed, int slotRows, float stackMult, float speedMult, float transferRateMult, boolean light, boolean triggerTransfer, boolean lamp, boolean sensor, Category category, RedstoneStateModifier preProcessor, RedstoneStateModifier postProcessor) { + private PastelUpgradeSignature(Holder upgradeItem, String name, int stack, int speed, int slotRows, float stackMult, float speedMult, float transferRateMult, boolean light, boolean triggerTransfer, boolean lamp, boolean sensor, Category category, RedstoneBehavior redstone) { + this(upgradeItem, name, stack, speed, slotRows, stackMult, speedMult, transferRateMult, light, category == Category.REDSTONE || triggerTransfer, lamp, sensor, category, redstone, switch (redstone) { + case ALWAYS_ACTIVE -> (RedstoneStateModifier) context -> InteractionResult.SUCCESS; + case ALWAYS_INACTIVE -> (RedstoneStateModifier) context -> InteractionResult.FAIL; + default -> RedstoneStateModifier.PASS; + }, switch (redstone) { + case INVERTED -> (RedstoneStateModifier) context -> context.active() ? InteractionResult.FAIL : InteractionResult.SUCCESS; + default -> RedstoneStateModifier.PASS; + }); + } + + private PastelUpgradeSignature(Holder upgradeItem, String name, int stack, int speed, int slotRows, float stackMult, float speedMult, float transferRateMult, boolean light, boolean triggerTransfer, boolean lamp, boolean sensor, Category category, RedstoneBehavior redstone, RedstoneStateModifier preProcessor, RedstoneStateModifier postProcessor) { this.upgradeItem = upgradeItem; this.name = name; - this.outerRing = outerRing; - this.innerRing = innerRing; + this.innerRing = SpectrumCommon.locate(INNER_RING_BASE_PATH + name + ".png"); + this.outerRing = category == Category.REDSTONE ? SpectrumCommon.locate(REDSTONE_RING_BASE_PATH + name + ".png") : SpectrumCommon.locate(OUTER_RING_BASE_PATH + name + ".png"); this.stack = stack; this.speed = speed; this.slotRows = slotRows; @@ -40,6 +111,7 @@ private PastelUpgradeSignature(Item upgradeItem, String name, ResourceLocation o this.preProcessor = preProcessor; this.postProcessor = postProcessor; this.sensor = sensor; + this.redstone = redstone; } public ResourceLocation outerRing() { @@ -49,173 +121,7 @@ public ResourceLocation outerRing() { public ResourceLocation innerRing() { return innerRing; } - - public static Builder builder(Item upgradeItem, Category category, String namespace) { - return new Builder(upgradeItem, category, namespace); - } - - public static final class Builder { - private final Item upgradeItem; - private final Category category; - private final String namespace; - private String name, outerRing, innerRing; - private int stackMod, speedMod, slotRowMod; - private float stackMult = 1, speedMult = 1, transferRateMult = 1; - private boolean light, triggerTransfer, lamp, sensor; - private RedstoneStateModifier preProcessor = RedstoneStateModifier.PASS; - private RedstoneStateModifier postProcessor = RedstoneStateModifier.PASS; - - public Builder(Item upgradeItem, Category category, String namespace) { - this.upgradeItem = upgradeItem; - this.category = category; - this.namespace = namespace; - } - - public Builder named(String name) { - name(name); - outerRing(name); - innerRing(name); - return this; - } - - public Builder name(String name) { - this.name = name; - return this; - } - - public Builder outerRing(String name) { - this.outerRing = OUTER_RING_BASE_PATH + name + ".png"; - return this; - } - - public Builder innerRing(String name) { - this.innerRing = INNER_RING_BASE_PATH + name + ".png"; - return this; - } - - public Builder redstone(String name) { - name(name); - this.outerRing = REDSTONE_RING_BASE_PATH + name + ".png"; - return this; - } - - public Builder stackMod(int stackMod) { - this.stackMod = stackMod; - return this; - } - - public Builder speedMod(int speedMod) { - this.speedMod = speedMod; - return this; - } - - public Builder slotRowMod(int slotRowMod) { - this.slotRowMod = slotRowMod; - return this; - } - - public Builder stackMult(float stackMult) { - this.stackMult = stackMult; - return this; - } - - public Builder speedMult(float speedMult) { - this.speedMult = speedMult; - return this; - } - - public Builder light() { - this.light = true; - return this; - } - - public Builder transferRateMultiplier(float transferRateMultiplier) { - this.transferRateMult = transferRateMultiplier; - return this; - } - - public Builder triggerTransfer() { - this.triggerTransfer = true; - return this; - } - - public Builder lamp() { - this.lamp = true; - return this; - } - - public Builder sensor() { - this.sensor = true; - return this; - } - - public Builder redstonePreProcess(RedstoneStateModifier modifier) { - this.preProcessor = modifier; - return this; - } - - public Builder redstonePostProcess(RedstoneStateModifier modifier) { - this.postProcessor = modifier; - return this; - } - - public PastelUpgradeSignature build() { - verify(); - - return new PastelUpgradeSignature( - upgradeItem, - name, - ResourceLocation.fromNamespaceAndPath(namespace, outerRing), - ResourceLocation.fromNamespaceAndPath(namespace, innerRing), - stackMod, - speedMod, - slotRowMod, - stackMult, - speedMult, - transferRateMult, - light, - triggerTransfer, - lamp, - sensor, - category, - preProcessor, - postProcessor - ); - } - - public PastelUpgradeSignature buildRedstone() { - verify(); - - return new PastelUpgradeSignature( - upgradeItem, - name, - ResourceLocation.fromNamespaceAndPath(namespace, outerRing), - null, - 0, - 0, - 0, - 0, - 0, - 1, - false, - triggerTransfer, - lamp, - sensor, - category, - preProcessor, - postProcessor - ); - } - - private void verify() { - if (name == null) - throw new IllegalStateException("PastelUpgradeSignature name can't be null"); - - if (outerRing == null) - throw new IllegalStateException("PastelUpgradeSignature main path can't be null"); - } - } - + /** * SUCCESS = on

* FAIL = off

@@ -230,44 +136,35 @@ public interface RedstoneStateModifier { public record RedstoneContext(PastelUpgradeable upgradeable, Level world, BlockPos pos, boolean active) { } - - public abstract static class Category { - public abstract boolean compoundsWith(Category other); - - public static Category simple() { - return new Category() { - @Override - public boolean compoundsWith(Category other) { - return other == this; - } - }; - } - - public static Category nonCompounding() { - return new Category() { - @Override - public boolean compoundsWith(Category other) { - return false; - } - }; + + public enum Category implements StringRepresentable { + SIMPLE("simple", false, false), + NON_COMPOUNDING("non_compounding", true, false), + REDSTONE("redstone", true, true); + + public static final Codec CODEC = StringRepresentable.fromEnum(Category::values); + + private final String name; + private final boolean nonCompounding; + private final boolean isRedstone; + + Category(String name, boolean nonCompounding, boolean isRedstone) { + this.name = name; + this.nonCompounding = nonCompounding; + this.isRedstone = isRedstone; } - - public static Category redstone() { - return new Category() { - @Override - public boolean compoundsWith(Category other) { - return false; - } - - @Override - public boolean isRedstone() { - return true; - } - }; + + public boolean compoundsWith(Category other) { + return nonCompounding ? false : other == this; } - + public boolean isRedstone() { - return false; + return isRedstone; + } + + @Override + public String getSerializedName() { + return name; } } } diff --git a/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeable.java b/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeable.java index 3cc074411b..c8d913c7e1 100644 --- a/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeable.java +++ b/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeable.java @@ -1,10 +1,12 @@ package de.dafuqs.spectrum.api.pastel_network; +import org.jspecify.annotations.*; + import java.util.*; public interface PastelUpgradeable { - default void apply(PastelUpgradeSignature upgrade, List previousUpgrades) { + default void apply(PastelUpgradeSignature upgrade, @Nullable PastelUpgradeSignature previous) { if (upgrade.light) { markLit(); } @@ -21,7 +23,7 @@ default void apply(PastelUpgradeSignature upgrade, List if (upgrade.category.isRedstone()) return; - if (previousUpgrades.stream().anyMatch(u -> u.category.compoundsWith(upgrade.category))) { + if (previous != null && previous.category.compoundsWith(upgrade.category)) { applyCompounding(upgrade); } else { applySimple(upgrade); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java index 77556ea135..beb8188425 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java @@ -89,9 +89,9 @@ public void onRemove(BlockState state, Level world, BlockPos pos, BlockState new PastelNodeBlockEntity blockEntity = getBlockEntity(world, pos); if (blockEntity != null) { blockEntity.onBroken(); - blockEntity.getOuterRing().ifPresent(r -> popResource(world, pos, r.upgradeItem.getDefaultInstance())); - blockEntity.getInnerRing().ifPresent(r -> popResource(world, pos, r.upgradeItem.getDefaultInstance())); - blockEntity.getRedstoneRing().ifPresent(r -> popResource(world, pos, r.upgradeItem.getDefaultInstance())); + blockEntity.getOuterRing().ifPresent(r -> popResource(world, pos, r.upgradeItem.value().getDefaultInstance())); + blockEntity.getInnerRing().ifPresent(r -> popResource(world, pos, r.upgradeItem.value().getDefaultInstance())); + blockEntity.getRedstoneRing().ifPresent(r -> popResource(world, pos, r.upgradeItem.value().getDefaultInstance())); } } super.onRemove(state, world, pos, newState, moved); @@ -139,7 +139,7 @@ public BlockState updateShape(BlockState state, Direction direction, BlockState @Override public ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { - @Nullable PastelNodeBlockEntity blockEntity = getBlockEntity(world, pos); + PastelNodeBlockEntity blockEntity = getBlockEntity(world, pos); if (blockEntity == null) { return super.useItemOn(stack, state, world, pos, player, hand, hit); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java index 625211be39..58c790c68c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java @@ -49,27 +49,27 @@ public class PastelNodeBlockEntity extends BlockEntity implements FilterConfigur protected UUID nodeId = UUID.randomUUID(); protected Optional networkUUID = Optional.empty(); - protected Optional outerRing, innerRing, redstoneRing; + protected Optional> outerRing, innerRing, redstoneRing; protected Optional color = Optional.empty(); protected long lastTransferTick = 0; - protected final long cachedRedstonePowerTick = 0; + protected long cachedRedstonePowerTick = 0; protected boolean cachedUnpowered = true; protected Map, Long> activeTransfers = new Object2LongArrayMap<>(); // upgrade impl stuff - protected boolean lit, triggerTransfer, triggered, waiting, lamp, sensor, updated; + protected boolean lit, triggerTransfer, triggered, waiting, lamp, sensor, upgradesInitialized; protected int transferCount = PastelTransmissionLogic.DEFAULT_MAX_TRANSFER_AMOUNT; protected int transferTime = PastelTransmissionLogic.DEFAULT_TRANSFER_TICKS_PER_NODE; protected int transferRate = PastelTransmissionLogic.DEFAULT_TRANSFER_RATE; protected int filterSlotRows = DEFAULT_FILTER_SLOT_ROWS; - protected boolean isInitialized = false; + protected boolean networkInitialized = false; private final List filterItems; float rotationTarget, crystalRotation, lastRotationTarget, heightTarget, crystalHeight, lastHeightTarget, alphaTarget, ringAlpha, lastAlphaTarget; long creationStamp = -1, interpTicks, interpLength = -1, spinTicks; - private @Nullable ConnectionState connectionState; + private ConnectionState connectionState = ConnectionState.DISCONNECTED; private final Object2BooleanMap> filteredTags; private boolean allTagsDeny = true; @@ -83,19 +83,19 @@ public PastelNodeBlockEntity(BlockPos blockPos, BlockState blockState) { this.redstoneRing = Optional.empty(); } - public static void tick(@NotNull Level world, BlockPos pos, BlockState state, PastelNodeBlockEntity node) { - if (!node.isInitialized && !world.isClientSide()) { // kinda onLoad()? + public static void tick(Level level, BlockPos pos, BlockState state, PastelNodeBlockEntity node) { + if (!node.networkInitialized && !level.isClientSide()) { // kinda onLoad()? node.getServerNetwork().ifPresent(network -> network.initializeNode(node)); - node.isInitialized = true; + node.networkInitialized = true; } if (node.lamp && state.getValue(BlockStateProperties.LIT) != node.isEnabled()) { - world.setBlockAndUpdate(pos, state.setValue(BlockStateProperties.LIT, node.cachedUnpowered)); + level.setBlockAndUpdate(pos, state.setValue(BlockStateProperties.LIT, node.cachedUnpowered)); } //Trigger transfer logic needs to be ticked here if (node.triggerTransfer) { - var powered = world.hasNeighborSignal(pos); + var powered = level.hasNeighborSignal(pos); if (node.waiting && !powered) { node.waiting = false; @@ -106,7 +106,7 @@ public static void tick(@NotNull Level world, BlockPos pos, BlockState state, Pa } } - if (world.isClientSide()) { + if (level.isClientSide()) { if (node.networkUUID.isEmpty()) { node.changeConnectionState(ConnectionState.DISCONNECTED); node.interpLength = 17; @@ -126,9 +126,9 @@ public static void tick(@NotNull Level world, BlockPos pos, BlockState state, Pa if (node.spinTicks > 0) node.spinTicks--; - } else if (!node.updated) { + } else if (!node.upgradesInitialized) { node.updateUpgrades(); - node.updated = true; + node.upgradesInitialized = true; } } @@ -143,22 +143,22 @@ public void changeConnectionState(ConnectionState connectionState) { } public Optional getInnerRing() { - return innerRing; + return this.innerRing.map(Holder.Reference::value); } public Optional getOuterRing() { - return outerRing; + return this.outerRing.map(Holder.Reference::value); } public Optional getRedstoneRing() { - return redstoneRing; + return this.redstoneRing.map(Holder.Reference::value); } // outer goes first, then inner, then redstone public boolean tryInteractRings(ItemStack item, PastelNodeType type) { - var upgrade = SpectrumPastelUpgradeSignatures.of(item); + var upgrade = PastelUpgradeSignature.of(getLevel(), item.getItem()); - if (upgrade.category.isRedstone()) { + if (upgrade.value().category.isRedstone()) { if (redstoneRing.isEmpty()) { redstoneRing = Optional.of(upgrade); return true; @@ -183,13 +183,13 @@ public ItemStack tryRemoveUpgrade() { var stack = ItemStack.EMPTY; if (redstoneRing.isPresent()) { - stack = redstoneRing.get().upgradeItem.getDefaultInstance(); + stack = redstoneRing.get().value().upgradeItem.value().getDefaultInstance(); redstoneRing = Optional.empty(); } else if (innerRing.isPresent()) { - stack = innerRing.get().upgradeItem.getDefaultInstance(); + stack = innerRing.get().value().upgradeItem.value().getDefaultInstance(); innerRing = Optional.empty(); } else if (outerRing.isPresent()) { - stack = outerRing.get().upgradeItem.getDefaultInstance(); + stack = outerRing.get().value().upgradeItem.value().getDefaultInstance(); outerRing = Optional.empty(); } @@ -211,9 +211,9 @@ public void updateUpgrades() { sensor = false; //First one processed can't compound because it has nothing to compound on - outerRing.ifPresent(r -> apply(r, Collections.emptyList())); - innerRing.ifPresent(r -> apply(r, outerRing.map(List::of).orElse(Collections.emptyList()))); - redstoneRing.ifPresent(r -> apply(r, Collections.emptyList())); + outerRing.ifPresent(r -> apply(r.value(), null)); + innerRing.ifPresent(r -> apply(r.value(), outerRing.get().value())); + redstoneRing.ifPresent(r -> apply(r.value(), null)); // Sanity transferCount = Math.max(transferCount, 1); @@ -264,7 +264,7 @@ public float getRedstoneAlphaMult() { } public boolean isEnabled() { - InteractionResult result = redstoneRing.map(r -> r.preProcessor + InteractionResult result = redstoneRing.map(r -> r.value().preProcessor .apply(new PastelUpgradeSignature.RedstoneContext(this, level, worldPosition, cachedUnpowered))) .orElse(InteractionResult.PASS); @@ -278,9 +278,10 @@ public boolean isEnabled() { if (time > this.cachedRedstonePowerTick && !getBlockState().getValue(PastelNodeBlock.REDSTONE_EMITTING)) { this.cachedUnpowered = level.getBestNeighborSignal(this.worldPosition) == 0; } + this.cachedRedstonePowerTick = time; boolean notPowered = redstoneRing.map(r -> { - InteractionResult post = r.postProcessor.apply(new PastelUpgradeSignature.RedstoneContext(this, level, worldPosition, cachedUnpowered)); + InteractionResult post = r.value().postProcessor.apply(new PastelUpgradeSignature.RedstoneContext(this, level, worldPosition, cachedUnpowered)); if (post == InteractionResult.SUCCESS) return true; @@ -341,14 +342,31 @@ protected void loadAdditional(CompoundTag nbt, HolderLookup.Provider registryLoo } } this.color = nbt.contains("color_id", Tag.TAG_INT) ? Optional.of(DyeColor.byId(nbt.getInt("color_id"))) : Optional.empty(); - this.outerRing = nbt.contains("outer_ring") ? Optional.ofNullable(SpectrumRegistries.PASTEL_UPGRADE.get(ResourceLocation.tryParse(nbt.getString("outer_ring")))) : Optional.empty(); - this.innerRing = nbt.contains("inner_ring") ? Optional.ofNullable(SpectrumRegistries.PASTEL_UPGRADE.get(ResourceLocation.tryParse(nbt.getString("inner_ring")))) : Optional.empty(); - this.redstoneRing = nbt.contains("redstone_ring") ? Optional.ofNullable(SpectrumRegistries.PASTEL_UPGRADE.get(ResourceLocation.tryParse(nbt.getString("redstone_ring")))) : Optional.empty(); + + this.outerRing = Optional.empty(); + this.innerRing = Optional.empty(); + this.redstoneRing = Optional.empty(); + Optional.ofNullable(ResourceLocation.tryParse(nbt.getString("outer_ring"))) + .map((resourceLocation) -> ResourceKey.create(SpectrumRegistryKeys.PASTEL_UPGRADE, resourceLocation)) + .flatMap((resourceKey) -> registryLookup.lookupOrThrow(SpectrumRegistryKeys.PASTEL_UPGRADE).get(resourceKey)) + .ifPresent(pastelUpgradeSignatureReference -> outerRing = Optional.of(pastelUpgradeSignatureReference)); + + Optional.ofNullable(ResourceLocation.tryParse(nbt.getString("inner_ring"))) + .map((resourceLocation) -> ResourceKey.create(SpectrumRegistryKeys.PASTEL_UPGRADE, resourceLocation)) + .flatMap((resourceKey) -> registryLookup.lookupOrThrow(SpectrumRegistryKeys.PASTEL_UPGRADE).get(resourceKey)) + .ifPresent(pastelUpgradeSignatureReference -> innerRing = Optional.of(pastelUpgradeSignatureReference)); + + Optional.ofNullable(ResourceLocation.tryParse(nbt.getString("redstone_ring"))) + .map((resourceLocation) -> ResourceKey.create(SpectrumRegistryKeys.PASTEL_UPGRADE, resourceLocation)) + .flatMap((resourceKey) -> registryLookup.lookupOrThrow(SpectrumRegistryKeys.PASTEL_UPGRADE).get(resourceKey)) + .ifPresent(pastelUpgradeSignatureReference -> redstoneRing = Optional.of(pastelUpgradeSignatureReference)); if (this.getNodeType().usesFilters()) { FilterConfigurable.readFilterNbt(nbt, this.filterItems); this.updateTagFilteringItems(); } + + this.upgradesInitialized = false; } @Override @@ -376,9 +394,16 @@ protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLoo if (this.getNodeType().usesFilters()) { FilterConfigurable.writeFilterNbt(nbt, this.filterItems); } - outerRing.ifPresent(r -> nbt.putString("outer_ring", SpectrumPastelUpgradeSignatures.toString(r))); - innerRing.ifPresent(r -> nbt.putString("inner_ring", SpectrumPastelUpgradeSignatures.toString(r))); - redstoneRing.ifPresent(r -> nbt.putString("redstone_ring", SpectrumPastelUpgradeSignatures.toString(r))); + + this.outerRing.ifPresent(pastelUpgradeSignatureReference -> pastelUpgradeSignatureReference.unwrapKey().ifPresent((resourceKey) -> { + nbt.putString("outer_ring", resourceKey.location().toString()); + })); + this.innerRing.ifPresent(pastelUpgradeSignatureReference -> pastelUpgradeSignatureReference.unwrapKey().ifPresent((resourceKey) -> { + nbt.putString("inner_ring", resourceKey.location().toString()); + })); + this.redstoneRing.ifPresent(pastelUpgradeSignatureReference -> pastelUpgradeSignatureReference.unwrapKey().ifPresent((resourceKey) -> { + nbt.putString("redstone_ring", resourceKey.location().toString()); + })); } @Override @@ -739,9 +764,9 @@ public void applyCompounding(PastelUpgradeSignature upgrade) { @Override public String toString() { - return this.getNodeType().toString() + "-" + - this.getColor().toString() + "-" + - this.getBlockPos().toString() + "-" + + return this.getNodeType() + "-" + + this.getColor() + "-" + + this.getBlockPos() + "-" + this.getNodeId(); } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java deleted file mode 100644 index e1b36fdd0f..0000000000 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumPastelUpgradeSignatures.java +++ /dev/null @@ -1,75 +0,0 @@ -package de.dafuqs.spectrum.registries; - -import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.pastel_network.*; -import net.minecraft.world.*; -import net.minecraft.world.item.*; -import net.neoforged.bus.api.*; -import net.neoforged.neoforge.registries.*; - -import java.util.function.*; - -public class SpectrumPastelUpgradeSignatures { - - private static final DeferredRegister REGISTRAR = DeferredRegister.create(SpectrumRegistryKeys.PASTEL_UPGRADE, SpectrumCommon.MOD_ID); - - public static final PastelUpgradeSignature.Category NON_COMPOUNDING = PastelUpgradeSignature.Category.nonCompounding(); - public static final PastelUpgradeSignature.Category STACK = PastelUpgradeSignature.Category.simple(); - public static final PastelUpgradeSignature.Category SPEED = PastelUpgradeSignature.Category.simple(); - public static final PastelUpgradeSignature.Category FILTER = PastelUpgradeSignature.Category.simple(); - public static final PastelUpgradeSignature.Category REDSTONE = PastelUpgradeSignature.Category.redstone(); - - public static void register(IEventBus eventBus) { - register("weak_stack", () -> PastelUpgradeSignature.builder(SpectrumItems.RAW_BLOODSTONE.get(), STACK, SpectrumCommon.MOD_ID) - .named("weak_stack").stackMod(3).stackMult(2).build()); - register("strong_stack", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_BLOODSTONE.get(), STACK, SpectrumCommon.MOD_ID) - .named("strong_stack").stackMod(15).stackMult(4).build()); - register("weak_speed", () -> PastelUpgradeSignature.builder(SpectrumItems.RAW_MALACHITE.get(), SPEED, SpectrumCommon.MOD_ID) - .named("weak_speed").speedMod(-5).speedMult(0.8F).build()); - register("strong_speed", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_MALACHITE.get(), SPEED, SpectrumCommon.MOD_ID) - .named("strong_speed").speedMod(-10).speedMult(0.5F).build()); - register("weak_filter", () -> PastelUpgradeSignature.builder(SpectrumItems.RAW_AZURITE.get(), FILTER, SpectrumCommon.MOD_ID) - .named("weak_filter").slotRowMod(1).build()); - register("strong_filter", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_AZURITE.get(), FILTER, SpectrumCommon.MOD_ID) - .named("strong_filter").slotRowMod(2).build()); - register("rate", () -> PastelUpgradeSignature.builder(SpectrumItems.RESONANCE_SHARD.get(), NON_COMPOUNDING, SpectrumCommon.MOD_ID) - .named("rate").transferRateMultiplier(0.5F).build()); - register("light", () -> PastelUpgradeSignature.builder(SpectrumItems.SHIMMERSTONE_GEM.get(), NON_COMPOUNDING, SpectrumCommon.MOD_ID) - .named("light").light().build()); - register("always_active", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_REDSTONE.get(), REDSTONE, SpectrumCommon.MOD_ID) - .redstone("always_active").redstonePreProcess(context -> InteractionResult.SUCCESS).buildRedstone()); - register("always_inactive", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_LAPIS.get(), REDSTONE, SpectrumCommon.MOD_ID) - .redstone("always_inactive").redstonePreProcess(context -> InteractionResult.FAIL).buildRedstone()); - register("inverted", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_COAL.get(), REDSTONE, SpectrumCommon.MOD_ID) - .redstone("inverted").redstonePostProcess(context -> context.active() ? InteractionResult.FAIL : InteractionResult.SUCCESS).buildRedstone()); - register("sensor", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_ECHO.get(), REDSTONE, SpectrumCommon.MOD_ID) - .redstone("sensor").sensor().buildRedstone()); - register("trigger", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_QUARTZ.get(), REDSTONE, SpectrumCommon.MOD_ID) - .redstone("trigger").triggerTransfer().buildRedstone()); - register("lamp", () -> PastelUpgradeSignature.builder(SpectrumItems.PURE_GLOWSTONE.get(), REDSTONE, SpectrumCommon.MOD_ID) - .redstone("lamp").lamp().buildRedstone()); - - REGISTRAR.register(eventBus); - } - - private static void register(String name, Supplier upgrade) { - REGISTRAR.register(name, upgrade); - } - - public static PastelUpgradeSignature of(ItemStack stack) { - return of(stack.getItem()); - } - - public static PastelUpgradeSignature of(Item item) { - return SpectrumRegistries.PASTEL_UPGRADE - .stream() - .filter(upgrade -> upgrade.upgradeItem == item) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException("Attempted to fetch an upgrade that does not exist")); - } - - public static String toString(PastelUpgradeSignature upgrade) { - return SpectrumRegistries.PASTEL_UPGRADE.getKey(upgrade).toString(); - } -} - diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java index 63468442cf..f87c73af2d 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRegistries.java @@ -24,7 +24,6 @@ public class SpectrumRegistries { public static final Registry GEMSTONE_COLOR = register(SpectrumRegistryKeys.GEMSTONE_COLOR, true); public static final Registry GLASS_ARROW_VARIANT = register(SpectrumRegistryKeys.GLASS_ARROW_VARIANT, true); public static final Registry INK_COLOR = register(SpectrumRegistryKeys.INK_COLOR, true); - public static final Registry PASTEL_UPGRADE = register(SpectrumRegistryKeys.PASTEL_UPGRADE, false); public static final Registry> RESONANCE_PROCESSOR_TYPE = register(SpectrumRegistryKeys.RESONANCE_PROCESSOR_TYPE, false); public static final Registry PASTEL_PAYLOAD_TYPE = register(SpectrumRegistryKeys.PASTEL_PAYLOAD_TYPE, false); public static final Registry> PASTEL_PAYLOAD = register(SpectrumRegistryKeys.PASTEL_PAYLOAD, false); @@ -38,7 +37,6 @@ public static void registerBuiltInRegistries(NewRegistryEvent event) { event.register(GEMSTONE_COLOR); event.register(GLASS_ARROW_VARIANT); event.register(INK_COLOR); - event.register(PASTEL_UPGRADE); event.register(RESONANCE_PROCESSOR_TYPE); event.register(PASTEL_PAYLOAD_TYPE); event.register(PASTEL_PAYLOAD); @@ -50,6 +48,7 @@ public static void registerDynamicRegistries(DataPackRegistryEvent.NewRegistry e event.dataPackRegistry(SpectrumRegistryKeys.LIZARD_FRILL_VARIANT, LizardFrillVariant.DIRECT_CODEC, LizardFrillVariant.DIRECT_CODEC); event.dataPackRegistry(SpectrumRegistryKeys.LIZARD_HORN_VARIANT, LizardHornVariant.DIRECT_CODEC, LizardHornVariant.DIRECT_CODEC); event.dataPackRegistry(SpectrumRegistryKeys.GEODE_ORES, GeodeOreDefinition.CODEC, GeodeOreDefinition.CODEC); + event.dataPackRegistry(SpectrumRegistryKeys.PASTEL_UPGRADE, PastelUpgradeSignature.CODEC, PastelUpgradeSignature.CODEC); } public static T getRandomTagEntry(Registry registry, TagKey tag, RandomSource random, T fallback) { diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/always_active.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/always_active.json new file mode 100644 index 0000000000..367c0f422b --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/always_active.json @@ -0,0 +1,6 @@ +{ + "name": "always_active", + "category": "redstone", + "item": "spectrum:pure_redstone", + "redstone": "always_active" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/always_inactive.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/always_inactive.json new file mode 100644 index 0000000000..c377587712 --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/always_inactive.json @@ -0,0 +1,6 @@ +{ + "name": "always_inactive", + "category": "redstone", + "item": "spectrum:pure_lapis", + "redstone": "always_inactive" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/inverted.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/inverted.json new file mode 100644 index 0000000000..e2cc459b37 --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/inverted.json @@ -0,0 +1,6 @@ +{ + "name": "inverted", + "category": "redstone", + "item": "spectrum:pure_coal", + "redstone": "inverted" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/lamp.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/lamp.json new file mode 100644 index 0000000000..ea63b7b32f --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/lamp.json @@ -0,0 +1,6 @@ +{ + "name": "lamp", + "category": "redstone", + "item": "spectrum:pure_glowstone", + "lamp": true +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/light.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/light.json new file mode 100644 index 0000000000..eff2b05264 --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/light.json @@ -0,0 +1,6 @@ +{ + "name": "light", + "category": "non_compounding", + "item": "spectrum:shimmerstone_gem", + "light": true +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/rate.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/rate.json new file mode 100644 index 0000000000..b2903ff90b --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/rate.json @@ -0,0 +1,6 @@ +{ + "name": "rate", + "category": "non_compounding", + "item": "spectrum:resonance_shard", + "transfer_rate_mod": 0.5 +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/sensor.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/sensor.json new file mode 100644 index 0000000000..892fb71ec2 --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/sensor.json @@ -0,0 +1,6 @@ +{ + "name": "sensor", + "category": "redstone", + "item": "spectrum:pure_echo", + "sensor": true +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_filter.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_filter.json new file mode 100644 index 0000000000..dbd50a95a0 --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_filter.json @@ -0,0 +1,6 @@ +{ + "name": "strong_filter", + "category": "simple", + "item": "spectrum:pure_azurite", + "filter_row_mod": 2 +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_speed.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_speed.json new file mode 100644 index 0000000000..b97f66c9e7 --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_speed.json @@ -0,0 +1,7 @@ +{ + "name": "strong_speed", + "category": "simple", + "item": "spectrum:pure_malachite", + "speed_mod": -10, + "speed_multi": 0.5 +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_stack.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_stack.json new file mode 100644 index 0000000000..ab10c30beb --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_stack.json @@ -0,0 +1,7 @@ +{ + "name": "strong_stack", + "category": "simple", + "item": "spectrum:pure_bloodstone", + "stack_mod": 15, + "stack_multi": 4 +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/trigger.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/trigger.json new file mode 100644 index 0000000000..52a58bdbe2 --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/trigger.json @@ -0,0 +1,6 @@ +{ + "name": "trigger", + "category": "redstone", + "item": "spectrum:pure_quartz", + "trigger": true +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_filter.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_filter.json new file mode 100644 index 0000000000..8c034900cc --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_filter.json @@ -0,0 +1,6 @@ +{ + "name": "weak_filter", + "category": "simple", + "item": "spectrum:raw_azurite", + "filter_row_mod": 1 +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_speed.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_speed.json new file mode 100644 index 0000000000..6078a577ed --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_speed.json @@ -0,0 +1,7 @@ +{ + "name": "weak_speed", + "category": "simple", + "item": "spectrum:raw_malachite", + "speed_mod": -5, + "speed_multi": 0.8 +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_stack.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_stack.json new file mode 100644 index 0000000000..1b74aa8db9 --- /dev/null +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_stack.json @@ -0,0 +1,7 @@ +{ + "name": "weak_stack", + "category": "simple", + "item": "spectrum:raw_bloodstone", + "stack_mod": 3, + "stack_multi": 2 +} \ No newline at end of file From b935740ec2d02d875be82d84981577ba3c07d9da Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 10:34:07 +0200 Subject: [PATCH 172/477] do not completely cancel fall damage entirely. --- .../de/dafuqs/spectrum/registries/SpectrumEventListeners.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index 0e7e035a2f..16f9489b49 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -1171,7 +1171,7 @@ public static float applyGravityBasedOnInventory(LivingEntity entity, IItemHandl // if falling very slowly => reset fall distance / damage if (appliedGravityThisTick > 0 && entity.getDeltaMovement().y > -0.4) { - entity.fallDistance = 0; + entity.fallDistance /= 2; } return appliedGravityThisTick; From 39de6f1b5f4811f504b8be81e9db1602bfcf6403 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 10:53:33 +0200 Subject: [PATCH 173/477] replace intellij annotations --- .../spectrum/api/ink/InkTransferHelper.java | 5 --- .../spectrum/api/ink/storage/InkStorage.java | 1 - .../PastelUpgradeSignature.java | 8 ---- .../api/pastel_network/PastelUpgradeable.java | 2 - .../BottomlessBundleItem.java | 6 --- .../chests/BlackHoleChestBlockEntity.java | 4 +- .../blocks/conditional/CloakedOreBlock.java | 3 +- .../blocks/ink/BaseInkBlockEntity.java | 2 +- .../blocks/ink/gen/InkGeneratorBlock.java | 2 +- .../ink/sink/CinderhearthBlockEntity.java | 1 - .../blocks/ink/sink/ColorPickerBlock.java | 2 +- .../ink/sink/ColorPickerBlockEntity.java | 6 +-- .../blocks/ink/sink/CrystallarieumBlock.java | 1 - .../blocks/ink/sink/TintingStationBlock.java | 2 +- .../blocks/jade_vines/JadeVinePlantBlock.java | 5 +-- .../blocks/memory/MemoryBlockEntity.java | 4 +- .../blocks/mob_head/SpectrumSkullBlock.java | 4 +- .../mob_head/SpectrumWallSkullBlock.java | 4 +- .../network/PastelTransmissionLogic.java | 5 +-- .../nodes/PastelNodeBlockEntity.java | 2 +- .../payloads/FluidPastelPayload.java | 13 +------ .../payloads/FluidPastelPayloadType.java | 2 +- .../payloads/InkPastelPayload.java | 12 ------ .../payloads/InkPastelPayloadType.java | 2 +- .../payloads/ItemPastelPayload.java | 1 - .../payloads/ItemPastelPayloadType.java | 2 +- .../blocks/pedestal/PedestalBlockEntity.java | 4 +- .../blocks/shooting_star/ShootingStar.java | 2 - .../dafuqs/spectrum/compat/ae2/AE2Compat.java | 1 - .../BookPedestalCraftingPageRenderer.java | 2 - .../entity/entity/InkProjectileEntity.java | 2 +- .../de/dafuqs/spectrum/helpers/Support.java | 2 +- .../spectrum/helpers/TooltipHelper.java | 1 - .../spectrum/helpers/VariantHelper.java | 2 +- .../spectrum/inventories/BaseInkScreen.java | 5 +-- .../inventories/CinderhearthScreen.java | 2 - .../inventories/ColorPickerScreen.java | 6 +-- ...GenericSpectrumContainerScreenHandler.java | 25 ++++-------- .../inventories/InkStorageScreen.java | 6 +-- .../spectrum/inventories/PedestalScreen.java | 2 - .../Spectrum3x3ContainerScreen.java | 2 - .../Spectrum3x3ContainerScreenHandler.java | 19 +++------- .../SpectrumGenericContainerScreen.java | 2 - .../inventories/TintingStationScreen.java | 7 +--- .../slots/ColorPickerInputSlot.java | 3 +- .../inventories/slots/InkInputSlot.java | 2 - .../widgets/ColorSelectionWidget.java | 6 +-- .../widgets/ink/InkListWidget.java | 7 ++-- .../ink/InkListWidgetWithBorderAndTitle.java | 3 +- .../inventories/widgets/ink/InkPieWidget.java | 7 ++-- .../widgets/ink/StackedInkBarWidget.java | 7 ++-- .../inventories/widgets/ink/package-info.java | 7 ++++ .../items/magic_items/RadianceStaffItem.java | 1 - .../items/tools/OmniAcceleratorItem.java | 5 --- .../items/trinkets/JeopardantItem.java | 4 -- .../mixin/AbstractBlockStateMixin.java | 6 --- .../spectrum/mixin/LivingEntityMixin.java | 3 -- .../mixin/accessors/LivingEntityAccessor.java | 3 -- .../mixin/client/ItemRendererMixin.java | 2 - .../client/PlayerEntityRendererMixin.java | 3 -- .../spectrum/recipe/GatedSpectrumRecipe.java | 1 - .../recipe/pedestal/PedestalRecipeTier.java | 3 -- .../registries/SpectrumEventListeners.java | 38 ++++++++----------- .../spectrum/registries/SpectrumItems.java | 1 - .../client/SpectrumClientEventListeners.java | 7 ---- .../dafuqs/spectrum/render/HudRenderers.java | 9 ----- .../render/animation/FlowHandler.java | 3 -- 67 files changed, 78 insertions(+), 246 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/package-info.java diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java b/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java index 40d0b23f20..43280e4654 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/InkTransferHelper.java @@ -1,15 +1,10 @@ package de.dafuqs.spectrum.api.ink; -import com.mojang.datafixers.util.*; import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.ink.storage.*; -import de.dafuqs.spectrum.progression.*; import de.dafuqs.spectrum.registries.*; import it.unimi.dsi.fastutil.objects.*; -import net.minecraft.server.level.*; -import net.minecraft.world.entity.player.*; -import net.minecraft.world.item.*; import javax.annotation.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorage.java b/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorage.java index 2e47d4efca..a5bcad1332 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorage.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/storage/InkStorage.java @@ -5,7 +5,6 @@ import net.minecraft.client.gui.components.*; import net.minecraft.network.chat.*; import net.minecraft.world.*; -import org.jetbrains.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java b/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java index 601acdd573..6d57978a4b 100644 --- a/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java +++ b/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java @@ -3,21 +3,13 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.predicate.block.*; -import de.dafuqs.spectrum.data_loaders.*; -import de.dafuqs.spectrum.recipe.pedestal.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.resources.*; import net.minecraft.util.*; import net.minecraft.world.*; -import net.minecraft.world.entity.animal.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; -import net.minecraft.world.level.levelgen.feature.configurations.*; - -import java.util.*; -import java.util.function.*; public final class PastelUpgradeSignature { diff --git a/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeable.java b/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeable.java index c8d913c7e1..950a1060c1 100644 --- a/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeable.java +++ b/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeable.java @@ -2,8 +2,6 @@ import org.jspecify.annotations.*; -import java.util.*; - public interface PastelUpgradeable { default void apply(PastelUpgradeSignature upgrade, @Nullable PastelUpgradeSignature previous) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleItem.java b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleItem.java index 0ca309029c..3697118433 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleItem.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/bottomless_bundle/BottomlessBundleItem.java @@ -1,15 +1,10 @@ package de.dafuqs.spectrum.blocks.bottomless_bundle; -import com.mojang.blaze3d.vertex.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.items.tooltip.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; -import net.minecraft.client.renderer.*; -import net.minecraft.client.renderer.entity.*; -import net.minecraft.client.resources.model.*; import net.minecraft.core.*; import net.minecraft.core.dispenser.*; import net.minecraft.network.chat.*; @@ -26,7 +21,6 @@ import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; -import net.neoforged.api.distmarker.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlockEntity.java index 7cb8c8b42c..58d613fd1b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/BlackHoleChestBlockEntity.java @@ -28,8 +28,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; -import org.jetbrains.annotations.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.stream.*; @@ -191,7 +190,6 @@ private static void searchForNearbyEntities(BlackHoleChestBlockEntity blockEntit } } - @Contract("_, _ -> new") protected static AABB getBoxWithRadius(BlockPos blockPos, int radius) { return AABB.ofSize(Vec3.atCenterOf(blockPos), radius, radius, radius); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/conditional/CloakedOreBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/conditional/CloakedOreBlock.java index a8483f7fed..0f349fc6fe 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/conditional/CloakedOreBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/conditional/CloakedOreBlock.java @@ -15,7 +15,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jetbrains.annotations.*; +import org.jspecify.annotations.*; import java.util.*; @@ -58,6 +58,7 @@ public Tuple getItemCloak() { return new Tuple<>(this.asItem(), cloakBlockState.getBlock().asItem()); } + @Override public int getExpDrop(BlockState state, LevelAccessor level, BlockPos pos, @Nullable BlockEntity blockEntity, @Nullable Entity breaker, ItemStack tool) { if(breaker instanceof Player player && isVisibleTo(player)) { return super.getExpDrop(state, level, pos, blockEntity, breaker, tool); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlockEntity.java index b070881876..6ac081b5f9 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/BaseInkBlockEntity.java @@ -16,7 +16,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jetbrains.annotations.*; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/InkGeneratorBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/InkGeneratorBlock.java index f3dfc666aa..6796eb4adb 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/InkGeneratorBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/gen/InkGeneratorBlock.java @@ -4,7 +4,7 @@ import de.dafuqs.spectrum.helpers.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.entity.*; -import org.jetbrains.annotations.*; +import org.jspecify.annotations.*; public abstract class InkGeneratorBlock extends BaseInkBlock { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java index 00e1ef2e25..78fa4686d1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java @@ -9,7 +9,6 @@ import de.dafuqs.spectrum.api.recipe.*; import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.blocks.upgrade.*; -import de.dafuqs.spectrum.capabilities.*; import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.inventories.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlock.java index 1c52e9558b..f470df4055 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlock.java @@ -11,7 +11,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jetbrains.annotations.*; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlockEntity.java index 9a9a9c2502..54c4ee2e9a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/ColorPickerBlockEntity.java @@ -2,18 +2,14 @@ import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.ink.storage.*; -import de.dafuqs.spectrum.blocks.ink.*; import de.dafuqs.spectrum.blocks.ink.gen.*; -import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.config.*; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.inventories.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.particle.effect.*; import de.dafuqs.spectrum.recipe.color_picker.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; -import net.minecraft.nbt.*; import net.minecraft.network.*; import net.minecraft.network.chat.*; import net.minecraft.server.level.*; @@ -26,7 +22,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; -import org.jetbrains.annotations.*; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlock.java index c51a8bd7fa..e606132124 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlock.java @@ -2,7 +2,6 @@ import com.mojang.serialization.*; import de.dafuqs.spectrum.api.ink.color.*; -import de.dafuqs.spectrum.api.ink.storage.*; import de.dafuqs.spectrum.api.render.*; import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/TintingStationBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/TintingStationBlock.java index 750312a254..062a65d04c 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/TintingStationBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/TintingStationBlock.java @@ -11,7 +11,7 @@ import net.minecraft.world.level.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jetbrains.annotations.*; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVinePlantBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVinePlantBlock.java index 3df36bf25e..0c2b99387e 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVinePlantBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/JadeVinePlantBlock.java @@ -22,8 +22,7 @@ import net.minecraft.world.level.storage.loot.parameters.*; import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.*; -import org.jetbrains.annotations.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; @@ -226,13 +225,11 @@ public enum JadeVinesPlantPart implements StringRepresentable { MIDDLE, TIP; - @Contract(pure = true) public String toString() { return this.getSerializedName(); } @Override - @Contract(pure = true) public String getSerializedName() { return this == BASE ? "base" : this == MIDDLE ? "middle" : "tip"; } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/memory/MemoryBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/memory/MemoryBlockEntity.java index 5b9f8ef555..e07de1d4b1 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/memory/MemoryBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/memory/MemoryBlockEntity.java @@ -24,8 +24,7 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; -import org.jetbrains.annotations.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; @@ -42,7 +41,6 @@ public MemoryBlockEntity(BlockPos pos, BlockState state) { super(SpectrumBlockEntities.MEMORY.get(), pos, state); } - @Contract("_ -> new") public static Tuple getEggColorsForEntity(EntityType entityType) { SpawnEggItem spawnEggItem = SpawnEggItem.byId(entityType); if (spawnEggItem != null) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/mob_head/SpectrumSkullBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/mob_head/SpectrumSkullBlock.java index 126c35d47e..512c8e65ae 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/mob_head/SpectrumSkullBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/mob_head/SpectrumSkullBlock.java @@ -16,8 +16,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.pattern.*; import net.minecraft.world.level.block.state.predicate.*; -import org.jetbrains.annotations.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; @@ -129,7 +128,6 @@ public static Optional getSkullType(EntityType entityType) { return Optional.empty(); } - @Contract(pure = true) public static Collection getMobHeads() { return MOB_HEADS.values(); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/mob_head/SpectrumWallSkullBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/mob_head/SpectrumWallSkullBlock.java index ed6142c6c7..f97b541b6f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/mob_head/SpectrumWallSkullBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/mob_head/SpectrumWallSkullBlock.java @@ -8,8 +8,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jetbrains.annotations.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; @@ -38,7 +37,6 @@ public MapCodec codec() { return SpectrumWallSkullBlock.MOB_WALL_HEADS.get(skullType); } - @Contract(pure = true) public static Collection getMobWallHeads() { return SpectrumWallSkullBlock.MOB_WALL_HEADS.values(); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index f28792b2c2..8894c74636 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -8,12 +8,11 @@ import net.minecraft.core.*; import net.minecraft.resources.*; import net.neoforged.neoforge.registries.*; -import org.jetbrains.annotations.*; import org.jgrapht.*; import org.jgrapht.alg.interfaces.*; import org.jgrapht.alg.shortestpath.*; import org.jgrapht.graph.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; @@ -96,7 +95,7 @@ private Set getLoadedNodes(@Nullable PastelNodeType type) return this.network.getLoadedNodes(type); } - public Set getLoadedNodes(@NotNull DeferredHolder payloadType, @Nullable PastelNodeType nodeType) { + public Set getLoadedNodes(DeferredHolder payloadType, @Nullable PastelNodeType nodeType) { Set nodes = new HashSet<>(); var loaded = this.getLoadedNodes(nodeType); for(PastelNodeBlockEntity entity : loaded) { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java index 58c790c68c..d2d5c2a035 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java @@ -33,7 +33,7 @@ import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; -import org.jetbrains.annotations.*; +import org.jspecify.annotations.*; import java.util.*; import java.util.Optional; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java index c6e7ce094d..874516e2eb 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayload.java @@ -1,30 +1,19 @@ package de.dafuqs.spectrum.blocks.pastel_network.payloads; -import com.mojang.blaze3d.vertex.*; import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.client.*; -import de.dafuqs.spectrum.particle.effect.*; -import dev.emi.emi.*; -import dev.emi.emi.api.stack.*; -import net.minecraft.client.*; -import net.minecraft.client.renderer.*; -import net.minecraft.client.renderer.texture.*; import net.minecraft.core.*; import net.minecraft.core.particles.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; -import net.minecraft.resources.*; -import net.minecraft.world.inventory.*; -import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; import net.neoforged.neoforge.client.extensions.common.*; import net.neoforged.neoforge.fluids.*; import net.neoforged.neoforge.fluids.capability.*; -import org.jetbrains.annotations.*; +import org.jspecify.annotations.*; public record FluidPastelPayload(FluidStack fluidStack, ParticleOptions particleEffect) implements PastelPayload { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java index fea2693787..2642b67131 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java @@ -9,9 +9,9 @@ import net.neoforged.neoforge.fluids.*; import net.neoforged.neoforge.fluids.capability.*; import net.neoforged.neoforge.registries.*; -import org.jetbrains.annotations.*; import org.jgrapht.*; import org.jgrapht.graph.*; +import org.jspecify.annotations.*; public class FluidPastelPayloadType extends PastelPayloadType { diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java index 66104b781a..66422c9177 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayload.java @@ -1,22 +1,10 @@ package de.dafuqs.spectrum.blocks.pastel_network.payloads; -import com.mojang.blaze3d.vertex.*; import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.api.ink.*; -import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; -import de.dafuqs.spectrum.items.*; -import de.dafuqs.spectrum.particle.client.*; -import net.minecraft.client.renderer.*; -import net.minecraft.client.renderer.texture.*; -import net.minecraft.core.*; -import net.minecraft.core.particles.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.*; -import net.minecraft.world.phys.*; -import org.jetbrains.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java index e719e5a8b1..841d242cec 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java @@ -8,7 +8,7 @@ import net.minecraft.core.*; import net.minecraft.world.level.block.state.*; import net.neoforged.neoforge.registries.*; -import org.jetbrains.annotations.*; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java index a0fa24467d..130642083d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayload.java @@ -12,7 +12,6 @@ import net.minecraft.core.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; -import net.minecraft.util.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; import net.minecraft.world.phys.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java index 79d6594ca1..6a9f21fb13 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java @@ -9,9 +9,9 @@ import net.neoforged.neoforge.capabilities.*; import net.neoforged.neoforge.items.*; import net.neoforged.neoforge.registries.*; -import org.jetbrains.annotations.*; import org.jgrapht.*; import org.jgrapht.graph.*; +import org.jspecify.annotations.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pedestal/PedestalBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/pedestal/PedestalBlockEntity.java index f809e8cbcd..fbd4f9cd1d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pedestal/PedestalBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pedestal/PedestalBlockEntity.java @@ -36,8 +36,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.*; -import org.jetbrains.annotations.*; -import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.*; import java.util.*; @@ -244,7 +243,6 @@ public static void serverTick(Level world, BlockPos blockPos, BlockState blockSt } } - @Contract(pure = true) public static PedestalVariant getVariant(PedestalBlockEntity pedestalBlockEntity) { return pedestalBlockEntity.pedestalVariant; } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStar.java b/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStar.java index cbb9c3a682..947d8f7444 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStar.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/shooting_star/ShootingStar.java @@ -10,7 +10,6 @@ import net.minecraft.util.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.storage.loot.*; -import org.jetbrains.annotations.*; import org.joml.*; import java.util.*; @@ -71,7 +70,6 @@ public static Variant getType(String name) { return types[0]; } - @Contract("_ -> new") public static ResourceKey getLootTable(int index) { return values()[index].getLootTable(); } diff --git a/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java b/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java index 2501d53ac1..c4dc1939bd 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java +++ b/src/main/java/de/dafuqs/spectrum/compat/ae2/AE2Compat.java @@ -4,7 +4,6 @@ import de.dafuqs.spectrum.api.item_group.*; import de.dafuqs.spectrum.blocks.gemstone.*; import de.dafuqs.spectrum.compat.*; -import de.dafuqs.spectrum.compat.create.*; import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.registries.SpectrumItems.*; import de.dafuqs.spectrum.registries.client.*; diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookPedestalCraftingPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookPedestalCraftingPageRenderer.java index 7530060c64..1a7ffdb837 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookPedestalCraftingPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookPedestalCraftingPageRenderer.java @@ -13,7 +13,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.*; -import org.jetbrains.annotations.*; import java.util.*; @@ -62,7 +61,6 @@ protected void drawRecipe(GuiGraphics drawContext, RecipeHolder } } - @Contract(pure = true) private ResourceLocation getBackgroundTextureForTier(PedestalRecipeTier pedestalRecipeTier) { return switch (pedestalRecipeTier) { case BASIC -> BACKGROUND_TEXTURE1; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java index d4e0195207..97705f83a1 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/InkProjectileEntity.java @@ -27,7 +27,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.level.gameevent.*; import net.minecraft.world.phys.*; -import org.jetbrains.annotations.*; +import org.jspecify.annotations.*; import java.util.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/Support.java b/src/main/java/de/dafuqs/spectrum/helpers/Support.java index 9dff05b35f..d15926d8ec 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/Support.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/Support.java @@ -17,6 +17,7 @@ import net.minecraft.world.level.block.state.*; import net.minecraft.world.phys.*; import org.jetbrains.annotations.*; +import org.jspecify.annotations.*; import org.jspecify.annotations.Nullable; import java.math.*; @@ -220,7 +221,6 @@ public static Direction directionFromRotation(Rotation blockRotation) { } } - @Contract(pure = true) public static Rotation rotationFromDirection(Direction direction) { switch (direction) { case EAST -> { diff --git a/src/main/java/de/dafuqs/spectrum/helpers/TooltipHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/TooltipHelper.java index 062d4074d8..ec86a578ae 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/TooltipHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/TooltipHelper.java @@ -7,7 +7,6 @@ import net.minecraft.core.*; import net.minecraft.core.component.*; import net.minecraft.network.chat.*; -import net.minecraft.util.*; import net.minecraft.world.effect.*; import net.minecraft.world.entity.ai.attributes.*; import net.minecraft.world.food.*; diff --git a/src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java index 9e45c35f67..46a3c47a76 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/VariantHelper.java @@ -10,7 +10,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.*; import net.minecraft.world.level.block.state.*; -import org.jetbrains.annotations.*; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/BaseInkScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/BaseInkScreen.java index bef5913e78..cc524b1ce0 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/BaseInkScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/BaseInkScreen.java @@ -13,7 +13,6 @@ import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; import net.neoforged.neoforge.network.*; -import org.jetbrains.annotations.*; import java.util.*; import java.util.function.*; @@ -57,7 +56,7 @@ protected void renderBg(GuiGraphics guiGraphics, float partialTick, int mouseX, } @Override - public void render(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { super.render(guiGraphics, mouseX, mouseY, delta); guiGraphics.blit(background, getGuiLeft() + 52, getGuiTop() + 18, 176, 0, 46, 46); // gauge blanket renderTooltip(guiGraphics, mouseX, mouseY); @@ -71,7 +70,7 @@ public void accept(Optional> inkColor) { } @Override - protected void renderTooltip(@NotNull GuiGraphics guiGraphics, int x, int y) { + protected void renderTooltip(GuiGraphics guiGraphics, int x, int y) { super.renderTooltip(guiGraphics, x, y); if (this.colorSelectionWidget.isMouseOver(x, y)) { diff --git a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java index b8c24c9f3a..24bbbc8106 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/CinderhearthScreen.java @@ -11,8 +11,6 @@ import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; -import java.util.function.*; - public class CinderhearthScreen extends AbstractContainerScreen { protected final ResourceLocation BACKGROUND = SpectrumCommon.locate("textures/gui/container/cinderhearth.png"); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java index 615f4ccf19..25bcb5a744 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/ColorPickerScreen.java @@ -1,15 +1,11 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.inventories.widgets.ink.*; import net.minecraft.client.gui.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; -import org.jetbrains.annotations.*; - -import java.util.function.*; public class ColorPickerScreen extends BaseInkScreen { @@ -34,7 +30,7 @@ protected void init() { } @Override - protected void renderTooltip(@NotNull GuiGraphics guiGraphics, int x, int y) { + protected void renderTooltip(GuiGraphics guiGraphics, int x, int y) { super.renderTooltip(guiGraphics, x, y); if (this.inkPieWidget.isHoveredOrFocused()) { diff --git a/src/main/java/de/dafuqs/spectrum/inventories/GenericSpectrumContainerScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/GenericSpectrumContainerScreenHandler.java index 54011500cd..ec3c59097b 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/GenericSpectrumContainerScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/GenericSpectrumContainerScreenHandler.java @@ -3,7 +3,6 @@ import net.minecraft.world.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.inventory.*; -import org.jetbrains.annotations.*; public class GenericSpectrumContainerScreenHandler extends ChestMenu { @@ -18,38 +17,31 @@ public GenericSpectrumContainerScreenHandler(MenuType type, int syncId, Inven this.tier = tier; } - @Contract("_, _ -> new") - public static @NotNull GenericSpectrumContainerScreenHandler createGeneric9x3_Tier1(int syncId, Inventory playerInventory) { + public static GenericSpectrumContainerScreenHandler createGeneric9x3_Tier1(int syncId, Inventory playerInventory) { return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER1_9X3, syncId, playerInventory, 9, 3, ScreenBackgroundVariant.EARLYGAME); } - @Contract("_, _ -> new") - public static @NotNull GenericSpectrumContainerScreenHandler createGeneric9x3_Tier2(int syncId, Inventory playerInventory) { + public static GenericSpectrumContainerScreenHandler createGeneric9x3_Tier2(int syncId, Inventory playerInventory) { return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER2_9X3, syncId, playerInventory, 9, 3, ScreenBackgroundVariant.MIDGAME); } - @Contract("_, _ -> new") - public static @NotNull GenericSpectrumContainerScreenHandler createGeneric9x3_Tier3(int syncId, Inventory playerInventory) { + public static GenericSpectrumContainerScreenHandler createGeneric9x3_Tier3(int syncId, Inventory playerInventory) { return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER3_9X3, syncId, playerInventory, 9, 3, ScreenBackgroundVariant.LATEGAME); } - @Contract("_, _ -> new") - public static @NotNull GenericSpectrumContainerScreenHandler createGeneric9x6_Tier1(int syncId, Inventory playerInventory) { + public static GenericSpectrumContainerScreenHandler createGeneric9x6_Tier1(int syncId, Inventory playerInventory) { return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER1_9X6, syncId, playerInventory, 9, 6, ScreenBackgroundVariant.EARLYGAME); } - @Contract("_, _ -> new") - public static @NotNull GenericSpectrumContainerScreenHandler createGeneric9x6_Tier2(int syncId, Inventory playerInventory) { + public static GenericSpectrumContainerScreenHandler createGeneric9x6_Tier2(int syncId, Inventory playerInventory) { return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER2_9X6, syncId, playerInventory, 9, 6, ScreenBackgroundVariant.MIDGAME); } - @Contract("_, _ -> new") - public static @NotNull GenericSpectrumContainerScreenHandler createGeneric9x6_Tier3(int syncId, Inventory playerInventory) { + public static GenericSpectrumContainerScreenHandler createGeneric9x6_Tier3(int syncId, Inventory playerInventory) { return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER3_9X6, syncId, playerInventory, 9, 6, ScreenBackgroundVariant.LATEGAME); } - @Contract("_, _, _, _ -> new") - public static @NotNull GenericSpectrumContainerScreenHandler createGeneric9x3(int syncId, Inventory playerInventory, Container inventory, @NotNull ScreenBackgroundVariant tier) { + public static GenericSpectrumContainerScreenHandler createGeneric9x3(int syncId, Inventory playerInventory, Container inventory, ScreenBackgroundVariant tier) { switch (tier) { case EARLYGAME -> { return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER1_9X3, syncId, playerInventory, inventory, 3, tier); @@ -63,8 +55,7 @@ public GenericSpectrumContainerScreenHandler(MenuType type, int syncId, Inven } } - @Contract("_, _, _, _ -> new") - public static @NotNull GenericSpectrumContainerScreenHandler createGeneric9x6(int syncId, Inventory playerInventory, Container inventory, @NotNull ScreenBackgroundVariant tier) { + public static GenericSpectrumContainerScreenHandler createGeneric9x6(int syncId, Inventory playerInventory, Container inventory, ScreenBackgroundVariant tier) { switch (tier) { case EARLYGAME -> { return new GenericSpectrumContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER1_9X6, syncId, playerInventory, inventory, 6, tier); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java index 4d62f29b2e..a4f3974bf3 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/InkStorageScreen.java @@ -1,15 +1,11 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.inventories.widgets.ink.*; import net.minecraft.client.gui.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; -import org.jetbrains.annotations.*; - -import java.util.function.*; public class InkStorageScreen extends BaseInkScreen { @@ -34,7 +30,7 @@ protected void init() { } @Override - protected void renderTooltip(@NotNull GuiGraphics guiGraphics, int x, int y) { + protected void renderTooltip(GuiGraphics guiGraphics, int x, int y) { super.renderTooltip(guiGraphics, x, y); if (this.inkPieWidget.isHoveredOrFocused()) { diff --git a/src/main/java/de/dafuqs/spectrum/inventories/PedestalScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/PedestalScreen.java index 0d808ed254..c80dc3b347 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/PedestalScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/PedestalScreen.java @@ -14,7 +14,6 @@ import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.level.block.*; -import org.jetbrains.annotations.*; public class PedestalScreen extends AbstractContainerScreen { @@ -37,7 +36,6 @@ public PedestalScreen(PedestalScreenHandler handler, Inventory playerInventory, this.structureUpdateAvailable = this.maxPedestalRecipeTierForVariant != maxPedestalRecipeTier; } - @Contract(pure = true) public static ResourceLocation getBackgroundTextureForTier(PedestalRecipeTier recipeTier) { switch (recipeTier) { case COMPLEX -> { diff --git a/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreen.java index 9bf863af01..aa61529f13 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreen.java @@ -6,7 +6,6 @@ import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; -import org.jetbrains.annotations.*; public class Spectrum3x3ContainerScreen extends AbstractContainerScreen { @@ -43,7 +42,6 @@ protected void renderBg(GuiGraphics drawContext, float delta, int mouseX, int mo drawContext.blit(backgroundTexture, getGuiLeft(), getGuiTop(), 0, 0, this.imageWidth, this.imageHeight); } - @Contract(pure = true) private ResourceLocation getBackground(ScreenBackgroundVariant tier) { switch (tier) { case EARLYGAME -> { diff --git a/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreenHandler.java b/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreenHandler.java index bd03303f00..434b67e8bb 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreenHandler.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/Spectrum3x3ContainerScreenHandler.java @@ -5,7 +5,6 @@ import net.minecraft.world.entity.player.*; import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; -import org.jetbrains.annotations.*; public class Spectrum3x3ContainerScreenHandler extends AbstractContainerMenu { @@ -42,33 +41,27 @@ public Spectrum3x3ContainerScreenHandler(MenuType new") - public static @NotNull Spectrum3x3ContainerScreenHandler createTier1(int syncId, Inventory playerInventory) { + public static Spectrum3x3ContainerScreenHandler createTier1(int syncId, Inventory playerInventory) { return new Spectrum3x3ContainerScreenHandler(syncId, playerInventory, ScreenBackgroundVariant.EARLYGAME); } - @Contract("_, _, _ -> new") - public static @NotNull AbstractContainerMenu createTier1(int syncId, Inventory playerInventory, BlockPlacerBlockEntity blockEntity) { + public static AbstractContainerMenu createTier1(int syncId, Inventory playerInventory, BlockPlacerBlockEntity blockEntity) { return new Spectrum3x3ContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER1_3X3, syncId, playerInventory, blockEntity, ScreenBackgroundVariant.EARLYGAME); } - @Contract("_, _ -> new") - public static @NotNull Spectrum3x3ContainerScreenHandler createTier2(int syncId, Inventory playerInventory) { + public static Spectrum3x3ContainerScreenHandler createTier2(int syncId, Inventory playerInventory) { return new Spectrum3x3ContainerScreenHandler(syncId, playerInventory, ScreenBackgroundVariant.MIDGAME); } - @Contract("_, _, _ -> new") - public static @NotNull AbstractContainerMenu createTier2(int syncId, Inventory playerInventory, BlockPlacerBlockEntity blockEntity) { + public static AbstractContainerMenu createTier2(int syncId, Inventory playerInventory, BlockPlacerBlockEntity blockEntity) { return new Spectrum3x3ContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER1_3X3, syncId, playerInventory, blockEntity, ScreenBackgroundVariant.MIDGAME); } - @Contract("_, _ -> new") - public static @NotNull Spectrum3x3ContainerScreenHandler createTier3(int syncId, Inventory playerInventory) { + public static Spectrum3x3ContainerScreenHandler createTier3(int syncId, Inventory playerInventory) { return new Spectrum3x3ContainerScreenHandler(syncId, playerInventory, ScreenBackgroundVariant.LATEGAME); } - @Contract("_, _, _ -> new") - public static @NotNull AbstractContainerMenu createTier3(int syncId, Inventory playerInventory, BlockPlacerBlockEntity blockEntity) { + public static AbstractContainerMenu createTier3(int syncId, Inventory playerInventory, BlockPlacerBlockEntity blockEntity) { return new Spectrum3x3ContainerScreenHandler(SpectrumMenuTypes.GENERIC_TIER1_3X3, syncId, playerInventory, blockEntity, ScreenBackgroundVariant.LATEGAME); } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumGenericContainerScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumGenericContainerScreen.java index 29017ae87f..76d6da1206 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/SpectrumGenericContainerScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/SpectrumGenericContainerScreen.java @@ -7,7 +7,6 @@ import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; -import org.jetbrains.annotations.*; public class SpectrumGenericContainerScreen extends AbstractContainerScreen { @@ -57,7 +56,6 @@ protected void renderBg(GuiGraphics drawContext, float delta, int mouseX, int mo drawContext.blit(backgroundTexture, i, j + this.rows * 18 + 17, 0, 126, this.imageWidth, 96); } - @Contract(pure = true) private ResourceLocation getBackground(int rows, ScreenBackgroundVariant tier) { switch (tier) { case EARLYGAME -> { diff --git a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java index 53366f547a..40725ad26c 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/TintingStationScreen.java @@ -1,16 +1,11 @@ package de.dafuqs.spectrum.inventories; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.api.ink.capability.*; -import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.inventories.widgets.ink.*; import net.minecraft.client.gui.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; -import org.jetbrains.annotations.*; - -import java.util.function.*; public class TintingStationScreen extends BaseInkScreen { @@ -32,7 +27,7 @@ protected void init() { } @Override - protected void renderTooltip(@NotNull GuiGraphics guiGraphics, int x, int y) { + protected void renderTooltip(GuiGraphics guiGraphics, int x, int y) { super.renderTooltip(guiGraphics, x, y); if (this.inkListWidget.isHoveredOrFocused()) { diff --git a/src/main/java/de/dafuqs/spectrum/inventories/slots/ColorPickerInputSlot.java b/src/main/java/de/dafuqs/spectrum/inventories/slots/ColorPickerInputSlot.java index 69eb86c163..3651b13c4e 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/slots/ColorPickerInputSlot.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/slots/ColorPickerInputSlot.java @@ -4,7 +4,6 @@ import net.minecraft.world.*; import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; -import org.jetbrains.annotations.*; public class ColorPickerInputSlot extends Slot { @@ -13,7 +12,7 @@ public ColorPickerInputSlot(Container inventory, int index, int x, int y) { } @Override - public boolean mayPlace(@NotNull ItemStack stack) { + public boolean mayPlace(ItemStack stack) { return super.mayPlace(stack) && InkConvertingRecipe.isInput(stack.getItem()); } diff --git a/src/main/java/de/dafuqs/spectrum/inventories/slots/InkInputSlot.java b/src/main/java/de/dafuqs/spectrum/inventories/slots/InkInputSlot.java index d7e4e9389f..b911054e2b 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/slots/InkInputSlot.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/slots/InkInputSlot.java @@ -1,8 +1,6 @@ package de.dafuqs.spectrum.inventories.slots; import de.dafuqs.spectrum.api.ink.capability.*; -import de.dafuqs.spectrum.api.ink.storage.*; -import de.dafuqs.spectrum.capabilities.*; import net.minecraft.world.*; import net.minecraft.world.inventory.*; import net.minecraft.world.item.*; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java index c713e06fa6..0c17c4bf91 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ColorSelectionWidget.java @@ -11,7 +11,7 @@ import net.minecraft.core.*; import net.minecraft.network.chat.*; import net.minecraft.util.*; -import org.jetbrains.annotations.*; +import org.jspecify.annotations.*; import java.util.*; import java.util.function.*; @@ -62,7 +62,7 @@ public boolean isMouseOver(double mouseX, double mouseY) { } @Override - protected void renderWidget(@NotNull GuiGraphics context, int mouseX, int mouseY, float delta) { + protected void renderWidget(GuiGraphics context, int mouseX, int mouseY, float delta) { // draw selection icons int i = -1; int currentX = this.getX() + 1; @@ -117,7 +117,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { } @Override - protected void updateWidgetNarration(@NotNull NarrationElementOutput builder) { } + protected void updateWidgetNarration(NarrationElementOutput builder) { } private boolean isUnselection(double mouseX, double mouseY) { return mouseX >= (double) selectedIndexX && mouseX < (double) (selectedIndexX + 4) && mouseY >= (double) selectedIndexY && mouseY < (double) (selectedIndexY + 4); diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java index f7e2a5a809..b9baf3d68e 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidget.java @@ -8,9 +8,8 @@ import net.minecraft.client.gui.components.*; import net.minecraft.client.gui.narration.*; import net.minecraft.network.chat.*; -import org.jetbrains.annotations.*; +import org.jspecify.annotations.*; -import javax.annotation.Nullable; import java.util.function.*; public class InkListWidget extends AbstractWidget { @@ -35,12 +34,12 @@ public InkListWidget(int x, int y, int height, Supplier inkCapabi } @Override - protected void updateWidgetNarration(@NotNull NarrationElementOutput narrationElementOutput) { + protected void updateWidgetNarration(NarrationElementOutput narrationElementOutput) { } @Override - protected void renderWidget(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + protected void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { InkStorage inkStorage = inkCapability.get().getStorage(); int startHeight = getY() + getHeight() + padding; diff --git a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidgetWithBorderAndTitle.java b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidgetWithBorderAndTitle.java index 637537fd50..63dc038f6b 100644 --- a/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidgetWithBorderAndTitle.java +++ b/src/main/java/de/dafuqs/spectrum/inventories/widgets/ink/InkListWidgetWithBorderAndTitle.java @@ -8,7 +8,6 @@ import net.minecraft.client.gui.*; import net.minecraft.resources.*; import net.minecraft.util.*; -import org.jetbrains.annotations.*; import java.util.*; import java.util.function.*; @@ -24,7 +23,7 @@ public InkListWidgetWithBorderAndTitle(int x, int y, int height, Supplier getHighestUnlockedRecipeTier(Player player) { if (AdvancementHelper.hasAdvancement(player, COMPLEX.unlockAdvancementId)) { return Optional.of(PedestalRecipeTier.COMPLEX); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index 16f9489b49..0ee1b9c99a 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -206,22 +206,6 @@ public static void fatalSlumberKill(MobEffectEvent.Expired event) { } } - @SubscribeEvent - public static void handleInertia(BlockEvent.BreakEvent event) { - Player player = event.getPlayer(); - BlockPos pos = event.getPos(); - Level level = event.getPlayer().level(); - BlockState state = event.getState(); - if (player instanceof ServerPlayer serverPlayerEntity) { - ItemStack handStack = player.getItemInHand(serverPlayerEntity.getUsedItemHand()); - if (SpectrumEnchantmentHelper.hasEnchantment(player.level().registryAccess(), SpectrumEnchantmentKeys.INERTIA, handStack)) { - InertiaComponent.onInertiaBlockBreak(level, pos, state, serverPlayerEntity, handStack); - } - - SpectrumAdvancementCriteria.BLOCK_BROKEN.trigger(serverPlayerEntity, state); - } - } - @SubscribeEvent private static void entityTick(EntityTickEvent.Post event) { var entity = event.getEntity(); @@ -1025,14 +1009,22 @@ private static void onEntityJoinLevel(EntityJoinLevelEvent event) { @SubscribeEvent private static void onBlockBreak(BlockEvent.BreakEvent event) { - if(!event.isCanceled()) { - event.getLevel().gameEvent(SpectrumGameEvents.BLOCK_CHANGED, event.getPos(), GameEvent.Context.of(event.getState())); - - Player player = event.getPlayer(); - ItemStack miningStack = player.getMainHandItem(); - if(miningStack.getItem() instanceof AoEBreakingTool aoeBreakingTool) { - aoeBreakingTool.afterBreakingBlock(event.getLevel(), event.getPos(), player, miningStack); + Player player = event.getPlayer(); + BlockPos pos = event.getPos(); + Level level = event.getPlayer().level(); + BlockState state = event.getState(); + if (player instanceof ServerPlayer serverPlayerEntity) { + ItemStack handStack = player.getItemInHand(serverPlayerEntity.getUsedItemHand()); + if (SpectrumEnchantmentHelper.hasEnchantment(player.level().registryAccess(), SpectrumEnchantmentKeys.INERTIA, handStack)) { + InertiaComponent.onInertiaBlockBreak(level, pos, state, serverPlayerEntity, handStack); } + + SpectrumAdvancementCriteria.BLOCK_BROKEN.trigger(serverPlayerEntity, state); + } + + ItemStack miningStack = player.getMainHandItem(); + if(miningStack.getItem() instanceof AoEBreakingTool aoeBreakingTool) { + aoeBreakingTool.afterBreakingBlock(event.getLevel(), event.getPos(), player, miningStack); } } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java index 01e8a99505..b45f0225d9 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java @@ -46,7 +46,6 @@ import static de.dafuqs.spectrum.SpectrumCommon.*; import static net.minecraft.world.item.Items.*; -//TODO: Migrate tools to use tool components @SuppressWarnings("unused") public class SpectrumItems { diff --git a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java index 25328fd108..36a9739276 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java @@ -1,9 +1,6 @@ package de.dafuqs.spectrum.registries.client; -import com.mojang.authlib.minecraft.client.*; -import com.mojang.blaze3d.platform.*; import com.mojang.blaze3d.shaders.*; -import com.mojang.blaze3d.systems.*; import com.mojang.blaze3d.vertex.*; import com.mojang.datafixers.util.*; import de.dafuqs.spectrum.*; @@ -16,7 +13,6 @@ import de.dafuqs.spectrum.data_loaders.client.*; import de.dafuqs.spectrum.deeper_down.client.*; import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.inventories.widgets.ink.*; import de.dafuqs.spectrum.items.magic_items.*; import de.dafuqs.spectrum.items.tooltip.*; import de.dafuqs.spectrum.mixin.accessors.*; @@ -53,15 +49,12 @@ import net.neoforged.api.distmarker.*; import net.neoforged.bus.api.*; import net.neoforged.fml.common.*; -import net.neoforged.neoforge.client.*; import net.neoforged.neoforge.client.event.*; import net.neoforged.neoforge.client.extensions.common.*; import net.neoforged.neoforge.event.entity.player.*; -import org.joml.*; import org.jspecify.annotations.*; import oshi.util.tuples.*; -import java.lang.Math; import java.util.*; @EventBusSubscriber(modid = SpectrumCommon.MOD_ID, value = Dist.CLIENT) diff --git a/src/main/java/de/dafuqs/spectrum/render/HudRenderers.java b/src/main/java/de/dafuqs/spectrum/render/HudRenderers.java index a17ba7c934..ac27f54203 100644 --- a/src/main/java/de/dafuqs/spectrum/render/HudRenderers.java +++ b/src/main/java/de/dafuqs/spectrum/render/HudRenderers.java @@ -3,29 +3,20 @@ import com.mojang.blaze3d.platform.*; import com.mojang.blaze3d.systems.*; import com.mojang.blaze3d.vertex.*; -import com.mojang.math.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.ink.capability.*; import de.dafuqs.spectrum.attachment_types.*; import de.dafuqs.spectrum.inventories.widgets.ink.*; -import de.dafuqs.spectrum.registries.client.*; import net.minecraft.client.*; import net.minecraft.client.gui.*; -import net.minecraft.client.multiplayer.*; -import net.minecraft.client.renderer.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; -import net.neoforged.neoforge.client.*; import net.neoforged.neoforge.client.event.*; import net.neoforged.neoforge.client.gui.*; -import org.joml.*; import org.jspecify.annotations.*; -import java.lang.Math; -import java.util.function.*; - public class HudRenderers { diff --git a/src/main/java/de/dafuqs/spectrum/render/animation/FlowHandler.java b/src/main/java/de/dafuqs/spectrum/render/animation/FlowHandler.java index de3fafbcf0..c6dc25be09 100644 --- a/src/main/java/de/dafuqs/spectrum/render/animation/FlowHandler.java +++ b/src/main/java/de/dafuqs/spectrum/render/animation/FlowHandler.java @@ -1,8 +1,5 @@ package de.dafuqs.spectrum.render.animation; -import org.jetbrains.annotations.*; - -@ApiStatus.OverrideOnly public interface FlowHandler { FlowData createData(DataSignature signature); From c50c7229122d17f7b2423315ea5a7bfc71735eef Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 11:07:37 +0200 Subject: [PATCH 174/477] another mixin gone; fix spawners dropping XP when harvested with Resonance --- .../mixin/AbstractBlockStateMixin.java | 25 ------------------- .../registries/SpectrumEventListeners.java | 10 ++++++++ src/main/resources/spectrum.mixins.json | 1 - 3 files changed, 10 insertions(+), 26 deletions(-) delete mode 100644 src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java diff --git a/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java deleted file mode 100644 index 0d3563f00d..0000000000 --- a/src/main/java/de/dafuqs/spectrum/mixin/AbstractBlockStateMixin.java +++ /dev/null @@ -1,25 +0,0 @@ -package de.dafuqs.spectrum.mixin; - -import de.dafuqs.spectrum.api.interaction.*; -import de.dafuqs.spectrum.registries.*; -import net.minecraft.core.*; -import net.minecraft.server.level.*; -import net.minecraft.world.item.*; -import net.minecraft.world.item.enchantment.*; -import net.minecraft.world.level.block.state.*; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.*; - -@Mixin(BlockBehaviour.BlockStateBase.class) -public abstract class AbstractBlockStateMixin { - - @ModifyVariable(method = "spawnAfterBreak", at = @At("HEAD"), ordinal = 0, argsOnly = true) - public boolean spectrum$preventXPDropsWhenUsingResonance(boolean dropExperience, ServerLevel world, BlockPos pos, ItemStack stack) { - if (ResonanceProcessor.preventNextXPDrop && EnchantmentHelper.hasTag(stack, SpectrumEnchantmentTags.RESONANT_BLOCK_DROPS)) { - ResonanceProcessor.preventNextXPDrop = false; - return false; - } - return dropExperience; - } - -} diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index 0ee1b9c99a..b2c052fbf2 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -5,6 +5,7 @@ import de.dafuqs.revelationary.api.advancements.*; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.api.block.*; +import de.dafuqs.spectrum.api.interaction.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.attachment_types.*; import de.dafuqs.spectrum.blocks.idols.*; @@ -54,6 +55,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.component.*; import net.minecraft.world.item.context.*; +import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; @@ -1007,6 +1009,14 @@ private static void onEntityJoinLevel(EntityJoinLevelEvent event) { event.getEntity().gameEvent(SpectrumGameEvents.ENTITY_SPAWNED); } + @SubscribeEvent + private static void onBlockDrops(BlockDropsEvent event) { + if(ResonanceProcessor.preventNextXPDrop && EnchantmentHelper.hasTag(event.getTool(), SpectrumEnchantmentTags.RESONANT_BLOCK_DROPS)) { + ResonanceProcessor.preventNextXPDrop = false; + event.setDroppedExperience(0); + } + } + @SubscribeEvent private static void onBlockBreak(BlockEvent.BreakEvent event) { Player player = event.getPlayer(); diff --git a/src/main/resources/spectrum.mixins.json b/src/main/resources/spectrum.mixins.json index a3b1bd73eb..023f6ba52c 100644 --- a/src/main/resources/spectrum.mixins.json +++ b/src/main/resources/spectrum.mixins.json @@ -5,7 +5,6 @@ "compatibilityLevel": "JAVA_21", "plugin": "de.dafuqs.spectrum.mixin.compat.Plugin", "mixins": [ - "AbstractBlockStateMixin", "AbstractFireBlockMixin", "AllowCopyBlockEntityDataMixin", "AnimalEntityMixin", From 6ce6d6b513a83779eee3972c5423a8cf8303829d Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 12:03:24 +0200 Subject: [PATCH 175/477] - Removed mental presence. It's kinda unfair to only be able to be defended against when someone progressed spectrum. - Removed many ugly Mental Presence workarounds. - Made 'another roll' use a more performant mixin system and made that an attribute instead - Treasure Hunter drops now scale with Another Roll. - Removed Tilled Slush/Shale Clay items --- .../MiscPlayerDataAttachmentType.java | 14 -------- .../enchantments/CloversFavorHelper.java | 20 ----------- .../enchantments/InexorableHelper.java | 4 +-- .../AetherGracedNectarGlovesItem.java | 8 ----- .../items/trinkets/LaurelsOfSerenityItem.java | 14 -------- .../items/trinkets/WhispyCircletItem.java | 7 ---- .../modifiers/TreasureHunterLootModifier.java | 2 +- .../mixin/RandomChanceLootConditionMixin.java | 22 +++++------- ...eWithEnchantedBonusLootConditionMixin.java | 34 +++++------------- .../spectrum/mob_effect/SleepMobEffect.java | 10 +----- .../networking/SpectrumS2CPackets.java | 1 - .../SyncMentalPresencePayload.java | 35 ------------------- .../spectrum/registries/SpectrumBlocks.java | 4 +-- ....java => SpectrumEntityAttributeKeys.java} | 2 +- .../registries/SpectrumEntityAttributes.java | 27 ++++++++------ .../registries/SpectrumEventListeners.java | 4 +-- .../registries/SpectrumItemGroups.java | 2 -- .../registries/SpectrumMobEffects.java | 21 ++++------- .../resources/assets/spectrum/lang/en_us.json | 12 +++---- .../models/item/tilled_shale_clay.json | 3 -- .../spectrum/models/item/tilled_slush.json | 3 -- .../spectrum/enchantment/clovers_favor.json | 2 +- .../entries/brewing/effects/calming.json | 5 --- 23 files changed, 56 insertions(+), 200 deletions(-) delete mode 100644 src/main/java/de/dafuqs/spectrum/helpers/enchantments/CloversFavorHelper.java delete mode 100644 src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncMentalPresencePayload.java rename src/main/java/de/dafuqs/spectrum/registries/{SpectrumAttributeKeys.java => SpectrumEntityAttributeKeys.java} (92%) delete mode 100644 src/main/resources/assets/spectrum/models/item/tilled_shale_clay.json delete mode 100644 src/main/resources/assets/spectrum/models/item/tilled_slush.json diff --git a/src/main/java/de/dafuqs/spectrum/attachment_types/MiscPlayerDataAttachmentType.java b/src/main/java/de/dafuqs/spectrum/attachment_types/MiscPlayerDataAttachmentType.java index e9187c1e7b..aed388dcce 100644 --- a/src/main/java/de/dafuqs/spectrum/attachment_types/MiscPlayerDataAttachmentType.java +++ b/src/main/java/de/dafuqs/spectrum/attachment_types/MiscPlayerDataAttachmentType.java @@ -44,7 +44,6 @@ private MiscPlayerDataAttachmentType() { // Sleep private int ticksBeforeSleep = -1, sleepingWindow = -1, sleepInvincibility; - private double lastSyncedSleepPotency = -2; private List sleepAlteringEffects = List.of(); // Sword mechanics @@ -68,11 +67,6 @@ public void tick() { tickSwordMechanics(); if (!player.level().isClientSide()) { - double fortitude = player.getAttributeValue(SpectrumEntityAttributes.MENTAL_PRESENCE); - if (lastSyncedSleepPotency != fortitude) { - lastSyncedSleepPotency = fortitude; - SyncMentalPresencePayload.sendMentalPresenceSync((ServerPlayer) player, fortitude); - } } } @@ -222,14 +216,6 @@ public static MiscPlayerDataAttachmentType get(Player player) { return data; } - public void setLastSyncedSleepPotency(double lastSyncedSleepPotency) { - this.lastSyncedSleepPotency = lastSyncedSleepPotency; - } - - public double getLastSyncedSleepPotency() { - return lastSyncedSleepPotency; - } - public void setLastGleamingPinTriggerTick(long tick) { this.lastGleamingPinTriggerTick = tick; } diff --git a/src/main/java/de/dafuqs/spectrum/helpers/enchantments/CloversFavorHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/enchantments/CloversFavorHelper.java deleted file mode 100644 index e350274a3a..0000000000 --- a/src/main/java/de/dafuqs/spectrum/helpers/enchantments/CloversFavorHelper.java +++ /dev/null @@ -1,20 +0,0 @@ -package de.dafuqs.spectrum.helpers.enchantments; - -import de.dafuqs.additionalentityattributes.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.entity.player.*; -import org.jspecify.annotations.*; - -public class CloversFavorHelper { - - public static float rollChance(float baseChance, @Nullable Entity entity) { - if (entity instanceof Player player) { - float rareLootLevel = (float) player.getAttributeValue(AdditionalEntityAttributes.BONUS_RARE_LOOT_ROLLS); - if (rareLootLevel > 0) { - return baseChance * rareLootLevel; - } - } - return 0; - } - -} diff --git a/src/main/java/de/dafuqs/spectrum/helpers/enchantments/InexorableHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/enchantments/InexorableHelper.java index cba2ef3193..f5eb09d0ef 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/enchantments/InexorableHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/enchantments/InexorableHelper.java @@ -13,8 +13,8 @@ public static void checkAndRemoveSlowdownModifiers(LivingEntity entity) { var armorInexorable = isArmorActive(entity); var toolInexorable = SpectrumEnchantmentHelper.hasEnchantment(entity.level().registryAccess(), SpectrumEnchantmentKeys.INEXORABLE, entity.getItemInHand(entity.getUsedItemHand())); - var armorAttributes = BuiltInRegistries.ATTRIBUTE.getTag(SpectrumAttributeKeys.INEXORABLE_ARMOR_EFFECTIVE); - var toolAttributes = BuiltInRegistries.ATTRIBUTE.getTag(SpectrumAttributeKeys.INEXORABLE_HANDHELD_EFFECTIVE); + var armorAttributes = BuiltInRegistries.ATTRIBUTE.getTag(SpectrumEntityAttributeKeys.INEXORABLE_ARMOR_EFFECTIVE); + var toolAttributes = BuiltInRegistries.ATTRIBUTE.getTag(SpectrumEntityAttributeKeys.INEXORABLE_HANDHELD_EFFECTIVE); if (armorInexorable && armorAttributes.isPresent()) { removeAttributes(entity, armorAttributes.get()); diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/AetherGracedNectarGlovesItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/AetherGracedNectarGlovesItem.java index b594ce2d2c..77192c4eae 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/AetherGracedNectarGlovesItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/AetherGracedNectarGlovesItem.java @@ -21,7 +21,6 @@ public class AetherGracedNectarGlovesItem extends AzureDikeCurioItem implements SlotBackgroundEffectProvider { public static final int HARMFUL_EFFECT_COST = 7; - public static ResourceLocation MENTAL_PRESENCE_ATTRIBUTE_ID = SpectrumCommon.locate("nectar_gloves_sleep"); public AetherGracedNectarGlovesItem(Properties settings, ResourceLocation unlockIdentifier) { super(settings, unlockIdentifier); @@ -39,13 +38,6 @@ public void appendHoverText(ItemStack stack, TooltipContext context, List, AttributeModifier> getAttributeModifiers(SlotContext slotContext, ResourceLocation id, ItemStack stack) { - Multimap, AttributeModifier> modifiers = super.getAttributeModifiers(slotContext, id, stack); - modifiers.put(SpectrumEntityAttributes.MENTAL_PRESENCE, new AttributeModifier(MENTAL_PRESENCE_ATTRIBUTE_ID, -1F, AttributeModifier.Operation.ADD_VALUE)); - return modifiers; - } - public static boolean testEffectFor(LivingEntity entity, Holder effect) { if (effect.value().isBeneficial()) return false; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/LaurelsOfSerenityItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/LaurelsOfSerenityItem.java index b4ca5362e6..a15c303033 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/LaurelsOfSerenityItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/LaurelsOfSerenityItem.java @@ -29,7 +29,6 @@ public void appendHoverText(ItemStack stack, TooltipContext context, List, AttributeModifier> getAttributeModifiers(SlotContext slotContext, ResourceLocation id, ItemStack stack) { @@ -44,11 +43,6 @@ public Multimap, AttributeModifier> getAttributeModifiers(Slot // so it shows up red in tooltips. Hmmmm modifiers.put(AdditionalEntityAttributes.MOB_DETECTION_RANGE, new AttributeModifier(DETECTION_RANGE_ATTRIBUTE_ID, -detectionRangeMod, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL)); } - double sleepResistanceMod = getInducedSleepResistanceMod(storedInk); - if (sleepResistanceMod != 0) { - modifiers.put(SpectrumEntityAttributes.MENTAL_PRESENCE, new AttributeModifier(MENTAL_PRESENCE_ATTRIBUTE_ID, sleepResistanceMod, AttributeModifier.Operation.ADD_VALUE)); - } - return modifiers; } @@ -60,12 +54,4 @@ public float getDetectionRangeMultiplier(long storedInk) { } } - public float getInducedSleepResistanceMod(long storedInk) { - if (storedInk < 100) { - return 0; - } else { - return 0.15F * (int) (Math.log(storedInk / 100.0f) / Math.log(8)); //TODO: reduce once the ink trinket cap is set back to 1.6 billion - } - } - } diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/WhispyCircletItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/WhispyCircletItem.java index c4378fccbd..d2603f6c98 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/WhispyCircletItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/WhispyCircletItem.java @@ -66,11 +66,4 @@ public void curioTick(SlotContext slotContext, ItemStack stack) { } } - @Override - public Multimap, AttributeModifier> getAttributeModifiers(SlotContext slotContext, ResourceLocation id, ItemStack stack) { - Multimap, AttributeModifier> modifiers = super.getAttributeModifiers(slotContext, id, stack); - modifiers.put(SpectrumEntityAttributes.MENTAL_PRESENCE, new AttributeModifier(ATTRIBUTE_ID, 0.3, AttributeModifier.Operation.ADD_VALUE)); - return modifiers; - } - } diff --git a/src/main/java/de/dafuqs/spectrum/loot/modifiers/TreasureHunterLootModifier.java b/src/main/java/de/dafuqs/spectrum/loot/modifiers/TreasureHunterLootModifier.java index 2b6ef5d9a3..db0794d93a 100644 --- a/src/main/java/de/dafuqs/spectrum/loot/modifiers/TreasureHunterLootModifier.java +++ b/src/main/java/de/dafuqs/spectrum/loot/modifiers/TreasureHunterLootModifier.java @@ -83,7 +83,7 @@ protected ObjectArrayList doApply(ObjectArrayList original RandomSource random = lootContext.getRandom(); for(Entry e : this.entries) { if(e.predicate.matches(serverLevel, pos, killed)) { - if(random.nextFloat() > e.chance() * treasureHunterLevel) { + if(random.nextFloat() > SpectrumEntityAttributes.modifyLootChance(e.chance(), player) * treasureHunterLevel) { continue; } diff --git a/src/main/java/de/dafuqs/spectrum/mixin/RandomChanceLootConditionMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/RandomChanceLootConditionMixin.java index 286f51d39a..0fba448ef1 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/RandomChanceLootConditionMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/RandomChanceLootConditionMixin.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.mixin; -import com.llamalad7.mixinextras.injector.*; -import de.dafuqs.spectrum.helpers.enchantments.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.world.entity.*; import net.minecraft.world.level.storage.loot.*; import net.minecraft.world.level.storage.loot.parameters.*; import net.minecraft.world.level.storage.loot.predicates.*; @@ -12,18 +12,12 @@ @Mixin(LootItemRandomChanceCondition.class) public abstract class RandomChanceLootConditionMixin { - @Shadow - @Final - private NumberProvider chance; - - @ModifyReturnValue(at = @At("RETURN"), method = "test(Lnet/minecraft/world/level/storage/loot/LootContext;)Z") - public boolean spectrum$applyRareLootEnchantment(boolean original, LootContext context) { - // if the result was to not drop a drop before reroll - // gets more probable with each additional level of Clovers Favor - if (!original) { - original = context.getRandom().nextFloat() < CloversFavorHelper.rollChance(chance.getFloat(context), context.getParamOrNull(LootContextParams.ATTACKING_ENTITY)); - } - return original; + @ModifyVariable(method = "test(Lnet/minecraft/world/level/storage/loot/LootContext;)Z", at = @At("STORE")) + public float spectrum$applyRareLootEnchantment(float originalChance, LootContext context) { + Entity entity = context.hasParam(LootContextParams.ATTACKING_ENTITY) + ? context.getParamOrNull(LootContextParams.ATTACKING_ENTITY) // when attacking + : context.getParamOrNull(LootContextParams.THIS_ENTITY); // when breaking blooks, fishing, ... + return SpectrumEntityAttributes.modifyLootChance(originalChance, entity); } } diff --git a/src/main/java/de/dafuqs/spectrum/mixin/RandomChanceWithEnchantedBonusLootConditionMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/RandomChanceWithEnchantedBonusLootConditionMixin.java index ce941e7c0a..1b7b4b0aee 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/RandomChanceWithEnchantedBonusLootConditionMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/RandomChanceWithEnchantedBonusLootConditionMixin.java @@ -1,10 +1,7 @@ package de.dafuqs.spectrum.mixin; -import com.llamalad7.mixinextras.injector.*; -import de.dafuqs.spectrum.helpers.enchantments.*; -import net.minecraft.core.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.world.entity.*; -import net.minecraft.world.item.enchantment.*; import net.minecraft.world.level.storage.loot.*; import net.minecraft.world.level.storage.loot.parameters.*; import net.minecraft.world.level.storage.loot.predicates.*; @@ -14,28 +11,15 @@ @Mixin(LootItemRandomChanceWithEnchantedBonusCondition.class) public abstract class RandomChanceWithEnchantedBonusLootConditionMixin { - @Shadow - @Final - private LevelBasedValue enchantedChance; - - @Shadow - @Final - private Holder enchantment; - - @ModifyReturnValue(at = @At("RETURN"), method = "test(Lnet/minecraft/world/level/storage/loot/LootContext;)Z") - public boolean spectrum$applyRareLootEnchantment(boolean original, LootContext context) { - // if the result was to not drop a drop before reroll - // gets more probable with each additional level of Clovers Favor - if (!original) { - if (context.getParamOrNull(LootContextParams.ATTACKING_ENTITY) instanceof LivingEntity livingEntity) { - int level = EnchantmentHelper.getEnchantmentLevel(this.enchantment, livingEntity); - if (level > 0) { - float enchantedChanceValue = this.enchantedChance.calculate(level); - original = context.getRandom().nextFloat() < CloversFavorHelper.rollChance(enchantedChanceValue, context.getParamOrNull(LootContextParams.ATTACKING_ENTITY)); - } - } + @ModifyVariable(method = "test(Lnet/minecraft/world/level/storage/loot/LootContext;)Z", at = @At("STORE")) + public float spectrum$applyRareLootEnchantment(float original, LootContext context) { + if(original <= 0) { + return original; } - return original; + Entity entity = context.hasParam(LootContextParams.ATTACKING_ENTITY) + ? context.getParamOrNull(LootContextParams.ATTACKING_ENTITY) // when attacking + : context.getParamOrNull(LootContextParams.THIS_ENTITY); // when breaking blooks, fishing, ... + return SpectrumEntityAttributes.modifyLootChance(original, entity); } } diff --git a/src/main/java/de/dafuqs/spectrum/mob_effect/SleepMobEffect.java b/src/main/java/de/dafuqs/spectrum/mob_effect/SleepMobEffect.java index df3e56d97d..d26ecbf58e 100644 --- a/src/main/java/de/dafuqs/spectrum/mob_effect/SleepMobEffect.java +++ b/src/main/java/de/dafuqs/spectrum/mob_effect/SleepMobEffect.java @@ -22,20 +22,13 @@ public SleepMobEffect(MobEffectCategory category, int color, boolean scales) { } // oh my god - // TODO: can the tag check be implemented into the entities base attribute modifier somehow? public static float getSleepResistance(@Nullable MobEffectInstance sleepEffect, LivingEntity entity) { var type = entity.getType(); if (sleepEffect == null || type.is(SpectrumEntityTypeTags.SOULLESS)) return Float.MAX_VALUE; - float scaling; - if (entity instanceof Player player && player.level().isClientSide()) { - scaling = (float) MiscPlayerDataAttachmentType.get(player).getLastSyncedSleepPotency(); - } else { - scaling = (float) entity.getAttributeValue(SpectrumEntityAttributes.MENTAL_PRESENCE); - } - + float scaling = 1.0F; if (type.is(SpectrumEntityTypeTags.SLEEP_WEAK)) { scaling /= 3F; } else if (type.is(SpectrumEntityTypeTags.SLEEP_RESISTANT)) { @@ -47,7 +40,6 @@ public static float getSleepResistance(@Nullable MobEffectInstance sleepEffect, return scaling; } - // TODO: can the tag check be implemented into the entities base attribute modifier somehow? public static boolean isImmuneish(LivingEntity entity) { if (entity.hasEffect(SpectrumMobEffects.FRENZY)) return true; diff --git a/src/main/java/de/dafuqs/spectrum/networking/SpectrumS2CPackets.java b/src/main/java/de/dafuqs/spectrum/networking/SpectrumS2CPackets.java index ead2092b22..5e7d26fea5 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/SpectrumS2CPackets.java +++ b/src/main/java/de/dafuqs/spectrum/networking/SpectrumS2CPackets.java @@ -41,7 +41,6 @@ public static void register(PayloadRegistrar registrar) { registrar.playToClient(PlayDivinityAppliedEffectsPayload.ID, PlayDivinityAppliedEffectsPayload.CODEC, PlayDivinityAppliedEffectsPayload::execute); registrar.playToClient(MoonstoneStrikePayload.ID, MoonstoneStrikePayload.CODEC, MoonstoneStrikePayload::execute); registrar.playToClient(SyncArtisansAtlasPayload.ID, SyncArtisansAtlasPayload.CODEC, SyncArtisansAtlasPayload::execute); - registrar.playToClient(SyncMentalPresencePayload.ID, SyncMentalPresencePayload.CODEC, SyncMentalPresencePayload::execute); registrar.playToClient(CompactingChestStatusUpdatePayload.ID, CompactingChestStatusUpdatePayload.CODEC, CompactingChestStatusUpdatePayload::execute); registrar.playToClient(FabricationChestStatusUpdatePayload.ID, FabricationChestStatusUpdatePayload.CODEC, FabricationChestStatusUpdatePayload::execute); registrar.playToClient(BlackHoleChestStatusUpdatePayload.ID, BlackHoleChestStatusUpdatePayload.CODEC, BlackHoleChestStatusUpdatePayload::execute); diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncMentalPresencePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncMentalPresencePayload.java deleted file mode 100644 index f4a3d3eb46..0000000000 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncMentalPresencePayload.java +++ /dev/null @@ -1,35 +0,0 @@ -package de.dafuqs.spectrum.networking.s2c_payloads; - -import de.dafuqs.spectrum.attachment_types.*; -import de.dafuqs.spectrum.networking.*; -import net.minecraft.network.*; -import net.minecraft.network.codec.*; -import net.minecraft.network.protocol.common.custom.*; -import net.minecraft.server.level.*; -import net.minecraft.world.entity.player.*; -import net.neoforged.neoforge.network.*; -import net.neoforged.neoforge.network.handling.*; - -// TODO: Why tf is that a packet and not handled in the synced component instead? -public record SyncMentalPresencePayload(double value) implements CustomPacketPayload { - - public static final Type ID = SpectrumC2SPackets.makeId("sync_mental_presence"); - public static final StreamCodec CODEC = StreamCodec.composite( - ByteBufCodecs.DOUBLE, SyncMentalPresencePayload::value, - SyncMentalPresencePayload::new - ); - - public static void sendMentalPresenceSync(ServerPlayer player, double value) { - PacketDistributor.sendToPlayer(player, new SyncMentalPresencePayload(value)); - } - - public static void execute(SyncMentalPresencePayload payload, IPayloadContext context) { - Player player = context.player(); - MiscPlayerDataAttachmentType.get(player).setLastSyncedSleepPotency(payload.value); - } - - @Override - public Type type() { - return ID; - } -} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index fa492bfe96..66f3b8c688 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -259,7 +259,7 @@ private static BlockBehaviour.Properties blackslag(SoundType blockSoundGroup) { public static final DeferredBlock ANCIENT_CHISELED_POLISHED_BLACKSLAG = register(simple(blockWithItem("ancient_chiseled_polished_blackslag", () -> new Block(blackslag(SoundType.DEEPSLATE_BRICKS))))); public static final DeferredBlock SHALE_CLAY = register(singleton(blockWithItem("shale_clay", () -> new ShaleClayBlock(Weathering.WeatheringLevel.UNAFFECTED, blackslag(SoundType.MUD_BRICKS))), TexturedModel.COLUMN)); - public static final DeferredBlock TILLED_SHALE_CLAY = register(singleton(blockWithItem("tilled_shale_clay", () -> new ImmutableFarmlandBlock(BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get()), SHALE_CLAY.get().defaultBlockState())), SpectrumTexturedModelProviders.farmland(b -> SHALE_CLAY.get(), "_side", b -> b, ""))); + public static final DeferredBlock TILLED_SHALE_CLAY = register(singleton(block("tilled_shale_clay", () -> new ImmutableFarmlandBlock(BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get()), SHALE_CLAY.get().defaultBlockState())), SpectrumTexturedModelProviders.farmland(b -> SHALE_CLAY.get(), "_side", b -> b, ""))); public static final DeferredBlock POLISHED_SHALE_CLAY = register(blockWithItem("polished_shale_clay", () -> new ShaleClayBlock(Weathering.WeatheringLevel.UNAFFECTED, BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); public static final DeferredBlock POLISHED_SHALE_CLAY_STAIRS = register(blockWithItem("polished_shale_clay_stairs", () -> new WeatheringStairsBlock(Weathering.WeatheringLevel.UNAFFECTED, POLISHED_SHALE_CLAY.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(SHALE_CLAY.get())))); @@ -357,7 +357,7 @@ private static BlockBehaviour.Properties blackslag(SoundType blockSoundGroup) { public static final DeferredBlock SLUSH = register(simple(blockWithItem("slush", () -> new SlushBlock(blackslag(SoundType.MUDDY_MANGROVE_ROOTS))))); public static final DeferredBlock OVERGROWN_SLUSH = register(snowy(blockWithItem("overgrown_slush", () -> new OvergrownSlushBlock(blackslag(SoundType.MUDDY_MANGROVE_ROOTS))), SpectrumTexturedModelProviders.cubeBottomTopParticle(b -> b, "_side", b -> b, "_top", b -> SLUSH.get(), "", b -> b, "_top"), SpectrumTexturedModelProviders.cubeBottomTopParticle(b -> b, "_snow_side", b -> b, "_snow_top", b -> SLUSH.get(), "", b -> b, "_snow_top"))); - public static final DeferredBlock TILLED_SLUSH = register(singleton(blockWithItem("tilled_slush", () -> new TilledSlushBlock(BlockBehaviour.Properties.ofFullCopy(SLUSH.get()), SLUSH.get().defaultBlockState())), SpectrumTexturedModelProviders.farmland(b -> SLUSH.get(), "", b -> b, ""))); + public static final DeferredBlock TILLED_SLUSH = register(singleton(block("tilled_slush", () -> new TilledSlushBlock(BlockBehaviour.Properties.ofFullCopy(SLUSH.get()), SLUSH.get().defaultBlockState())), SpectrumTexturedModelProviders.farmland(b -> SLUSH.get(), "", b -> b, ""))); public static final DeferredBlock BLACK_MATERIA = register(simple(blockWithItem("black_materia", () -> new BlackMateriaBlock(settings(MapColor.TERRACOTTA_BLACK, SoundType.SAND, 0.0F).instrument(NoteBlockInstrument.SNARE).randomTicks())))); public static final DeferredBlock BLACK_SLUDGE = register(simple(blockWithItem("black_sludge", () -> new Block(settings(MapColor.TERRACOTTA_BLACK, SoundType.SAND, 0.5F).instrument(NoteBlockInstrument.SNARE))))); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumAttributeKeys.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityAttributeKeys.java similarity index 92% rename from src/main/java/de/dafuqs/spectrum/registries/SpectrumAttributeKeys.java rename to src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityAttributeKeys.java index 03ffe52191..0586935fe4 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumAttributeKeys.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityAttributeKeys.java @@ -5,7 +5,7 @@ import net.minecraft.tags.*; import net.minecraft.world.entity.ai.attributes.*; -public class SpectrumAttributeKeys { +public class SpectrumEntityAttributeKeys { public static final TagKey INEXORABLE_ARMOR_EFFECTIVE = TagKey.create(BuiltInRegistries.ATTRIBUTE.key(), SpectrumCommon.locate("inexorable_armor_effective")); public static final TagKey INEXORABLE_HANDHELD_EFFECTIVE = TagKey.create(BuiltInRegistries.ATTRIBUTE.key(), SpectrumCommon.locate("inexorable_handheld_effective")); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityAttributes.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityAttributes.java index aadb5da167..c7db7e7f28 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityAttributes.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityAttributes.java @@ -4,28 +4,35 @@ import net.minecraft.core.*; import net.minecraft.core.registries.*; import net.minecraft.resources.*; +import net.minecraft.world.entity.*; import net.minecraft.world.entity.ai.attributes.*; +import net.minecraft.world.entity.player.*; import net.neoforged.bus.api.*; import net.neoforged.neoforge.registries.*; +import org.jspecify.annotations.*; public class SpectrumEntityAttributes { - private static final DeferredRegister REGISTRAR = DeferredRegister.create(Registries.ATTRIBUTE, SpectrumCommon.MOD_ID); - - // TODO: this is entirely the wrong location for this + // TODO: this is not the best place for this public static final ResourceLocation CRIT_MODIFIER_ID = SpectrumCommon.locate("crit_modifier"); public static final ResourceLocation REACH_MODIFIER_ID = SpectrumCommon.locate("reach_modifier"); - /** - * How vulnerable the entity is to sleep effects. The sleep effects use this value as a multiplier - * <1 means it is more resistant than the default, getting weaker effects - * >1 means it is more vulnerable - */ - // TODO: remove? Both hardly used and hard to understand - public static final Holder MENTAL_PRESENCE = REGISTRAR.register("mental_presence", () -> new RangedAttribute("attribute.name.spectrum.mental_presence", 1.0, 0, 1024)); + + + private static final DeferredRegister REGISTRAR = DeferredRegister.create(Registries.ATTRIBUTE, SpectrumCommon.MOD_ID); + + public static final Holder LOOT_CHANCE_MULTIPLIER = REGISTRAR.register("loot_chance_multiplier", () -> new RangedAttribute("attribute.name.spectrum.loot_chance_multiplier", 1.0, 0, 1024)); public static void register(IEventBus modBus) { REGISTRAR.register(modBus); } + public static float modifyLootChance(float originalChance, @Nullable Entity entity) { + if (entity instanceof Player player) { + float lootChanceMultiplier = (float) player.getAttributeValue(LOOT_CHANCE_MULTIPLIER); + return originalChance * lootChanceMultiplier; + } + return originalChance; + } + } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index b2c052fbf2..818c188716 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -344,7 +344,7 @@ public static void onEquipmentChange(LivingEquipmentChangeEvent event) { var oldInexorable = SpectrumEnchantmentHelper.getLevel(livingEntity.level().registryAccess(), SpectrumEnchantmentKeys.INEXORABLE, oldEquipment); var newInexorable = SpectrumEnchantmentHelper.getLevel(livingEntity.level().registryAccess(), SpectrumEnchantmentKeys.INEXORABLE, newEquipment); - var effectType = equipmentSlot == EquipmentSlot.CHEST ? SpectrumAttributeKeys.INEXORABLE_ARMOR_EFFECTIVE : SpectrumAttributeKeys.INEXORABLE_HANDHELD_EFFECTIVE; + var effectType = equipmentSlot == EquipmentSlot.CHEST ? SpectrumEntityAttributeKeys.INEXORABLE_ARMOR_EFFECTIVE : SpectrumEntityAttributeKeys.INEXORABLE_HANDHELD_EFFECTIVE; //TODO make inexorable use enchantment effects or something //TODO also move the enchantment cloaking logic from LivingEntityMixin into here @@ -1067,7 +1067,7 @@ private static void onSleepFinished(SleepFinishedTimeEvent event) { @SubscribeEvent private static void onEntityAttributeModification(EntityAttributeModificationEvent event) { for(EntityType et : event.getTypes()) { - event.add(et, SpectrumEntityAttributes.MENTAL_PRESENCE); + event.add(et, SpectrumEntityAttributes.LOOT_CHANCE_MULTIPLIER); } } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java index aaf9b296ff..157f5e5948 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java @@ -839,7 +839,6 @@ public static void registerSubTabs() { entries.accept(SpectrumBlocks.POLISHED_BLACKSLAG_PRESSURE_PLATE); entries.accept(SpectrumBlocks.INFESTED_BLACKSLAG); entries.accept(SpectrumBlocks.SHALE_CLAY); - entries.accept(SpectrumBlocks.TILLED_SHALE_CLAY); entries.accept(SpectrumBlocks.POLISHED_SHALE_CLAY); entries.accept(SpectrumBlocks.EXPOSED_POLISHED_SHALE_CLAY); entries.accept(SpectrumBlocks.WEATHERED_POLISHED_SHALE_CLAY); @@ -884,7 +883,6 @@ public static void registerSubTabs() { entries.accept(SpectrumBlocks.BLACK_MATERIA); entries.accept(SpectrumBlocks.SLUSH); entries.accept(SpectrumBlocks.OVERGROWN_SLUSH); - entries.accept(SpectrumBlocks.TILLED_SLUSH); entries.accept(SpectrumBlocks.BLACK_SLUDGE); entries.accept(SpectrumItems.ASH_FLAKES); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumMobEffects.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumMobEffects.java index 281f4eaa53..d6ccf2f7dd 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumMobEffects.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumMobEffects.java @@ -25,8 +25,7 @@ public class SpectrumMobEffects { * Clears negative effects on the entity * and makes it immune against new ones */ - public static final Holder IMMUNITY = register("immunity", () -> new ImmunityMobEffect(MobEffectCategory.NEUTRAL, 0x4bbed5) - .addAttributeModifier(SpectrumEntityAttributes.MENTAL_PRESENCE, locate("effect.immunity"), 1.0, AttributeModifier.Operation.ADD_VALUE)); + public static final Holder IMMUNITY = register("immunity", () -> new ImmunityMobEffect(MobEffectCategory.NEUTRAL, 0x4bbed5)); /** * Like Saturation, but not OP @@ -113,8 +112,7 @@ public class SpectrumMobEffects { .addAttributeModifier(Attributes.ATTACK_KNOCKBACK, locate("effect.divinity.attack_knockback"), 1.0D, AttributeModifier.Operation.ADD_VALUE) .addAttributeModifier(Attributes.ARMOR, locate("effect.divinity.armor"), 2.0D, AttributeModifier.Operation.ADD_VALUE) .addAttributeModifier(Attributes.ARMOR_TOUGHNESS, locate("effect.divinity.armor_toughness"), 2.0D, AttributeModifier.Operation.ADD_VALUE) - .addAttributeModifier(Attributes.KNOCKBACK_RESISTANCE, locate("effect.divinity.knockback_resistance"), 1.0D, AttributeModifier.Operation.ADD_VALUE) - .addAttributeModifier(SpectrumEntityAttributes.MENTAL_PRESENCE, locate("effect.divinity.mental_presence"), 0.25, AttributeModifier.Operation.ADD_VALUE)); + .addAttributeModifier(Attributes.KNOCKBACK_RESISTANCE, locate("effect.divinity.knockback_resistance"), 1.0D, AttributeModifier.Operation.ADD_VALUE)); /** * Damage, attack speed, speed & knockback resistance are buffed the more the player kills. @@ -125,8 +123,7 @@ public class SpectrumMobEffects { .addAttributeModifier(Attributes.ATTACK_SPEED, locate("effect.frenzy.attack_speed"), 0.1D, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL) .addAttributeModifier(Attributes.ATTACK_DAMAGE, locate("effect.frenzy.attack_damage"), 0.5D, AttributeModifier.Operation.ADD_VALUE) .addAttributeModifier(Attributes.MOVEMENT_SPEED, locate("effect.frenzy.movement_speed"), 0.1D, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL) - .addAttributeModifier(Attributes.KNOCKBACK_RESISTANCE, locate("effect.frenzy.knockback_resistance"), 0.25D, AttributeModifier.Operation.ADD_VALUE) - .addAttributeModifier(SpectrumEntityAttributes.MENTAL_PRESENCE, locate("effect.frenzy.mental_presence"), 5, AttributeModifier.Operation.ADD_VALUE)); + .addAttributeModifier(Attributes.KNOCKBACK_RESISTANCE, locate("effect.frenzy.knockback_resistance"), 0.25D, AttributeModifier.Operation.ADD_VALUE)); /** * Increases speed and visibility in lava @@ -139,27 +136,23 @@ public class SpectrumMobEffects { * Reduces detection range and enemy spawn rates */ public static final Holder CALMING = register("calming", () -> new SleepMobEffect(MobEffectCategory.BENEFICIAL, 0x5fd7b3, true) - .addAttributeModifier(AdditionalEntityAttributes.MOB_DETECTION_RANGE, locate("effect.calming.mob_detection_range"), -0.25, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL) - .addAttributeModifier(SpectrumEntityAttributes.MENTAL_PRESENCE, locate("effect.calming.mental_presence"), -0.1, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL)); + .addAttributeModifier(AdditionalEntityAttributes.MOB_DETECTION_RANGE, locate("effect.calming.mob_detection_range"), -0.25, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL)); /** * Slows down enemy AI and causes them to forget their target at times. * ON PLAYER: removes UI elements and reduces acceleration */ - public static final Holder SOMNOLENCE = register("somnolence", () -> new SleepMobEffect(MobEffectCategory.NEUTRAL, 0xae7bec, true) - .addAttributeModifier(SpectrumEntityAttributes.MENTAL_PRESENCE, locate("effect.somnolence"), -0.5, AttributeModifier.Operation.ADD_VALUE)); + public static final Holder SOMNOLENCE = register("somnolence", () -> new SleepMobEffect(MobEffectCategory.NEUTRAL, 0xae7bec, true)); /** * Like somnolence, but stronger and does not naturally end most of the time. */ - public static final Holder ETERNAL_SLUMBER = register("eternal_slumber", () -> new SleepMobEffect(MobEffectCategory.HARMFUL, ETERNAL_SLUMBER_COLOR, false) - .addAttributeModifier(SpectrumEntityAttributes.MENTAL_PRESENCE, locate("effect.eternal_slumber"), -2.0, AttributeModifier.Operation.ADD_VALUE)); + public static final Holder ETERNAL_SLUMBER = register("eternal_slumber", () -> new SleepMobEffect(MobEffectCategory.HARMFUL, ETERNAL_SLUMBER_COLOR, false)); /** * Kills you if it runs out naturally. */ - public static final Holder FATAL_SLUMBER = register("fatal_slumber", () -> new SleepMobEffect(MobEffectCategory.HARMFUL, 0x8136c2, false) - .addAttributeModifier(SpectrumEntityAttributes.MENTAL_PRESENCE, locate("effect.fatal_slumber"), -2.0, AttributeModifier.Operation.ADD_VALUE)); + public static final Holder FATAL_SLUMBER = register("fatal_slumber", () -> new SleepMobEffect(MobEffectCategory.HARMFUL, 0x8136c2, false)); /** * % Chance to protect from projectiles per level diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index b472c7ef28..bbb1b40725 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -483,8 +483,8 @@ "advancements.spectrum.consume_all_star_candy_variants.title": "The best 1 Star Menu", "advancements.spectrum.consume_all_star_candy_variants.description": "Get a hold of and eat all Star Candy variants", - "attribute.name.spectrum.mental_presence": "Mental Presence", - "attribute.name.spectrum.mental_presence.desc": "Potency of mind related effects", + "attribute.name.spectrum.loot_chance_multiplier": "Loot Chance Multiplier", + "attribute.name.spectrum.loot_chance_multiplier.desc": "Increased chance for geetting non-guranteed loot drops", "biome.spectrum.black_langast": "Black Langast", "biome.spectrum.crystal_gardens": "Crystal Gardens", @@ -2382,9 +2382,7 @@ "book.spectrum.guidebook.brown_is_weird.page1.text": "\\\n\\\n\\\n\\\n\\\n\\\n*Seriously, I researched! The way we perceive brown is fascinating!*", "book.spectrum.guidebook.budding_onyx.page0.text": "Crafting [Onyx](entry://general/onyx_shards) was always very tricky, as it depended on the current phase of the moon. Even though the [Crescent Clock](entry://equipment/crescent_clock) is a thing, I often missed this short time window.\\\nMaking Onyx growable like the other gems will save me a lot of time.\\\n\\\n*Strangely, the same procedure doesn't seem to work for the others?*", "book.spectrum.guidebook.budding_onyx.page1.text": "Best to craft a large batch of [Midnight Aberrations](entry://general/midnight_aberration) all at once, as they seem to crumble in my hands quickly.", - "book.spectrum.guidebook.calming.page0.text": "Drinking this [#](449900)seems to reduce enemy spawns and aggression,[#]() scaling with level. Most creatures will even tolerate me being closer to them.", - "book.spectrum.guidebook.calming.page1.text": "The pacifying qualities of this seem to make me substantially more vulnerable to sleep, huh.", - "book.spectrum.guidebook.calming.page1.title": "Soporific (Vulnerability)", + "book.spectrum.guidebook.calming.page0.text": "Drinking this [#](449900)seems to reduce enemy spawns and aggression[#](), scaling with level. Most creatures will even tolerate me being closer to them.", "book.spectrum.guidebook.category.brewing.name": "Brewing & Effects", "book.spectrum.guidebook.category.creating_life.name": "Creating Life", "book.spectrum.guidebook.category.cuisine.name": "Painter's Cuisine", @@ -2656,7 +2654,7 @@ "book.spectrum.guidebook.failing.page1.text": "Perhaps one of the toughest materials I know will satisfy their hunger?", "book.spectrum.guidebook.failing.essence_recipe.text": "This one is spicy.", "book.spectrum.guidebook.fatal_slumber.page0.text": "[#](449900)Induces instant death if the effect is allowed to run its course.[#]() While I was at the verge of passing on, I saw something. A bottomless sea, a bottomless dream; faint shards of light shimmered amidst the velvet – almost a silver thread, luring me deeper down.... I knew better than to follow.", - "book.spectrum.guidebook.fatal_slumber.page1.text": "This is a great work of night alchemy, latent with fundamental velvet magic. It is thus affected by mental constitution and sleep resistance.\\\n\\\nThough only beings of immense power could resist calm waters.", + "book.spectrum.guidebook.fatal_slumber.page1.text": "This is a great work of night alchemy, latent with fundamental [velvet magic](entry://brewing/sleep)[#](). It is thus affected by a creatures mental constitution.\\\n\\\nThough only beings of immense power could resist calm waters.", "book.spectrum.guidebook.first_strike.page0.text": "All it takes is a single well-considered hit... or so the saying must have gone.\\\n\\\nWhatever.\\\nOn a related note, I invented First Strike! I am sure it will be of great help, especially against many weak opponents.", "book.spectrum.guidebook.first_strike.page1.text": "Greatly increased damage if the target has full life.\\\n\\\nMax Level: 2\\\nApplicable to melee weapons.", "book.spectrum.guidebook.forgotten_cities.name": "Forgotten Cities", @@ -3867,7 +3865,7 @@ "book.spectrum.guidebook.sleep.page0.title": "Sleep and Willpower", "book.spectrum.guidebook.sleep.page1.text": "As I've learned more about this branch of alchemy, I've become concerned; I feel as if the tides of slumber threaten to swallow me whole. It was a bit odd seeing multiple effects being of one essence, but I brushed it off as nothing special. Now I am not so sure. These Burgeons and their Nectar, and [Fatal Slumber](entry://brewing/effects/fatal_slumber) and its traces of light... there is an air to it, one concerningly reminiscent of [Divinity](entry://brewing/effects/divinity).", "book.spectrum.guidebook.sleep.page1.title": "Velvet and Silver", - "book.spectrum.guidebook.sleep_resistance": "This brew is a work of elemental night alchemy and works off of velvet magic. It is thus affected by the mental constitution of the afflicted, and in my own case, sleep resistance.", + "book.spectrum.guidebook.sleep_resistance": "This brew is a work of elemental night alchemy and works off of [velvet magic](entry://brewing/sleep)[#](). It is thus affected by a creatures mental constitution.", "book.spectrum.guidebook.slush.page0.text": "Incredibly soft, moist soil. Smells like earthworm.", "book.spectrum.guidebook.slush.page1.text": "Ever-moist farmland, with lots of nutrients. Plants thrive on it.", "book.spectrum.guidebook.smelting_back": "Smelting them back", diff --git a/src/main/resources/assets/spectrum/models/item/tilled_shale_clay.json b/src/main/resources/assets/spectrum/models/item/tilled_shale_clay.json deleted file mode 100644 index fb89bd90da..0000000000 --- a/src/main/resources/assets/spectrum/models/item/tilled_shale_clay.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "spectrum:block/tilled_shale_clay" -} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/tilled_slush.json b/src/main/resources/assets/spectrum/models/item/tilled_slush.json deleted file mode 100644 index 5cd8866720..0000000000 --- a/src/main/resources/assets/spectrum/models/item/tilled_slush.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "spectrum:block/tilled_slush" -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/enchantment/clovers_favor.json b/src/main/resources/data/spectrum/enchantment/clovers_favor.json index 542efaf516..c7019d994d 100644 --- a/src/main/resources/data/spectrum/enchantment/clovers_favor.json +++ b/src/main/resources/data/spectrum/enchantment/clovers_favor.json @@ -27,7 +27,7 @@ "base": 0.15, "per_level_above_first": 0.15 }, - "attribute": "additionalentityattributes:player.bonus_rare_loot_rolls", + "attribute": "spectrum:loot_chance_multiplier", "id": "minecraft:enchantment.clovers_favor", "operation": "add_value" } diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/brewing/effects/calming.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/brewing/effects/calming.json index 721fb2095f..5876b27642 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/brewing/effects/calming.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/brewing/effects/calming.json @@ -18,11 +18,6 @@ "title": "effect.spectrum.calming", "status_effect_id": "spectrum:calming", "text": "book.spectrum.guidebook.calming.page0.text" - }, - { - "type": "modonomicon:text", - "title": "book.spectrum.guidebook.calming.page1.title", - "text": "book.spectrum.guidebook.calming.page1.text" } ] } \ No newline at end of file From 6a9cc169556b7d48648d269377ab41ed897442c4 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 12:06:17 +0200 Subject: [PATCH 176/477] attacking suffices, actually --- .../spectrum/mixin/RandomChanceLootConditionMixin.java | 5 +---- .../RandomChanceWithEnchantedBonusLootConditionMixin.java | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/mixin/RandomChanceLootConditionMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/RandomChanceLootConditionMixin.java index 0fba448ef1..8ad715f487 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/RandomChanceLootConditionMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/RandomChanceLootConditionMixin.java @@ -14,10 +14,7 @@ public abstract class RandomChanceLootConditionMixin { @ModifyVariable(method = "test(Lnet/minecraft/world/level/storage/loot/LootContext;)Z", at = @At("STORE")) public float spectrum$applyRareLootEnchantment(float originalChance, LootContext context) { - Entity entity = context.hasParam(LootContextParams.ATTACKING_ENTITY) - ? context.getParamOrNull(LootContextParams.ATTACKING_ENTITY) // when attacking - : context.getParamOrNull(LootContextParams.THIS_ENTITY); // when breaking blooks, fishing, ... - return SpectrumEntityAttributes.modifyLootChance(originalChance, entity); + return SpectrumEntityAttributes.modifyLootChance(originalChance, context.getParamOrNull(LootContextParams.ATTACKING_ENTITY)); } } diff --git a/src/main/java/de/dafuqs/spectrum/mixin/RandomChanceWithEnchantedBonusLootConditionMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/RandomChanceWithEnchantedBonusLootConditionMixin.java index 1b7b4b0aee..8dff92d876 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/RandomChanceWithEnchantedBonusLootConditionMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/RandomChanceWithEnchantedBonusLootConditionMixin.java @@ -16,10 +16,7 @@ public abstract class RandomChanceWithEnchantedBonusLootConditionMixin { if(original <= 0) { return original; } - Entity entity = context.hasParam(LootContextParams.ATTACKING_ENTITY) - ? context.getParamOrNull(LootContextParams.ATTACKING_ENTITY) // when attacking - : context.getParamOrNull(LootContextParams.THIS_ENTITY); // when breaking blooks, fishing, ... - return SpectrumEntityAttributes.modifyLootChance(original, entity); + return SpectrumEntityAttributes.modifyLootChance(original, context.getParamOrNull(LootContextParams.ATTACKING_ENTITY)); } } From 77b0b82ddbd1b1d5366aeba21e0a29d149bf0b7b Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 12:17:42 +0200 Subject: [PATCH 177/477] compacting chest stacking --- .../spectrum/blocks/chests/CompactingChestBlockEntity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/CompactingChestBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/CompactingChestBlockEntity.java index 4ade5adbc6..327e4ce46a 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/CompactingChestBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/CompactingChestBlockEntity.java @@ -221,7 +221,7 @@ private static boolean smartAddToInventory(List itemStacks, List 0) { if (currentStack.isEmpty() && (test || !tryStackExisting)) { - int maxStackCount = currentStack.getMaxStackSize(); + int maxStackCount = additionStack.getMaxStackSize(); int maxAcceptCount = Math.min(additionStack.getCount(), maxStackCount); if (!test) { @@ -233,7 +233,7 @@ private static boolean smartAddToInventory(List itemStacks, List 0) { From 69a541bfb8e88b4b74fc5b6eda1133e9508b3463 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 12:31:49 +0200 Subject: [PATCH 178/477] alcohol button improvements --- .../client/pages/BookConfirmationButtonPageRenderer.java | 4 ++-- src/main/resources/assets/spectrum/lang/en_us.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookConfirmationButtonPageRenderer.java b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookConfirmationButtonPageRenderer.java index c97f156e29..eeaf72872c 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookConfirmationButtonPageRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/compat/modonomicon/client/pages/BookConfirmationButtonPageRenderer.java @@ -34,8 +34,8 @@ public void onBeginDisplayPage(BookEntryScreen parentScreen, int left, int top) : confirmationPage.getButtonText(); Button button = Button.builder(buttonText.getComponent(), this::confirmationButtonClicked) + .pos(2, BookEntryScreen.PAGE_HEIGHT - Button.DEFAULT_HEIGHT - 2) .size(BookEntryScreen.PAGE_WIDTH - 12, Button.DEFAULT_HEIGHT) - .pos(2, BookEntryScreen.PAGE_HEIGHT - 3) .build(); button.active = !completed; @@ -46,7 +46,7 @@ protected void confirmationButtonClicked(Button button) { if (!(page instanceof BookConfirmationButtonPage confirmationPage)) return; PacketDistributor.sendToServer(new GuidebookConfirmationButtonPressedPayload(confirmationPage.getConfirmationString())); button.setMessage(confirmationPage.getConfirmedButtonText().getComponent()); - BookGuiManager.get().openEntry(page.getBook().getId(), page.getParentEntry().getId(), page.getPageNumber()); + button.active = false; } } diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index bbb1b40725..1f6f77c175 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -3942,8 +3942,8 @@ "book.spectrum.guidebook.tarts.page6.text": "Gives me a small chance that projectiles will simply deflect off of me.", "book.spectrum.guidebook.the_art_of_brewing.drinking_age.button_text": "I confirm", "book.spectrum.guidebook.the_art_of_brewing.drinking_age.button_text_confirmed": "Confirmed ✔", - "book.spectrum.guidebook.the_art_of_brewing.drinking_age.text": "The [Titration Barrel](entry://cuisine/titration_barrel) is capable of brewing alcoholic beverages. If you are of legal drinking age in your country and want to engage with recipes mentioning alcohol, you can press the button below to unlock these recipes.\\\nIf not don't worry – you won't miss out on anything important.", - "book.spectrum.guidebook.the_art_of_brewing.drinking_age.title": "Safety Question", + "book.spectrum.guidebook.the_art_of_brewing.drinking_age.text": "The [Titration Barrel](entry://cuisine/titration_barrel) is capable of brewing alcoholic beverages. If you want to engage with recipes and effects referencing alcohol, press the button below to unlock these recipes.\\\nIf you do not like such things don't worry – you won't miss out on anything important.", + "book.spectrum.guidebook.the_art_of_brewing.drinking_age.title": "Alcoholic Beverages", "book.spectrum.guidebook.the_art_of_brewing.name": "The Art of Brewing", "book.spectrum.guidebook.the_art_of_brewing.page0.text": "Fermentation is a very natural process – things take time and care. As there is never a completely controlled environment, there are a lot of variables.\\\nI can follow the recipe to the letter, or play around a bit. Fermentation is an Art!", "book.spectrum.guidebook.the_art_of_brewing.page1.text": "- Time: It takes time for the barrel to influence the contents. Most drinks will develop more intense and even additional effects if given more time than strictly necessary\n- Temperature: The hotter it is, the more of the precious contents will simply evaporate over time. This is called the angel's share", From 8c18e495af43f04d5919237ba3b2ea66bfe14d4d Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 12:44:46 +0200 Subject: [PATCH 179/477] sort block placer & breaker next to each others in the guidebook. Reworded the placer entry. Filter symbol is now round --- src/main/resources/assets/spectrum/lang/en_us.json | 4 ++-- .../guidebook/entries/magical_blocks/block_detector.json | 2 +- .../books/guidebook/entries/magical_blocks/block_placer.json | 2 +- .../books/guidebook/entries/magical_blocks/filtering.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 1f6f77c175..05b31c8620 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -2273,7 +2273,7 @@ "book.spectrum.guidebook.black_hole_chest.page2.text": "Putting a [Knowledge Gem](entry://enchanting/knowledge_gem) in a Black Hole Chest will allow it to absorb XP orbs, transferring the experience into the gem.", "book.spectrum.guidebook.black_hole_chest.page2.title": "Experience Absorption", "book.spectrum.guidebook.black_langast.page0.text": "[Midnight Solution](entry://general/midnight_solution) everywhere.", - "book.spectrum.guidebook.black_langast.page1.text": "What must have happened here to turn whole swathes of land into this dead wasteland? Some terrible accident, for sure. Whatever – or whoever – was responsible for this may have had a [similar experience to mine](entry://general/midnight_aberration)... only much more tragic.\\\n\\\nThe *things* growing here – to call them plants would be an insult even to [#](bb00bb)Dead Bushes[#]() – look anything but healthy.", + "book.spectrum.guidebook.black_langast.page1.text": "What must have happened here to turn whole swathes of land into this dead wasteland? Some terrible accident, for sure. Whatever – or whoever – was responsible for this may have had a [similar experience to me](entry://general/midnight_aberration)... only much more tragic.\\\n\\\nThe *things* growing here – to call them plants would be an insult even to [#](bb00bb)Dead Bushes[#]() – look anything but healthy.", "book.spectrum.guidebook.blackslag.page0.text": "A common, dark and sturdy stone that makes up much of the lower levels of the Deeper Down.", "book.spectrum.guidebook.blackslag.page1.text": "The [](item://minecraft:blast_furnace) smelts these stones faster than a [](item://minecraft:furnace).", "book.spectrum.guidebook.blackslag.page2.text": "Bricks & Tiles can crack.", @@ -2283,7 +2283,7 @@ "book.spectrum.guidebook.block_detector.page0.text": "Similar to an [#](bb00bb)Observer[#](), but more specific.\\\nGives off a [#](449900)redstone pulse[#]() each time a block is placed in front of it that matches the block below it (or above it, if facing down).", "book.spectrum.guidebook.block_flooder.page0.text": "Like a caveman, I've always had to run around illuminating caves or closing their unsightly entrances in my immediate vicinity. To relieve myself of this task I took inspiration from the self-replicating abilities of [Fading](entry://general/fading) and developed the Block Flooder.\\\nIf I throw one into a narrow path, pond or ravine, it will fill up with blocks – in 5%% of cases the result even looks acceptable!", "book.spectrum.guidebook.block_flooder.page1.text": "Pulls matching blocks directly from my inventory to fill the gaps. If I don't have any matching ones, it falls back to [](item://minecraft:cobblestone).", - "book.spectrum.guidebook.block_placer.page0.text": "Automatically breaking blocks, weighing them, sorting them or putting them in one of my chests is easy. But there is one thing that all my previous machines could never do: place things. That is now a thing of the past.\\\n[Topaz](entry://general/shards@topaz), with its affinity for matter, allows it to materialize blocks from its inventory.", + "book.spectrum.guidebook.block_placer.page0.text": "There is one thing that all my previous machines could hardly do: place things. That is now a thing of the past.\\\n[Topaz](entry://general/shards@topaz), with its affinity for matter, allows it to materialize blocks from its inventory.", "book.spectrum.guidebook.block_placer.page1.text": "*It does the thing!*", "book.spectrum.guidebook.block_variants.name": "Basalt & Calcite", "book.spectrum.guidebook.block_variants.page0.text": "Perhaps the blocks that shielded my precious gems from external influences also absorbed some of the magical properties of the geodes themselves?\\\nWho knows. They definitely look pretty and make for great building blocks.", diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/magical_blocks/block_detector.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/magical_blocks/block_detector.json index dec56c967e..f215f6a18a 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/magical_blocks/block_detector.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/magical_blocks/block_detector.json @@ -12,7 +12,7 @@ "parents": [], "background_u_index": 0, "background_v_index": 0, - "x": 1, + "x": 0, "y": 1, "pages": [ { diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/magical_blocks/block_placer.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/magical_blocks/block_placer.json index 68dec94b7b..5279d92a74 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/magical_blocks/block_placer.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/magical_blocks/block_placer.json @@ -12,7 +12,7 @@ "parents": [], "background_u_index": 0, "background_v_index": 0, - "x": 0, + "x": 1, "y": 1, "pages": [ { diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/magical_blocks/filtering.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/magical_blocks/filtering.json index 2e68ebc890..9da406d81b 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/magical_blocks/filtering.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/magical_blocks/filtering.json @@ -13,7 +13,7 @@ } ], "background_u_index": 0, - "background_v_index": 0, + "background_v_index": 4, "x": 3, "y": -2, "pages": [ From aab9b7c3b5d2a25e751c2b8276d809a9799c0bcf Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 13:20:41 +0200 Subject: [PATCH 180/477] no --- .../recipe/crystallarieum/minecraft/prismarine_crystal.json | 2 +- .../data/spectrum/recipe/crystallarieum/spectrum/bismuth.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/prismarine_crystal.json b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/prismarine_crystal.json index 13dccf13bc..8ea0a9de1b 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/prismarine_crystal.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/minecraft/prismarine_crystal.json @@ -19,7 +19,7 @@ "ink_consumption_mod": 0.5 }, { - "consume_chance_per_second": 2.0E-4, + "consume_chance_per_second": 0.001, "growth_acceleration_mod": 1.0, "ingredient": { "item": "minecraft:wet_sponge" diff --git a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bismuth.json b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bismuth.json index e9ab1e95d2..a9d23e2b4d 100644 --- a/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bismuth.json +++ b/src/main/resources/data/spectrum/recipe/crystallarieum/spectrum/bismuth.json @@ -27,7 +27,7 @@ "ink_consumption_mod": 0.25 }, { - "consume_chance_per_second": 2.0E-4, + "consume_chance_per_second": 0.001, "growth_acceleration_mod": 1.25, "ingredient": { "item": "spectrum:star_fragment" From 51e0016157ebd812019f730ee682c3d656906ad6 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 20:06:46 +0200 Subject: [PATCH 181/477] gated crafting recipes --- gradle.properties | 4 +- .../compat/REI/REIClientIntegration.java | 12 +- .../spectrum/compat/REI/SpectrumPlugins.java | 1 + .../REI/plugins/GatedCraftingCategory.java | 63 ++++++++++ .../REI/plugins/GatedCraftingDisplay.java | 88 ++++++++++++++ .../REI/plugins/PedestalCraftingDisplay.java | 5 - .../compat/emi/SpectrumEmiPlugin.java | 11 +- .../emi/recipes/CraftingEMIRecipeGated.java | 91 ++++++++++++++ .../recipe/crafting/GatedCraftingRecipe.java | 68 +++++++++++ .../crafting/ShapedGatedCraftingRecipe.java | 104 ++++++++++++++++ .../ShapelessGatedCraftingRecipe.java | 112 ++++++++++++++++++ .../recipe/crafting/package-info.java | 7 ++ .../potion_workshop/PotionWorkshopRecipe.java | 5 - .../registries/SpectrumRecipeSerializers.java | 4 + .../registries/SpectrumRecipeTypes.java | 1 + .../resources/assets/spectrum/lang/en_us.json | 1 + 16 files changed, 556 insertions(+), 21 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/compat/REI/plugins/GatedCraftingCategory.java create mode 100644 src/main/java/de/dafuqs/spectrum/compat/REI/plugins/GatedCraftingDisplay.java create mode 100644 src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CraftingEMIRecipeGated.java create mode 100644 src/main/java/de/dafuqs/spectrum/recipe/crafting/GatedCraftingRecipe.java create mode 100644 src/main/java/de/dafuqs/spectrum/recipe/crafting/ShapedGatedCraftingRecipe.java create mode 100644 src/main/java/de/dafuqs/spectrum/recipe/crafting/ShapelessGatedCraftingRecipe.java create mode 100644 src/main/java/de/dafuqs/spectrum/recipe/crafting/package-info.java diff --git a/gradle.properties b/gradle.properties index b2fdaffd8b..b6b9e22386 100644 --- a/gradle.properties +++ b/gradle.properties @@ -21,7 +21,7 @@ archives_base_name=Spectrum # Dependencies modmenu_version=11.0.3 rei_version=16.0.799 -emi_version=1.1.22+1.21.1 +emi_version=1.1.24+1.21.1 architectury_version=13.0.8 # https://cloudsmith.io/~klikli-dev/repos/mods/groups/ modonomicon_version=1.117.4 @@ -60,7 +60,7 @@ vanityslots_version=xWfEA0yC # starry_skies_version=3.2.0+1.21.1 # What recipe viewer to use ('emi', 'rei', or 'disabled') -recipe_viewer=emi +recipe_viewer=rei # Datagen runtime mod versions gobber_version=5736976 ae2_version=eDnBiYjR diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/REIClientIntegration.java b/src/main/java/de/dafuqs/spectrum/compat/REI/REIClientIntegration.java index e7ed800f79..f031abc8dc 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/REIClientIntegration.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/REIClientIntegration.java @@ -8,6 +8,7 @@ import de.dafuqs.spectrum.recipe.anvil_crushing.*; import de.dafuqs.spectrum.recipe.cinderhearth.*; import de.dafuqs.spectrum.recipe.color_picker.*; +import de.dafuqs.spectrum.recipe.crafting.*; import de.dafuqs.spectrum.recipe.crystallarieum.*; import de.dafuqs.spectrum.recipe.enchanter.*; import de.dafuqs.spectrum.recipe.fluid_converting.*; @@ -34,6 +35,7 @@ import me.shedaniel.rei.forge.*; import me.shedaniel.rei.plugin.common.*; import net.minecraft.world.inventory.*; +import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.block.*; import java.util.*; @@ -44,6 +46,7 @@ public class REIClientIntegration implements REIClientPlugin { @Override public void registerCategories(CategoryRegistry registry) { + registry.add(new GatedCraftingCategory()); registry.add(new PedestalCraftingCategory()); registry.add(new AnvilCrushingCategory()); registry.add(new FusionShrineCategory()); @@ -74,14 +77,15 @@ public void registerCategories(CategoryRegistry registry) { EntryStacks.of(SpectrumBlocks.PEDESTAL_MOONSTONE) ); registry.addWorkstations(SpectrumPlugins.PEDESTAL_CRAFTING, pedestals); + if (SpectrumConfig.CONFIG.canPedestalCraftVanillaRecipes()) { registry.addWorkstations(BuiltinPlugin.CRAFTING, pedestals); + registry.addWorkstations(SpectrumPlugins.GATED_CRAFTING, pedestals); } - - registry.addWorkstations(BuiltinPlugin.CRAFTING, EntryStacks.of(SpectrumItems.CRAFTING_TABLET)); - registry.addWorkstations(BuiltinPlugin.CRAFTING, EntryStacks.of(SpectrumBlocks.FABRICATION_CHEST)); + registry.addWorkstations(BuiltinPlugin.CRAFTING, EntryStacks.of(SpectrumItems.CRAFTING_TABLET), EntryStacks.of(SpectrumBlocks.FABRICATION_CHEST)); registry.addWorkstations(BuiltinPlugin.BLASTING, EntryStacks.of(SpectrumBlocks.CINDERHEARTH)); + registry.addWorkstations(SpectrumPlugins.GATED_CRAFTING, EntryStacks.of(SpectrumItems.CRAFTING_TABLET), EntryStacks.of(SpectrumBlocks.FABRICATION_CHEST), EntryStacks.of(SpectrumBlocks.CINDERHEARTH)); registry.addWorkstations(SpectrumPlugins.ANVIL_CRUSHING, EntryStacks.of(Blocks.ANVIL), EntryStacks.of(SpectrumBlocks.BEDROCK_ANVIL), EntryStacks.of(SpectrumBlocks.STRATINE_FLOATBLOCK), EntryStacks.of(SpectrumBlocks.PALTAERIA_FLOATBLOCK)); registry.addWorkstations(SpectrumPlugins.FUSION_SHRINE, EntryIngredient.of(EntryStacks.of(SpectrumBlocks.FUSION_SHRINE_BASALT), EntryStacks.of(SpectrumBlocks.FUSION_SHRINE_CALCITE))); registry.addWorkstations(SpectrumPlugins.NATURES_STAFF, EntryStacks.of(SpectrumItems.NATURES_STAFF)); @@ -105,6 +109,7 @@ public void registerCategories(CategoryRegistry registry) { @Override public void registerDisplays(DisplayRegistry registry) { + registry.registerRecipeFiller(GatedCraftingRecipe.class, RecipeType.CRAFTING, GatedCraftingDisplay::new); registry.registerRecipeFiller(AnvilCrushingRecipe.class, SpectrumRecipeTypes.ANVIL_CRUSHING, AnvilCrushingDisplay::new); registry.registerRecipeFiller(PedestalRecipe.class, SpectrumRecipeTypes.PEDESTAL, PedestalCraftingDisplay::new); registry.registerRecipeFiller(FusionShrineRecipe.class, SpectrumRecipeTypes.FUSION_SHRINE, FusionShrineDisplay::new); @@ -128,7 +133,6 @@ public void registerDisplays(DisplayRegistry registry) { FreezingIdolBlock.FREEZING_MAP.forEach((key, value) -> registry.add(new FreezingDisplay(BlockToBlockWithChanceDisplay.blockToEntryStack(key), BlockToBlockWithChanceDisplay.blockToEntryStack(value.getA().getBlock()), value.getB()))); FirestarterIdolBlock.BURNING_MAP.forEach((key, value) -> registry.add(new HeatingDisplay(BlockToBlockWithChanceDisplay.blockToEntryStack(key), BlockToBlockWithChanceDisplay.blockToEntryStack(value.getA().getBlock()), value.getB()))); - registry.registerVisibilityPredicate((category, display) -> { // do not list recipes in REI at all, until they are unlocked // secret recipes are never shown diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/SpectrumPlugins.java b/src/main/java/de/dafuqs/spectrum/compat/REI/SpectrumPlugins.java index e684550dd1..60bc5616ec 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/SpectrumPlugins.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/SpectrumPlugins.java @@ -6,6 +6,7 @@ public class SpectrumPlugins { + public static final CategoryIdentifier GATED_CRAFTING = CategoryIdentifier.of(SpectrumCommon.locate("gated_crafting")); public static final CategoryIdentifier PEDESTAL_CRAFTING = CategoryIdentifier.of(SpectrumCommon.locate("pedestal_crafting")); public static final CategoryIdentifier ANVIL_CRUSHING = CategoryIdentifier.of(SpectrumCommon.locate("anvil_crushing")); public static final CategoryIdentifier FUSION_SHRINE = CategoryIdentifier.of(SpectrumCommon.locate("fusion_shrine")); diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/GatedCraftingCategory.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/GatedCraftingCategory.java new file mode 100644 index 0000000000..71ef0dbe4a --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/GatedCraftingCategory.java @@ -0,0 +1,63 @@ +package de.dafuqs.spectrum.compat.REI.plugins; + +import com.google.common.collect.*; +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.compat.REI.*; +import de.dafuqs.spectrum.inventories.*; +import de.dafuqs.spectrum.registries.*; +import me.shedaniel.math.*; +import me.shedaniel.rei.api.client.gui.*; +import me.shedaniel.rei.api.client.gui.widgets.*; +import me.shedaniel.rei.api.common.category.*; +import me.shedaniel.rei.api.common.entry.*; +import me.shedaniel.rei.api.common.util.*; +import net.minecraft.network.chat.*; +import net.minecraft.resources.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.block.*; + +import java.util.*; + +// see me.shedaniel.rei.plugin.client.categories.crafting.DefaultCraftingCategory +public class GatedCraftingCategory extends GatedDisplayCategory { + + @Override + public CategoryIdentifier getCategoryIdentifier() { + return SpectrumPlugins.GATED_CRAFTING; + } + + @Override + public ResourceLocation getIdentifier() { + return SpectrumCommon.locate("gated_crafting"); + } + + @Override + public Component getTitle() { + return Component.translatable("container.spectrum.rei.gated_crafting.title"); + } + + @Override + public Renderer getIcon() { + return EntryStacks.of(Blocks.CRAFTING_TABLE); + } + + @Override + public void setupWidgets(Point startPoint, Rectangle bounds, List widgets, GatedCraftingDisplay display) { + widgets.add(Widgets.createRecipeBase(bounds)); + widgets.add(Widgets.createArrow(new Point(startPoint.x + 60, startPoint.y + 18))); + widgets.add(Widgets.createResultSlotBackground(new Point(startPoint.x + 95, startPoint.y + 19))); + List>> input = display.getInputIngredients(3, 3); + List slots = Lists.newArrayList(); + for (int y = 0; y < 3; y++) + for (int x = 0; x < 3; x++) + slots.add(Widgets.createSlot(new Point(startPoint.x + 1 + x * 18, startPoint.y + 1 + y * 18)).markInput()); + for (InputIngredient> ingredient : input) { + slots.get(ingredient.getIndex()).entries(ingredient.get()); + } + widgets.addAll(slots); + widgets.add(Widgets.createSlot(new Point(startPoint.x + 95, startPoint.y + 19)).entries(display.getOutputEntries().get(0)).disableBackground().markOutput()); + if (display.shapeless) { + widgets.add(Widgets.createShapelessIcon(bounds)); + } + } +} diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/GatedCraftingDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/GatedCraftingDisplay.java new file mode 100644 index 0000000000..5bf24b2621 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/GatedCraftingDisplay.java @@ -0,0 +1,88 @@ +package de.dafuqs.spectrum.compat.REI.plugins; + +import de.dafuqs.spectrum.api.item.*; +import de.dafuqs.spectrum.api.recipe.*; +import de.dafuqs.spectrum.blocks.pedestal.*; +import de.dafuqs.spectrum.compat.REI.*; +import de.dafuqs.spectrum.recipe.crafting.*; +import de.dafuqs.spectrum.recipe.fusion_shrine.*; +import de.dafuqs.spectrum.recipe.pedestal.*; +import it.unimi.dsi.fastutil.ints.*; +import me.shedaniel.rei.api.common.category.*; +import me.shedaniel.rei.api.common.display.*; +import me.shedaniel.rei.api.common.display.basic.*; +import me.shedaniel.rei.api.common.entry.*; +import me.shedaniel.rei.api.common.entry.type.*; +import me.shedaniel.rei.api.common.transfer.info.*; +import me.shedaniel.rei.api.common.transfer.info.simple.*; +import me.shedaniel.rei.api.common.util.*; +import me.shedaniel.rei.plugin.common.*; +import me.shedaniel.rei.plugin.common.displays.crafting.*; +import net.minecraft.client.*; +import net.minecraft.core.*; +import net.minecraft.resources.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.inventory.*; +import net.minecraft.world.item.*; +import net.minecraft.world.item.crafting.*; +import org.jspecify.annotations.*; + +import java.util.*; +import java.util.function.*; +import java.util.stream.*; + +public class GatedCraftingDisplay extends GatedSpectrumDisplay { + + protected final int width; + public boolean shapeless; + + public GatedCraftingDisplay(RecipeHolder recipe) { + super(recipe, EntryIngredients.ofIngredients(recipe.value().getIngredients()), Collections.singletonList(EntryIngredients.of(recipe.value().getResultItem(BasicDisplay.registryAccess())))); + if(recipe.value() instanceof ShapedGatedCraftingRecipe shapedGatedCraftingRecipe) { + this.width = shapedGatedCraftingRecipe.getWidth(); + this.shapeless = false; + } else { + this.width = 3; + this.shapeless = true; + } + } + + @Override + public CategoryIdentifier getCategoryIdentifier() { + return SpectrumPlugins.GATED_CRAFTING; + } + + public List>> getInputIngredients(int craftingWidth, int craftingHeight) { + Map>> grid = new HashMap<>(); + + List inputEntries = getInputEntries(); + for (int i = 0; i < inputEntries.size(); i++) { + EntryIngredient stacks = inputEntries.get(i); + if (stacks.isEmpty()) { + continue; + } + int index = DefaultCraftingDisplay.getSlotWithSize(width, i, craftingWidth); + int x = i % width; + int y = i / width; + grid.put(new IntIntImmutablePair(x, y), InputIngredient.of(index, 3 * y + x, stacks)); + } + + List>> list = new ArrayList<>(craftingWidth * craftingHeight); + for (int i = 0, n = craftingWidth * craftingHeight; i < n; i++) { + list.add(InputIngredient.empty(i)); + } + + for (int x = 0; x < craftingWidth; x++) { + for (int y = 0; y < craftingHeight; y++) { + InputIngredient> ingredient = grid.get(new IntIntImmutablePair(x, y)); + if (ingredient != null) { + int index = craftingWidth * y + x; + list.set(index, ingredient); + } + } + } + + return list; + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PedestalCraftingDisplay.java b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PedestalCraftingDisplay.java index e0adf0309b..109e459eeb 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PedestalCraftingDisplay.java +++ b/src/main/java/de/dafuqs/spectrum/compat/REI/plugins/PedestalCraftingDisplay.java @@ -24,11 +24,6 @@ public class PedestalCraftingDisplay extends GatedSpectrumDisplay { protected final int craftingTime; public boolean shapeless; - /** - * When using the REI recipe functionality - * - * @param recipe The recipe - */ public PedestalCraftingDisplay(RecipeHolder recipe) { super(recipe, mapIngredients(recipe.value()), Collections.singletonList(EntryIngredients.of(recipe.value().getResultItem(BasicDisplay.registryAccess())))); this.pedestalRecipeTier = recipe.value().getTier(); diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiPlugin.java b/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiPlugin.java index 6a0c018fe3..3533635925 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiPlugin.java +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/SpectrumEmiPlugin.java @@ -9,6 +9,7 @@ import de.dafuqs.spectrum.data_loaders.*; import de.dafuqs.spectrum.inventories.*; import de.dafuqs.spectrum.inventories.slots.*; +import de.dafuqs.spectrum.recipe.crafting.*; import de.dafuqs.spectrum.recipe.fluid_converting.*; import de.dafuqs.spectrum.registries.*; import dev.emi.emi.api.*; @@ -119,11 +120,11 @@ public void registerCategories(EmiRegistry registry) { } public void registerRecipes(EmiRegistry registry) { - // TODO: Register our recipes ourselves - // right now dev.emi.emi.VanillaPlugin handles them - // which does not process the unlock check - //addAll(registry, RecipeType.CRAFTING, ShapedGatedCraftingEMIRecipe::new); - //addAll(registry, RecipeType.CRAFTING, ShapelessGatedCraftingEMIRecipe::new); + for (RecipeHolder recipe : registry.getRecipeManager().getAllRecipesFor(RecipeType.CRAFTING)) { + if(recipe.value() instanceof GatedCraftingRecipe) { + addRecipeSafe(registry, () -> new CraftingEMIRecipeGated((RecipeHolder)(Object) recipe)); + } + } addAll(registry, SpectrumRecipeTypes.ANVIL_CRUSHING, AnvilCrushingEmiRecipeGated::new); addAll(registry, SpectrumRecipeTypes.PEDESTAL, PedestalCraftingEmiRecipeGated::new); diff --git a/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CraftingEMIRecipeGated.java b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CraftingEMIRecipeGated.java new file mode 100644 index 0000000000..ddfcf979c1 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/compat/emi/recipes/CraftingEMIRecipeGated.java @@ -0,0 +1,91 @@ +package de.dafuqs.spectrum.compat.emi.recipes; + +import com.google.common.collect.*; +import de.dafuqs.spectrum.compat.emi.*; +import de.dafuqs.spectrum.recipe.crafting.*; +import dev.emi.emi.api.recipe.*; +import dev.emi.emi.api.render.*; +import dev.emi.emi.api.stack.*; +import dev.emi.emi.api.widget.*; +import dev.emi.emi.recipe.*; +import net.minecraft.world.item.*; +import net.minecraft.world.item.crafting.*; + +import java.util.*; + +// An amalgam of EmiShapedRecipe & EmiShapelessRecipe +public class CraftingEMIRecipeGated extends GatedSpectrumEmiRecipe { + + protected boolean shapeless = false; + + public CraftingEMIRecipeGated(RecipeHolder recipe) { + super(VanillaEmiRecipeCategories.CRAFTING, recipe, 118, 54); + if(recipe.value() instanceof ShapedGatedCraftingRecipe shapedGatedCraftingRecipe) { + this.inputs = padIngredients(shapedGatedCraftingRecipe); + } else { + this.inputs = recipe.value().getIngredients().stream().map(EmiIngredient::of).toList(); + this.shapeless = true; + } + } + + private static List padIngredients(ShapedGatedCraftingRecipe recipe) { + List list = Lists.newArrayList(); + int i = 0; + for (int y = 0; y < 3; y++) { + for (int x = 0; x < 3; x++) { + if (x >= recipe.getWidth() || y >= recipe.getHeight() || i >= recipe.getIngredients().size()) { + list.add(EmiStack.EMPTY); + } else { + list.add(EmiIngredient.of(recipe.getIngredients().get(i++))); + } + } + } + return list; + } + + public boolean canFit(int width, int height) { + if(shapeless) { + return this.inputs.size() <= width * height; + } else { + if (inputs.size() > 9) { + return false; + } + for (int i = 0; i < inputs.size(); i++) { + int x = i % 3; + int y = i / 3; + if (!inputs.get(i).isEmpty() && (x >= width || y >= height)) { + return false; + } + } + return true; + } + } + + @Override + public void addUnlockedWidgets(WidgetHolder widgets) { + if (shapeless) { + widgets.addTexture(EmiTexture.SHAPELESS, 97, 0); + } + widgets.addTexture(EmiTexture.EMPTY_ARROW, 60, 18); + + int sOff = 0; + if (!shapeless) { + if (canFit(1, 3)) { + sOff -= 1; + } + if (canFit(3, 1)) { + sOff -= 3; + } + } + for (int i = 0; i < 9; i++) { + int s = i + sOff; + if (s >= 0 && s < this.inputs.size()) { + widgets.addSlot(this.inputs.get(s), i % 3 * 18, i / 3 * 18); + } else { + widgets.addSlot(EmiStack.of(ItemStack.EMPTY), i % 3 * 18, i / 3 * 18); + } + } + widgets.addSlot(this.outputs.getFirst(), 92, 14).large(true).recipeContext(this); + } + +} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/recipe/crafting/GatedCraftingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/crafting/GatedCraftingRecipe.java new file mode 100644 index 0000000000..7669d6f142 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/recipe/crafting/GatedCraftingRecipe.java @@ -0,0 +1,68 @@ +package de.dafuqs.spectrum.recipe.crafting; + +import de.dafuqs.spectrum.api.recipe.*; +import net.minecraft.core.*; +import net.minecraft.resources.*; +import net.minecraft.world.item.*; +import net.minecraft.world.item.crafting.*; +import org.jetbrains.annotations.*; + +import java.util.*; + +// We cannot extend ShapedRecipe / ShapelessRecipe, since EMI would force-register its own recipe handler for it in dev.emi.emi.VanillaPlugin. Big sad. +// Our Fallback: EMI hardcodes CustomRecipe to not register its default recipe display. +public abstract class GatedCraftingRecipe extends CustomRecipe implements GatedRecipe { + + protected final ItemStack result; + protected final String group; + protected final boolean secret; + protected final Optional requiredAdvancementIdentifier; + + public GatedCraftingRecipe(String group, CraftingBookCategory category, ItemStack result, boolean secret, Optional requiredAdvancementIdentifier) { + super(category); + this.result = result; + this.group = group; + this.secret = secret; + this.requiredAdvancementIdentifier = requiredAdvancementIdentifier; + } + + @Override + public String getGroup() { + return this.group; + } + + @Override + public boolean isSecret() { + return this.secret; + } + + @Override + public Optional getRequiredAdvancementIdentifier() { + return this.requiredAdvancementIdentifier; + } + + @Override + public @Nullable ResourceLocation getRecipeTypeUnlockIdentifier() { + return null; + } + + @Override + public ItemStack assemble(CraftingInput input, HolderLookup.Provider registries) { + return this.getResultItem(registries).copy(); + } + + @Override + public ItemStack getResultItem(HolderLookup.Provider registries) { + return this.result; + } + + protected ItemStack getResult() { + return this.result; + } + + @Override + public String getRecipeTypeShortID() { + return "gated_crafting"; + } + +} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/recipe/crafting/ShapedGatedCraftingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/crafting/ShapedGatedCraftingRecipe.java new file mode 100644 index 0000000000..1b3e32cd85 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/recipe/crafting/ShapedGatedCraftingRecipe.java @@ -0,0 +1,104 @@ +package de.dafuqs.spectrum.recipe.crafting; + +import com.mojang.serialization.*; +import com.mojang.serialization.codecs.*; +import de.dafuqs.spectrum.api.recipe.*; +import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.recipe.enchanter.*; +import de.dafuqs.spectrum.registries.*; +import dev.emi.emi.api.recipe.*; +import net.minecraft.core.*; +import net.minecraft.network.*; +import net.minecraft.network.codec.*; +import net.minecraft.resources.*; +import net.minecraft.world.item.*; +import net.minecraft.world.item.crafting.*; +import net.minecraft.world.level.*; +import org.jetbrains.annotations.*; + +import java.util.*; +import java.util.function.*; + +// We cannot extend ShapedRecipe / ShapelessRecipe, since EMI would force-register its own recipe handler for it in dev.emi.emi.VanillaPlugin. Big sad. +// Our Fallback: EMI hardcodes CustomRecipe to not register its default recipe display. +public class ShapedGatedCraftingRecipe extends GatedCraftingRecipe { + + protected final ShapedRecipePattern pattern; + + public ShapedGatedCraftingRecipe(String group, CraftingBookCategory category, ShapedRecipePattern pattern, ItemStack result, boolean secret, Optional requiredAdvancementIdentifier) { + super(group, category, result, secret, requiredAdvancementIdentifier); + this.pattern = pattern; + } + + public int getWidth() { + return this.pattern.width(); + } + + public int getHeight() { + return this.pattern.height(); + } + + public NonNullList getIngredients() { + return this.pattern.ingredients(); + } + + @Override + public boolean matches(CraftingInput input, Level level) { + return this.pattern.matches(input); + } + + @Override + public ItemStack assemble(CraftingInput input, HolderLookup.Provider registries) { + return this.getResultItem(registries).copy(); + } + + @Override + public boolean canCraftInDimensions(int width, int height) { + return width >= this.pattern.width() && height >= this.pattern.height(); + } + + @Override + public RecipeSerializer getSerializer() { + return SpectrumRecipeSerializers.GATED_SHAPED_CRAFTING_RECIPE_SERIALIZER; + } + + public ShapedRecipePattern getPattern() { + return this.pattern; + } + + public static class Serializer implements RecipeSerializer { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( + recipe -> recipe.group( + Codec.STRING.optionalFieldOf("group", "").forGetter(r -> r.group), + CraftingBookCategory.CODEC.optionalFieldOf("category", CraftingBookCategory.MISC).forGetter(shapedGatedCraftingRecipe -> shapedGatedCraftingRecipe.category()), + ShapedRecipePattern.MAP_CODEC.forGetter(r -> r.pattern), + ItemStack.STRICT_CODEC.fieldOf("result").forGetter(r -> r.result), + Codec.BOOL.optionalFieldOf("secret", false).forGetter(r -> r.secret), + ResourceLocation.CODEC.optionalFieldOf("required_advancement").forGetter(r -> r.requiredAdvancementIdentifier) + ) + .apply(recipe, ShapedGatedCraftingRecipe::new) + ); + + public static final StreamCodec STREAM_CODEC = PacketCodecHelper.tuple( + ByteBufCodecs.STRING_UTF8, ShapedGatedCraftingRecipe::getGroup, + CraftingBookCategory.STREAM_CODEC, ShapedGatedCraftingRecipe::category, + ShapedRecipePattern.STREAM_CODEC, ShapedGatedCraftingRecipe::getPattern, + ItemStack.STREAM_CODEC, ShapedGatedCraftingRecipe::getResult, + ByteBufCodecs.BOOL, ShapedGatedCraftingRecipe::isSecret, + ByteBufCodecs.optional(ResourceLocation.STREAM_CODEC), ShapedGatedCraftingRecipe::getRequiredAdvancementIdentifier, + ShapedGatedCraftingRecipe::new + ); + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } + + } + +} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/recipe/crafting/ShapelessGatedCraftingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/crafting/ShapelessGatedCraftingRecipe.java new file mode 100644 index 0000000000..c4fb6ba9ab --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/recipe/crafting/ShapelessGatedCraftingRecipe.java @@ -0,0 +1,112 @@ +package de.dafuqs.spectrum.recipe.crafting; + +import com.mojang.serialization.*; +import com.mojang.serialization.codecs.*; +import de.dafuqs.spectrum.api.recipe.*; +import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.core.*; +import net.minecraft.network.*; +import net.minecraft.network.codec.*; +import net.minecraft.resources.*; +import net.minecraft.world.item.*; +import net.minecraft.world.item.crafting.*; +import net.minecraft.world.level.*; +import net.neoforged.neoforge.common.util.*; +import org.jetbrains.annotations.*; + +import java.util.*; + +// We cannot extend ShapedRecipe / ShapelessRecipe, since EMI would force-register its own recipe handler for it in dev.emi.emi.VanillaPlugin. Big sad. +// Our Fallback: EMI hardcodes CustomRecipe to not register its default recipe display. +public class ShapelessGatedCraftingRecipe extends GatedCraftingRecipe { + + protected final NonNullList ingredients; + protected final boolean isSimple; + + public ShapelessGatedCraftingRecipe(String group, CraftingBookCategory category, ItemStack result, NonNullList ingredients, boolean secret, Optional requiredAdvancementIdentifier) { + super(group, category, result, secret, requiredAdvancementIdentifier); + this.ingredients = ingredients; + this.isSimple = ingredients.stream().allMatch(Ingredient::isSimple); + } + + public NonNullList getIngredients() { + return this.ingredients; + } + + @Override + public boolean matches(CraftingInput input, Level level) { + if (input.ingredientCount() != this.ingredients.size()) { + return false; + } else if (!isSimple) { + var nonEmptyItems = new ArrayList(input.ingredientCount()); + for (ItemStack item : input.items()) + if (!item.isEmpty()) + nonEmptyItems.add(item); + return RecipeMatcher.findMatches(nonEmptyItems, this.ingredients) != null; + } else { + return input.size() == 1 && this.ingredients.size() == 1 + ? this.ingredients.getFirst().test(input.getItem(0)) + : input.stackedContents().canCraft(this, null); + } + } + + @Override + public boolean canCraftInDimensions(int width, int height) { + return width * height >= this.ingredients.size(); + } + + @Override + public RecipeSerializer getSerializer() { + return SpectrumRecipeSerializers.GATED_SHAPELESS_CRAFTING_RECIPE_SERIALIZER; + } + + public static class Serializer implements RecipeSerializer { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( + recipe -> recipe.group( + Codec.STRING.optionalFieldOf("group", "").forGetter(r -> r.group), + CraftingBookCategory.CODEC.optionalFieldOf("category", CraftingBookCategory.MISC).forGetter(CustomRecipe::category), + ItemStack.STRICT_CODEC.fieldOf("result").forGetter(r -> r.result), + Ingredient.CODEC_NONEMPTY.listOf().fieldOf("ingredients").flatXmap( + list -> { + Ingredient[] aingredient = list.toArray(Ingredient[]::new); // Neo skip the empty check and immediately create the array. + if (aingredient.length == 0) { + return DataResult.error(() -> "No ingredients for shapeless recipe"); + } else { + return aingredient.length > 9 + ? DataResult.error(() -> "Too many ingredients for shapeless recipe. The maximum is: %s".formatted(9)) + : DataResult.success(NonNullList.of(Ingredient.EMPTY, aingredient)); + } + }, + DataResult::success + ) + .forGetter(p_300975_ -> p_300975_.ingredients), + Codec.BOOL.optionalFieldOf("secret", false).forGetter(r -> r.secret), + ResourceLocation.CODEC.optionalFieldOf("required_advancement").forGetter(r -> r.requiredAdvancementIdentifier) + ) + .apply(recipe, ShapelessGatedCraftingRecipe::new) + ); + + public static final StreamCodec STREAM_CODEC = PacketCodecHelper.tuple( + ByteBufCodecs.STRING_UTF8, ShapelessGatedCraftingRecipe::getGroup, + CraftingBookCategory.STREAM_CODEC, ShapelessGatedCraftingRecipe::category, + ItemStack.STREAM_CODEC, ShapelessGatedCraftingRecipe::getResult, + Ingredient.CONTENTS_STREAM_CODEC.apply(ByteBufCodecs.collection(NonNullList::createWithCapacity)), ShapelessGatedCraftingRecipe::getIngredients, + ByteBufCodecs.BOOL, ShapelessGatedCraftingRecipe::isSecret, + ByteBufCodecs.optional(ResourceLocation.STREAM_CODEC), r -> r.requiredAdvancementIdentifier, + ShapelessGatedCraftingRecipe::new + ); + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } + + } + +} \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/recipe/crafting/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/crafting/package-info.java new file mode 100644 index 0000000000..91fdd88072 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/recipe/crafting/package-info.java @@ -0,0 +1,7 @@ +@NullMarked +@MethodsReturnNonnullByDefault +@FieldsAreNonnullByDefault +package de.dafuqs.spectrum.recipe.crafting; + +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopRecipe.java index 08c2664ddf..e854f6e250 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopRecipe.java @@ -106,11 +106,6 @@ public int getCraftingTime() { return this.craftingTime; } - @Override - public RecipeSerializer getSerializer() { - return SpectrumRecipeSerializers.ANVIL_CRUSHING_RECIPE_SERIALIZER; - } - @Override public RecipeType getType() { return SpectrumRecipeTypes.ANVIL_CRUSHING; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeSerializers.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeSerializers.java index 46b22fd80d..ac2b4afc8f 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeSerializers.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeSerializers.java @@ -5,6 +5,7 @@ import de.dafuqs.spectrum.recipe.anvil_crushing.*; import de.dafuqs.spectrum.recipe.cinderhearth.*; import de.dafuqs.spectrum.recipe.color_picker.*; +import de.dafuqs.spectrum.recipe.crafting.*; import de.dafuqs.spectrum.recipe.crafting.dynamic.*; import de.dafuqs.spectrum.recipe.crystallarieum.*; import de.dafuqs.spectrum.recipe.enchanter.*; @@ -31,6 +32,9 @@ public class SpectrumRecipeSerializers { private static final DeferredRegister> REGISTRAR = DeferredRegister.create(Registries.RECIPE_SERIALIZER, SpectrumCommon.MOD_ID); // VANILLA + public static final RecipeSerializer GATED_SHAPED_CRAFTING_RECIPE_SERIALIZER = register("gated_crafting_shaped", new ShapedGatedCraftingRecipe.Serializer()); + public static final RecipeSerializer GATED_SHAPELESS_CRAFTING_RECIPE_SERIALIZER = register("gated_crafting_shapeless", new ShapelessGatedCraftingRecipe.Serializer()); + public static final RecipeSerializer REPAIR_ANYTHING_SERIALIZER = register("repair_anything", new EmptyRecipeSerializer<>(RepairAnythingRecipe::new)); public static final RecipeSerializer CLEAR_INK_SERIALIZER = register("clear_ink", new EmptyRecipeSerializer<>(ClearInkRecipe::new)); public static final RecipeSerializer CLEAR_ENDER_SPLICE_SERIALIZER = register("clear_ender_splice", new EmptyRecipeSerializer<>(ClearEnderSpliceRecipe::new)); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeTypes.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeTypes.java index 1cd5b3fb81..16c32e9d11 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeTypes.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumRecipeTypes.java @@ -4,6 +4,7 @@ import de.dafuqs.spectrum.recipe.anvil_crushing.*; import de.dafuqs.spectrum.recipe.cinderhearth.*; import de.dafuqs.spectrum.recipe.color_picker.*; +import de.dafuqs.spectrum.recipe.crafting.*; import de.dafuqs.spectrum.recipe.crystallarieum.*; import de.dafuqs.spectrum.recipe.enchanter.*; import de.dafuqs.spectrum.recipe.fluid_converting.*; diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 05b31c8620..07832716e0 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -4175,6 +4175,7 @@ "container.spectrum.rei.titration_barrel.time_days": "%d real-life days", "container.spectrum.rei.titration_barrel.time_hour": "1 real-life hour", "container.spectrum.rei.titration_barrel.time_hours": "%d real-life hours", + "container.spectrum.rei.gated_crafting.title": "Gated Crafting", "death.attack.ripping": "%1$s got ripped!", "death.attack.spectrum_bristle_sprouts": "%1$s was pricked to death", From ee64cc652d3f7453e373ea87dd1c0765338ef5cf Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 20:06:57 +0200 Subject: [PATCH 182/477] these do not exist as item anymore --- .../data/spectrum/ink_color_mapping/item/spectrum.json | 2 -- .../books/guidebook/entries/dimension/shale_clay.json | 6 ++---- .../books/guidebook/entries/dimension/slush.json | 6 ++---- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/main/resources/data/spectrum/ink_color_mapping/item/spectrum.json b/src/main/resources/data/spectrum/ink_color_mapping/item/spectrum.json index 7d492af5e6..1d1d7d58d9 100644 --- a/src/main/resources/data/spectrum/ink_color_mapping/item/spectrum.json +++ b/src/main/resources/data/spectrum/ink_color_mapping/item/spectrum.json @@ -751,7 +751,6 @@ "spectrum:brown": [ "spectrum:crystallarieum", "spectrum:shale_clay", - "spectrum:tilled_shale_clay", "spectrum:polished_shale_clay", "spectrum:polished_shale_clay_stairs", "spectrum:polished_shale_clay_slab", @@ -801,7 +800,6 @@ "spectrum:splinterspawn_infested_shale_clay", "spectrum:slush", "spectrum:overgrown_slush", - "spectrum:tilled_slush", "spectrum:smooth_basalt_stairs", "spectrum:smooth_basalt_slab", "spectrum:smooth_basalt_wall", diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/dimension/shale_clay.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/dimension/shale_clay.json index 943dadae0e..2a9f38ab28 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/dimension/shale_clay.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/dimension/shale_clay.json @@ -124,10 +124,8 @@ "text": "book.spectrum.guidebook.turn_back_to_polished" }, { - "type": "modonomicon:spotlight", - "item": { - "id": "spectrum:tilled_shale_clay" - }, + "type": "modonomicon:text", + "title": "block.spectrum.tilled_shale_clay", "text": "book.spectrum.guidebook.shale_clay.page4.text" } ] diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/dimension/slush.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/dimension/slush.json index 9c62eac062..cba033d4a4 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/dimension/slush.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/dimension/slush.json @@ -28,10 +28,8 @@ "title": "block.spectrum.slush" }, { - "type": "modonomicon:spotlight", - "item": { - "id": "spectrum:tilled_slush" - }, + "type": "modonomicon:text", + "title": "block.spectrum.tilled_shale_clay", "text": "book.spectrum.guidebook.slush.page1.text" } ] From fa39b50b811cf4da5073165ba8c89a4360d9376d Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 20:15:25 +0200 Subject: [PATCH 183/477] fix moonstone temple not generating amethyst blocks --- .../structure/city_below/moonstone_temple.nbt | Bin 49437 -> 49435 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/data/spectrum/structure/city_below/moonstone_temple.nbt b/src/main/resources/data/spectrum/structure/city_below/moonstone_temple.nbt index e665a331326bf44a90cd6fec86687ffe53dc7b64..17fb276db486cf08064685aa5f068b28aff38e79 100644 GIT binary patch delta 14223 zcmb`Nc|a4#_rTkqRX|k4C{ejo6z~En)gTCIi;4#lEh<%klwt*|LMSK-gsBpwh(L8! zP#`Jrtr1a>qH-r~L@1&}ii$!Y1cih%oVkzRY(Ps}&(=RS`^nokvpa9!yd#iyY+TB* zao1b{5OpRbjPq=%(Dn13qit0F`?CMrc>9amqy-bFXJ=O*51nvqj`sh3v~E?ov$@}t zABCs9w%1rxEn9hJX!G=gHB$BM(+_Y>aTAJ%`&=VvTshTw1N+leCJl!yaHrD`gnnl> z>(zLZ6@T^dF~B*o^!KZF+Y4I1+;sdc&so?LRK9#-Zx|1pBnm z)9I6kD*0)?x$G>e!5RXR-t%4O-euRl+#EL@zge9{ueyI|I72Z+B}Jzu9Y{i6hg%E+&P2aX0nV@m zPVo(I?T*4X&NiYjgSU1~sr9sn zk~;Tp8@j%z2C8khOXF%Ja8)xjt74&}pNs989?^!|cx%y%0rQ=A@t(a7A5aXJze#rs zoMKbq7R;Mx8@ZiV;TEh=_jG!EU?+UU{!P&ED;Ve_R^ZC4FU3(GtwD^U%y#egPe}=r zwTIsLi9R_f626?G4h416fnayIx&r~|(0l06=i)kP*<6mlHo6@H(Cyf6{yKbmuYXFw zC(+3FQCQ?;lKZ!wx!9gr5N&t>HDmN9)JTs}lfM!}D2B#w(gmYa zC^sCxc`b{G-fDR9tOnM_$OUlv2e~-{4-Zegg|p$K2XVXoZ(Rt3{`950HQXrsiX(eX z>?)OXmt}hFAP_d+)}X-Iq5c8fQ2YzUFlKnV!~K-DuhVVW_25lS9kIPb4a7zoZbC2S|aLL zaHY_b;7XwoC&7>tCVQ;kuuT>sAH;OQ$H~6Z;y{ z1@g^9^1uF;0>s2BfL`gh%mt%V=Yc*P9= z&~+{R7*o%#xL8 z&^jp`Bt)GMIuabjOp%Qd56V3YKgPmGkvE}>;i4P$m00n4Vcyi&DZm*3oMH*ZP!~1A z>t`ELSQ2fxv7a#q_1M2}i#qwSp9LLX48avuUxaTq{0X`dtkI3o^9{NW%3v&7c0Fkm z%y*(+vgnIz>(1H%rUg_Cfq@f>pwoD3Heoe7`EzlHf-x=N3Yy@&SHJ|<^9`EdUWs`I z0awrj_ezD48TRoicEbGDHIG3quNg#G2)(TNj~^=ukhz_{t2iiJyt& z#u|X)8I4DF1sTDtTo>{VpS|S=_bj`}8-l-x1&_>d3E#LKcx2&DncND$cpFvS-xIQN|Js7` z=cl0*AavdBZ(BV4d%SNh!K1W>ezP4pBB;olbYP6yUkAPN+aAPlJa6r1gGe{V{QRWkmn4D|_!J*rHpQ{H=ZE487E+364~E$E7Ez=E0YdoY;8? z;p7CwI$^@X1+{gj1$)#~lsNSA<>+_I-Tt%-oJ-ocMXdM}hlxMFm>`U}S>N&M57h0eq3e>r?L;zT zEf;2I(6`mrUABW>3vY*dZ5HYhPRr5E3ZHefYS~tZ>`kzkj9w^$6^EugL3k&zNcKq+ zBrL(e=pb+H^ZEi#4KoR0lTf!agMP5Kt{BOPwOY8>dFcAwu!gC87y@V)(CqD`aXb3O zL5((Fe4LbtRuXU>SVS0Spml*2f02~A5Fy25k+gUdL>;FKk4Z)gIQ}}govq~0(3_ya zIje*G*~X#knj+y+tR-qntpjn?n`;P-i08@K+RX+5*U>@%KClszcv63YOJS{kKnRj| zawhU)!UV9gr2-t9KX^Z0-MX&*3|a;7zc*C3ow~bv)t-hX)H|CFpx*gcEM~>$kTMr@ z1SiDf|ID@G@m{rcIfA_&soau`D6iVza_p=voEte0U_MAmk)1`;8&i}1Jka!}?2L^B z!>gHL8AQh*Z#Oj8m8POP@D&{hu-6O?@$QXfh*xvNGlY&oj$DlS5Jjizek2a9jU&*| zQSlNa^VSjzYq0@CXy|yg0v;~?!^r&n#Lqs&z!INsZ)ad^WNK%v&NMskF3dtyr;L2u zRue2T=$P8NSad0{`GL=Qs1fxN*c2scnj&ig#Sp`*Se>f*irNbHPExdY;=mx&SQY(4brG86jlbrz+RR7+uETJv#?@)n5^KMVa*cY zfYvMr=t%b|W6*Sh8nA{?(3;FW;TyR)0lqsk>brcV*|mql!Lj=q(2+TNk@Wb(XvA94 z+HqmUtcD-x`x??nz80LvI&eG1A4Xl|2egMDMKFfPU|jZcU#?lq7jbEEFlrYXG(w9;_TsZa4Fg^TvWmMtqPBY&%yuuVoetYM z_>%TGqT%QfVu*HhP>ST9vqh|v#_M0F7>@LI{;|}Xs|mX@5YjngB>Jp@8FaoYbWN1b zpdUaxP4q6X(|iP5%B38CU0eeT$xE7t%t;=P=q2l0C6F@BI0CfOycdT0&lL-tJu6-# zg)a^+G6Ah7o=c%Qi~x+$8Y2iM;?Qt?n0SANW6ufdA@s+Jdtqqtwu4~YePRj>6QT#d z?e?#y+QXl88qfyBD;#Y=_7Tv=t0xQgT{(^iuUXhX#u#_U28W_o_`T?WnkGk|&k4!* zF|fxd5uu&OKJ?|5h+sJj#_+2VhG!>(T`sn}zxo#boDnfWfLgImjrKSlDL&zboebb6!47==8N?-I^TU0ek# z9>r$tNyI3{6q%obotG!*SUnUnFU(%wG3^H`nxk43PWpUttR0h3E+x;a5h7QAwnnb~ ztc^^)Xo5_>I2Rt%^)Uf=DTcPZ3bd&SxLYnihUlfvL1w06Jz(01)3hxk8A8zEnaYJN zj1!hGhUtP0&11z$*2T56;)_VWZ;!}i`b=atUH9(?b}r{jZQMCl{Lducg`6)ZYVa`e z8q%G*0wiTyJ1F0f%Jpc4tpiLDcFbIg;bLCJhQd5eC-L?eZK!D!Mw*IO zp#y9sUav7$VQpcae!zZ;A=*?F<{_N46(8b|GIB~&Z0tM<1vL5o`m$-=%6W6X)2 z(px?}=;nzRjyVpRT|xQkyD_W{!>&+B~i=@gyuKA(SK9#F`X<*u}!*_>m}WnVBpKeqtfFx>2qEEwK20< zlo!~#Geh&^>TFj0Xm^Br2Sny(V6{)LY#T|)>U1oko1r^;=zwVfqp7*D_5~*2pJslY zqO;WJ^NsI{rBa9WUwytS`M!bq^=O>~KBIX1#_C;#wWAH#+A#>m@N2MirQ2^KIUZ(y z`_Xj&UlBHK6M?28&@^x(#eq%wVpqXLOfid+^UkP)31d;HHt80wf)|*xAdD4HC1qN0 z1Uk5XB6zv@PpLIWpo^2S;u)mO_ktu76_A0)&(@7am5)EqJa;F+dN1_P3fQmE>#A8SPg`5VMCxId9`*?wYLg zu2^K_W96Exi)m+3ULdslONtW9x2;tWZMyMji865_qYvwgcf~6doy9(^4awK0ng5CP(_UG;fVU}cG{26%s*o95ro44YGg8OEk_J4l zX~vW{{}N{e?2k6w#jDs}nD+vcugx&uAFZ>?hqe9X2wpBmrQH-A2OpMO@-@sDte^Id zCDdQatswYU={qo4EPGKUA(Lo2(=;^|=DZB{?R$S{JR)G{Aud^;A#Pa{0ey~Qp*EPv zq8;mdzi6pgI1!v+(K7nzufaEK{9}swiiJ901B-ULkN)2gjG1DIVxca$!=nAtM}Mz4 zPm!e!7O`k2`sn{a@N)6nNf#;L3%tytUGAg*TLdqi!d#K11HNU^F7(mgD_SYCbU`PJ zR@_G)MKFf{1I|_K)dsU!wBvpBcSG=oaSIiDCxQzs+QmNld&LEcy*gkgiw4g1(Vz2s z!KI45x}bqYyV*y78w78w%)iGyIsw?TXbF9EGew8?dqRNDb|iSxF}xR#;327-p$dt9 zk2plZJMstwNgYP@as)3IzgZfMC-VqINgY--^j{GCeTqpG{5T%_Q;F?V)%(S0yfcrz zSzY_Y1l(fId=ODK3< z9{Y1i{#4Z)5WG?2uL{xljXd@jlKknaCGQ2n=xkRg_{BW-21))j)%(S0{5~FgrzGD% zb>(FUUM_yKbUy`e$YZaSc3xa=65slx)V{ez_&rt1upV&>oJMh?Ul6(yMUzX1i zjNyNU4g$j9m7#%@M%j)wp(l}1>X^;-BzmQR;DcN6io(Kq^iQz z7ZlXvyVWfZhld|NVFH!x;qAf36jLBU0o7$=ev;6{vd2-bwMp@|-?t%V+#+cClP%C1olR7JMdzmBiNKlZxzs&UU8K>}} z2E|h~4NosgJI%ep4=Es%M86|oz+oVD57U{QC3iU74Vsi?_2@-$$yVk*c1N#L`XsX} zR^1u;Y^7sqv&8F&TM8k}ElM5}**|bd{VR?5Z2i?<^)qQ(51Y*>DlArYh>2Xs^Nsb1 z)D3*4vjemAH@|^?vQyZiQ1!x9^At2j_@bZl`yWcX8vW#c!9l?)#Ub_oF&V`SB@nCk zg4AuQ_MY2%x!ee4qf1_-+L8)@RMz^fsk&VzV|xP-G~ARKzLZf?9}{?4^~9s3zT#-O zvgP6~zaC~DGrl^>S|w`J!{(ZLe$%9;A6&8SnM|bU^zZG-G;%t8hL10m^$xVR{`$$Y zr@~u!b@0IB*+P>>0h{N$j}g9Kj|=RTan6Z7nU^DiBZGs34z_d?5C88WAalDbn89SS zyg+DA7F7xt%aymg8ta+rpNjCFL}mmzTshGCMAc06@>*5W;9?!%%^+)+#kh2k9%YB}ZH1%pEt7gE9{212G|WN@PC&`|)s?C!s+3?(pb z@Q&`13u&sYE*8|zq+5IXd%aB=M0FCe#~Vu=_7;A%)Jdl3>LPisVo8&j^`fKUj-*wL zh$BIDcG>EygN+U!HaB;C7&uQ)cb*Yp7?ba>Rg#kW&Dud=7q2H&pnw6<4 z=}qOgqPk;o{e6RXEs*Y;hCn`8&-U&nSj*k{De8Sd?<}sq%P?u#YaL@LW$z=l{8f|E~%bNQ#TE!1k#!m;IMQ+tRkr|ISubq33P~q zl?2HJX0iIhIDSrR=DwfR9Z6{=3C5hvN5SSRDB_GxOPW7QL*yK{;1Hz9$sh{a0)S22a@j`ROGTjX>k*Hd<`rnlZU(8 zWxc*S!C<{QMg3GQCCKjabElMkf1|`~__rtpQI%Tyy)smI)x=)JGzt4q-9Rt>UY^ul z;)hG(G73r79HxxPERse6QLd_N9F2M1R5@t~H2Qs;Ta#-gN?H@DrvO|~I3R2$cQ0dt z?*rY|g>%Gym#edt)kt}_(%p{PfLFx%0WQb07ZD$Ai()5QS$UVO#Lv&i&sAMb>GHth z3X($Ug?GA=>ha2m?b2RF=kRUigSW-lpO6+i1PbRpdM4cn*s8PMMTuTy`t2tcdySJePSqHy0?% z>usL6(3UtcVwwk)H&`hI;XtyOFxdJl1{@?GED{4S&km3y{qEjtid$bG5?E%YYz!Fc zdwMT5v{#QMH!MW8^H9!^&i<9sQQc!T{T={3JQ{xAH3AH9(Vxrm`REm>6Y&|EkzOTA4)Y?`cwtf=+ zyNPEux7T!-El*PRnz*eH1UEOwe6&h=-s$qq!t})af=~}%Zlt7)gOv`;1KWtD>|S+! zj~Fk^ZAobACfcogK&Y>mI~3XjY5$RyWHwE8L6MQLL?{$?4%`+O$Y-k$a}o9t{8RDO zLJ%SKbLpL%yS~5DgCJ{W;Nwgd2{Ik_^;*}7_zm^)auwfNZ!x!sdAHgjo*z0{IE@fOLN4XDiV6gXt=6rek*PUC=J0&#HPENVqjFqbH9}TRowUA!Q zrBnHGtx)9vpKIj!t*PfKMg!5IdmPt0Rp^dqL;{?tYAa!ReuR85J1)PoghpsTZf@#z zrjJ)lszu>*F3PyW~O?n;)b)wBz7)%OpFzpvRx{hfS50@{vlLP z@O#wpBr-6QH-<}pKi70B>MQk@d)a}xx%k0xM?w>nMtc7nP^t{9YwmbpxlQdp+eE@R ztAL@!{p(^Mo@yv95{Ji`8j(V0a#e>9N;~`FwicH~4u8YgX6nR{dkCllTC{v`Z>3_t z`evU-jw+egZC2=L$C&#sv)(^Pr@$Pg9*E4a$q=|^hV=i!Gx z0j(Y4#gAgye$1cT5*c!uwgk&emHf{`z0v3xjdxqUD5=xMzmYheQO3iWewxZGYzFO8 z)lo8&>1`(k9sC$^8OWBj^CdLlc*!4u`jHXCon4+=OnTKGCGrA`+o4>6JN66VJYuW; zdHN3z@dfUS;hK zJcY>(>nm~e;BzD8{eDS_Cf!P`>MRB?dZPZZWjGOs4W+FywQFYdJ-m%AWv$x5u<-PX zi1i(;W)w;KTt1-n+>@O;4J4ja*$U-eZjE(+tt_zLs}U=sMpn@FM?}}Ft0PG28K8y^ zIx^XrLWZ%m*mNC3I;%V1gD*F2jf}4BSNWB4)skDPkIN3r-8(RPt@-5C!K|3dqo(vy z`K+h0rb6S0h@Z2o#irlZQ)x_vs2BHaA~-D2dLU#t1UeJD-K7N8I^pB>3Xhmbt=6Fq zd7oKWU(}6~uE%}_p}9i7!yo_^dLjlZ@l){I4DHBY`-*Ztb!yZS5fmi(dY9k$^6&dq zPEMt>>SD&lC_)3RjKs_@gXBZBAIOr=YO)9zRcof{*MnIt>+vSaRahdiT`Qg`xK-=R z^q284HS~|f{8L)^NfE)bkH{Nn%;MsbO@k6A`y6iBiue-WXHT?pK}8e|&y;8Q$&-Yg z)m~NLl<5}7j5NPLTB2}v8zwR`n;IMpEPHZ2xeP67&-6>fqPe9G_K8N%m}!-L z+lVo@xF?9JW!G~8t*pJ98Pc=Ld|6^Hl`Og9B*UKW16_#&W(>wnwM;KWQEttYH~8sA zJ~3gIhKdW~Y0BFCEV*Y?M#{^;VDF`t4XEsu?zBqcLknioYV#DCzW{IA6I zpe$Fcu74;`Q3+_gmD12;#_vx{m>oF1zI&CcWjr!#GP7*S{Q|`{`H*PZv#y~I(#Ix> zvZpi#Q|@3E=+qP;x4yTE5iM)NOM*h>1A}+v4lDbtvsWp#isQ7jn%Y#(j|&ndIdob{ zttnNDy5V;h+J2|3MCR68dNu2rLs=Hj{&?bu{IR2p>%??a>oqH*OY>_$gh>722Op@_ Q<35NrzZ5?Gmi7n#58=E{mH+?% delta 14280 zcmb`NcR*8T_s8qcDk3OigjBW(wQ`6H< zO~1Jl0P6eV;^uffHI2Eh{qf1uCk#)T@*(t&Un_)O8yas!`E<$^9WsNxp))%N8VhZUFKGLff|#1u zW4<2oXqEnRVE@t0#H#!fJ=XV@1#K?x^xo%UkWPM3tMEc_2J?vYQmP-XQ+K&(Vm?^%1-D;?aZ3+TY_$A(wLC1NHfU5q&PTj)d zl>dO`E3KaV^@FQwi(BfL@?uwhO~-=qkMP3}@R~vOv!TTz+a9kdsOKGJp(EpV_NO*Y=A< zR&|4ftV&P4s+Z>G(eh6@zs$xaz+e8bY+>tcvo~RuDd!i>H#v;=@I5nj&lS>JdmDG? zW5$-8ApE557miFZ)*qSTz%FEg6}=IgJ%=ood zUh6QW2VYI>SLy?~rk?L@r z#2cCQnxn|9BasdYUz*`FS;O(wg7S)V;xCstG6ZW)}P>m7=&DoMx!m%ZlhprCn3;k?iYkPJD9K+fk!Y3PyoUDL|>`}X4 zUl?Ji+#LKd@)Mw@QK;Tx*i}{))}T6>uIhy&Ot32+%uo{h;0@;@8$MimjaJi0#!7=0 zhuX|z7pR-Tt8LFFn;;|PAtU5|r;&-C9uS8)8_0RODVS`NfZQT@RdvX!3X73dSz(Wv zEo|-17HU^*T)VIp=*|xGKpYHrA`Yk34)7u;%zS#ri1zUnx!*-)iX59{yps(Fp^gi+ z*Cf5-A2l1|5BuU%cYc0mxUz;a1us~5FaM`?ih~+IiEg;=1avMsxSYIpz0E-;aALXS zrU++H(^#<)xpY_>ym|6&Wb?SG$mXTEa#`wQHKC=OI+i|v*nHSGDHVR41PRSj$$?Zx zLWX^SO*;6Rce74KqP8Hqc@*9@6b-%@VVw_S0Awog&6u=H*jp9CyIVbErttScaXa9( z853ki4;s_0k;os7sNP?3ogQ&#~`frO#HZox$P`XQ`bt#j! zqX}f3HH04wFDvPWg{=>=({s1t-8$j0FZiZ;6uuY_kf$o_39>Wh>Sa!tCGzd`{P{%q zWS=~DvMfm2^(L(Tik`3kdWU@zU0jdE9O1pSw{eG~6bxpdVlfgU;3>i}0-hrO3UYTn zn&qcrd%(QtrQq)KGeL{E89?v;qkO+ABoV-?(}8zX;IHPd<2lxsHr{rp?$ot93;%H< zWVvHX)0+H+?eix;{Gsyo7c%O49xcPhl{_~C8!zaeGqS|ZV zy4X*^o6-6!FKxx|$fTJB>`Fm~`OMF<0FS8D@U`A6RtsBc*+*K{`OpeYFd%jf$c{0Z z1!psGGV>b=Y=~U~#>Q$HW-aARCM^?tGd%$GdSKW-@)7N-T?KX0V*8P91KeGdx!E^ftAq#NSH zNX#*wlV_PZ9AB>?TI}#yx%n?K>5sPI`!m6f=MCXoq_q~7hHKYobDEmZ^nB--3P0`< z-`g;d!H~O0y;84km&U~~W6zMXmVg&xR)FG|8DLqg(JVNBP^Sl=D8?Y+yjH^bnTD50 zStcCcXxR*8G$aVqCY6835QsaEM#kJQKBn5GU`=SNzP+D1^5E5xhpN8s6YG|QeNAuD zCl*A4P3PBud2urVUHF-kKSZ8Sc#Tsqh=MWXIq`qQK;qBgI|X%Js9lM*VaC=^!>V$Y zU5-9c3kL|eL1`P(_OBQeiSgt)xzU^SL|O@IeI1V`C7CqOrsiC0M({R`(#+GI0bVWu zB6D!EV1-4Jg>FPX+c=1P!l_paO4%1pmTqN)c9x~WX;^azoI`YH!(!9M3G#A*TlSW5 zP!Xc&3fWd}SZ8R3+0GtKR014fk-TOE$!lW$|A}MF*a}jXIj0B7fs9}80o;iNf^HSW zZ=U9x7k}907-_YQwFAjZ#e&m{4p*cYLSlVU8lrfGNPf_M9LW#bTBFul8CMdXIxUzm5o}Wnz zM3O~#a!4efm>hgn;Tn%j)xvf&V~a^371W1cXp<$J1GBLDNCYcNgCiJR+D*ks(jmkF z+zc)SZ-O)67Bg2|V#Z!29a`CeMwWqG{-U%F^y+Q+Bt%iB>>E6xWuA#Wz1xR^OpvF8 zXq%?qCqyLSs#4vsUbKo={ZdO_wI{FMDYa6-vI6gvzB{Zf6Ux!%GIc*+-BxX_cB1F& z5|36Q>R6-<;KsMlg^ON9IC`Cif|iY+J3RjtK#87x`?+*t)jEbAOR?WTQq$;UXZRlP zwgI)G%5@ABl1Mt)c{ZCmVg`cX$mmz8j*Pl^c7ZLg+J&Bvf~SrdKyHOD{!av^@D$|E zM4o_=VOSo%*}l~E%$y+@y^P=?!oNORSybf|F28_b8R5US%ZsDuMG*}i{Q1pGhj;r} z3HN1({0LDAsuhI3XP)8evvc*gYJeGap?&c01MYY@p|$G227Z#bV*cuLbM?1rfE%SD z`}PdM#qw7RKp@c&bV)WaDp(%+)qMLk(MMh!_Pv#!n~$_Fsa~sz-Oh|nAc1!;EdkAw zW`f2^^DuA$Jgx|cC!(tTHLy6St>Dc|mWZG3r_9)Mq^zYK=zUx9t1@YNO<=$!L-0(Z zK0Me=L!^jpYW~$4zVs$G&Mt$0i(Z4UChAw$3=_RFSX>B*5!NBG+{@q+Uddy2gBeV;t5s}b7Q1RbYp{;uMf^%?qNs%H^@K(CbV?FqYj|-5RCD;BKT(jJ! z!G&4r@I$yRW2f7|KNz*T!uP>5tnVN`=%$&?V-#PAd{f_!G)OBAV^Y#BGR)vY<+uPT zU)ac@!WerPn8L3|IGn2^JG^VRk)Ihn!+sbK^00MkZ%7a7&<{II@tuN)7QY<%Bnie( z&gvXdo$Tq|Gz8araHwx}1ud?802%aJtiCu@v0Bd*Xa|_M`92xGyeoc zrY8$r zHL>3^V=t2q!3gIi;OtaWaAE3#eMq^J{!&+(nv1O&4OOENYvJk!?kPqh_n@ys6Kf+e z>SE_z5!9k#KnzXm@2>@Lc@v4*!K>a&N2(VX2PzJNs#FtDJ8c2rmPuRH)cjIWLQCfJ zWr@~|Ja}EOysQc!6Ev~=nX!qaLnfR9?}J*{N6gsUq(f^s2i}O*Z}pgTh$S6b#(6vo zYsHL(5frAGfQqyQ(~3adbZ5Y}>26xjQ^oO@%!RACMDA%W5v!Dvr%tH;2oS3 zEHakwT%n2D&ZJCYr*hjD^gZ*57bzGMp40ndB<35QlRJG6pijIw!T%#}qwmor?xSGz zcute(y=7bSZe7!T6ivNXBk*do+Nx)|FH-YM?=4>@@18`D9s7`i#_3D?o|m=Fd*OuS zz0^74Lx3`&d598Dn%@V9&rN&qyBmJ{Se%gsW)c|4gxVC$bYAr)fWB@X@g>7(s!h?H?#J2RC)@;LSXcY@u&@ zK2r10d!w%DPKqYVo4GaFViG-efW(yLV0eoDG!)24F$Eh^^pO{!r><$?UtQ@h%iD1@ zt)*zL_h#-)wm`iv26{6+k}c4twUL^W2ygqV6BCnHoBw77b!mDNxyc;$Pp(>U>P$l_ z;ihauU?u0kZ0x1+GI#!Z zEt{FlRo)@<8TTDeX5hRAm`H4<)8t>BN0}P!!E_h4`pzEh52iOWojvfi}&Vv zMUqD9ArOCUBj|Ds1#BL1ou^tr!Oh^|KPc`Qab2KV5Q*Ey!@miEw|e~D;foR1`KpT) zoCy#A0TB4JH}?@&ebvQC+&4V@2gPk8uDYsy6r3Ip|4#&7ZGI=~mm{uvs(q2TFM0TX zjliqA*frvcQaz;LKI7p(D0+^#qE!zgamRT02?VC_zemTB=6R|O6x#pMr*T0l3zq!x>P)+#Q;{K3$D7NF0hMv8rwDBgy^TRr~bFdMkUq+S*K ztW>yv7zAGSrU~q4QWM2KCJOftidw)UCiS-1XN|)Bl?c4r{8sCeS%4Lj8Y}i$rud%_ z_(vDBfkGzrhS+D7;>ia^P2f0_nkI(-W9E}72*=-7ncvwO+(_+q?`^>rNpIcfmQ;iv z3){~qt|+mAy8AN8`^m>t$|`qA{=g00;9t)uSAzbz{{DFkE_AoQzdz>|AOq_9WB5f_ zTsUNAzBZizsp>{^&}=R)j2v++B5K301?ZX|32pjEF^gSsJdqJk(MkitA zrE9z@PMkmk{exX8661cKmNrRB61s@mAwRjR_m*>B9d5Kpv9VonQITs;D;1o+<(#f) z=3d}$kQ;`&v~%ws5(xoOxeED`dv(k+%q3XV&|u_=S6~^-8hUxsYSI0`*6>Gxi#WKU z7`Gz1hDxy%|NSw@tijwL2pz7gYLUh>pl)Fery^u%pN+9m>uA>;2M{lkG`SYb@jP7~ zB#_hg+F%H2jN*twzzU7!H~7oU#VI-cZ9qAMe|8-hWc!;}0FvQ;uKhV_l=Fb1^Z^#_ zCLh7F*}!mjX-tm4ar==0Ww}GRtF(cfALeI3XU7vujy+Pv4;KZD_H}W~6spd;(>d4W zP(l67Xb)~W!LY78?BYF*_(6r7&GqW=Fi1WVu80^BsZ#92Hp9pZ=qW;F=$B}Lk_712oQ8%LnXMwN*py# zS8WXp)Zun2<5~W~fzu9R9U#WO;x^Pk@o^WSt{6_| zi#ux^bgMe|ED#aB#XS9vuY-R~>0DN>V$<3y@11@TjU5n6YRx)8Vc{a6RDx~r65`F} zuKYIW2%wW##4h(q^v@kGR<6s(B~@$$Lh>2kmf2<%s$vN3U1X^lW2}Xn4`q?|Gr}b= zSQ4&B*$GJ7$itRV96tJM$RovY_gISnG;T2#h={cA$k zxoMC68IfFVlW=rgnMI>Hm6?qs0bK-29%pkYb9Co3*K&xiB; zPB}Tk9j%c(ipJ%AWdcMVsz9-b!u|@=tIOPU8G;?6QeYQjtY@{P0fG*YN9;|wxC1WZdKu}5wZo~%~#Mz5ScgUL>HbHq2 z*~4RszW)I3L9#oLNEx*Xs%dAfmB=+lhA9QC2q3$ptd(K+MXiHfq$Edqk8xrcsH^L8 z2r)k3Frw(`?3A`i94+OjPA3rzBW@a5aZho*Z-}KF+eF__>n~uA?@DuUcHjxbT1g5V(q${wy>af zK&fE};5=rY{koO0Nq*#y7&mhv;WwS1?CJX%?YKVbu(`b5KJ{p0QdxPt=83WO5&QfC z9I4;>i*l>I!WHEl^k`j_e;1*wK?t!0!8k$Q)428*1nbWq#`f@r;V$u`yOmiU#XWhJV{>t>63ogncrM}>iE`S<+|(?*bk7mIeVdMsaI6K-*ckf4fldi8XPkPh;pLGk za>bR6lCZ|mQM~k4xV*VP=2oAay0`m`Db=G{C)FH=uWpZroZ1@ zv8jXl9iwvkweTWFRm`oyma3wnkOPUz(ySPaa=YDc|2g)vmA^>o^;|=PV^~v!^YE;2 zP%KR(<`IB2{}xufNTpYzp}b4Gk>rN6Z)0pMQwoKC!!0dUc)}2X8B6Dyk0`HmIJ{A< za7SwWos&C8i?DLtnay}^kdfWq4zCMcs<{qlW#|$aBuUGV=?n;N^RmoT(|(o7l!B`E z+tt%Z4!)zsQKYWAV7?qptAHZTNrJh*-Al@0)mzH@sSi@HjN1NuTk_>mVdCg1yeezQ zi)a3vxj3a6kTI+h%-r|%nH%)rGx3ggIXbKkC;Cx-zQb5$*X1asew4GOiC{hU#glv^ z<#k(NsAKGwNcmmVz`ekl28W;0L$`#T*Z_3*%Fx$Q)CRIsno)!dhZ5(JHx9Vxso2&Z zGw#GdF&@7fXZQhnBf>LWvUY%KFchlcM`;YVt3mu_v|)M4w|PlNJ5 z16bFCH5AePBc;thg-KM~whu+FJ;eAnI(;PIcb@EP9r8VXpQ0)Tk1GuyIw)d@xwZrM zsLJ@+9STxlfXsd9rsjM-AfwzgsjQ)1$QkHu9T*Ns<>vKqRs`8QLC z1&T$+Hz0lP?TD+QUbLd7+FU#ar0D=c;H0FNF!o&1Q|iykQEDXk1M}rCq@yb5V#b|k zBVyND5qX3RC3{uKpA1E73{*MPk8Ps8lAsaGuh??W0kY&r z>vTTn-|ko$Pf2NZp{50I^$~@~(0Cm`1$A)e}kbdxx-MRy_2y(fLaa)!YK!)nl?EiAeP+r=9C*KQh|l z{ba7Pg>4=Nu%N*^`L^L=?CQ9(FGq&_X~1v;a95ZY2CG?Kjt*8?gR2f4^tX&iWCa7w z{>D$+;-iP|$T@~drY5~ zEet|gZ(@;utTp?=4n@?wB>D1pYGdNo?Ln9CY(8){X7lL9){Tp98!axHb@!7e%U9v{ yezoY+%!glG44v^P$h6+9R-3an+9cY$(Jw^1EKM683m$CxNAWhHm__$yef0kbB`(GQ From a7b76c2e33025d03929c1e63c80d8a7024228125 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 20:27:54 +0200 Subject: [PATCH 184/477] allow the fabrication chest to craft gated recipes --- gradle.properties | 2 +- .../spectrum/blocks/chests/FabricationChestBlockEntity.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index b6b9e22386..ddef5d1995 100644 --- a/gradle.properties +++ b/gradle.properties @@ -60,7 +60,7 @@ vanityslots_version=xWfEA0yC # starry_skies_version=3.2.0+1.21.1 # What recipe viewer to use ('emi', 'rei', or 'disabled') -recipe_viewer=rei +allorecipe_viewer=emi # Datagen runtime mod versions gobber_version=5736976 ae2_version=eDnBiYjR diff --git a/src/main/java/de/dafuqs/spectrum/blocks/chests/FabricationChestBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/chests/FabricationChestBlockEntity.java index 7be49550f4..7afeafb506 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/chests/FabricationChestBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/chests/FabricationChestBlockEntity.java @@ -222,7 +222,7 @@ private boolean tryCraft(FabricationChestBlockEntity chest, int index) { } private static boolean isRecipeValid(Recipe recipe) { - return recipe instanceof ShapelessRecipe || recipe instanceof ShapedRecipe; + return recipe instanceof CraftingRecipe; } private boolean isRecipeCraftable(Recipe recipe) { From d6b7d45334044197a7bb5701ba82ccde81427d75 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 20:59:20 +0200 Subject: [PATCH 185/477] migrate all kinds of compacting recipes to gated crafting recipes --- gradle.properties | 2 +- .../compacting/amethyst_powder_block.json | 19 +++++++++++++ ...yst_powder_from_amethyst_powder_block.json | 14 ++++++++++ .../compacting/bedrock_dust_block.json | 19 +++++++++++++ .../bedrock_dust_block_uncrafting.json | 14 ++++++++++ .../compacting/bismuth_block.json | 19 +++++++++++++ .../bismuth_crystals_from_bismuth_block.json | 14 ++++++++++ .../compacting/citrine_powder_block.json | 19 +++++++++++++ ...rine_powder_from_citrine_powder_block.json | 13 +++++++++ .../compacting/moonstone_powder_block.json | 19 +++++++++++++ ...ne_powder_from_moonstone_powder_block.json | 14 ++++++++++ .../compacting/neolith_block.json | 19 +++++++++++++ .../neolith_from_neolith_block.json | 14 ++++++++++ .../compacting/onyx_powder_block.json | 19 +++++++++++++ .../onyx_powder_from_onyx_powder_block.json | 14 ++++++++++ .../compacting/paltaeria_floatblock.json | 19 +++++++++++++ ...a_fragments_from_paltaeria_floatblock.json | 14 ++++++++++ .../compacting/pure_azurite_block.json | 19 +++++++++++++ .../pure_azurite_from_pure_azurite_block.json | 14 ++++++++++ .../compacting/pure_bloodstone_block.json | 19 +++++++++++++ ...bloodstone_from_pure_bloodstone_block.json | 14 ++++++++++ .../compacting/pure_certus_quartz_block.json | 17 +++-------- ..._quartz_from_pure_certus_quartz_block.json | 17 +++-------- .../compacting/pure_coal_block.json | 19 +++++++++++++ .../pure_coal_from_pure_coal_block.json | 14 ++++++++++ .../compacting/pure_copper_block.json | 19 +++++++++++++ .../pure_copper_from_pure_copper_block.json | 14 ++++++++++ .../compacting/pure_diamond_block.json | 19 +++++++++++++ .../pure_diamond_from_pure_diamond_block.json | 14 ++++++++++ .../compacting/pure_echo_block.json | 19 +++++++++++++ .../pure_echo_from_pure_echo_block.json | 14 ++++++++++ .../compacting/pure_emerald_block.json | 19 +++++++++++++ .../pure_emerald_from_pure_emerald_block.json | 14 ++++++++++ .../compacting/pure_fluix_block.json | 17 +++-------- .../pure_fluix_from_pure_fluix_block.json | 17 +++-------- .../compacting/pure_globette_block.json | 17 +++-------- .../compacting/pure_globette_end_block.json | 17 +++-------- ...ette_end_from_pure_globette_end_block.json | 17 +++-------- ...ure_globette_from_pure_globette_block.json | 17 +++-------- .../pure_globette_nether_block.json | 17 +++-------- ...ether_from_pure_globette_nether_block.json | 17 +++-------- .../compacting/pure_glowstone_block.json | 19 +++++++++++++ ...e_glowstone_from_pure_glowstone_block.json | 14 ++++++++++ .../compacting/pure_gold_block.json | 19 +++++++++++++ .../pure_gold_from_pure_gold_block.json | 14 ++++++++++ .../compacting/pure_iron_block.json | 19 +++++++++++++ .../pure_iron_from_pure_iron_block.json | 14 ++++++++++ .../compacting/pure_lapis_block.json | 19 +++++++++++++ .../pure_lapis_from_pure_lapis_block.json | 14 ++++++++++ .../compacting/pure_malachite_block.json | 19 +++++++++++++ ...e_malachite_from_pure_malachite_block.json | 14 ++++++++++ .../pure_netherite_scrap_block.json | 19 +++++++++++++ ...scrap_from_pure_netherite_scrap_block.json | 14 ++++++++++ .../compacting/pure_prismarine_block.json | 19 +++++++++++++ ...prismarine_from_pure_prismarine_block.json | 14 ++++++++++ .../compacting/pure_quartz_block.json | 19 +++++++++++++ .../pure_quartz_from_pure_quartz_block.json | 14 ++++++++++ .../compacting/pure_redstone_block.json | 19 +++++++++++++ ...ure_redstone_from_pure_redstone_block.json | 14 ++++++++++ .../compacting/pure_zinc_block.json | 17 +++-------- .../pure_zinc_from_pure_zinc_block.json | 17 +++-------- .../compacting/raw_azurite_block.json | 19 +++++++++++++ .../raw_azurite_from_raw_azurite_block.json | 13 +++++++++ .../compacting/raw_bloodstone_block.json | 19 +++++++++++++ ..._bloodstone_from_raw_bloodstone_block.json | 14 ++++++++++ .../compacting/raw_malachite_block.json | 19 +++++++++++++ ...aw_malachite_from_raw_malachite_block.json | 14 ++++++++++ .../compacting/shimmerstone_block.json | 19 +++++++++++++ ...merstone_gems_from_shimmerstone_block.json | 14 ++++++++++ .../compacting/stardust_block.json | 19 +++++++++++++ .../stardust_from_stardust_block.json | 14 ++++++++++ .../compacting/stratine_floatblock.json | 19 +++++++++++++ ...ne_fragments_from_stratine_floatblock.json | 14 ++++++++++ .../compacting/topaz_powder_block.json | 19 +++++++++++++ .../topaz_powder_from_topaz_powder_block.json | 14 ++++++++++ .../compacting/vegetal_block.json | 19 +++++++++++++ .../vegetal_from_vegetal_block.json | 14 ++++++++++ .../gem_blocks/amethyst_pillar.json | 3 +- ...methyst_shards_from_polished_amethyst.json | 3 +- .../gem_blocks/citrine_block.json | 3 +- .../gem_blocks/citrine_pillar.json | 3 +- .../citrine_shards_from_polished_citrine.json | 3 +- .../gem_blocks/moonstone_block.json | 3 +- .../gem_blocks/moonstone_pillar.json | 3 +- ...nstone_shards_from_polished_moonstone.json | 3 +- .../crafting_table/gem_blocks/onyx_block.json | 3 +- .../gem_blocks/onyx_pillar.json | 3 +- .../onyx_shards_from_polished_onyx.json | 3 +- .../gem_blocks/polished_amethyst.json | 3 +- .../gem_blocks/polished_citrine.json | 3 +- .../gem_blocks/polished_moonstone.json | 3 +- .../gem_blocks/polished_onyx.json | 3 +- .../gem_blocks/polished_topaz.json | 3 +- .../gem_blocks/topaz_block.json | 3 +- .../gem_blocks/topaz_pillar.json | 3 +- .../topaz_shards_from_polished_topaz.json | 3 +- .../pigment_blocks/black_block.json | 0 .../black_block_to_black_pigment.json | 0 .../pigment_blocks/blue_block.json | 0 .../blue_block_to_blue_pigment.json | 0 .../pigment_blocks/brown_block.json | 0 .../brown_block_to_brown_pigment.json | 0 .../pigment_blocks/cyan_block.json | 0 .../cyan_block_to_cyan_pigment.json | 0 .../pigment_blocks/gray_block.json | 0 .../gray_block_to_gray_pigment.json | 0 .../pigment_blocks/green_block.json | 0 .../green_block_to_green_pigment.json | 0 .../pigment_blocks/light_blue_block.json | 0 ...ight_blue_block_to_light_blue_pigment.json | 0 .../pigment_blocks/light_gray_block.json | 0 ...ight_gray_block_to_light_gray_pigment.json | 0 .../pigment_blocks/lime_block.json | 0 .../lime_block_to_lime_pigment.json | 0 .../pigment_blocks/magenta_block.json | 0 .../magenta_block_to_magenta_pigment.json | 0 .../pigment_blocks/orange_block.json | 0 .../orange_block_to_orange_pigment.json | 0 .../pigment_blocks/pink_block.json | 0 .../pink_block_to_pink_pigment.json | 0 .../pigment_blocks/purple_block.json | 0 .../purple_block_to_purple_pigment.json | 0 .../pigment_blocks/red_block.json | 0 .../red_block_to_red_pigment.json | 0 .../pigment_blocks/white_block.json | 0 .../white_block_to_white_pigment.json | 0 .../pigment_blocks/yellow_block.json | 0 .../yellow_block_to_yellow_pigment.json | 0 .../black_pigment_to_black_dye.json | 3 +- .../blue_pigment_to_blue_dye.json | 3 +- .../brown_pigment_to_brown_dye.json | 3 +- .../cyan_pigment_to_cyan_dye.json | 3 +- .../gray_pigment_to_gray_dye.json | 3 +- .../green_pigment_to_green_dye.json | 3 +- .../light_blue_pigment_to_light_blue_dye.json | 3 +- .../light_gray_pigment_to_light_gray_dye.json | 3 +- .../lime_pigment_to_lime_dye.json | 3 +- .../magenta_pigment_to_magenta_dye.json | 3 +- .../orange_pigment_to_orange_dye.json | 3 +- .../pink_pigment_to_pink_dye.json | 3 +- .../purple_pigment_to_purple_dye.json | 3 +- .../red_pigment_to_red_dye.json | 3 +- .../white_pigment_to_white_dye.json | 3 +- .../yellow_pigment_to_yellow_dye.json | 3 +- .../compacting/amethyst_powder_block.json | 28 ------------------- ...yst_powder_from_amethyst_powder_block.json | 23 --------------- .../tier1/compacting/bedrock_dust_block.json | 28 ------------------- .../bedrock_dust_block_uncrafting.json | 23 --------------- .../tier1/compacting/bismuth_block.json | 28 ------------------- .../bismuth_crystals_from_bismuth_block.json | 23 --------------- .../compacting/citrine_powder_block.json | 28 ------------------- ...rine_powder_from_citrine_powder_block.json | 23 --------------- .../compacting/moonstone_powder_block.json | 28 ------------------- ...ne_powder_from_moonstone_powder_block.json | 23 --------------- .../tier1/compacting/neolith_block.json | 28 ------------------- .../neolith_from_neolith_block.json | 23 --------------- .../tier1/compacting/onyx_powder_block.json | 28 ------------------- .../onyx_powder_from_onyx_powder_block.json | 23 --------------- .../compacting/paltaeria_floatblock.json | 28 ------------------- ...a_fragments_from_paltaeria_floatblock.json | 23 --------------- .../tier1/compacting/pure_azurite_block.json | 28 ------------------- .../pure_azurite_from_pure_azurite_block.json | 23 --------------- .../compacting/pure_bloodstone_block.json | 28 ------------------- ...bloodstone_from_pure_bloodstone_block.json | 23 --------------- .../tier1/compacting/pure_coal_block.json | 28 ------------------- .../pure_coal_from_pure_coal_block.json | 23 --------------- .../tier1/compacting/pure_copper_block.json | 28 ------------------- .../pure_copper_from_pure_copper_block.json | 23 --------------- .../tier1/compacting/pure_diamond_block.json | 28 ------------------- .../pure_diamond_from_pure_diamond_block.json | 23 --------------- .../tier1/compacting/pure_echo_block.json | 28 ------------------- .../pure_echo_from_pure_echo_block.json | 23 --------------- .../tier1/compacting/pure_emerald_block.json | 28 ------------------- .../pure_emerald_from_pure_emerald_block.json | 23 --------------- .../compacting/pure_glowstone_block.json | 28 ------------------- ...e_glowstone_from_pure_glowstone_block.json | 23 --------------- .../tier1/compacting/pure_gold_block.json | 28 ------------------- .../pure_gold_from_pure_gold_block.json | 23 --------------- .../tier1/compacting/pure_iron_block.json | 28 ------------------- .../pure_iron_from_pure_iron_block.json | 23 --------------- .../tier1/compacting/pure_lapis_block.json | 28 ------------------- .../pure_lapis_from_pure_lapis_block.json | 23 --------------- .../compacting/pure_malachite_block.json | 28 ------------------- ...e_malachite_from_pure_malachite_block.json | 23 --------------- .../pure_netherite_scrap_block.json | 28 ------------------- ...scrap_from_pure_netherite_scrap_block.json | 23 --------------- .../compacting/pure_prismarine_block.json | 28 ------------------- ...prismarine_from_pure_prismarine_block.json | 23 --------------- .../tier1/compacting/pure_quartz_block.json | 28 ------------------- .../pure_quartz_from_pure_quartz_block.json | 23 --------------- .../tier1/compacting/pure_redstone_block.json | 28 ------------------- ...ure_redstone_from_pure_redstone_block.json | 23 --------------- .../tier1/compacting/raw_azurite_block.json | 28 ------------------- .../raw_azurite_from_raw_azurite_block.json | 23 --------------- .../compacting/raw_bloodstone_block.json | 28 ------------------- ..._bloodstone_from_raw_bloodstone_block.json | 23 --------------- .../tier1/compacting/raw_malachite_block.json | 28 ------------------- ...aw_malachite_from_raw_malachite_block.json | 23 --------------- .../tier1/compacting/shimmerstone_block.json | 28 ------------------- ...merstone_gems_from_shimmerstone_block.json | 23 --------------- .../tier1/compacting/stardust_block.json | 28 ------------------- .../stardust_from_stardust_block.json | 23 --------------- .../tier1/compacting/stratine_floatblock.json | 28 ------------------- ...ne_fragments_from_stratine_floatblock.json | 23 --------------- .../tier1/compacting/topaz_powder_block.json | 28 ------------------- .../topaz_powder_from_topaz_powder_block.json | 23 --------------- .../tier1/compacting/vegetal_block.json | 28 ------------------- .../vegetal_from_vegetal_block.json | 23 --------------- 208 files changed, 1173 insertions(+), 1824 deletions(-) create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/amethyst_powder_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/amethyst_powder_from_amethyst_powder_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/bedrock_dust_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/bedrock_dust_block_uncrafting.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/bismuth_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/bismuth_crystals_from_bismuth_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/citrine_powder_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/citrine_powder_from_citrine_powder_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/moonstone_powder_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/moonstone_powder_from_moonstone_powder_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/neolith_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/neolith_from_neolith_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/onyx_powder_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/onyx_powder_from_onyx_powder_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/paltaeria_floatblock.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/paltaeria_fragments_from_paltaeria_floatblock.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_azurite_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_azurite_from_pure_azurite_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_bloodstone_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_bloodstone_from_pure_bloodstone_block.json rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/compacting/pure_certus_quartz_block.json (55%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/compacting/pure_certus_quartz_from_pure_certus_quartz_block.json (50%) create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_coal_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_coal_from_pure_coal_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_copper_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_copper_from_pure_copper_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_diamond_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_diamond_from_pure_diamond_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_echo_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_echo_from_pure_echo_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_emerald_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_emerald_from_pure_emerald_block.json rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/compacting/pure_fluix_block.json (55%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/compacting/pure_fluix_from_pure_fluix_block.json (50%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/compacting/pure_globette_block.json (55%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/compacting/pure_globette_end_block.json (55%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/compacting/pure_globette_end_from_pure_globette_end_block.json (50%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/compacting/pure_globette_from_pure_globette_block.json (50%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/compacting/pure_globette_nether_block.json (55%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/compacting/pure_globette_nether_from_pure_globette_nether_block.json (50%) create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_glowstone_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_glowstone_from_pure_glowstone_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_gold_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_gold_from_pure_gold_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_iron_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_iron_from_pure_iron_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_lapis_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_lapis_from_pure_lapis_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_malachite_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_malachite_from_pure_malachite_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_netherite_scrap_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_netherite_scrap_from_pure_netherite_scrap_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_prismarine_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_prismarine_from_pure_prismarine_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_quartz_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_quartz_from_pure_quartz_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_redstone_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_redstone_from_pure_redstone_block.json rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/compacting/pure_zinc_block.json (55%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/compacting/pure_zinc_from_pure_zinc_block.json (50%) create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_azurite_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_azurite_from_raw_azurite_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_bloodstone_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_bloodstone_from_raw_bloodstone_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_malachite_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_malachite_from_raw_malachite_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/shimmerstone_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/shimmerstone_gems_from_shimmerstone_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/stardust_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/stardust_from_stardust_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/stratine_floatblock.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/stratine_fragments_from_stratine_floatblock.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/topaz_powder_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/topaz_powder_from_topaz_powder_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/vegetal_block.json create mode 100644 src/main/resources/data/spectrum/recipe/crafting_table/compacting/vegetal_from_vegetal_block.json rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/black_block.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/black_block_to_black_pigment.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/blue_block.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/blue_block_to_blue_pigment.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/brown_block.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/brown_block_to_brown_pigment.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/cyan_block.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/cyan_block_to_cyan_pigment.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/gray_block.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/gray_block_to_gray_pigment.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/green_block.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/green_block_to_green_pigment.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/light_blue_block.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/light_blue_block_to_light_blue_pigment.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/light_gray_block.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/light_gray_block_to_light_gray_pigment.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/lime_block.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/lime_block_to_lime_pigment.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/magenta_block.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/magenta_block_to_magenta_pigment.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/orange_block.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/orange_block_to_orange_pigment.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/pink_block.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/pink_block_to_pink_pigment.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/purple_block.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/purple_block_to_purple_pigment.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/red_block.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/red_block_to_red_pigment.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/white_block.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/white_block_to_white_pigment.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/yellow_block.json (100%) rename src/main/resources/data/spectrum/recipe/{pedestal/tier1 => crafting_table}/pigment_blocks/yellow_block_to_yellow_pigment.json (100%) delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/amethyst_powder_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/amethyst_powder_from_amethyst_powder_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/bedrock_dust_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/bedrock_dust_block_uncrafting.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/bismuth_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/bismuth_crystals_from_bismuth_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/citrine_powder_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/citrine_powder_from_citrine_powder_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/moonstone_powder_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/moonstone_powder_from_moonstone_powder_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/neolith_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/neolith_from_neolith_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/onyx_powder_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/onyx_powder_from_onyx_powder_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/paltaeria_floatblock.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/paltaeria_fragments_from_paltaeria_floatblock.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_azurite_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_azurite_from_pure_azurite_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_bloodstone_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_bloodstone_from_pure_bloodstone_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_coal_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_coal_from_pure_coal_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_copper_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_copper_from_pure_copper_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_diamond_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_diamond_from_pure_diamond_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_echo_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_echo_from_pure_echo_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_emerald_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_emerald_from_pure_emerald_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_glowstone_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_glowstone_from_pure_glowstone_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_gold_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_gold_from_pure_gold_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_iron_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_iron_from_pure_iron_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_lapis_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_lapis_from_pure_lapis_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_malachite_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_malachite_from_pure_malachite_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_netherite_scrap_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_netherite_scrap_from_pure_netherite_scrap_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_prismarine_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_prismarine_from_pure_prismarine_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_quartz_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_quartz_from_pure_quartz_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_redstone_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_redstone_from_pure_redstone_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_azurite_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_azurite_from_raw_azurite_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_bloodstone_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_bloodstone_from_raw_bloodstone_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_malachite_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_malachite_from_raw_malachite_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/shimmerstone_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/shimmerstone_gems_from_shimmerstone_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/stardust_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/stardust_from_stardust_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/stratine_floatblock.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/stratine_fragments_from_stratine_floatblock.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/topaz_powder_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/topaz_powder_from_topaz_powder_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/vegetal_block.json delete mode 100644 src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/vegetal_from_vegetal_block.json diff --git a/gradle.properties b/gradle.properties index ddef5d1995..d55b0e9e0d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -60,7 +60,7 @@ vanityslots_version=xWfEA0yC # starry_skies_version=3.2.0+1.21.1 # What recipe viewer to use ('emi', 'rei', or 'disabled') -allorecipe_viewer=emi +recipe_viewer=emi # Datagen runtime mod versions gobber_version=5736976 ae2_version=eDnBiYjR diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/amethyst_powder_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/amethyst_powder_block.json new file mode 100644 index 0000000000..8d879758f3 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/amethyst_powder_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "AAA", + "AAA", + "AAA" + ], + "key": { + "A": { + "item": "spectrum:amethyst_powder" + } + }, + "result": { + "id": "spectrum:amethyst_powder_block", + "count": 1 + }, + "required_advancement": "spectrum:hidden/collect_shards/amethyst" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/amethyst_powder_from_amethyst_powder_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/amethyst_powder_from_amethyst_powder_block.json new file mode 100644 index 0000000000..f9772f3512 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/amethyst_powder_from_amethyst_powder_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:amethyst_powder_block" + } + ], + "result": { + "id": "spectrum:amethyst_powder", + "count": 9 + }, + "required_advancement": "spectrum:hidden/collect_shards/amethyst" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/bedrock_dust_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/bedrock_dust_block.json new file mode 100644 index 0000000000..05417a8545 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/bedrock_dust_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "BBB", + "BBB", + "BBB" + ], + "key": { + "B": { + "item": "spectrum:bedrock_dust" + } + }, + "result": { + "id": "spectrum:bedrock_dust_block", + "count": 1 + }, + "required_advancement": "spectrum:midgame/break_decayed_bedrock" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/bedrock_dust_block_uncrafting.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/bedrock_dust_block_uncrafting.json new file mode 100644 index 0000000000..54c59edf98 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/bedrock_dust_block_uncrafting.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:bedrock_dust_block" + } + ], + "result": { + "id": "spectrum:bedrock_dust", + "count": 9 + }, + "required_advancement": "spectrum:midgame/break_decayed_bedrock" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/bismuth_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/bismuth_block.json new file mode 100644 index 0000000000..c3939100ae --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/bismuth_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "GGG", + "GGG", + "GGG" + ], + "key": { + "G": { + "item": "spectrum:bismuth_crystal" + } + }, + "result": { + "id": "spectrum:bismuth_block", + "count": 1 + }, + "required_advancement": "spectrum:lategame/collect_bismuth_crystal" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/bismuth_crystals_from_bismuth_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/bismuth_crystals_from_bismuth_block.json new file mode 100644 index 0000000000..d772afb6bf --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/bismuth_crystals_from_bismuth_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:bismuth_block" + } + ], + "result": { + "id": "spectrum:bismuth_crystal", + "count": 9 + }, + "required_advancement": "spectrum:lategame/collect_bismuth_crystal" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/citrine_powder_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/citrine_powder_block.json new file mode 100644 index 0000000000..25c9fcb552 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/citrine_powder_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "AAA", + "AAA", + "AAA" + ], + "key": { + "A": { + "item": "spectrum:citrine_powder" + } + }, + "result": { + "id": "spectrum:citrine_powder_block", + "count": 1 + }, + "required_advancement": "spectrum:hidden/collect_shards/citrine" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/citrine_powder_from_citrine_powder_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/citrine_powder_from_citrine_powder_block.json new file mode 100644 index 0000000000..247a8cfb25 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/citrine_powder_from_citrine_powder_block.json @@ -0,0 +1,13 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:citrine_powder_block"} + ], + "result": { + "id": "spectrum:citrine_powder", + "count": 9 + }, + "required_advancement": "spectrum:hidden/collect_shards/citrine" + } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/moonstone_powder_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/moonstone_powder_block.json new file mode 100644 index 0000000000..ff5bbd741f --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/moonstone_powder_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "AAA", + "AAA", + "AAA" + ], + "key": { + "A": { + "item": "spectrum:moonstone_powder" + } + }, + "result": { + "id": "spectrum:moonstone_powder_block", + "count": 1 + }, + "required_advancement": "spectrum:lategame/collect_moonstone" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/moonstone_powder_from_moonstone_powder_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/moonstone_powder_from_moonstone_powder_block.json new file mode 100644 index 0000000000..abd3c3b8b2 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/moonstone_powder_from_moonstone_powder_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:moonstone_powder_block" + } + ], + "result": { + "id": "spectrum:moonstone_powder", + "count": 9 + }, + "required_advancement": "spectrum:lategame/collect_moonstone" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/neolith_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/neolith_block.json new file mode 100644 index 0000000000..6d4f04cb6c --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/neolith_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "AAA", + "AAA", + "AAA" + ], + "key": { + "A": { + "item": "spectrum:neolith" + } + }, + "result": { + "id": "spectrum:neolith_block", + "count": 1 + }, + "required_advancement": "spectrum:midgame/collect_neolith" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/neolith_from_neolith_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/neolith_from_neolith_block.json new file mode 100644 index 0000000000..0e3c5d4b8e --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/neolith_from_neolith_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:neolith_block" + } + ], + "result": { + "id": "spectrum:neolith", + "count": 9 + }, + "required_advancement": "spectrum:midgame/collect_neolith" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/onyx_powder_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/onyx_powder_block.json new file mode 100644 index 0000000000..f8ddc0037c --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/onyx_powder_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "AAA", + "AAA", + "AAA" + ], + "key": { + "A": { + "item": "spectrum:onyx_powder" + } + }, + "result": { + "id": "spectrum:onyx_powder_block", + "count": 1 + }, + "required_advancement": "spectrum:create_onyx_shard" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/onyx_powder_from_onyx_powder_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/onyx_powder_from_onyx_powder_block.json new file mode 100644 index 0000000000..746b43ba52 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/onyx_powder_from_onyx_powder_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:onyx_powder_block" + } + ], + "result": { + "id": "spectrum:onyx_powder", + "count": 9 + }, + "required_advancement": "spectrum:create_onyx_shard" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/paltaeria_floatblock.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/paltaeria_floatblock.json new file mode 100644 index 0000000000..6a47aab4e2 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/paltaeria_floatblock.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "spectrum:paltaeria_fragments" + } + }, + "result": { + "id": "spectrum:paltaeria_floatblock", + "count": 1 + }, + "required_advancement": "spectrum:lategame/carry_too_many_low_gravity_blocks" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/paltaeria_fragments_from_paltaeria_floatblock.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/paltaeria_fragments_from_paltaeria_floatblock.json new file mode 100644 index 0000000000..ca3af74886 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/paltaeria_fragments_from_paltaeria_floatblock.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:paltaeria_floatblock" + } + ], + "result": { + "id": "spectrum:paltaeria_fragments", + "count": 9 + }, + "required_advancement": "spectrum:lategame/carry_too_many_low_gravity_blocks" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_azurite_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_azurite_block.json new file mode 100644 index 0000000000..0bace24d27 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_azurite_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "AAA", + "AAA", + "AAA" + ], + "key": { + "A": { + "item": "spectrum:pure_azurite" + } + }, + "result": { + "id": "spectrum:pure_azurite_block", + "count": 1 + }, + "required_advancement": "spectrum:midgame/collect_azurite" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_azurite_from_pure_azurite_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_azurite_from_pure_azurite_block.json new file mode 100644 index 0000000000..448407fbbd --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_azurite_from_pure_azurite_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:pure_azurite_block" + } + ], + "result": { + "id": "spectrum:pure_azurite", + "count": 9 + }, + "required_advancement": "spectrum:midgame/collect_azurite" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_bloodstone_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_bloodstone_block.json new file mode 100644 index 0000000000..30d506fc42 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_bloodstone_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "AAA", + "AAA", + "AAA" + ], + "key": { + "A": { + "item": "spectrum:pure_bloodstone" + } + }, + "result": { + "id": "spectrum:pure_bloodstone_block", + "count": 1 + }, + "required_advancement": "spectrum:grow_bloodstone_in_crystallarieum" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_bloodstone_from_pure_bloodstone_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_bloodstone_from_pure_bloodstone_block.json new file mode 100644 index 0000000000..d26eba2d8b --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_bloodstone_from_pure_bloodstone_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:pure_bloodstone_block" + } + ], + "result": { + "id": "spectrum:pure_bloodstone", + "count": 9 + }, + "required_advancement": "spectrum:grow_bloodstone_in_crystallarieum" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_certus_quartz_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_certus_quartz_block.json similarity index 55% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_certus_quartz_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_certus_quartz_block.json index 8404cf7b9f..6751370376 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_certus_quartz_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_certus_quartz_block.json @@ -1,30 +1,21 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:pure_certus_quartz" + "G": { + "item": "spectrum:pure_certus_quartz" + } }, "result": { "id": "spectrum:pure_certus_quartz_block", "count": 1 }, "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true, "neoforge:conditions": [ { "type": "spectrum:integration_pack_active", diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_certus_quartz_from_pure_certus_quartz_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_certus_quartz_from_pure_certus_quartz_block.json similarity index 50% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_certus_quartz_from_pure_certus_quartz_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_certus_quartz_from_pure_certus_quartz_block.json index dd9787e72f..d1095d9328 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_certus_quartz_from_pure_certus_quartz_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_certus_quartz_from_pure_certus_quartz_block.json @@ -1,25 +1,16 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "ingredients": [ - "spectrum:pure_certus_quartz_block" + { + "item": "spectrum:pure_certus_quartz_block" + } ], "result": { "id": "spectrum:pure_certus_quartz", "count": 9 }, "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true, "neoforge:conditions": [ { "type": "spectrum:integration_pack_active", diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_coal_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_coal_block.json new file mode 100644 index 0000000000..0622da23bb --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_coal_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "GGG", + "GGG", + "GGG" + ], + "key": { + "G": { + "item": "spectrum:pure_coal" + } + }, + "result": { + "id": "spectrum:pure_coal_block", + "count": 1 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_coal_from_pure_coal_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_coal_from_pure_coal_block.json new file mode 100644 index 0000000000..f5e7ace4cb --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_coal_from_pure_coal_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:pure_coal_block" + } + ], + "result": { + "id": "spectrum:pure_coal", + "count": 9 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_copper_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_copper_block.json new file mode 100644 index 0000000000..a1746993aa --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_copper_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "GGG", + "GGG", + "GGG" + ], + "key": { + "G": { + "item": "spectrum:pure_copper" + } + }, + "result": { + "id": "spectrum:pure_copper_block", + "count": 1 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_copper_from_pure_copper_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_copper_from_pure_copper_block.json new file mode 100644 index 0000000000..042f5e3c28 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_copper_from_pure_copper_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:pure_copper_block" + } + ], + "result": { + "id": "spectrum:pure_copper", + "count": 9 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_diamond_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_diamond_block.json new file mode 100644 index 0000000000..c5c44850d8 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_diamond_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "GGG", + "GGG", + "GGG" + ], + "key": { + "G": { + "item": "spectrum:pure_diamond" + } + }, + "result": { + "id": "spectrum:pure_diamond_block", + "count": 1 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_diamond_from_pure_diamond_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_diamond_from_pure_diamond_block.json new file mode 100644 index 0000000000..08fdaca19b --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_diamond_from_pure_diamond_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:pure_diamond_block" + } + ], + "result": { + "id": "spectrum:pure_diamond", + "count": 9 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_echo_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_echo_block.json new file mode 100644 index 0000000000..b4059220fd --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_echo_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "GGG", + "GGG", + "GGG" + ], + "key": { + "G": { + "item": "spectrum:pure_echo" + } + }, + "result": { + "id": "spectrum:pure_echo_block", + "count": 1 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_echo_from_pure_echo_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_echo_from_pure_echo_block.json new file mode 100644 index 0000000000..3b947c7f8d --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_echo_from_pure_echo_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:pure_echo_block" + } + ], + "result": { + "id": "spectrum:pure_echo", + "count": 9 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_emerald_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_emerald_block.json new file mode 100644 index 0000000000..f181a8ecb0 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_emerald_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "GGG", + "GGG", + "GGG" + ], + "key": { + "G": { + "item": "spectrum:pure_emerald" + } + }, + "result": { + "id": "spectrum:pure_emerald_block", + "count": 1 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_emerald_from_pure_emerald_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_emerald_from_pure_emerald_block.json new file mode 100644 index 0000000000..cfee85283e --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_emerald_from_pure_emerald_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:pure_emerald_block" + } + ], + "result": { + "id": "spectrum:pure_emerald", + "count": 9 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_fluix_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_fluix_block.json similarity index 55% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_fluix_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_fluix_block.json index 2729b116c5..788f5ae0ee 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_fluix_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_fluix_block.json @@ -1,30 +1,21 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:pure_fluix" + "G": { + "item": "spectrum:pure_fluix" + } }, "result": { "id": "spectrum:pure_fluix_block", "count": 1 }, "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true, "neoforge:conditions": [ { "type": "spectrum:integration_pack_active", diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_fluix_from_pure_fluix_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_fluix_from_pure_fluix_block.json similarity index 50% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_fluix_from_pure_fluix_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_fluix_from_pure_fluix_block.json index 9fc5518ed8..f4a5ac62f7 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_fluix_from_pure_fluix_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_fluix_from_pure_fluix_block.json @@ -1,25 +1,16 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "ingredients": [ - "spectrum:pure_fluix_block" + { + "item": "spectrum:pure_fluix_block" + } ], "result": { "id": "spectrum:pure_fluix", "count": 9 }, "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true, "neoforge:conditions": [ { "type": "spectrum:integration_pack_active", diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_globette_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_globette_block.json similarity index 55% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_globette_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_globette_block.json index 3534bde212..f345ab2738 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_globette_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_globette_block.json @@ -1,30 +1,21 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:pure_globette" + "G": { + "item": "spectrum:pure_globette" + } }, "result": { "id": "spectrum:pure_globette_block", "count": 1 }, "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true, "neoforge:conditions": [ { "type": "spectrum:integration_pack_active", diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_globette_end_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_globette_end_block.json similarity index 55% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_globette_end_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_globette_end_block.json index 1768a7cac5..823f499e03 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_globette_end_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_globette_end_block.json @@ -1,30 +1,21 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:pure_globette_end" + "G": { + "item": "spectrum:pure_globette_end" + } }, "result": { "id": "spectrum:pure_globette_end_block", "count": 1 }, "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true, "neoforge:conditions": [ { "type": "spectrum:integration_pack_active", diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_globette_end_from_pure_globette_end_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_globette_end_from_pure_globette_end_block.json similarity index 50% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_globette_end_from_pure_globette_end_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_globette_end_from_pure_globette_end_block.json index 6b3624a68e..0955635a15 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_globette_end_from_pure_globette_end_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_globette_end_from_pure_globette_end_block.json @@ -1,25 +1,16 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "ingredients": [ - "spectrum:pure_globette_end_block" + { + "item": "spectrum:pure_globette_end_block" + } ], "result": { "id": "spectrum:pure_globette_end", "count": 9 }, "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true, "neoforge:conditions": [ { "type": "spectrum:integration_pack_active", diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_globette_from_pure_globette_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_globette_from_pure_globette_block.json similarity index 50% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_globette_from_pure_globette_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_globette_from_pure_globette_block.json index b91ad3a537..4bab092d1d 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_globette_from_pure_globette_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_globette_from_pure_globette_block.json @@ -1,25 +1,16 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "ingredients": [ - "spectrum:pure_globette_block" + { + "item": "spectrum:pure_globette_block" + } ], "result": { "id": "spectrum:pure_globette", "count": 9 }, "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true, "neoforge:conditions": [ { "type": "spectrum:integration_pack_active", diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_globette_nether_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_globette_nether_block.json similarity index 55% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_globette_nether_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_globette_nether_block.json index b8e528e95f..23479e3753 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_globette_nether_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_globette_nether_block.json @@ -1,30 +1,21 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:pure_globette_nether" + "G": { + "item": "spectrum:pure_globette_nether" + } }, "result": { "id": "spectrum:pure_globette_nether_block", "count": 1 }, "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true, "neoforge:conditions": [ { "type": "spectrum:integration_pack_active", diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_globette_nether_from_pure_globette_nether_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_globette_nether_from_pure_globette_nether_block.json similarity index 50% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_globette_nether_from_pure_globette_nether_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_globette_nether_from_pure_globette_nether_block.json index da7c0652cc..8611c0aa25 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_globette_nether_from_pure_globette_nether_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_globette_nether_from_pure_globette_nether_block.json @@ -1,25 +1,16 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "ingredients": [ - "spectrum:pure_globette_nether_block" + { + "item": "spectrum:pure_globette_nether_block" + } ], "result": { "id": "spectrum:pure_globette_nether", "count": 9 }, "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true, "neoforge:conditions": [ { "type": "spectrum:integration_pack_active", diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_glowstone_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_glowstone_block.json new file mode 100644 index 0000000000..3a957c3390 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_glowstone_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "GGG", + "GGG", + "GGG" + ], + "key": { + "G": { + "item": "spectrum:pure_glowstone" + } + }, + "result": { + "id": "spectrum:pure_glowstone_block", + "count": 1 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_glowstone_from_pure_glowstone_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_glowstone_from_pure_glowstone_block.json new file mode 100644 index 0000000000..284290e5fb --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_glowstone_from_pure_glowstone_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:pure_glowstone_block" + } + ], + "result": { + "id": "spectrum:pure_glowstone", + "count": 9 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_gold_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_gold_block.json new file mode 100644 index 0000000000..d368b51a33 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_gold_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "GGG", + "GGG", + "GGG" + ], + "key": { + "G": { + "item": "spectrum:pure_gold" + } + }, + "result": { + "id": "spectrum:pure_gold_block", + "count": 1 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_gold_from_pure_gold_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_gold_from_pure_gold_block.json new file mode 100644 index 0000000000..fd83cac837 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_gold_from_pure_gold_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:pure_gold_block" + } + ], + "result": { + "id": "spectrum:pure_gold", + "count": 9 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_iron_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_iron_block.json new file mode 100644 index 0000000000..fc51e7ef04 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_iron_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "GGG", + "GGG", + "GGG" + ], + "key": { + "G": { + "item": "spectrum:pure_iron" + } + }, + "result": { + "id": "spectrum:pure_iron_block", + "count": 1 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_iron_from_pure_iron_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_iron_from_pure_iron_block.json new file mode 100644 index 0000000000..42b96da452 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_iron_from_pure_iron_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:pure_iron_block" + } + ], + "result": { + "id": "spectrum:pure_iron", + "count": 9 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_lapis_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_lapis_block.json new file mode 100644 index 0000000000..93c2adbfbb --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_lapis_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "GGG", + "GGG", + "GGG" + ], + "key": { + "G": { + "item": "spectrum:pure_lapis" + } + }, + "result": { + "id": "spectrum:pure_lapis_block", + "count": 1 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_lapis_from_pure_lapis_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_lapis_from_pure_lapis_block.json new file mode 100644 index 0000000000..d27ca81d78 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_lapis_from_pure_lapis_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:pure_lapis_block" + } + ], + "result": { + "id": "spectrum:pure_lapis", + "count": 9 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_malachite_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_malachite_block.json new file mode 100644 index 0000000000..c0d9cad553 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_malachite_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "GGG", + "GGG", + "GGG" + ], + "key": { + "G": { + "item": "spectrum:pure_malachite" + } + }, + "result": { + "id": "spectrum:pure_malachite_block", + "count": 1 + }, + "required_advancement": "spectrum:lategame/grow_malachite_in_crystallarieum" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_malachite_from_pure_malachite_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_malachite_from_pure_malachite_block.json new file mode 100644 index 0000000000..3fd72a248d --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_malachite_from_pure_malachite_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:pure_malachite_block" + } + ], + "result": { + "id": "spectrum:pure_malachite", + "count": 9 + }, + "required_advancement": "spectrum:lategame/grow_malachite_in_crystallarieum" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_netherite_scrap_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_netherite_scrap_block.json new file mode 100644 index 0000000000..ff02bacbe1 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_netherite_scrap_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "GGG", + "GGG", + "GGG" + ], + "key": { + "G": { + "item": "spectrum:pure_netherite_scrap" + } + }, + "result": { + "id": "spectrum:pure_netherite_scrap_block", + "count": 1 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_netherite_scrap_from_pure_netherite_scrap_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_netherite_scrap_from_pure_netherite_scrap_block.json new file mode 100644 index 0000000000..cc1abc676b --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_netherite_scrap_from_pure_netherite_scrap_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:pure_netherite_scrap_block" + } + ], + "result": { + "id": "spectrum:pure_netherite_scrap", + "count": 9 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_prismarine_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_prismarine_block.json new file mode 100644 index 0000000000..3696d473bd --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_prismarine_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "GGG", + "GGG", + "GGG" + ], + "key": { + "G": { + "item": "spectrum:pure_prismarine" + } + }, + "result": { + "id": "spectrum:pure_prismarine_block", + "count": 1 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_prismarine_from_pure_prismarine_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_prismarine_from_pure_prismarine_block.json new file mode 100644 index 0000000000..45ceec4c92 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_prismarine_from_pure_prismarine_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:pure_prismarine_block" + } + ], + "result": { + "id": "spectrum:pure_prismarine", + "count": 9 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_quartz_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_quartz_block.json new file mode 100644 index 0000000000..41933dcbe1 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_quartz_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "GGG", + "GGG", + "GGG" + ], + "key": { + "G": { + "item": "spectrum:pure_quartz" + } + }, + "result": { + "id": "spectrum:pure_quartz_block", + "count": 1 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_quartz_from_pure_quartz_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_quartz_from_pure_quartz_block.json new file mode 100644 index 0000000000..a8fa00b54e --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_quartz_from_pure_quartz_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:pure_quartz_block" + } + ], + "result": { + "id": "spectrum:pure_quartz", + "count": 9 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_redstone_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_redstone_block.json new file mode 100644 index 0000000000..85c217292e --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_redstone_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "GGG", + "GGG", + "GGG" + ], + "key": { + "G": { + "item": "spectrum:pure_redstone" + } + }, + "result": { + "id": "spectrum:pure_redstone_block", + "count": 1 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_redstone_from_pure_redstone_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_redstone_from_pure_redstone_block.json new file mode 100644 index 0000000000..67c77d5ce3 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_redstone_from_pure_redstone_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:pure_redstone_block" + } + ], + "result": { + "id": "spectrum:pure_redstone", + "count": 9 + }, + "required_advancement": "spectrum:lategame/collect_pure_resource" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_zinc_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_zinc_block.json similarity index 55% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_zinc_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_zinc_block.json index 840d25ebf0..150d2ddd4f 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_zinc_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_zinc_block.json @@ -1,30 +1,21 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:pure_zinc" + "G": { + "item": "spectrum:pure_zinc" + } }, "result": { "id": "spectrum:pure_zinc_block", "count": 1 }, "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true, "neoforge:conditions": [ { "type": "spectrum:integration_pack_active", diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_zinc_from_pure_zinc_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_zinc_from_pure_zinc_block.json similarity index 50% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_zinc_from_pure_zinc_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_zinc_from_pure_zinc_block.json index e9ab0f5240..7a7c6d9f4e 100644 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_zinc_from_pure_zinc_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/pure_zinc_from_pure_zinc_block.json @@ -1,25 +1,16 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "ingredients": [ - "spectrum:pure_zinc_block" + { + "item": "spectrum:pure_zinc_block" + } ], "result": { "id": "spectrum:pure_zinc", "count": 9 }, "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true, "neoforge:conditions": [ { "type": "spectrum:integration_pack_active", diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_azurite_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_azurite_block.json new file mode 100644 index 0000000000..d032e90c87 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_azurite_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "AAA", + "AAA", + "AAA" + ], + "key": { + "A": { + "item": "spectrum:raw_azurite" + } + }, + "result": { + "id": "spectrum:raw_azurite_block", + "count": 1 + }, + "required_advancement": "spectrum:midgame/collect_azurite" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_azurite_from_raw_azurite_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_azurite_from_raw_azurite_block.json new file mode 100644 index 0000000000..e65e5ad944 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_azurite_from_raw_azurite_block.json @@ -0,0 +1,13 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:raw_azurite_block"} + ], + "result": { + "id": "spectrum:raw_azurite", + "count": 9 + }, + "required_advancement": "spectrum:midgame/collect_azurite" + } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_bloodstone_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_bloodstone_block.json new file mode 100644 index 0000000000..9149d63fac --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_bloodstone_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "AAA", + "AAA", + "AAA" + ], + "key": { + "A": { + "item": "spectrum:raw_bloodstone" + } + }, + "result": { + "id": "spectrum:raw_bloodstone_block", + "count": 1 + }, + "required_advancement": "spectrum:grow_bloodstone_in_crystallarieum" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_bloodstone_from_raw_bloodstone_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_bloodstone_from_raw_bloodstone_block.json new file mode 100644 index 0000000000..8376d6b502 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_bloodstone_from_raw_bloodstone_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:raw_bloodstone_block" + } + ], + "result": { + "id": "spectrum:raw_bloodstone", + "count": 9 + }, + "required_advancement": "spectrum:grow_bloodstone_in_crystallarieum" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_malachite_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_malachite_block.json new file mode 100644 index 0000000000..a3b0642140 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_malachite_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "AAA", + "AAA", + "AAA" + ], + "key": { + "A": { + "item": "spectrum:raw_malachite" + } + }, + "result": { + "id": "spectrum:raw_malachite_block", + "count": 1 + }, + "required_advancement": "spectrum:lategame/grow_malachite_in_crystallarieum" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_malachite_from_raw_malachite_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_malachite_from_raw_malachite_block.json new file mode 100644 index 0000000000..f08e2aa7e8 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/raw_malachite_from_raw_malachite_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:raw_malachite_block" + } + ], + "result": { + "id": "spectrum:raw_malachite", + "count": 9 + }, + "required_advancement": "spectrum:lategame/grow_malachite_in_crystallarieum" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/shimmerstone_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/shimmerstone_block.json new file mode 100644 index 0000000000..366c1da1bc --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/shimmerstone_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "SSS", + "SSS", + "SSS" + ], + "key": { + "S": { + "item": "spectrum:shimmerstone_gem" + } + }, + "result": { + "id": "spectrum:shimmerstone_block", + "count": 1 + }, + "required_advancement": "spectrum:collect_shimmerstone" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/shimmerstone_gems_from_shimmerstone_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/shimmerstone_gems_from_shimmerstone_block.json new file mode 100644 index 0000000000..c990730d1a --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/shimmerstone_gems_from_shimmerstone_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:shimmerstone_block" + } + ], + "result": { + "id": "spectrum:shimmerstone_gem", + "count": 9 + }, + "required_advancement": "spectrum:collect_shimmerstone" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/stardust_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/stardust_block.json new file mode 100644 index 0000000000..81521940cd --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/stardust_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "AAA", + "AAA", + "AAA" + ], + "key": { + "A": { + "item": "spectrum:stardust" + } + }, + "result": { + "id": "spectrum:stardust_block", + "count": 1 + }, + "required_advancement": "spectrum:hidden/collect_stardust" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/stardust_from_stardust_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/stardust_from_stardust_block.json new file mode 100644 index 0000000000..62bc2fc8f9 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/stardust_from_stardust_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:stardust_block" + } + ], + "result": { + "id": "spectrum:stardust", + "count": 9 + }, + "required_advancement": "spectrum:hidden/collect_stardust" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/stratine_floatblock.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/stratine_floatblock.json new file mode 100644 index 0000000000..3918d9a372 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/stratine_floatblock.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "spectrum:stratine_fragments" + } + }, + "result": { + "id": "spectrum:stratine_floatblock", + "count": 1 + }, + "required_advancement": "spectrum:midgame/carry_too_many_heavy_gravity_blocks" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/stratine_fragments_from_stratine_floatblock.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/stratine_fragments_from_stratine_floatblock.json new file mode 100644 index 0000000000..0a69d6839a --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/stratine_fragments_from_stratine_floatblock.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:stratine_floatblock" + } + ], + "result": { + "id": "spectrum:stratine_fragments", + "count": 9 + }, + "required_advancement": "spectrum:midgame/carry_too_many_heavy_gravity_blocks" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/topaz_powder_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/topaz_powder_block.json new file mode 100644 index 0000000000..a70b6afcda --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/topaz_powder_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "AAA", + "AAA", + "AAA" + ], + "key": { + "A": { + "item": "spectrum:topaz_powder" + } + }, + "result": { + "id": "spectrum:topaz_powder_block", + "count": 1 + }, + "required_advancement": "spectrum:hidden/collect_shards/topaz" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/topaz_powder_from_topaz_powder_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/topaz_powder_from_topaz_powder_block.json new file mode 100644 index 0000000000..f1abb37ac4 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/topaz_powder_from_topaz_powder_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:topaz_powder_block" + } + ], + "result": { + "id": "spectrum:topaz_powder", + "count": 9 + }, + "required_advancement": "spectrum:hidden/collect_shards/topaz" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/vegetal_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/vegetal_block.json new file mode 100644 index 0000000000..b04aa96513 --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/vegetal_block.json @@ -0,0 +1,19 @@ +{ + "type": "spectrum:gated_crafting_shaped", + "group": "compacting", + "pattern": [ + "AAA", + "AAA", + "AAA" + ], + "key": { + "A": { + "item": "spectrum:vegetal" + } + }, + "result": { + "id": "spectrum:vegetal_block", + "count": 1 + }, + "required_advancement": "spectrum:collect_vegetal" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/compacting/vegetal_from_vegetal_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/vegetal_from_vegetal_block.json new file mode 100644 index 0000000000..0669064bbe --- /dev/null +++ b/src/main/resources/data/spectrum/recipe/crafting_table/compacting/vegetal_from_vegetal_block.json @@ -0,0 +1,14 @@ +{ + "type": "spectrum:gated_crafting_shapeless", + "group": "compacting", + "ingredients": [ + { + "item": "spectrum:vegetal_block" + } + ], + "result": { + "id": "spectrum:vegetal", + "count": 9 + }, + "required_advancement": "spectrum:collect_vegetal" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/amethyst_pillar.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/amethyst_pillar.json index 0a104b08d6..bb3d4caa1e 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/amethyst_pillar.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/amethyst_pillar.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:hidden/collect_shards/amethyst", "pattern": [ "W", "W" diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/amethyst_shards_from_polished_amethyst.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/amethyst_shards_from_polished_amethyst.json index 4773f2e6ff..b0ccc7acea 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/amethyst_shards_from_polished_amethyst.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/amethyst_shards_from_polished_amethyst.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:hidden/collect_shards/amethyst", "group": "compacting", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/citrine_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/citrine_block.json index f698472cbf..6acd8d3b43 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/citrine_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/citrine_block.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:hidden/collect_shards/citrine", "pattern": [ "WW", "WW" diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/citrine_pillar.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/citrine_pillar.json index f9af2c1928..92fa1c7aa4 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/citrine_pillar.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/citrine_pillar.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:hidden/collect_shards/citrine", "pattern": [ "W", "W" diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/citrine_shards_from_polished_citrine.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/citrine_shards_from_polished_citrine.json index 2d20121a73..28f07ab407 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/citrine_shards_from_polished_citrine.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/citrine_shards_from_polished_citrine.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:hidden/collect_shards/citrine", "group": "compacting", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/moonstone_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/moonstone_block.json index e743cda677..414292dcd1 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/moonstone_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/moonstone_block.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:lategame/collect_moonstone", "pattern": [ "WW", "WW" diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/moonstone_pillar.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/moonstone_pillar.json index 6fb2510c36..ecec1ece60 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/moonstone_pillar.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/moonstone_pillar.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:lategame/collect_moonstone", "pattern": [ "W", "W" diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/moonstone_shards_from_polished_moonstone.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/moonstone_shards_from_polished_moonstone.json index 78630e983e..594de82f28 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/moonstone_shards_from_polished_moonstone.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/moonstone_shards_from_polished_moonstone.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:lategame/collect_moonstone", "group": "compacting", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/onyx_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/onyx_block.json index 9e4b60fb8a..7f3ae5dae8 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/onyx_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/onyx_block.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:create_onyx_shard", "pattern": [ "WW", "WW" diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/onyx_pillar.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/onyx_pillar.json index 6b8737d71f..90c0461adf 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/onyx_pillar.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/onyx_pillar.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:create_onyx_shard", "pattern": [ "W", "W" diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/onyx_shards_from_polished_onyx.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/onyx_shards_from_polished_onyx.json index 0e3592544d..fea1556dbf 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/onyx_shards_from_polished_onyx.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/onyx_shards_from_polished_onyx.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:create_onyx_shard", "group": "compacting", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_amethyst.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_amethyst.json index 1ad7256e4b..e01ab09062 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_amethyst.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_amethyst.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:hidden/collect_shards/amethyst", "pattern": [ "GGG", "GGG", diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_citrine.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_citrine.json index 25d5c3b1d6..2e10795ea0 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_citrine.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_citrine.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:hidden/collect_shards/citrine", "pattern": [ "GGG", "GGG", diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_moonstone.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_moonstone.json index aedf2ae8dd..af05dda7ea 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_moonstone.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_moonstone.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:lategame/collect_moonstone", "pattern": [ "GGG", "GGG", diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_onyx.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_onyx.json index 9e2125bec5..c2d7f7101a 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_onyx.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_onyx.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:create_onyx_shard", "pattern": [ "GGG", "GGG", diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_topaz.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_topaz.json index 8eacc736fa..e4f89698f1 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_topaz.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/polished_topaz.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:hidden/collect_shards/topaz", "pattern": [ "GGG", "GGG", diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/topaz_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/topaz_block.json index c41cdcff90..0b73e14188 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/topaz_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/topaz_block.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:hidden/collect_shards/topaz", "pattern": [ "WW", "WW" diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/topaz_pillar.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/topaz_pillar.json index 767ad28534..cf856b9d45 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/topaz_pillar.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/topaz_pillar.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:hidden/collect_shards/topaz", "pattern": [ "W", "W" diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/topaz_shards_from_polished_topaz.json b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/topaz_shards_from_polished_topaz.json index ccd6e96614..51443ef476 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/topaz_shards_from_polished_topaz.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/gem_blocks/topaz_shards_from_polished_topaz.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:hidden/collect_shards/topaz", "group": "compacting", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/black_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/black_block.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/black_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/black_block.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/black_block_to_black_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/black_block_to_black_pigment.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/black_block_to_black_pigment.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/black_block_to_black_pigment.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/blue_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/blue_block.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/blue_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/blue_block.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/blue_block_to_blue_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/blue_block_to_blue_pigment.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/blue_block_to_blue_pigment.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/blue_block_to_blue_pigment.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/brown_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/brown_block.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/brown_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/brown_block.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/brown_block_to_brown_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/brown_block_to_brown_pigment.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/brown_block_to_brown_pigment.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/brown_block_to_brown_pigment.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/cyan_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/cyan_block.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/cyan_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/cyan_block.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/cyan_block_to_cyan_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/cyan_block_to_cyan_pigment.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/cyan_block_to_cyan_pigment.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/cyan_block_to_cyan_pigment.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/gray_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/gray_block.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/gray_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/gray_block.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/gray_block_to_gray_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/gray_block_to_gray_pigment.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/gray_block_to_gray_pigment.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/gray_block_to_gray_pigment.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/green_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/green_block.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/green_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/green_block.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/green_block_to_green_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/green_block_to_green_pigment.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/green_block_to_green_pigment.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/green_block_to_green_pigment.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/light_blue_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_blue_block.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/light_blue_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_blue_block.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/light_blue_block_to_light_blue_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_blue_block_to_light_blue_pigment.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/light_blue_block_to_light_blue_pigment.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_blue_block_to_light_blue_pigment.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/light_gray_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_gray_block.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/light_gray_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_gray_block.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/light_gray_block_to_light_gray_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_gray_block_to_light_gray_pigment.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/light_gray_block_to_light_gray_pigment.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_gray_block_to_light_gray_pigment.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/lime_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/lime_block.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/lime_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/lime_block.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/lime_block_to_lime_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/lime_block_to_lime_pigment.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/lime_block_to_lime_pigment.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/lime_block_to_lime_pigment.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/magenta_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/magenta_block.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/magenta_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/magenta_block.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/magenta_block_to_magenta_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/magenta_block_to_magenta_pigment.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/magenta_block_to_magenta_pigment.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/magenta_block_to_magenta_pigment.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/orange_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/orange_block.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/orange_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/orange_block.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/orange_block_to_orange_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/orange_block_to_orange_pigment.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/orange_block_to_orange_pigment.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/orange_block_to_orange_pigment.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/pink_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/pink_block.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/pink_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/pink_block.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/pink_block_to_pink_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/pink_block_to_pink_pigment.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/pink_block_to_pink_pigment.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/pink_block_to_pink_pigment.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/purple_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/purple_block.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/purple_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/purple_block.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/purple_block_to_purple_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/purple_block_to_purple_pigment.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/purple_block_to_purple_pigment.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/purple_block_to_purple_pigment.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/red_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/red_block.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/red_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/red_block.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/red_block_to_red_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/red_block_to_red_pigment.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/red_block_to_red_pigment.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/red_block_to_red_pigment.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/white_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/white_block.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/white_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/white_block.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/white_block_to_white_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/white_block_to_white_pigment.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/white_block_to_white_pigment.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/white_block_to_white_pigment.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/yellow_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/yellow_block.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/yellow_block.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/yellow_block.json diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/yellow_block_to_yellow_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/yellow_block_to_yellow_pigment.json similarity index 100% rename from src/main/resources/data/spectrum/recipe/pedestal/tier1/pigment_blocks/yellow_block_to_yellow_pigment.json rename to src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/yellow_block_to_yellow_pigment.json diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/black_pigment_to_black_dye.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/black_pigment_to_black_dye.json index 252b0b49c0..c427a0767a 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/black_pigment_to_black_dye.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/black_pigment_to_black_dye.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:collect_pigment", "group": "pigment_to_dye", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/blue_pigment_to_blue_dye.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/blue_pigment_to_blue_dye.json index 06627cf16b..6e3d096b57 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/blue_pigment_to_blue_dye.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/blue_pigment_to_blue_dye.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:collect_pigment", "group": "pigment_to_dye", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/brown_pigment_to_brown_dye.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/brown_pigment_to_brown_dye.json index 84d7b35c1b..20c86e84fc 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/brown_pigment_to_brown_dye.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/brown_pigment_to_brown_dye.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:collect_pigment", "group": "pigment_to_dye", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/cyan_pigment_to_cyan_dye.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/cyan_pigment_to_cyan_dye.json index 7d9023c282..01bd51558a 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/cyan_pigment_to_cyan_dye.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/cyan_pigment_to_cyan_dye.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:collect_pigment", "group": "pigment_to_dye", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/gray_pigment_to_gray_dye.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/gray_pigment_to_gray_dye.json index ebdffab65b..6dca841ce3 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/gray_pigment_to_gray_dye.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/gray_pigment_to_gray_dye.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:collect_pigment", "group": "pigment_to_dye", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/green_pigment_to_green_dye.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/green_pigment_to_green_dye.json index 3d2844ccf7..f40b177207 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/green_pigment_to_green_dye.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/green_pigment_to_green_dye.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:collect_pigment", "group": "pigment_to_dye", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/light_blue_pigment_to_light_blue_dye.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/light_blue_pigment_to_light_blue_dye.json index 76a71f6658..c12d021c55 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/light_blue_pigment_to_light_blue_dye.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/light_blue_pigment_to_light_blue_dye.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:collect_pigment", "group": "pigment_to_dye", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/light_gray_pigment_to_light_gray_dye.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/light_gray_pigment_to_light_gray_dye.json index f7b130a26f..b2f3d5dd30 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/light_gray_pigment_to_light_gray_dye.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/light_gray_pigment_to_light_gray_dye.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:collect_pigment", "group": "pigment_to_dye", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/lime_pigment_to_lime_dye.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/lime_pigment_to_lime_dye.json index f583e72d5d..59dce75dcb 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/lime_pigment_to_lime_dye.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/lime_pigment_to_lime_dye.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:collect_pigment", "group": "pigment_to_dye", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/magenta_pigment_to_magenta_dye.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/magenta_pigment_to_magenta_dye.json index 3174a86e52..53945c6589 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/magenta_pigment_to_magenta_dye.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/magenta_pigment_to_magenta_dye.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:collect_pigment", "group": "pigment_to_dye", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/orange_pigment_to_orange_dye.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/orange_pigment_to_orange_dye.json index 21a22f7b27..816f9bdc59 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/orange_pigment_to_orange_dye.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/orange_pigment_to_orange_dye.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:collect_pigment", "group": "pigment_to_dye", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/pink_pigment_to_pink_dye.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/pink_pigment_to_pink_dye.json index ef7940c628..0e79469046 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/pink_pigment_to_pink_dye.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/pink_pigment_to_pink_dye.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:collect_pigment", "group": "pigment_to_dye", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/purple_pigment_to_purple_dye.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/purple_pigment_to_purple_dye.json index 5e1fe7a083..49c130cc6c 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/purple_pigment_to_purple_dye.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/purple_pigment_to_purple_dye.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:collect_pigment", "group": "pigment_to_dye", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/red_pigment_to_red_dye.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/red_pigment_to_red_dye.json index 743972df75..3f6f4359bf 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/red_pigment_to_red_dye.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/red_pigment_to_red_dye.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:collect_pigment", "group": "pigment_to_dye", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/white_pigment_to_white_dye.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/white_pigment_to_white_dye.json index de3dfbbc34..6282809015 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/white_pigment_to_white_dye.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/white_pigment_to_white_dye.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:collect_pigment", "group": "pigment_to_dye", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/yellow_pigment_to_yellow_dye.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/yellow_pigment_to_yellow_dye.json index 24836eb580..4a62be387c 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/yellow_pigment_to_yellow_dye.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_to_dye/yellow_pigment_to_yellow_dye.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:collect_pigment", "group": "pigment_to_dye", "ingredients": [ { diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/amethyst_powder_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/amethyst_powder_block.json deleted file mode 100644 index 241b20af13..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/amethyst_powder_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "AAA", - "AAA", - "AAA" - ], - "key": { - "A": "spectrum:amethyst_powder" - }, - "result": { - "id": "spectrum:amethyst_powder_block", - "count": 1 - }, - "required_advancement": "spectrum:hidden/collect_shards/amethyst", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/amethyst_powder_from_amethyst_powder_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/amethyst_powder_from_amethyst_powder_block.json deleted file mode 100644 index 37dc91988d..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/amethyst_powder_from_amethyst_powder_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:amethyst_powder_block" - ], - "result": { - "id": "spectrum:amethyst_powder", - "count": 9 - }, - "required_advancement": "spectrum:hidden/collect_shards/amethyst", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/bedrock_dust_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/bedrock_dust_block.json deleted file mode 100644 index 6f91df02de..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/bedrock_dust_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:cyan": 0, - "spectrum:black": 0, - "spectrum:white": 0 - }, - "experience": 0.0, - "pattern": [ - "BBB", - "BBB", - "BBB" - ], - "key": { - "B": "spectrum:bedrock_dust" - }, - "result": { - "id": "spectrum:bedrock_dust_block", - "count": 1 - }, - "required_advancement": "spectrum:midgame/break_decayed_bedrock", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/bedrock_dust_block_uncrafting.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/bedrock_dust_block_uncrafting.json deleted file mode 100644 index 6a666e983e..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/bedrock_dust_block_uncrafting.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:cyan": 0, - "spectrum:black": 0, - "spectrum:white": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:bedrock_dust_block" - ], - "result": { - "id": "spectrum:bedrock_dust", - "count": 9 - }, - "required_advancement": "spectrum:midgame/break_decayed_bedrock", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/bismuth_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/bismuth_block.json deleted file mode 100644 index 3506ce5f52..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/bismuth_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "GGG", - "GGG", - "GGG" - ], - "key": { - "G": "spectrum:bismuth_crystal" - }, - "result": { - "id": "spectrum:bismuth_block", - "count": 1 - }, - "required_advancement": "spectrum:lategame/collect_bismuth_crystal", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/bismuth_crystals_from_bismuth_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/bismuth_crystals_from_bismuth_block.json deleted file mode 100644 index a53114b89a..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/bismuth_crystals_from_bismuth_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:bismuth_block" - ], - "result": { - "id": "spectrum:bismuth_crystal", - "count": 9 - }, - "required_advancement": "spectrum:lategame/collect_bismuth_crystal", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/citrine_powder_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/citrine_powder_block.json deleted file mode 100644 index b66a98448e..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/citrine_powder_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "AAA", - "AAA", - "AAA" - ], - "key": { - "A": "spectrum:citrine_powder" - }, - "result": { - "id": "spectrum:citrine_powder_block", - "count": 1 - }, - "required_advancement": "spectrum:hidden/collect_shards/citrine", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/citrine_powder_from_citrine_powder_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/citrine_powder_from_citrine_powder_block.json deleted file mode 100644 index 2f2c07246e..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/citrine_powder_from_citrine_powder_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:citrine_powder_block" - ], - "result": { - "id": "spectrum:citrine_powder", - "count": 9 - }, - "required_advancement": "spectrum:hidden/collect_shards/citrine", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/moonstone_powder_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/moonstone_powder_block.json deleted file mode 100644 index 65f270215d..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/moonstone_powder_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "AAA", - "AAA", - "AAA" - ], - "key": { - "A": "spectrum:moonstone_powder" - }, - "result": { - "id": "spectrum:moonstone_powder_block", - "count": 1 - }, - "required_advancement": "spectrum:lategame/collect_moonstone", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/moonstone_powder_from_moonstone_powder_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/moonstone_powder_from_moonstone_powder_block.json deleted file mode 100644 index f3769467cc..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/moonstone_powder_from_moonstone_powder_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:moonstone_powder_block" - ], - "result": { - "id": "spectrum:moonstone_powder", - "count": 9 - }, - "required_advancement": "spectrum:lategame/collect_moonstone", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/neolith_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/neolith_block.json deleted file mode 100644 index a01e4dac61..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/neolith_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "AAA", - "AAA", - "AAA" - ], - "key": { - "A": "spectrum:neolith" - }, - "result": { - "id": "spectrum:neolith_block", - "count": 1 - }, - "required_advancement": "spectrum:midgame/collect_neolith", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/neolith_from_neolith_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/neolith_from_neolith_block.json deleted file mode 100644 index d74514b78f..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/neolith_from_neolith_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:neolith_block" - ], - "result": { - "id": "spectrum:neolith", - "count": 9 - }, - "required_advancement": "spectrum:midgame/collect_neolith", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/onyx_powder_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/onyx_powder_block.json deleted file mode 100644 index 3e86d7370d..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/onyx_powder_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "AAA", - "AAA", - "AAA" - ], - "key": { - "A": "spectrum:onyx_powder" - }, - "result": { - "id": "spectrum:onyx_powder_block", - "count": 1 - }, - "required_advancement": "spectrum:create_onyx_shard", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/onyx_powder_from_onyx_powder_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/onyx_powder_from_onyx_powder_block.json deleted file mode 100644 index ddcb136557..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/onyx_powder_from_onyx_powder_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:onyx_powder_block" - ], - "result": { - "id": "spectrum:onyx_powder", - "count": 9 - }, - "required_advancement": "spectrum:create_onyx_shard", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/paltaeria_floatblock.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/paltaeria_floatblock.json deleted file mode 100644 index 1e9a05b4c0..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/paltaeria_floatblock.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 80, - "tier": "basic", - "colors": { - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:cyan": 0, - "spectrum:black": 0, - "spectrum:white": 0 - }, - "experience": 0.0, - "pattern": [ - "###", - "###", - "###" - ], - "key": { - "#": "spectrum:paltaeria_fragments" - }, - "result": { - "id": "spectrum:paltaeria_floatblock", - "count": 1 - }, - "required_advancement": "spectrum:lategame/carry_too_many_low_gravity_blocks", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/paltaeria_fragments_from_paltaeria_floatblock.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/paltaeria_fragments_from_paltaeria_floatblock.json deleted file mode 100644 index c7d18eedb1..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/paltaeria_fragments_from_paltaeria_floatblock.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 80, - "tier": "basic", - "colors": { - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:cyan": 0, - "spectrum:black": 0, - "spectrum:white": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:paltaeria_floatblock" - ], - "result": { - "id": "spectrum:paltaeria_fragments", - "count": 9 - }, - "required_advancement": "spectrum:lategame/carry_too_many_low_gravity_blocks", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_azurite_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_azurite_block.json deleted file mode 100644 index 582f170af6..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_azurite_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "AAA", - "AAA", - "AAA" - ], - "key": { - "A": "spectrum:pure_azurite" - }, - "result": { - "id": "spectrum:pure_azurite_block", - "count": 1 - }, - "required_advancement": "spectrum:midgame/collect_azurite", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_azurite_from_pure_azurite_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_azurite_from_pure_azurite_block.json deleted file mode 100644 index 7e3085e263..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_azurite_from_pure_azurite_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:pure_azurite_block" - ], - "result": { - "id": "spectrum:pure_azurite", - "count": 9 - }, - "required_advancement": "spectrum:midgame/collect_azurite", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_bloodstone_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_bloodstone_block.json deleted file mode 100644 index c711974d39..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_bloodstone_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "AAA", - "AAA", - "AAA" - ], - "key": { - "A": "spectrum:pure_bloodstone" - }, - "result": { - "id": "spectrum:pure_bloodstone_block", - "count": 1 - }, - "required_advancement": "spectrum:grow_bloodstone_in_crystallarieum", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_bloodstone_from_pure_bloodstone_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_bloodstone_from_pure_bloodstone_block.json deleted file mode 100644 index c107d68280..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_bloodstone_from_pure_bloodstone_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:pure_bloodstone_block" - ], - "result": { - "id": "spectrum:pure_bloodstone", - "count": 9 - }, - "required_advancement": "spectrum:grow_bloodstone_in_crystallarieum", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_coal_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_coal_block.json deleted file mode 100644 index d9cadd2bd2..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_coal_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "GGG", - "GGG", - "GGG" - ], - "key": { - "G": "spectrum:pure_coal" - }, - "result": { - "id": "spectrum:pure_coal_block", - "count": 1 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_coal_from_pure_coal_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_coal_from_pure_coal_block.json deleted file mode 100644 index e526877abd..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_coal_from_pure_coal_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:pure_coal_block" - ], - "result": { - "id": "spectrum:pure_coal", - "count": 9 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_copper_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_copper_block.json deleted file mode 100644 index e5b7a6e9aa..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_copper_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "GGG", - "GGG", - "GGG" - ], - "key": { - "G": "spectrum:pure_copper" - }, - "result": { - "id": "spectrum:pure_copper_block", - "count": 1 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_copper_from_pure_copper_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_copper_from_pure_copper_block.json deleted file mode 100644 index 7c31d598d9..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_copper_from_pure_copper_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:pure_copper_block" - ], - "result": { - "id": "spectrum:pure_copper", - "count": 9 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_diamond_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_diamond_block.json deleted file mode 100644 index 77d75e9d87..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_diamond_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "GGG", - "GGG", - "GGG" - ], - "key": { - "G": "spectrum:pure_diamond" - }, - "result": { - "id": "spectrum:pure_diamond_block", - "count": 1 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_diamond_from_pure_diamond_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_diamond_from_pure_diamond_block.json deleted file mode 100644 index 4036504a52..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_diamond_from_pure_diamond_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:pure_diamond_block" - ], - "result": { - "id": "spectrum:pure_diamond", - "count": 9 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_echo_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_echo_block.json deleted file mode 100644 index f18ca4e0a5..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_echo_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "GGG", - "GGG", - "GGG" - ], - "key": { - "G": "spectrum:pure_echo" - }, - "result": { - "id": "spectrum:pure_echo_block", - "count": 1 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_echo_from_pure_echo_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_echo_from_pure_echo_block.json deleted file mode 100644 index 2b3ee8d923..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_echo_from_pure_echo_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:pure_echo_block" - ], - "result": { - "id": "spectrum:pure_echo", - "count": 9 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_emerald_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_emerald_block.json deleted file mode 100644 index 7deb688db1..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_emerald_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "GGG", - "GGG", - "GGG" - ], - "key": { - "G": "spectrum:pure_emerald" - }, - "result": { - "id": "spectrum:pure_emerald_block", - "count": 1 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_emerald_from_pure_emerald_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_emerald_from_pure_emerald_block.json deleted file mode 100644 index 5381deaa99..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_emerald_from_pure_emerald_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:pure_emerald_block" - ], - "result": { - "id": "spectrum:pure_emerald", - "count": 9 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_glowstone_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_glowstone_block.json deleted file mode 100644 index e387b351db..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_glowstone_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "GGG", - "GGG", - "GGG" - ], - "key": { - "G": "spectrum:pure_glowstone" - }, - "result": { - "id": "spectrum:pure_glowstone_block", - "count": 1 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_glowstone_from_pure_glowstone_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_glowstone_from_pure_glowstone_block.json deleted file mode 100644 index 033e96f371..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_glowstone_from_pure_glowstone_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:pure_glowstone_block" - ], - "result": { - "id": "spectrum:pure_glowstone", - "count": 9 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_gold_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_gold_block.json deleted file mode 100644 index d68ffd95b0..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_gold_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "GGG", - "GGG", - "GGG" - ], - "key": { - "G": "spectrum:pure_gold" - }, - "result": { - "id": "spectrum:pure_gold_block", - "count": 1 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_gold_from_pure_gold_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_gold_from_pure_gold_block.json deleted file mode 100644 index 282305fa0c..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_gold_from_pure_gold_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:pure_gold_block" - ], - "result": { - "id": "spectrum:pure_gold", - "count": 9 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_iron_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_iron_block.json deleted file mode 100644 index 75b6230600..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_iron_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "GGG", - "GGG", - "GGG" - ], - "key": { - "G": "spectrum:pure_iron" - }, - "result": { - "id": "spectrum:pure_iron_block", - "count": 1 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_iron_from_pure_iron_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_iron_from_pure_iron_block.json deleted file mode 100644 index 5d92fe0c9b..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_iron_from_pure_iron_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:pure_iron_block" - ], - "result": { - "id": "spectrum:pure_iron", - "count": 9 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_lapis_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_lapis_block.json deleted file mode 100644 index 947d48bc9d..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_lapis_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "GGG", - "GGG", - "GGG" - ], - "key": { - "G": "spectrum:pure_lapis" - }, - "result": { - "id": "spectrum:pure_lapis_block", - "count": 1 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_lapis_from_pure_lapis_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_lapis_from_pure_lapis_block.json deleted file mode 100644 index e98be879c1..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_lapis_from_pure_lapis_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:pure_lapis_block" - ], - "result": { - "id": "spectrum:pure_lapis", - "count": 9 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_malachite_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_malachite_block.json deleted file mode 100644 index 31e238947c..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_malachite_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "GGG", - "GGG", - "GGG" - ], - "key": { - "G": "spectrum:pure_malachite" - }, - "result": { - "id": "spectrum:pure_malachite_block", - "count": 1 - }, - "required_advancement": "spectrum:lategame/grow_malachite_in_crystallarieum", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_malachite_from_pure_malachite_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_malachite_from_pure_malachite_block.json deleted file mode 100644 index fc2484ac0a..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_malachite_from_pure_malachite_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:pure_malachite_block" - ], - "result": { - "id": "spectrum:pure_malachite", - "count": 9 - }, - "required_advancement": "spectrum:lategame/grow_malachite_in_crystallarieum", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_netherite_scrap_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_netherite_scrap_block.json deleted file mode 100644 index 96ae972f21..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_netherite_scrap_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "GGG", - "GGG", - "GGG" - ], - "key": { - "G": "spectrum:pure_netherite_scrap" - }, - "result": { - "id": "spectrum:pure_netherite_scrap_block", - "count": 1 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_netherite_scrap_from_pure_netherite_scrap_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_netherite_scrap_from_pure_netherite_scrap_block.json deleted file mode 100644 index 2173ac68f0..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_netherite_scrap_from_pure_netherite_scrap_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:pure_netherite_scrap_block" - ], - "result": { - "id": "spectrum:pure_netherite_scrap", - "count": 9 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_prismarine_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_prismarine_block.json deleted file mode 100644 index 48e4016d64..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_prismarine_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "GGG", - "GGG", - "GGG" - ], - "key": { - "G": "spectrum:pure_prismarine" - }, - "result": { - "id": "spectrum:pure_prismarine_block", - "count": 1 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_prismarine_from_pure_prismarine_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_prismarine_from_pure_prismarine_block.json deleted file mode 100644 index f99f5b2b12..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_prismarine_from_pure_prismarine_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:pure_prismarine_block" - ], - "result": { - "id": "spectrum:pure_prismarine", - "count": 9 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_quartz_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_quartz_block.json deleted file mode 100644 index f668dd4041..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_quartz_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "GGG", - "GGG", - "GGG" - ], - "key": { - "G": "spectrum:pure_quartz" - }, - "result": { - "id": "spectrum:pure_quartz_block", - "count": 1 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_quartz_from_pure_quartz_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_quartz_from_pure_quartz_block.json deleted file mode 100644 index be8624d6dd..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_quartz_from_pure_quartz_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:pure_quartz_block" - ], - "result": { - "id": "spectrum:pure_quartz", - "count": 9 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_redstone_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_redstone_block.json deleted file mode 100644 index a284d423fa..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_redstone_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "GGG", - "GGG", - "GGG" - ], - "key": { - "G": "spectrum:pure_redstone" - }, - "result": { - "id": "spectrum:pure_redstone_block", - "count": 1 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_redstone_from_pure_redstone_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_redstone_from_pure_redstone_block.json deleted file mode 100644 index a9c26d9128..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/pure_redstone_from_pure_redstone_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:pure_redstone_block" - ], - "result": { - "id": "spectrum:pure_redstone", - "count": 9 - }, - "required_advancement": "spectrum:lategame/collect_pure_resource", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_azurite_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_azurite_block.json deleted file mode 100644 index 0050f2f3c3..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_azurite_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "AAA", - "AAA", - "AAA" - ], - "key": { - "A": "spectrum:raw_azurite" - }, - "result": { - "id": "spectrum:raw_azurite_block", - "count": 1 - }, - "required_advancement": "spectrum:midgame/collect_azurite", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_azurite_from_raw_azurite_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_azurite_from_raw_azurite_block.json deleted file mode 100644 index 1dbc607368..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_azurite_from_raw_azurite_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:raw_azurite_block" - ], - "result": { - "id": "spectrum:raw_azurite", - "count": 9 - }, - "required_advancement": "spectrum:midgame/collect_azurite", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_bloodstone_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_bloodstone_block.json deleted file mode 100644 index 48fa7a0d0d..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_bloodstone_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "AAA", - "AAA", - "AAA" - ], - "key": { - "A": "spectrum:raw_bloodstone" - }, - "result": { - "id": "spectrum:raw_bloodstone_block", - "count": 1 - }, - "required_advancement": "spectrum:grow_bloodstone_in_crystallarieum", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_bloodstone_from_raw_bloodstone_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_bloodstone_from_raw_bloodstone_block.json deleted file mode 100644 index b47459d2a4..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_bloodstone_from_raw_bloodstone_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:raw_bloodstone_block" - ], - "result": { - "id": "spectrum:raw_bloodstone", - "count": 9 - }, - "required_advancement": "spectrum:grow_bloodstone_in_crystallarieum", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_malachite_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_malachite_block.json deleted file mode 100644 index 7fdfc99fb2..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_malachite_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "AAA", - "AAA", - "AAA" - ], - "key": { - "A": "spectrum:raw_malachite" - }, - "result": { - "id": "spectrum:raw_malachite_block", - "count": 1 - }, - "required_advancement": "spectrum:lategame/grow_malachite_in_crystallarieum", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_malachite_from_raw_malachite_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_malachite_from_raw_malachite_block.json deleted file mode 100644 index 59aa3b7af1..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/raw_malachite_from_raw_malachite_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:raw_malachite_block" - ], - "result": { - "id": "spectrum:raw_malachite", - "count": 9 - }, - "required_advancement": "spectrum:lategame/grow_malachite_in_crystallarieum", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/shimmerstone_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/shimmerstone_block.json deleted file mode 100644 index 1b4c2014dc..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/shimmerstone_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "SSS", - "SSS", - "SSS" - ], - "key": { - "S": "spectrum:shimmerstone_gem" - }, - "result": { - "id": "spectrum:shimmerstone_block", - "count": 1 - }, - "required_advancement": "spectrum:collect_shimmerstone", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/shimmerstone_gems_from_shimmerstone_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/shimmerstone_gems_from_shimmerstone_block.json deleted file mode 100644 index 388e52623c..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/shimmerstone_gems_from_shimmerstone_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:shimmerstone_block" - ], - "result": { - "id": "spectrum:shimmerstone_gem", - "count": 9 - }, - "required_advancement": "spectrum:collect_shimmerstone", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/stardust_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/stardust_block.json deleted file mode 100644 index 70bd227889..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/stardust_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "AAA", - "AAA", - "AAA" - ], - "key": { - "A": "spectrum:stardust" - }, - "result": { - "id": "spectrum:stardust_block", - "count": 1 - }, - "required_advancement": "spectrum:hidden/collect_stardust", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/stardust_from_stardust_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/stardust_from_stardust_block.json deleted file mode 100644 index fc5b1b24d3..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/stardust_from_stardust_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:stardust_block" - ], - "result": { - "id": "spectrum:stardust", - "count": 9 - }, - "required_advancement": "spectrum:hidden/collect_stardust", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/stratine_floatblock.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/stratine_floatblock.json deleted file mode 100644 index 6039e65962..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/stratine_floatblock.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 80, - "tier": "basic", - "colors": { - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:cyan": 0, - "spectrum:black": 0, - "spectrum:white": 0 - }, - "experience": 0.0, - "pattern": [ - "###", - "###", - "###" - ], - "key": { - "#": "spectrum:stratine_fragments" - }, - "result": { - "id": "spectrum:stratine_floatblock", - "count": 1 - }, - "required_advancement": "spectrum:midgame/carry_too_many_heavy_gravity_blocks", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/stratine_fragments_from_stratine_floatblock.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/stratine_fragments_from_stratine_floatblock.json deleted file mode 100644 index a8a518b705..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/stratine_fragments_from_stratine_floatblock.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 80, - "tier": "basic", - "colors": { - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:cyan": 0, - "spectrum:black": 0, - "spectrum:white": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:stratine_floatblock" - ], - "result": { - "id": "spectrum:stratine_fragments", - "count": 9 - }, - "required_advancement": "spectrum:midgame/carry_too_many_heavy_gravity_blocks", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/topaz_powder_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/topaz_powder_block.json deleted file mode 100644 index ef93faf744..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/topaz_powder_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "AAA", - "AAA", - "AAA" - ], - "key": { - "A": "spectrum:topaz_powder" - }, - "result": { - "id": "spectrum:topaz_powder_block", - "count": 1 - }, - "required_advancement": "spectrum:hidden/collect_shards/topaz", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/topaz_powder_from_topaz_powder_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/topaz_powder_from_topaz_powder_block.json deleted file mode 100644 index 344e9f7a6b..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/topaz_powder_from_topaz_powder_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:topaz_powder_block" - ], - "result": { - "id": "spectrum:topaz_powder", - "count": 9 - }, - "required_advancement": "spectrum:hidden/collect_shards/topaz", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/vegetal_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/vegetal_block.json deleted file mode 100644 index bb10de47ea..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/vegetal_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "spectrum:pedestal", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "pattern": [ - "AAA", - "AAA", - "AAA" - ], - "key": { - "A": "spectrum:vegetal" - }, - "result": { - "id": "spectrum:vegetal_block", - "count": 1 - }, - "required_advancement": "spectrum:collect_vegetal", - "disable_yield_upgrades": true -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/vegetal_from_vegetal_block.json b/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/vegetal_from_vegetal_block.json deleted file mode 100644 index 40e5c91150..0000000000 --- a/src/main/resources/data/spectrum/recipe/pedestal/tier1/compacting/vegetal_from_vegetal_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "spectrum:pedestal_shapeless", - "group": "compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, - "ingredients": [ - "spectrum:vegetal_block" - ], - "result": { - "id": "spectrum:vegetal", - "count": 9 - }, - "required_advancement": "spectrum:collect_vegetal", - "disable_yield_upgrades": true -} \ No newline at end of file From 7338d38cb1dbe353db892d828e81c82a37080ceb Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 20:59:28 +0200 Subject: [PATCH 186/477] these can be gated, too --- .../data/spectrum/recipe/crafting_table/guidebook.json | 3 ++- .../data/spectrum/recipe/crafting_table/mushroom_stew.json | 3 ++- .../data/spectrum/recipe/crafting_table/paintbrush.json | 3 ++- .../recipe/crafting_table/pedestal_basic_amethyst.json | 3 ++- .../spectrum/recipe/crafting_table/pedestal_basic_citrine.json | 3 ++- .../spectrum/recipe/crafting_table/pedestal_basic_topaz.json | 3 ++- 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/guidebook.json b/src/main/resources/data/spectrum/recipe/crafting_table/guidebook.json index 51ebca3065..20587fa359 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/guidebook.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/guidebook.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:spectrum", "pattern": [ " S ", "SBS", diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/mushroom_stew.json b/src/main/resources/data/spectrum/recipe/crafting_table/mushroom_stew.json index 30d259f76f..cbd743e9bf 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/mushroom_stew.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/mushroom_stew.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shapeless", + "type": "spectrum:gated_crafting_shapeless", + "required_advancement": "spectrum:lategame/collect_noxwood", "ingredients": [ { "tag": "spectrum:noxshrooms" diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/paintbrush.json b/src/main/resources/data/spectrum/recipe/crafting_table/paintbrush.json index d85885672b..38c478878f 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/paintbrush.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/paintbrush.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:spectrum", "pattern": [ " R", " F ", diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pedestal_basic_amethyst.json b/src/main/resources/data/spectrum/recipe/crafting_table/pedestal_basic_amethyst.json index 02f7d84f21..6a681cdf28 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pedestal_basic_amethyst.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pedestal_basic_amethyst.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:spectrum", "pattern": [ "SSS", "WTW", diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pedestal_basic_citrine.json b/src/main/resources/data/spectrum/recipe/crafting_table/pedestal_basic_citrine.json index 87711a9552..90ba73b909 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pedestal_basic_citrine.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pedestal_basic_citrine.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:spectrum", "pattern": [ "SSS", "WTW", diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pedestal_basic_topaz.json b/src/main/resources/data/spectrum/recipe/crafting_table/pedestal_basic_topaz.json index 3f1219dd46..8bcc8c0be1 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pedestal_basic_topaz.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pedestal_basic_topaz.json @@ -1,5 +1,6 @@ { - "type": "minecraft:crafting_shaped", + "type": "spectrum:gated_crafting_shaped", + "required_advancement": "spectrum:spectrum", "pattern": [ "SSS", "WTW", From 1c0f94131ec5650549a1bd4a84a5f4e8579388cf Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 21:10:51 +0200 Subject: [PATCH 187/477] bump version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index d55b0e9e0d..94e06c2114 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,7 +14,7 @@ neoforge_version_range=[21.1.186,) # Mod Properties mod_id=spectrum -mod_version=1.12.1-1.21.1-neo +mod_version=1.12.2-1.21.1-neo maven_group=de.dafuqs archives_base_name=Spectrum From d4c0759a1e0c86d3f8ba1a1b9488bcadcf1bb117 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 21:23:45 +0200 Subject: [PATCH 188/477] spelunkery => dimensional_tears --- .../resources/assets/spectrum/lang/en_us.json | 3 ++ .../mod_integration/dimensional_tears.json | 41 +++++++++++++++++++ .../entries/mod_integration/spelunkery.json | 16 -------- .../dimensional_tears_bottle.json} | 4 +- .../dimensional_tears_bucket.json} | 4 +- 5 files changed, 48 insertions(+), 20 deletions(-) create mode 100644 src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/mod_integration/dimensional_tears.json rename src/main/resources/data/spectrum/recipe/mod_integration/{spelunkery/potion_workshop_crafting/portal_fluid_bottle_crafting.json => dimensional_tears/potion_workshop_crafting/dimensional_tears_bottle.json} (83%) rename src/main/resources/data/spectrum/recipe/mod_integration/{spelunkery/potion_workshop_crafting/portal_fluid_bucket_crafting.json => dimensional_tears/potion_workshop_crafting/dimensional_tears_bucket.json} (83%) diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 07832716e0..f43cb063ea 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -3418,6 +3418,9 @@ "book.spectrum.guidebook.mod_integration.waystones.name": "Waystones", "book.spectrum.guidebook.mod_integration.waystones.page0.text": "Sharing is caring... so then why do these get made without a pair?\\\n\\\nWith what I know, replacing the central warp core with some Radiating Ender should be pretty simple. Now I can create tons of these monoliths, with no hassle at all!", "book.spectrum.guidebook.mod_integration.waystones.sharestones_recipe.text": "Works with *almost* any Pigment", + "book.spectrum.guidebook.mod_integration.dimensional_tears.name": "Dimensional Tears", + "book.spectrum.guidebook.mod_integration.dimensional_tears.about.text": "*The Endermen did it again!*", + "book.spectrum.guidebook.arcane_charges.name": "Arcane Charges", "book.spectrum.guidebook.arcane_charges.about.text": "While tinkering with these designs I’ve blown myself up more times than I care to admit. Failure is success in progress (I tell myself), so I found out: explosions get much more interesting when you let enchantments meddle with them.\\\n\\\n\\\n*magical mood swings wrapped in a fuse*", "book.spectrum.guidebook.arcane_charges.enchanting.title": "Enchanting", diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/mod_integration/dimensional_tears.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/mod_integration/dimensional_tears.json new file mode 100644 index 0000000000..bc14b92c39 --- /dev/null +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/mod_integration/dimensional_tears.json @@ -0,0 +1,41 @@ +{ + "name": "book.spectrum.guidebook.mod_integration.dimensional_tears.name", + "icon": { + "item": "dimensional_tears:dimensional_tears_bottle" + }, + "condition": { + "type": "modonomicon:and", + "children": [ + { + "type": "modonomicon:mod_loaded", + "mod_id": "dimensional_tears" + }, + { + "type": "modonomicon:advancement", + "advancement_id": "spectrum:place_pedestal" + } + ] + }, + "category": "spectrum:mod_integration", + "hide_while_locked": true, + "parents": [], + "background_u_index": 0, + "background_v_index": 0, + "x": 8, + "y": 4, + "pages": [ + { + "type": "modonomicon:text", + "title": "book.spectrum.guidebook.mod_integration.dimensional_tears.name", + "text": "book.spectrum.guidebook.mod_integration.dimensional_tears.about.text" + }, + { + "type": "spectrum:potion_workshop_crafting", + "recipe_id": "spectrum:mod_integration/dimensional_tears/potion_workshop_crafting/dimensional_tears_bottle" + }, + { + "type": "spectrum:potion_workshop_crafting", + "recipe_id": "spectrum:mod_integration/dimensional_tears/potion_workshop_crafting/dimensional_tears_bucket" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/mod_integration/spelunkery.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/mod_integration/spelunkery.json index 5beb890faa..194f57fe0d 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/mod_integration/spelunkery.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/mod_integration/spelunkery.json @@ -81,22 +81,6 @@ }, "recipe_id": "spectrum:mod_integration/spelunkery/liquid_crystal_converting/purify_lazurite" }, - { - "type": "spectrum:potion_workshop_crafting", - "condition": { - "type": "modonomicon:advancement", - "advancement_id": "spectrum:unlocks/items/ender_splice" - }, - "recipe_id": "spectrum:mod_integration/spelunkery/potion_workshop_crafting/portal_fluid_bottle_crafting" - }, - { - "type": "spectrum:potion_workshop_crafting", - "condition": { - "type": "modonomicon:advancement", - "advancement_id": "spectrum:unlocks/items/ender_splice" - }, - "recipe_id": "spectrum:mod_integration/spelunkery/potion_workshop_crafting/portal_fluid_bucket_crafting" - }, { "type": "spectrum:potion_workshop_crafting", "recipe_id": "spectrum:mod_integration/spelunkery/potion_workshop_crafting/spring_water_bucket_crafting" diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/spelunkery/potion_workshop_crafting/portal_fluid_bottle_crafting.json b/src/main/resources/data/spectrum/recipe/mod_integration/dimensional_tears/potion_workshop_crafting/dimensional_tears_bottle.json similarity index 83% rename from src/main/resources/data/spectrum/recipe/mod_integration/spelunkery/potion_workshop_crafting/portal_fluid_bottle_crafting.json rename to src/main/resources/data/spectrum/recipe/mod_integration/dimensional_tears/potion_workshop_crafting/dimensional_tears_bottle.json index da814d6079..3f27534df1 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/spelunkery/potion_workshop_crafting/portal_fluid_bottle_crafting.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/dimensional_tears/potion_workshop_crafting/dimensional_tears_bottle.json @@ -7,14 +7,14 @@ "ingredient2": "spectrum:neolith", "ingredient3": "minecraft:popped_chorus_fruit", "result": { - "id": "spelunkery:portal_fluid_bottle", + "id": "dimensional_tears:dimensional_tears_bottle", "count": 3 }, "required_advancement": "spectrum:unlocks/items/ender_splice", "neoforge:conditions": [ { "type": "neoforge:mod_loaded", - "modid": "spelunkery" + "modid": "dimensional_tears" } ] } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/mod_integration/spelunkery/potion_workshop_crafting/portal_fluid_bucket_crafting.json b/src/main/resources/data/spectrum/recipe/mod_integration/dimensional_tears/potion_workshop_crafting/dimensional_tears_bucket.json similarity index 83% rename from src/main/resources/data/spectrum/recipe/mod_integration/spelunkery/potion_workshop_crafting/portal_fluid_bucket_crafting.json rename to src/main/resources/data/spectrum/recipe/mod_integration/dimensional_tears/potion_workshop_crafting/dimensional_tears_bucket.json index 0a9591e9c7..68a9a9d8a8 100644 --- a/src/main/resources/data/spectrum/recipe/mod_integration/spelunkery/potion_workshop_crafting/portal_fluid_bucket_crafting.json +++ b/src/main/resources/data/spectrum/recipe/mod_integration/dimensional_tears/potion_workshop_crafting/dimensional_tears_bucket.json @@ -7,13 +7,13 @@ "ingredient2": "spectrum:neolith", "ingredient3": "minecraft:popped_chorus_fruit", "result": { - "id": "spelunkery:portal_fluid_bucket" + "id": "dimensional_tears:dimensional_tears_bucket" }, "required_advancement": "spectrum:unlocks/items/ender_splice", "neoforge:conditions": [ { "type": "neoforge:mod_loaded", - "modid": "spelunkery" + "modid": "dimensional_tears" } ] } \ No newline at end of file From 268af9eddd09992a65f8efa60571bbae1aa70240 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 21:44:37 +0200 Subject: [PATCH 189/477] bedrock armor is not trimmable anymore - does not work anyways, so this way the players do not lose their trims --- .../data/minecraft/tags/item/trimmable_armor.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/resources/data/minecraft/tags/item/trimmable_armor.json diff --git a/src/main/resources/data/minecraft/tags/item/trimmable_armor.json b/src/main/resources/data/minecraft/tags/item/trimmable_armor.json new file mode 100644 index 0000000000..2d466fadda --- /dev/null +++ b/src/main/resources/data/minecraft/tags/item/trimmable_armor.json @@ -0,0 +1,9 @@ +{ + "values": [], + "remove": [ + "spectrum:bedrock_helmet", + "spectrum:bedrock_chestplate", + "spectrum:bedrock_leggings", + "spectrum:bedrock_boots" + ] +} \ No newline at end of file From d669ce3dbcffedf712f274b51d60454474a6ee91 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Mon, 10 Aug 2026 22:11:00 +0200 Subject: [PATCH 190/477] more pedestal recipes => crafting table --- .../entries/general/bedrock_dust.json | 8 ++++---- .../entries/general/gemstone_powder.json | 8 ++++---- .../guidebook/entries/general/neolith.json | 8 ++++---- .../guidebook/entries/general/paltaeria.json | 4 ++-- .../guidebook/entries/general/pigment.json | 4 ++-- .../entries/general/shimmerstone.json | 4 ++-- .../guidebook/entries/general/stargazing.json | 8 ++++---- .../guidebook/entries/general/stratine.json | 4 ++-- .../guidebook/entries/general/vegetal.json | 8 ++++---- .../guidebook/entries/ink/pure_resources.json | 4 ++-- .../pigment_blocks/black_block.json | 19 +++++-------------- .../black_block_to_black_pigment.json | 18 +++++------------- .../pigment_blocks/blue_block.json | 19 +++++-------------- .../blue_block_to_blue_pigment.json | 18 +++++------------- .../pigment_blocks/brown_block.json | 19 +++++-------------- .../brown_block_to_brown_pigment.json | 18 +++++------------- .../pigment_blocks/cyan_block.json | 19 +++++-------------- .../cyan_block_to_cyan_pigment.json | 18 +++++------------- .../pigment_blocks/gray_block.json | 19 +++++-------------- .../gray_block_to_gray_pigment.json | 18 +++++------------- .../pigment_blocks/green_block.json | 19 +++++-------------- .../green_block_to_green_pigment.json | 18 +++++------------- .../pigment_blocks/light_blue_block.json | 19 +++++-------------- ...ight_blue_block_to_light_blue_pigment.json | 18 +++++------------- .../pigment_blocks/light_gray_block.json | 19 +++++-------------- ...ight_gray_block_to_light_gray_pigment.json | 18 +++++------------- .../pigment_blocks/lime_block.json | 19 +++++-------------- .../lime_block_to_lime_pigment.json | 18 +++++------------- .../pigment_blocks/magenta_block.json | 19 +++++-------------- .../magenta_block_to_magenta_pigment.json | 18 +++++------------- .../pigment_blocks/orange_block.json | 19 +++++-------------- .../orange_block_to_orange_pigment.json | 18 +++++------------- .../pigment_blocks/pink_block.json | 19 +++++-------------- .../pink_block_to_pink_pigment.json | 18 +++++------------- .../pigment_blocks/purple_block.json | 19 +++++-------------- .../purple_block_to_purple_pigment.json | 18 +++++------------- .../pigment_blocks/red_block.json | 19 +++++-------------- .../red_block_to_red_pigment.json | 18 +++++------------- .../pigment_blocks/white_block.json | 19 +++++-------------- .../white_block_to_white_pigment.json | 18 +++++------------- .../pigment_blocks/yellow_block.json | 19 +++++-------------- .../yellow_block_to_yellow_pigment.json | 18 +++++------------- 42 files changed, 190 insertions(+), 462 deletions(-) diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/bedrock_dust.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/bedrock_dust.json index 84d47f0173..6af82be2f4 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/bedrock_dust.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/bedrock_dust.json @@ -33,15 +33,15 @@ "text": "book.spectrum.guidebook.bedrock_dust.page1.text" }, { - "type": "spectrum:pedestal_crafting", + "type": "modonomicon:crafting_recipe", "title": "book.spectrum.guidebook.bedrock_dust.page2.title", - "recipe_id": "spectrum:pedestal/tier1/compacting/bedrock_dust_block", + "recipe_id_1": "spectrum:crafting_table/compacting/bedrock_dust_block", "text": "book.spectrum.guidebook.bedrock_dust.page2.text" }, { - "type": "spectrum:pedestal_crafting", + "type": "modonomicon:crafting_recipe", "title": "book.spectrum.guidebook.decompression", - "recipe_id": "spectrum:pedestal/tier1/compacting/bedrock_dust_block_uncrafting", + "recipe_id_1": "spectrum:crafting_table/compacting/bedrock_dust_block_uncrafting", "text": "book.spectrum.guidebook.bedrock_dust.page3.text" } ] diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/gemstone_powder.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/gemstone_powder.json index 69bdeadf40..2e97512439 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/gemstone_powder.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/gemstone_powder.json @@ -40,15 +40,15 @@ "text": "book.spectrum.guidebook.gemstone_powder.page1.text" }, { - "type": "spectrum:pedestal_crafting", + "type": "modonomicon:crafting_recipe", "title": "book.spectrum.guidebook.compression", - "recipe_id": "spectrum:pedestal/tier1/compacting/amethyst_powder_block", + "recipe_id_1": "spectrum:crafting_table/compacting/amethyst_powder_block", "text": "" }, { - "type": "spectrum:pedestal_crafting", + "type": "modonomicon:crafting_recipe", "title": "book.spectrum.guidebook.decompression", - "recipe_id": "spectrum:pedestal/tier1/compacting/amethyst_powder_from_amethyst_powder_block", + "recipe_id_1": "spectrum:crafting_table/compacting/amethyst_powder_from_amethyst_powder_block", "text": "" } ] diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/neolith.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/neolith.json index 979709fb45..18b27010ce 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/neolith.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/neolith.json @@ -28,15 +28,15 @@ "text": "book.spectrum.guidebook.neolith.page0.text" }, { - "type": "spectrum:pedestal_crafting", + "type": "modonomicon:crafting_recipe", "title": "Compression", - "recipe_id": "spectrum:pedestal/tier1/compacting/neolith_block", + "recipe_id_1": "spectrum:crafting_table/compacting/neolith_block", "text": "" }, { - "type": "spectrum:pedestal_crafting", + "type": "modonomicon:crafting_recipe", "title": "Decompression", - "recipe_id": "spectrum:pedestal/tier1/compacting/neolith_from_neolith_block", + "recipe_id_1": "spectrum:crafting_table/compacting/neolith_from_neolith_block", "text": "" } ] diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/paltaeria.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/paltaeria.json index 93ae1f365b..aff3214da7 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/paltaeria.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/paltaeria.json @@ -50,14 +50,14 @@ "text": "book.spectrum.guidebook.paltaeria.page2.text" }, { - "type": "spectrum:pedestal_crafting", + "type": "modonomicon:crafting_recipe", "condition": { "type": "modonomicon:advancement", "advancement_id": "spectrum:lategame/carry_too_many_low_gravity_blocks" }, "text": "book.spectrum.guidebook.paltaeria.page3.text", "title": "container.spectrum.rei.pedestal_recipe", - "recipe_id": "spectrum:pedestal/tier1/compacting/paltaeria_floatblock" + "recipe_id_1": "spectrum:crafting_table/compacting/paltaeria_floatblock" } ] } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/pigment.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/pigment.json index 93405ba840..64dea646f6 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/pigment.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/pigment.json @@ -258,8 +258,8 @@ }, { "title": "book.spectrum.guidebook.pigment.page18.title", - "type": "spectrum:pedestal_crafting", - "recipe_id": "spectrum:pedestal/tier1/pigment_blocks/magenta_block", + "type": "modonomicon:crafting_recipe", + "recipe_id_1": "spectrum:crafting_table/pigment_blocks/magenta_block", "text": "book.spectrum.guidebook.pigment.page18.text" } ] diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/shimmerstone.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/shimmerstone.json index 4663804435..3c10ac8950 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/shimmerstone.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/shimmerstone.json @@ -24,8 +24,8 @@ "text": "book.spectrum.guidebook.shimmerstone.page0.text" }, { - "type": "spectrum:pedestal_crafting", - "recipe_id": "spectrum:pedestal/tier1/compacting/shimmerstone_block", + "type": "modonomicon:crafting_recipe", + "recipe_id_1": "spectrum:crafting_table/compacting/shimmerstone_block", "text": "book.spectrum.guidebook.shimmerstone.page1.text" } ] diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/stargazing.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/stargazing.json index 002be2e485..9b3db77f6e 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/stargazing.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/stargazing.json @@ -77,15 +77,15 @@ "text": "book.spectrum.guidebook.stargazing.page4.text" }, { - "type": "spectrum:pedestal_crafting", + "type": "modonomicon:crafting_recipe", "title": "book.spectrum.guidebook.compression", - "recipe_id": "spectrum:pedestal/tier1/compacting/stardust_block", + "recipe_id_1": "spectrum:crafting_table/compacting/stardust_block", "text": "" }, { - "type": "spectrum:pedestal_crafting", + "type": "modonomicon:crafting_recipe", "title": "book.spectrum.guidebook.decompression", - "recipe_id": "spectrum:pedestal/tier1/compacting/stardust_from_stardust_block", + "recipe_id_1": "spectrum:crafting_table/compacting/stardust_from_stardust_block", "text": "" } ] diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/stratine.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/stratine.json index 9586b64b65..5a48ffbb54 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/stratine.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/stratine.json @@ -52,8 +52,8 @@ "advancement_id": "spectrum:midgame/carry_too_many_heavy_gravity_blocks" }, "text": "book.spectrum.guidebook.stratine.page3.text", - "title": "container.spectrum.rei.pedestal_recipe", - "recipe_id": "spectrum:pedestal/tier1/compacting/stratine_floatblock" + "type": "modonomicon:crafting_recipe", + "recipe_id_1": "spectrum:crafting_table/compacting/stratine_floatblock" } ] } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/vegetal.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/vegetal.json index 473d512903..a9febd7a23 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/vegetal.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/general/vegetal.json @@ -28,15 +28,15 @@ "text": "book.spectrum.guidebook.vegetal.page0.text" }, { - "type": "spectrum:pedestal_crafting", + "type": "modonomicon:crafting_recipe", + "recipe_id_1": "spectrum:crafting_table/compacting/vegetal_block", "title": "Compression", - "recipe_id": "spectrum:pedestal/tier1/compacting/vegetal_block", "text": "" }, { - "type": "spectrum:pedestal_crafting", + "type": "modonomicon:crafting_recipe", "title": "Decompression", - "recipe_id": "spectrum:pedestal/tier1/compacting/vegetal_from_vegetal_block", + "recipe_id_1": "spectrum:crafting_table/compacting/vegetal_from_vegetal_block", "text": "" } ] diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/ink/pure_resources.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/ink/pure_resources.json index aa304db6f0..d3ff815f0f 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/ink/pure_resources.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/ink/pure_resources.json @@ -39,10 +39,10 @@ "text": "book.spectrum.guidebook.pure_resources.page2.text" }, { - "type": "spectrum:pedestal_crafting", + "type": "modonomicon:crafting_recipe", "text": "book.spectrum.guidebook.pure_resources.page3.text", "title": "book.spectrum.guidebook.pure_resources.page3.title", - "recipe_id": "spectrum:pedestal/tier1/compacting/pure_quartz_block" + "recipe_id_1": "spectrum:crafting_table/compacting/pure_quartz_block" }, { "type": "spectrum:fusion_shrine_crafting", diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/black_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/black_block.json index ba86a20d4f..6d470e6a35 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/black_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/black_block.json @@ -1,28 +1,19 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:black_pigment" + "G": { + "item": "spectrum:black_pigment" + } }, "result": { "id": "spectrum:black_block", "count": 1 }, - "required_advancement": "spectrum:hidden/collect_pigment/black", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/black" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/black_block_to_black_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/black_block_to_black_pigment.json index bf2ce1ac99..9287a414eb 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/black_block_to_black_pigment.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/black_block_to_black_pigment.json @@ -1,22 +1,14 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, "ingredients": [ - "spectrum:black_block" + { + "item": "spectrum:black_block" + } ], "result": { "id": "spectrum:black_pigment", "count": 9 }, - "required_advancement": "spectrum:hidden/collect_pigment/black", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/black" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/blue_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/blue_block.json index 74b8a5a82a..72bad7e04f 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/blue_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/blue_block.json @@ -1,28 +1,19 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:blue_pigment" + "G": { + "item": "spectrum:blue_pigment" + } }, "result": { "id": "spectrum:blue_block", "count": 1 }, - "required_advancement": "spectrum:hidden/collect_pigment/blue", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/blue" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/blue_block_to_blue_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/blue_block_to_blue_pigment.json index 7559ad3317..29f1b87613 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/blue_block_to_blue_pigment.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/blue_block_to_blue_pigment.json @@ -1,22 +1,14 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, "ingredients": [ - "spectrum:blue_block" + { + "item": "spectrum:blue_block" + } ], "result": { "id": "spectrum:blue_pigment", "count": 9 }, - "required_advancement": "spectrum:hidden/collect_pigment/blue", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/blue" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/brown_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/brown_block.json index 85745d1d49..c7d31d91aa 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/brown_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/brown_block.json @@ -1,28 +1,19 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:brown_pigment" + "G": { + "item": "spectrum:brown_pigment" + } }, "result": { "id": "spectrum:brown_block", "count": 1 }, - "required_advancement": "spectrum:hidden/collect_pigment/brown", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/brown" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/brown_block_to_brown_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/brown_block_to_brown_pigment.json index aaee4e640f..0b85aecd36 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/brown_block_to_brown_pigment.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/brown_block_to_brown_pigment.json @@ -1,22 +1,14 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, "ingredients": [ - "spectrum:brown_block" + { + "item": "spectrum:brown_block" + } ], "result": { "id": "spectrum:brown_pigment", "count": 9 }, - "required_advancement": "spectrum:hidden/collect_pigment/brown", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/brown" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/cyan_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/cyan_block.json index 682f25f3a9..94d1f0c95d 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/cyan_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/cyan_block.json @@ -1,28 +1,19 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:cyan_pigment" + "G": { + "item": "spectrum:cyan_pigment" + } }, "result": { "id": "spectrum:cyan_block", "count": 1 }, - "required_advancement": "spectrum:hidden/collect_pigment/cyan", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/cyan" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/cyan_block_to_cyan_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/cyan_block_to_cyan_pigment.json index f4754121b7..a094b9b7c1 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/cyan_block_to_cyan_pigment.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/cyan_block_to_cyan_pigment.json @@ -1,22 +1,14 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, "ingredients": [ - "spectrum:cyan_block" + { + "item": "spectrum:cyan_block" + } ], "result": { "id": "spectrum:cyan_pigment", "count": 9 }, - "required_advancement": "spectrum:hidden/collect_pigment/cyan", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/cyan" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/gray_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/gray_block.json index 36f23cf76c..a6ab4b9440 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/gray_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/gray_block.json @@ -1,28 +1,19 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:gray_pigment" + "G": { + "item": "spectrum:gray_pigment" + } }, "result": { "id": "spectrum:gray_block", "count": 1 }, - "required_advancement": "spectrum:hidden/collect_pigment/gray", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/gray" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/gray_block_to_gray_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/gray_block_to_gray_pigment.json index 4ad4cc6f54..36c97aff3f 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/gray_block_to_gray_pigment.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/gray_block_to_gray_pigment.json @@ -1,22 +1,14 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, "ingredients": [ - "spectrum:gray_block" + { + "item": "spectrum:gray_block" + } ], "result": { "id": "spectrum:gray_pigment", "count": 9 }, - "required_advancement": "spectrum:hidden/collect_pigment/gray", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/gray" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/green_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/green_block.json index d18f40c975..f9efba3cbe 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/green_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/green_block.json @@ -1,28 +1,19 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:green_pigment" + "G": { + "item": "spectrum:green_pigment" + } }, "result": { "id": "spectrum:green_block", "count": 1 }, - "required_advancement": "spectrum:hidden/collect_pigment/green", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/green" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/green_block_to_green_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/green_block_to_green_pigment.json index 40a321632e..3156255b6c 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/green_block_to_green_pigment.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/green_block_to_green_pigment.json @@ -1,22 +1,14 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, "ingredients": [ - "spectrum:green_block" + { + "item": "spectrum:green_block" + } ], "result": { "id": "spectrum:green_pigment", "count": 9 }, - "required_advancement": "spectrum:hidden/collect_pigment/green", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/green" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_blue_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_blue_block.json index 10186d531f..c35e59c53c 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_blue_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_blue_block.json @@ -1,28 +1,19 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:light_blue_pigment" + "G": { + "item": "spectrum:light_blue_pigment" + } }, "result": { "id": "spectrum:light_blue_block", "count": 1 }, - "required_advancement": "spectrum:hidden/collect_pigment/light_blue", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/light_blue" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_blue_block_to_light_blue_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_blue_block_to_light_blue_pigment.json index be170cd250..745e020b93 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_blue_block_to_light_blue_pigment.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_blue_block_to_light_blue_pigment.json @@ -1,22 +1,14 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, "ingredients": [ - "spectrum:light_blue_block" + { + "item": "spectrum:light_blue_block" + } ], "result": { "id": "spectrum:light_blue_pigment", "count": 9 }, - "required_advancement": "spectrum:hidden/collect_pigment/light_blue", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/light_blue" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_gray_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_gray_block.json index c24a27ee56..aa58109f4e 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_gray_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_gray_block.json @@ -1,28 +1,19 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:light_gray_pigment" + "G": { + "item": "spectrum:light_gray_pigment" + } }, "result": { "id": "spectrum:light_gray_block", "count": 1 }, - "required_advancement": "spectrum:hidden/collect_pigment/light_gray", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/light_gray" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_gray_block_to_light_gray_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_gray_block_to_light_gray_pigment.json index bab07ee8a7..a953e08c48 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_gray_block_to_light_gray_pigment.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/light_gray_block_to_light_gray_pigment.json @@ -1,22 +1,14 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, "ingredients": [ - "spectrum:light_gray_block" + { + "item": "spectrum:light_gray_block" + } ], "result": { "id": "spectrum:light_gray_pigment", "count": 9 }, - "required_advancement": "spectrum:hidden/collect_pigment/light_gray", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/light_gray" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/lime_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/lime_block.json index 91ca2c08b1..dc14718630 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/lime_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/lime_block.json @@ -1,28 +1,19 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:lime_pigment" + "G": { + "item": "spectrum:lime_pigment" + } }, "result": { "id": "spectrum:lime_block", "count": 1 }, - "required_advancement": "spectrum:hidden/collect_pigment/lime", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/lime" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/lime_block_to_lime_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/lime_block_to_lime_pigment.json index d64c933f4f..2d1c483bf7 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/lime_block_to_lime_pigment.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/lime_block_to_lime_pigment.json @@ -1,22 +1,14 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, "ingredients": [ - "spectrum:lime_block" + { + "item": "spectrum:lime_block" + } ], "result": { "id": "spectrum:lime_pigment", "count": 9 }, - "required_advancement": "spectrum:hidden/collect_pigment/lime", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/lime" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/magenta_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/magenta_block.json index d82346d47f..39537c4be6 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/magenta_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/magenta_block.json @@ -1,28 +1,19 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:magenta_pigment" + "G": { + "item": "spectrum:magenta_pigment" + } }, "result": { "id": "spectrum:magenta_block", "count": 1 }, - "required_advancement": "spectrum:hidden/collect_pigment/magenta", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/magenta" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/magenta_block_to_magenta_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/magenta_block_to_magenta_pigment.json index 55b53e551f..457f676919 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/magenta_block_to_magenta_pigment.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/magenta_block_to_magenta_pigment.json @@ -1,22 +1,14 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, "ingredients": [ - "spectrum:magenta_block" + { + "item": "spectrum:magenta_block" + } ], "result": { "id": "spectrum:magenta_pigment", "count": 9 }, - "required_advancement": "spectrum:hidden/collect_pigment/magenta", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/magenta" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/orange_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/orange_block.json index f613aa25c5..6b856cc1c6 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/orange_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/orange_block.json @@ -1,28 +1,19 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:orange_pigment" + "G": { + "item": "spectrum:orange_pigment" + } }, "result": { "id": "spectrum:orange_block", "count": 1 }, - "required_advancement": "spectrum:hidden/collect_pigment/orange", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/orange" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/orange_block_to_orange_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/orange_block_to_orange_pigment.json index 33a3a88942..d519c28752 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/orange_block_to_orange_pigment.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/orange_block_to_orange_pigment.json @@ -1,22 +1,14 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, "ingredients": [ - "spectrum:orange_block" + { + "item": "spectrum:orange_block" + } ], "result": { "id": "spectrum:orange_pigment", "count": 9 }, - "required_advancement": "spectrum:hidden/collect_pigment/orange", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/orange" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/pink_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/pink_block.json index c9e59a62a8..efe98bc56e 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/pink_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/pink_block.json @@ -1,28 +1,19 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:pink_pigment" + "G": { + "item": "spectrum:pink_pigment" + } }, "result": { "id": "spectrum:pink_block", "count": 1 }, - "required_advancement": "spectrum:hidden/collect_pigment/pink", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/pink" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/pink_block_to_pink_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/pink_block_to_pink_pigment.json index 0d0704b711..c7b9b79bdb 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/pink_block_to_pink_pigment.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/pink_block_to_pink_pigment.json @@ -1,22 +1,14 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, "ingredients": [ - "spectrum:pink_block" + { + "item": "spectrum:pink_block" + } ], "result": { "id": "spectrum:pink_pigment", "count": 9 }, - "required_advancement": "spectrum:hidden/collect_pigment/pink", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/pink" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/purple_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/purple_block.json index 5fede7f291..2e1b19b13b 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/purple_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/purple_block.json @@ -1,28 +1,19 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:purple_pigment" + "G": { + "item": "spectrum:purple_pigment" + } }, "result": { "id": "spectrum:purple_block", "count": 1 }, - "required_advancement": "spectrum:hidden/collect_pigment/purple", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/purple" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/purple_block_to_purple_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/purple_block_to_purple_pigment.json index 7ba3cc4cb3..e058f1220e 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/purple_block_to_purple_pigment.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/purple_block_to_purple_pigment.json @@ -1,22 +1,14 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, "ingredients": [ - "spectrum:purple_block" + { + "item": "spectrum:purple_block" + } ], "result": { "id": "spectrum:purple_pigment", "count": 9 }, - "required_advancement": "spectrum:hidden/collect_pigment/purple", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/purple" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/red_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/red_block.json index bac2ad2d6e..9be4ad4bcc 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/red_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/red_block.json @@ -1,28 +1,19 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:red_pigment" + "G": { + "item": "spectrum:red_pigment" + } }, "result": { "id": "spectrum:red_block", "count": 1 }, - "required_advancement": "spectrum:hidden/collect_pigment/red", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/red" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/red_block_to_red_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/red_block_to_red_pigment.json index 57c0b0c195..402c2a513c 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/red_block_to_red_pigment.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/red_block_to_red_pigment.json @@ -1,22 +1,14 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, "ingredients": [ - "spectrum:red_block" + { + "item": "spectrum:red_block" + } ], "result": { "id": "spectrum:red_pigment", "count": 9 }, - "required_advancement": "spectrum:hidden/collect_pigment/red", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/red" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/white_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/white_block.json index b73b907021..37c273dc49 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/white_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/white_block.json @@ -1,28 +1,19 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:white_pigment" + "G": { + "item": "spectrum:white_pigment" + } }, "result": { "id": "spectrum:white_block", "count": 1 }, - "required_advancement": "spectrum:hidden/collect_pigment/white", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/white" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/white_block_to_white_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/white_block_to_white_pigment.json index e93df4fb65..6d3785c028 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/white_block_to_white_pigment.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/white_block_to_white_pigment.json @@ -1,22 +1,14 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, "ingredients": [ - "spectrum:white_block" + { + "item": "spectrum:white_block" + } ], "result": { "id": "spectrum:white_pigment", "count": 9 }, - "required_advancement": "spectrum:hidden/collect_pigment/white", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/white" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/yellow_block.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/yellow_block.json index 9bd7294d84..d44f9db328 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/yellow_block.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/yellow_block.json @@ -1,28 +1,19 @@ { - "type": "spectrum:pedestal", + "type": "spectrum:gated_crafting_shaped", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, - "experience": 0.0, "pattern": [ "GGG", "GGG", "GGG" ], "key": { - "G": "spectrum:yellow_pigment" + "G": { + "item": "spectrum:yellow_pigment" + } }, "result": { "id": "spectrum:yellow_block", "count": 1 }, - "required_advancement": "spectrum:hidden/collect_pigment/yellow", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/yellow" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/yellow_block_to_yellow_pigment.json b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/yellow_block_to_yellow_pigment.json index 2b5b8c600f..7537ec56a9 100644 --- a/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/yellow_block_to_yellow_pigment.json +++ b/src/main/resources/data/spectrum/recipe/crafting_table/pigment_blocks/yellow_block_to_yellow_pigment.json @@ -1,22 +1,14 @@ { - "type": "spectrum:pedestal_shapeless", + "type": "spectrum:gated_crafting_shapeless", "group": "pigment_compacting", - "time": 20, - "tier": "basic", - "colors": { - "spectrum:cyan": 0, - "spectrum:magenta": 0, - "spectrum:yellow": 0, - "spectrum:white": 0, - "spectrum:black": 0 - }, "ingredients": [ - "spectrum:yellow_block" + { + "item": "spectrum:yellow_block" + } ], "result": { "id": "spectrum:yellow_pigment", "count": 9 }, - "required_advancement": "spectrum:hidden/collect_pigment/yellow", - "disable_yield_upgrades": true + "required_advancement": "spectrum:hidden/collect_pigment/yellow" } \ No newline at end of file From 2a0de96ef17b22f68de0b852753a0566ed665f07 Mon Sep 17 00:00:00 2001 From: SmallYii <112681916+SmallYii@users.noreply.github.com> Date: Tue, 11 Aug 2026 18:38:04 +0800 Subject: [PATCH 191/477] Sync zh_cn translations with en_us updates --- .../resources/assets/spectrum/lang/zh_cn.json | 27 +++++++------------ 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/src/main/resources/assets/spectrum/lang/zh_cn.json b/src/main/resources/assets/spectrum/lang/zh_cn.json index c1e29f6011..c9b2f26c94 100644 --- a/src/main/resources/assets/spectrum/lang/zh_cn.json +++ b/src/main/resources/assets/spectrum/lang/zh_cn.json @@ -3304,8 +3304,8 @@ "message.spectrum.needs_item_to_harvest": "收割需要 ", - "attribute.name.spectrum.mental_presence": "精神稳定性", - "attribute.name.spectrum.mental_presence.desc": "精神相关效果的强度", + "attribute.name.spectrum.loot_chance_multiplier": "战利品概率倍率", + "attribute.name.spectrum.loot_chance_multiplier.desc": "提升非必定战利品的掉落概率", "tag.c.dusts.ashes": "灰烬", "tag.c.plums": "李子", @@ -3725,7 +3725,7 @@ "book.spectrum.guidebook.black_hole_chest.page2.text": "在黑洞箱中放置[知识宝石](entry://enchanting/knowledge_gem)就能让它吸收经验球,将经验转移到宝石中。", "book.spectrum.guidebook.black_langast.page0.text": "这里到处都是[午夜溶液](entry://general/midnight_solution)。", - "book.spectrum.guidebook.black_langast.page1.text": "这里到底发生了什么,才会让整片大地变成这片死寂的废土?肯定是一场可怕的灾难。无论造成这一切的是何物——或是何人...它的经历或许和我有些相似,只是结局要悲惨得多。\\\n\\\n在这里生长的那些*东西*——称它们为植物都是对[#](bb00bb)枯萎的灌木[#]()的侮辱——怎么看都透着一股诡异。", + "book.spectrum.guidebook.black_langast.page1.text": "这里到底发生了什么,才会让整片大地变成这片死寂的废土?想必是一场可怕的灾难。造成这一切的事物——或是某人,或许有着一段[与我相似的遭遇](entry://general/midnight_aberration)……只是结局要悲惨得多。\\\n\\\n在此地生长的那些*东西*——称它们为植物,都是对[#](bb00bb)枯萎的灌木[#]()的侮辱——没有半点生机可言。", "book.spectrum.guidebook.blackslag.page0.text": "一种常见的深色坚硬石材,构成了深域的底层地形。", "book.spectrum.guidebook.blackslag.page1.text": "[高炉](item://minecraft:blast_furnace)熔炼这种石头的速度比普通熔炉更快。", @@ -3741,8 +3741,8 @@ "book.spectrum.guidebook.block_flooder.page0.text": "以前我总像个野人一样到处跑,要么照亮洞穴,要么堵住难看的洞口。为了减少负担,我从[褪解微生物](entry://general/fading)的增殖特性中获得灵感,借此发明了方块填充器。\\\n只要把它扔进洞口、水池或者峡谷,它就会自动用方块填满——而且只用原来5%%的时间,效果居然还看得过去!", "book.spectrum.guidebook.block_flooder.page1.text": "会直接从我的物品栏里取出对应方块来填补空缺。如果没有对应方块,就会自动使用[圆石](item://minecraft:cobblestone)来代替。", - "book.spectrum.guidebook.block_placer.page0.text": "自动破坏方块,称重,分类或是存入箱子,这些都很简单。但有一件事是我之前所有机器都做不到的: 放置方块。现在这已经成为过去了。\\\n[托帕石](entry://general/shards@topaz)具有与物质的亲和力,使其能从物品栏中将方块实体化。", - "book.spectrum.guidebook.block_placer.page1.text": "它真的做到了!", + "book.spectrum.guidebook.block_placer.page0.text": "自动破坏方块,称重,分类或是存入箱子,这些都很简单。但有一件事是我之前所有机器都做不到的,放置方块。现在这个难题已经成为过去了。\\\n[托帕石](entry://general/shards@topaz)拥有亲和物质的特性,能让它从自身储物空间中生成方块。", + "book.spectrum.guidebook.block_placer.page1.text": "*它真的能做到!*", "book.spectrum.guidebook.block_variants.name": "玄武岩与方解石", "book.spectrum.guidebook.block_variants.page0.text": "还记得晶洞外层的那圈岩石吗?兴许那些保护晶洞不受外界影响的岩石也吸收了点晶洞的灵气?\\\n谁知道呢。它们看起来确实很漂亮,是很好的建筑材料。", @@ -3853,9 +3853,7 @@ "book.spectrum.guidebook.budding_onyx.page0.text": "[缟玛瑙](entry://general/onyx_shards)的制作步骤实在相当繁琐。合成还要看月相,尽管有[月相时钟](entry://equipment/crescent_clock),我也经常错过这个短暂的窗口期。\\\n如果能让缟玛瑙像其他宝石一样可以培育,岂不是能省下我大把时间?\\\n\\\n*奇怪的是,同样的方法对其他宝石似乎并不管用?*", "book.spectrum.guidebook.budding_onyx.page1.text": "最好一次性合成足量的[午夜像差](entry://general/midnight_aberration),因为这些东西在我手上衰变得很快。", - "book.spectrum.guidebook.calming.page0.text": "喝下这个[#](449900)似乎能减少怪物的生成和攻击性,[#]()效果随等级提升。大多数生物甚至能容忍我靠得更近。", - "book.spectrum.guidebook.calming.page1.text": "这东西的镇静效果似乎让我变得特别容易犯困,哈。", - "book.spectrum.guidebook.calming.page1.title": "催眠效应(易受影响)", + "book.spectrum.guidebook.calming.page0.text": "喝下这个[#](449900)似乎能减少敌对生物的生成数量和攻击性[#](),效果随等级提升。大多数生物甚至能容忍我靠得更近。", "book.spectrum.guidebook.celestial_pocketwatch.page0.text": "合成[缟玛瑙碎片](entry://general/onyx_shards)对天象的要求还是太严苛了,新月可不是天天见的。每当我掐着表等待午夜的时候,一个不小心已经超出两分钟了。\\\n\\\n是时候拿出杀手锏了: 品红色对时间的亲和力!", "book.spectrum.guidebook.celestial_pocketwatch.page1.text": "*我这主意也太妙了。*", @@ -3939,8 +3937,6 @@ "book.spectrum.guidebook.connection_node.recipe.text": "和所有节点一样,连接节点的范围为 12 格。", "book.spectrum.guidebook.gather_node.name": "收集节点", "book.spectrum.guidebook.gather_node.about.text": "收集节点会主动向其他节点请求物品,并将物品存入相连的容器当中。\\\n\\\n你可以在它的[#](449900)过滤器[#]()里设置需要收集的物品。\\\n\\\n收集优先级:\n1. [发送节点](entry://pastel_network/sender_node)\n2. [供给节点](entry://pastel_network/provider_node)\n3. [存储节点](entry://pastel_network/storage_node)", - "book.spectrum.guidebook.gather_node.about.text": "收集节点会主动向其他节点请求物品,并将其放入与之相连的容器中。\\\n\\\n打开[#](449900)过滤器[#]()可以指定要收集的物品。", - "book.spectrum.guidebook.gather_node.page1.text": "收集顺序:\n1. [发送节点](entry://pastel_network/sender_node)\n2. [提供节点](entry://pastel_network/provider_node)\n3. [存储节点](entry://pastel_network/storage_node)", "book.spectrum.guidebook.provider_node.name": "提供节点", "book.spectrum.guidebook.provider_node.page0.text": "让相连容器内的物品可以在[绘彩网络](entry://pastel_network/pastel_network)中被调用。\\\n\\\n它不会主动推送物品,但[收集节点](entry://pastel_network/gather_node)可以向它索取物品。", "book.spectrum.guidebook.sender_node.name": "发送节点", @@ -3959,9 +3955,6 @@ "book.spectrum.guidebook.ink_nodes.about.text": "墨水的性质十分特殊!\\\n这些节点不只是简单把[墨水](entry://ink/ink)从一处搬运到另一处,更像是搭建了一条通道。网络内所有装置会共享墨水。\\\n\\\n墨水会从储量充足的地方流向储量不足的地方。", "book.spectrum.guidebook.omni_nodes.name": "全能节点", "book.spectrum.guidebook.omni_nodes.about.text": "这类万能节点可以同时实现[物品传输](entry://pastel_network/item_nodes)、[流体传输](entry://pastel_network/fluid_nodes)以及[墨水传输](entry://pastel_network/ink_nodes)!\\\n\\\n有了其他节点的研究基础,把这些功能整合到一起并不算难事,毕竟它们底层原理本就相通。", - "book.spectrum.guidebook.sender_node.about.text": "发送节点会主动尝试清空相连的容器。\\\n\\\n推送顺序:\n1. [收集节点](entry://pastel_network/gather_node)\n2. [存储节点](entry://pastel_network/storage_node)", - "book.spectrum.guidebook.storage_node.name": "存储节点", - "book.spectrum.guidebook.storage_node.about.text": "存储节点与[发送节点](entry://pastel_network/sender_node)(推送物品)和[收集节点](entry://pastel_network/gather_node)(提供物品)配合时效果最佳。\\\n\\\n其[#](449900)过滤器[#]()可指定接收与提供的物品。过滤器为空时,相连容器会作为通用储物仓库,接收所有类型物品。", "book.spectrum.guidebook.pastel_upgrades.name": "绘彩节点升级", "book.spectrum.guidebook.pastel_upgrades.about.text": "唉,太残酷了,实在太残酷了——我的创造竟然 *还不够完美!* 这简直有辱我之名,这绝不能容忍。\\\n\\\n想了一会儿,答案显而易见。我可以利用环绕节点的光环来强化它们(这当然也是我设计好的一部分),现在所需的只是合适的材料...", "book.spectrum.guidebook.pastel_upgrades.enhancing.title": "节点强化", @@ -4232,7 +4225,7 @@ "book.spectrum.guidebook.failing.essence_recipe.text": "这个是辣的。", "book.spectrum.guidebook.fatal_slumber.page0.text": "[#](449900)如果让效果任其持续下去会直接致死。[#]()就在我濒临死亡的那一刻,我看见了一些东西; 一片无底之海,一场无尽之梦; 微弱的光线在黑暗中闪烁——宛如一缕银线,引诱我不断深入...我深知不可跟随。", - "book.spectrum.guidebook.fatal_slumber.page1.text": "这是夜幕炼金术的杰作,潜藏着最本源的丝绒魔法。因此它会受精神强度与睡眠抗性影响。\\\n\\\n不过,只有拥有极强力量的存在,才能抵挡这片平静的水域。", + "book.spectrum.guidebook.fatal_slumber.page1.text": "这是夜幕炼金术的杰出成果,潜藏着最本源的[丝绒魔法](entry://brewing/sleep)[#]()。因此药效会受生物精神抗性影响。\\\n\\\n不过,唯有力量极为强大的存在,才能抵御这份静谧的安眠。", "book.spectrum.guidebook.first_strike.page0.text": "俗语有云:先发制人,后面忘了。\\\n\\\n随便了。\\\n顺带一提,我研发了这个名为“先发制人”的附魔。我相信这会非常有用,尤其是对付大量弱小敌人的时候。", "book.spectrum.guidebook.first_strike.page1.text": "大幅增加对满血敌人的伤害。\\\n\\\n最大等级: 2\\\n适用于近战武器。", @@ -4581,8 +4574,8 @@ "book.spectrum.guidebook.the_art_of_brewing.page1.text": "-时间: 桶内的物质需要时间慢慢酝酿。大多数饮品如果陈放得比必要时间更久,效果会变得更强烈,甚至会出现额外效果。\\\n\\\n-温度: 环境温度越高,珍贵的液体会随着时间的推移蒸发的越多。这被称为天使的那一份。", "book.spectrum.guidebook.the_art_of_brewing.page1.title": "外部影响因素", "book.spectrum.guidebook.the_art_of_brewing.page2.text": "-湿度: 空气湿度越高,水分蒸发比例会高于酒精,从而让饮品度数更高。\\\n\\\n-水份比例: 原料与水的比例需要精细平衡,但也可以大胆尝试。浓度越高,发酵速度越快,但代价是效果持续时间更短", - "book.spectrum.guidebook.the_art_of_brewing.drinking_age.title": "安全提示", - "book.spectrum.guidebook.the_art_of_brewing.drinking_age.text": "[发酵桶](entry://cuisine/titration_barrel)可以酿造含酒精的饮品。如果您已达到所在国家/地区的法定饮酒年龄,并且想要了解涉及酒精的配方,您可以按下方的按钮来解锁这些配方。\\\n如果未满年龄也无需担心——您不会错过任何核心内容。", + "book.spectrum.guidebook.the_art_of_brewing.drinking_age.title": "酒类饮品", + "book.spectrum.guidebook.the_art_of_brewing.drinking_age.text": "[发酵桶](entry://cuisine/titration_barrel)可以酿造含酒精的饮品。如果你想要体验和酒类相关的配方与效果,点击下方按钮解锁相关配方。\\\n如果你对此不感兴趣也无需担心,不会错过任何关键内容。", "book.spectrum.guidebook.the_art_of_brewing.drinking_age.button_text": "我确认", "book.spectrum.guidebook.the_art_of_brewing.drinking_age.button_text_confirmed": "已确认 ✔", @@ -5350,7 +5343,7 @@ "book.spectrum.guidebook.sleep.page1.text": "随着我对这门炼金术的了解加深,我开始感到不安;仿佛沉睡的浪潮随时会将我彻底吞没。一开始觉得多种效果同出一源很奇怪,但我没太在意。现在我不这么确定了。这些嫩芽和花蕾,还有[致命沉眠](entry://brewing/effects/fatal_slumber)及其淡淡的光痕...这一切都透着一股气息,令人不安地联想到[神性](entry://brewing/effects/divinity)。", "book.spectrum.guidebook.soporific": "催眠 (抗性)", - "book.spectrum.guidebook.sleep_resistance": "这种药水是夜幕元素炼金术的产物,依靠丝绒魔法起效。因此它会受目标的精神体质影响,对我自己而言,则会受到睡眠抗性的减免。", + "book.spectrum.guidebook.sleep_resistance": "这份药剂是元素夜幕炼金术的产物,依靠[丝绒魔法](entry://brewing/sleep)[#]()起效。因此药效会受到生物精神抗性的影响。", "book.spectrum.guidebook.slush.page0.text": "质地异常松软湿润的泥土,闻起来有蚯蚓的味道。", "book.spectrum.guidebook.slush.page1.text": "永远保持湿润且富含营养的农田。植物在其上茁壮成长的更快。", From 76a7f2e18d22a5ddd216a4db956674c4dc075f3b Mon Sep 17 00:00:00 2001 From: SmallYii <112681916+SmallYii@users.noreply.github.com> Date: Tue, 11 Aug 2026 18:45:50 +0800 Subject: [PATCH 192/477] Update zh_cn.json From 7b404a48582d004b4648cc5404a56fe62c3f8398 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 11 Aug 2026 14:37:26 +0200 Subject: [PATCH 193/477] Workaround for #943. --- .../java/de/dafuqs/spectrum/registries/SpectrumBlocks.java | 2 +- .../resources/data/c/tags/block/relocation_not_supported.json | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index 66f3b8c688..6f19a6ca24 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -1764,7 +1764,7 @@ private static BlockBehaviour.Properties preservationBlock() { public static final DeferredBlock YELLOW_CHISELED_PRESERVATION_STONE = register(singleton(blockWithItem("yellow_chiseled_preservation_stone", () -> new Block(preservationBlock())), TexturedModel.COLUMN_ALT)); public static final DeferredBlock PRESERVATION_GLASS = register(simple(blockWithItem("preservation_glass", () -> new TransparentBlock(preservationBlock().sound(SoundType.GLASS).noOcclusion().isRedstoneConductor(SpectrumBlocks::never).isSuffocating(SpectrumBlocks::never).isViewBlocking(SpectrumBlocks::never))))); - public static final DeferredBlock TINTED_PRESERVATION_GLASS = register(simple(blockWithItem("tinted_preservation_glass", () -> new TintedGlassBlock(BlockBehaviour.Properties.ofFullCopy(PRESERVATION_GLASS.get()))))); + public static final DeferredBlock TINTED_PRESERVATION_GLASS = register(simple(blockWithItem("tinted_preservation_glass", () -> new TintedGlassBlock(BlockBehaviour.Properties.ofFullCopy(PRESERVATION_GLASS.get()).pushReaction(PushReaction.NORMAL))))); public static final DeferredBlock PRESERVATION_ROUNDEL = register(singleton(blockWithItem("preservation_roundel", () -> new PreservationRoundelBlock(preservationBlock().noOcclusion().forceSolidOn())), SpectrumTexturedModelProviders.ROUNDEL)); public static final DeferredBlock PRESERVATION_BLOCK_DETECTOR = register(blockWithItem("preservation_block_detector", () -> new PreservationBlockDetectorBlock(preservationBlock())).withBlockModel((ctx, block) -> MultiVariantGenerator.multiVariant(block, SpectrumModelHelper.createModelVariant(SpectrumTexturedModelProviders.complexOrientable(b -> b, "_side", b -> b, "_top", b -> PRESERVATION_STONE.get(), "_top_generic", b -> b, "_front", b -> b, "_back", b -> b, "_side").create(block, ctx.modelOutput))).with(SpectrumModelHelper.createNorthDefaultFacingVariantMap()))); diff --git a/src/main/resources/data/c/tags/block/relocation_not_supported.json b/src/main/resources/data/c/tags/block/relocation_not_supported.json index 8fa29cf60b..9b4ad0ab28 100644 --- a/src/main/resources/data/c/tags/block/relocation_not_supported.json +++ b/src/main/resources/data/c/tags/block/relocation_not_supported.json @@ -2,5 +2,8 @@ "values": [ "#spectrum:unbreakable", "spectrum:ruin" + ], + "remove": [ + "spectrum:tinted_preservation_glass" ] } \ No newline at end of file From f5e7697b4bec35a4f19304b6258d419ce294cb40 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 11 Aug 2026 14:41:41 +0200 Subject: [PATCH 194/477] actually expand `piglin_loved` item tag --- .../data/minecraft/tags/item/piglin_loved.json | 11 ++++++++++- .../data/minecraft/tags/items/piglin_loved.json | 17 ----------------- 2 files changed, 10 insertions(+), 18 deletions(-) delete mode 100644 src/main/resources/data/minecraft/tags/items/piglin_loved.json diff --git a/src/main/resources/data/minecraft/tags/item/piglin_loved.json b/src/main/resources/data/minecraft/tags/item/piglin_loved.json index a784e6d10a..34964d02fb 100644 --- a/src/main/resources/data/minecraft/tags/item/piglin_loved.json +++ b/src/main/resources/data/minecraft/tags/item/piglin_loved.json @@ -2,6 +2,15 @@ "values": [ "spectrum:axolotl_gold_head", "spectrum:gilded_book", - "spectrum:enchanted_golden_carrot" + "spectrum:small_gold_bud", + "spectrum:large_gold_bud", + "spectrum:gold_cluster", + "spectrum:pure_gold", + "spectrum:pure_gold_block", + "spectrum:enchanted_golden_carrot", + "spectrum:glistering_melon", + "spectrum:glistering_melon_seeds", + "spectrum:glistering_shooting_star", + "spectrum:golden_bristle_tea" ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/piglin_loved.json b/src/main/resources/data/minecraft/tags/items/piglin_loved.json deleted file mode 100644 index cfd324c6ea..0000000000 --- a/src/main/resources/data/minecraft/tags/items/piglin_loved.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "replace": false, - "values": [ - "spectrum:axolotl_gold_head", - "spectrum:gilded_book", - "spectrum:small_gold_bud", - "spectrum:large_gold_bud", - "spectrum:gold_cluster", - "spectrum:pure_gold", - "spectrum:pure_gold_block", - "spectrum:enchanted_golden_carrot", - "spectrum:glistering_melon", - "spectrum:glistering_melon_seeds", - "spectrum:glistering_shooting_star", - "spectrum:golden_bristle_tea" - ] -} \ No newline at end of file From 73d30a126020d3dd0dfab272b259391e9a100b52 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 11 Aug 2026 15:02:04 +0200 Subject: [PATCH 195/477] `malum:blighted_soil` does not exist anymore --- .../data/spectrum/tags/block/decay/decay_away_curables.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/resources/data/spectrum/tags/block/decay/decay_away_curables.json b/src/main/resources/data/spectrum/tags/block/decay/decay_away_curables.json index 4b25ef1eb2..ba2dec09de 100644 --- a/src/main/resources/data/spectrum/tags/block/decay/decay_away_curables.json +++ b/src/main/resources/data/spectrum/tags/block/decay/decay_away_curables.json @@ -6,10 +6,6 @@ "id": "kibe:cursed_dirt", "required": false }, - { - "id": "malum:blighted_soil", - "required": false - }, { "id": "malum:blighted_earth", "required": false From 3d51d21b36767e23b5de2039c6ad0520a54d6d66 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 11 Aug 2026 15:10:45 +0200 Subject: [PATCH 196/477] tag model for resplendent feathers --- .../assets/spectrum/models/tag/item/resplendent_feathers.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/main/resources/assets/spectrum/models/tag/item/resplendent_feathers.json diff --git a/src/main/resources/assets/spectrum/models/tag/item/resplendent_feathers.json b/src/main/resources/assets/spectrum/models/tag/item/resplendent_feathers.json new file mode 100644 index 0000000000..1f89d9a2fc --- /dev/null +++ b/src/main/resources/assets/spectrum/models/tag/item/resplendent_feathers.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:item/resplendent_feather" +} \ No newline at end of file From 1ce61d3f55bdc1e875bf9b52d6f403174414492d Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 11 Aug 2026 15:35:26 +0200 Subject: [PATCH 197/477] crystallarieum performance tweak --- .../spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java index 423f219428..2cd5cea2c6 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java @@ -120,6 +120,7 @@ public static void serverTick(Level world, BlockPos blockPos, BlockState blockSt */ private static void tickRecipe(Level level, BlockPos pos, CrystallarieumBlockEntity crystallarieum, RecipeHolder recipe) { if (crystallarieum.currentAdditive == CrystallarieumAdditive.EMPTY && !recipe.value().growsWithoutAdditive()) { + crystallarieum.canWork = false; return; } From 43f5db47eabd14f954f9347933c5b389538acfca Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 11 Aug 2026 15:35:40 +0200 Subject: [PATCH 198/477] move mermaids gem advancement after root --- .../data/spectrum/advancement/collect_mermaids_gem.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/data/spectrum/advancement/collect_mermaids_gem.json b/src/main/resources/data/spectrum/advancement/collect_mermaids_gem.json index 55454f390a..47836f658b 100644 --- a/src/main/resources/data/spectrum/advancement/collect_mermaids_gem.json +++ b/src/main/resources/data/spectrum/advancement/collect_mermaids_gem.json @@ -11,7 +11,7 @@ }, "hidden": true }, - "parent": "spectrum:place_pedestal", + "parent": "spectrum:spectrum", "criteria": { "has_mermaids_gem": { "trigger": "minecraft:inventory_changed", @@ -26,7 +26,7 @@ "gotten_previous": { "trigger": "revelationary:advancement_gotten", "conditions": { - "advancement_identifier": "spectrum:place_pedestal" + "advancement_identifier": "spectrum:spectrum" } } } From 4bfb35ce5ad4ab2f3133fc454ed632db8cadc080 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 11 Aug 2026 15:45:48 +0200 Subject: [PATCH 199/477] cap the gravity speed --- .../de/dafuqs/spectrum/registries/SpectrumEventListeners.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index 818c188716..9db7f397b1 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -1167,6 +1167,10 @@ public static float applyGravityBasedOnInventory(LivingEntity entity, IItemHandl } } + // Limit the max push per tick + // that limit is still mighty high + appliedGravityThisTick = Math.clamp(appliedGravityThisTick, -0.18F, 0.18F); + if(appliedGravityThisTick != 0) { entity.push(0, appliedGravityThisTick, 0); } From 07d8f87a515913161d6ea679e72f4f14a0a1c397 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 11 Aug 2026 16:01:38 +0200 Subject: [PATCH 200/477] make crystallarieum stop consuming ink & additives when finished growing --- .../spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java | 2 ++ .../spectrum/recipe/crystallarieum/CrystallarieumRecipe.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java index 2cd5cea2c6..ef8a2a0f42 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java @@ -181,6 +181,8 @@ public void inventoryChanged() { if (this.currentRecipe == null || level == null) { this.currentAdditive = CrystallarieumAdditive.EMPTY; this.canWork = false; + this.currentGrowthStageTicks = 0; + this.tickLooper.reset(); } else { this.currentAdditive = this.currentRecipe.value().getAdditive(getItem(ADDITIVE_SLOT_ID)); BlockState topState = this.level.getBlockState(this.worldPosition.above()); diff --git a/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java index 4c1d66dfd4..45df411c8b 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/crystallarieum/CrystallarieumRecipe.java @@ -62,7 +62,7 @@ public CrystallarieumRecipe(String group, boolean secret, Optional { var recipes = world.getRecipeManager().getAllRecipesFor(SpectrumRecipeTypes.CRYSTALLARIEUM); for (var recipe : recipes) { - if (recipe.value().growthStages.contains(s)) + if (recipe.value().growthStages.contains(s) && !recipe.value().growthStages.getLast().equals(s)) return recipe; } return null; From cb97bc6df835b026bf994fba689d67ca46c29634 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 11 Aug 2026 16:22:28 +0200 Subject: [PATCH 201/477] titation barrel & more respect counts for recipe remainders --- .../spectrum/blocks/ink/sink/CinderhearthBlockEntity.java | 1 + .../spectrum/blocks/item_bowl/ItemBowlBlockEntity.java | 3 ++- .../blocks/potion_workshop/PotionWorkshopBlockEntity.java | 1 + .../titration_barrel/TitrationBarrelBlockEntity.java | 7 ++++--- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java index 78fa4686d1..f39ca8e264 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CinderhearthBlockEntity.java @@ -413,6 +413,7 @@ private static void craftRecipe(CinderhearthBlockEntity cinderhearth, ItemStack boolean couldAdd = InventoryHelper.addToInventory(cinderhearth, outputs, FIRST_OUTPUT_SLOT_ID, LAST_OUTPUT_SLOT_ID + 1); if (couldAdd) { ItemStack remainder = inputStack.getCraftingRemainingItem(); + remainder.setCount(inputStack.getCount()); // use up input ingredient ItemStack inputStackCopy = inputStack.copy(); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/ItemBowlBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/ItemBowlBlockEntity.java index 81932292a3..e8bea1f44d 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/ItemBowlBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/item_bowl/ItemBowlBlockEntity.java @@ -71,12 +71,13 @@ public int decrementBowlStack(Vec3 orbTargetPos, int amount, boolean doEffects) int decrementAmount = Math.min(amount, storedStack.getCount()); ItemStack remainder = storedStack.getCraftingRemainingItem(); + remainder.setCount(decrementAmount); + if (!remainder.isEmpty()) { if (storedStack.getCount() == 1) { setItem(0, remainder); } else { getItem(0).shrink(decrementAmount); - remainder.setCount(decrementAmount); ItemEntity itemEntity = new ItemEntity(level, worldPosition.getX() + 0.5, worldPosition.getY() + 1, worldPosition.getZ() + 0.5, remainder); itemEntity.push(0, 0.1, 0); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/potion_workshop/PotionWorkshopBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/potion_workshop/PotionWorkshopBlockEntity.java index 5553044a61..2db8a61040 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/potion_workshop/PotionWorkshopBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/potion_workshop/PotionWorkshopBlockEntity.java @@ -400,6 +400,7 @@ private static void decrementUsingRemainder(PotionWorkshopBlockEntity potionWork ItemStack currentRemainder = currentStack.getCraftingRemainingItem(); currentStack.shrink(amount); if (!currentRemainder.isEmpty()) { + currentRemainder.setCount(amount); addToInventoryOrSpawn(potionWorkshopBlockEntity, currentRemainder); } } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlockEntity.java index f9149076bf..f2bd626604 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlockEntity.java @@ -63,11 +63,11 @@ public void inventoryChanged() { BlockState state = getBlockState(); BarrelState barrelState = state.getValue(BARREL_STATE); - boolean empty = isEmpty(); + boolean empty = isEmpty() && tank.getFluidAmount() == 0; if(barrelState == BarrelState.EMPTY && !empty) { - level.setBlock(getBlockPos(), state.setValue(BARREL_STATE, BarrelState.FILLED), 3); + level.setBlockAndUpdate(getBlockPos(), state.setValue(BARREL_STATE, BarrelState.FILLED)); } else if(barrelState == BarrelState.FILLED && empty) { - level.setBlock(getBlockPos(), state.setValue(BARREL_STATE, BarrelState.EMPTY), 3); + level.setBlockAndUpdate(getBlockPos(), state.setValue(BARREL_STATE, BarrelState.EMPTY)); } this.setChanged(); @@ -237,6 +237,7 @@ public void giveRecipeRemainders(@Nullable Player player) { for (ItemStack stack : this.getItems()) { ItemStack remainder = stack.getCraftingRemainingItem(); if (!remainder.isEmpty()) { + remainder.setCount(stack.getCount()); if (player == null) { popResource(level, this.getBlockPos(), remainder); } else { From 496cd361bd9fe51a103dc3ea14910678c507c4ff Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 11 Aug 2026 16:39:53 +0200 Subject: [PATCH 202/477] fix: the potion reagent unidentifiable flag makes the potions black again --- .../recipe/potion_workshop/PotionWorkshopBrewingRecipe.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java index b8eee9f567..4367f6286f 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java @@ -5,6 +5,7 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.recipe.*; import de.dafuqs.spectrum.components.*; @@ -242,9 +243,10 @@ private static void setCustomPotionEffects(ItemStack stack, PotionMod potionMod, for (InkPoweredStatusEffectInstance e : effects) { instances.add(e.getStatusEffectInstance()); } - OptionalInt potionColor = PotionContents.getColorOptional(instances); - PotionContents potionComponent = new PotionContents(Optional.of(SpectrumPotions.PIGMENT_POTION), Optional.of(potionColor.orElse(0)), instances); + int potionColor = potionMod.flags().unidentifiable() ? InkColors.BLACK_COLOR : PotionContents.getColorOptional(instances).orElse(0); + + PotionContents potionComponent = new PotionContents(Optional.of(SpectrumPotions.PIGMENT_POTION), Optional.of(potionColor), instances); stack.set(DataComponents.POTION_CONTENTS, potionComponent); if (potionMod.flags().unidentifiable() || potionMod.additionalDrinkDurationTicks() != 0) { From 12ec7a09e360e6ccc785c51b3ce3674b85bc32e5 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 11 Aug 2026 17:08:32 +0200 Subject: [PATCH 203/477] make storm stone reagent also affect level 1 potions --- .../recipe/potion_workshop/PotionWorkshopBrewingRecipe.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java index 4367f6286f..27a68ecda1 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java @@ -395,7 +395,7 @@ private List applyPotentDecreasingEffect(List mods : SPLIT_EFFECT_POTENCY_AND_DURATION) { int newDuration = (int) (instance.getDuration() * mods.getB()); - int newAmplifier = Support.getIntFromDecimalWithChance(instance.getAmplifier() * mods.getA(), random); + int newAmplifier = Support.getIntFromDecimalWithChance((1 + instance.getAmplifier()) * mods.getA(), random) - 1; if (newAmplifier >= 0) { splitInstances.add(new InkPoweredStatusEffectInstance(new MobEffectInstance(instance.getEffect(), newDuration, newAmplifier, instance.isAmbient(), instance.isVisible()), poweredInstance.getInkCost(), poweredInstance.getColor(), poweredInstance.isUnidentifiable())); } From ebe448aaaae0ebcd2a9bea58dfbcf35f7cb1ee50 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 11 Aug 2026 17:10:55 +0200 Subject: [PATCH 204/477] why is that here --- .../recipe/potion_workshop/PotionWorkshopBrewingRecipe.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java index 27a68ecda1..34ff41a864 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java @@ -57,8 +57,6 @@ public class PotionWorkshopBrewingRecipe extends PotionWorkshopRecipe { HARMFUL_TO_BENEFICIAL_EFFECT.put(SpectrumMobEffects.DENSITY, SpectrumMobEffects.LIGHTWEIGHT); } - ; - public static @Nullable PotionWorkshopBrewingRecipe getInverseRecipe(Holder statusEffect, MobEffectCategory sourceCategory, BiMap, Holder> map) { if (statusEffect.value().getCategory() == sourceCategory) { Holder beneficialEffect = map.getOrDefault(statusEffect, null); From ab3e5978861f44a4b35489bc71c2fe2469194db4 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 11 Aug 2026 17:16:52 +0200 Subject: [PATCH 205/477] make nephrite leaves blossom twice as fast --- .../spectrum/blocks/jade_vines/NephriteBlossomLeavesBlock.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/NephriteBlossomLeavesBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/NephriteBlossomLeavesBlock.java index 6f05135ae4..9f8f72a012 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/NephriteBlossomLeavesBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/jade_vines/NephriteBlossomLeavesBlock.java @@ -55,7 +55,7 @@ public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random int age = state.getValue(AGE); int leafSum = 0; - if (state.getValue(PERSISTENT) || random.nextFloat() > 0.1F) { + if (state.getValue(PERSISTENT) || random.nextFloat() > 0.2F) { super.randomTick(state, world, pos, random); return; } From 771a0447f0234642fa04553339cd83fd0422e1c0 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 11 Aug 2026 17:24:36 +0200 Subject: [PATCH 206/477] increase the duration of the fatal slumber potion fillable. 10s is wayyyy to low --- .../recipe/potion_workshop_brewing/fatal_slumber.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/data/spectrum/recipe/potion_workshop_brewing/fatal_slumber.json b/src/main/resources/data/spectrum/recipe/potion_workshop_brewing/fatal_slumber.json index 5142e20b70..2342636888 100644 --- a/src/main/resources/data/spectrum/recipe/potion_workshop_brewing/fatal_slumber.json +++ b/src/main/resources/data/spectrum/recipe/potion_workshop_brewing/fatal_slumber.json @@ -5,7 +5,7 @@ "ingredient2": "spectrum:evernectar", "ingredient3": "spectrum:moonstone_powder", "effect": "spectrum:fatal_slumber", - "base_duration_ticks": 200, + "base_duration_ticks": 600, "potency_modifier": 0.1, "applicable_to_potions": false, "applicable_to_tipped_arrows": false, @@ -13,6 +13,6 @@ "required_advancement": "spectrum:unlocks/potions/fatal_slumber", "ink_color": "spectrum:purple", "ink_cost": 64, - "potency_hard_cap": 1, + "potency_hard_cap": 0, "base_yield": 1 } \ No newline at end of file From ea8b3646572975ce1eb9825cd1dac341799e80da Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 11 Aug 2026 17:37:01 +0200 Subject: [PATCH 207/477] fix float block dupe --- .../java/de/dafuqs/spectrum/entity/entity/FloatBlockEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/FloatBlockEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/FloatBlockEntity.java index f23c98b56f..ddf3fd98af 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/FloatBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/FloatBlockEntity.java @@ -141,7 +141,7 @@ public void tick() { this.moveEntities(); this.move(MoverType.SELF, this.getDeltaMovement()); - if (!this.level().isClientSide()) { + if (!this.level().isClientSide() && !this.isRemoved()) { if (this.verticalCollision) { trySetBlock(); } else if (this.tickCount > 100 && this.level().isOutsideBuildHeight(this.blockPosition())) { From 89cb7c86c699bf6ffb068124e9885b32dbc4830a Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 11 Aug 2026 18:01:49 +0200 Subject: [PATCH 208/477] the 'memory to head' recipe now lists that any memory will do --- .../dynamic/MemoryToHeadRecipe.java | 15 ++++++++++++++- .../spawner_manipulation/SpawnerChangeRecipe.java | 3 ++- .../SpawnerCreatureChangeRecipe.java | 6 +++--- .../SpawnerMaxNearbyEntitiesChangeRecipe.java | 3 ++- .../SpawnerRequiredPlayerRangeChangeRecipe.java | 3 ++- .../SpawnerSpawnCountChangeRecipe.java | 3 ++- .../SpawnerSpawnDelayChangeRecipe.java | 3 ++- .../spawner_manipulation/package-info.java | 7 +++++++ .../resources/assets/spectrum/lang/en_us.json | 1 + 9 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/package-info.java diff --git a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/MemoryToHeadRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/MemoryToHeadRecipe.java index a97b1b7edb..801ad82ca9 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/MemoryToHeadRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/MemoryToHeadRecipe.java @@ -10,6 +10,8 @@ import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.core.component.*; +import net.minecraft.nbt.*; +import net.minecraft.network.chat.*; import net.minecraft.server.level.*; import net.minecraft.world.entity.*; import net.minecraft.world.item.*; @@ -26,10 +28,21 @@ public class MemoryToHeadRecipe extends SpiritInstillerRecipe { public MemoryToHeadRecipe() { super("", false, Optional.of(SpectrumCommon.locate("unlocks/memory_to_head")), - IngredientStack.ofItems(SpectrumBlocks.MEMORY.asItem()), IngredientStack.ofItems(SpectrumItems.VEGETAL.get(), 4), IngredientStack.ofItems(SpectrumItems.QUITOXIC_POWDER.get(), 4), + getMemoryStack(), IngredientStack.ofItems(SpectrumItems.VEGETAL.get(), 4), IngredientStack.ofItems(SpectrumItems.QUITOXIC_POWDER.get(), 4), new ItemStack(Blocks.ZOMBIE_HEAD), 200, 1, true, false); } + private static IngredientStack getMemoryStack() { + CompoundTag nbt = new CompoundTag(); + nbt.putString("id", "minecraft:zombie"); + + DataComponentPatch previewPatch = DataComponentPatch.builder() + .set(DataComponents.LORE, new ItemLore(List.of(Component.translatable("recipe.spectrum.memory_to_head.lore")))) + .set(DataComponents.ENTITY_DATA, CustomData.of(nbt)).build(); + + return new IngredientStack(Ingredient.of(SpectrumBlocks.MEMORY), DataComponentPredicate.EMPTY, previewPatch, 1); + } + @Override public RecipeSerializer getSerializer() { return SpectrumRecipeSerializers.SPIRIT_INSTILLER_MEMORY_TO_HEAD; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerChangeRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerChangeRecipe.java index 8a806f5a58..9e25f8f51b 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerChangeRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerChangeRecipe.java @@ -14,6 +14,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.component.*; import net.minecraft.world.level.block.entity.*; +import org.jspecify.annotations.*; import java.util.*; @@ -65,7 +66,7 @@ public boolean canCraftWithStacks(InstanceRecipeInput recipeInput, CustomData spawnerBlockEntityNbt, ItemStack leftBowlStack, ItemStack rightBowlStack); + public abstract boolean canCraftWithBlockEntityTag(InstanceRecipeInput recipeInput, @Nullable CustomData spawnerBlockEntityNbt, ItemStack leftBowlStack, ItemStack rightBowlStack); public abstract CompoundTag getSpawnerResultNbt(CompoundTag nbt, ItemStack firstBowlStack, ItemStack secondBowlStack, InstanceRecipeInput recipeInput); diff --git a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerCreatureChangeRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerCreatureChangeRecipe.java index 3d5cedd815..f442e1e816 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerCreatureChangeRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerCreatureChangeRecipe.java @@ -32,12 +32,12 @@ public RecipeSerializer getSerializer() { } @Override - public boolean canCraftWithBlockEntityTag(InstanceRecipeInput recipeInput, CustomData spawnerBlockEntityNbt, ItemStack firstBowlStack, ItemStack secondBowlStack) { + public boolean canCraftWithBlockEntityTag(InstanceRecipeInput recipeInput, @Nullable CustomData spawnerBlockEntityNbt, ItemStack firstBowlStack, ItemStack secondBowlStack) { Optional> entityType = SpectrumSkullBlock.getEntityTypeOfSkullStack(firstBowlStack); entityType = entityType.isEmpty() ? SpectrumSkullBlock.getEntityTypeOfSkullStack(secondBowlStack) : entityType; if (entityType.isEmpty() || entityType.get().is(SpectrumEntityTypeTags.SPAWNER_MANIPULATION_BLACKLISTED)) { - @Nullable Player player = recipeInput.getInstance().getOwnerIfOnline(recipeInput.getInstance().getLevel()); + Player player = recipeInput.getInstance().getOwnerIfOnline(recipeInput.getInstance().getLevel()); if (player instanceof ServerPlayer serverPlayer) { Support.grantAdvancementCriterion(serverPlayer, SpectrumAdvancements.FAILED_CREATING_EMPTY_OR_BLACKLISTED_SPAWNER, "failed_creating_empty_or_blacklisted_spawner"); } @@ -45,7 +45,7 @@ public boolean canCraftWithBlockEntityTag(InstanceRecipeInput recipeInput, CustomData spawnerBlockEntityNbt, ItemStack leftBowlStack, ItemStack rightBowlStack) { + public boolean canCraftWithBlockEntityTag(InstanceRecipeInput recipeInput, @Nullable CustomData spawnerBlockEntityNbt, ItemStack leftBowlStack, ItemStack rightBowlStack) { if (spawnerBlockEntityNbt == null) { return true; } diff --git a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerRequiredPlayerRangeChangeRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerRequiredPlayerRangeChangeRecipe.java index d7603c04f8..52a1ee88ae 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerRequiredPlayerRangeChangeRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerRequiredPlayerRangeChangeRecipe.java @@ -10,6 +10,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.component.*; import net.minecraft.world.item.crafting.*; +import org.jspecify.annotations.*; public class SpawnerRequiredPlayerRangeChangeRecipe extends SpawnerChangeRecipe { protected static final int DEFAULT_DETECTION_RANGE = 16; @@ -20,7 +21,7 @@ public SpawnerRequiredPlayerRangeChangeRecipe() { } @Override - public boolean canCraftWithBlockEntityTag(InstanceRecipeInput recipeInput, CustomData spawnerBlockEntityNbt, ItemStack leftBowlStack, ItemStack rightBowlStack) { + public boolean canCraftWithBlockEntityTag(InstanceRecipeInput recipeInput, @Nullable CustomData spawnerBlockEntityNbt, ItemStack leftBowlStack, ItemStack rightBowlStack) { if (spawnerBlockEntityNbt == null) { return true; } diff --git a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerSpawnCountChangeRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerSpawnCountChangeRecipe.java index 7c48e436bc..2cdeedfcae 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerSpawnCountChangeRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerSpawnCountChangeRecipe.java @@ -10,6 +10,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.component.*; import net.minecraft.world.item.crafting.*; +import org.jspecify.annotations.*; public class SpawnerSpawnCountChangeRecipe extends SpawnerChangeRecipe { protected static final int DEFAULT_SPAWN_COUNT = 4; @@ -20,7 +21,7 @@ public SpawnerSpawnCountChangeRecipe() { } @Override - public boolean canCraftWithBlockEntityTag(InstanceRecipeInput recipeInput, CustomData spawnerBlockEntityNbt, ItemStack leftBowlStack, ItemStack rightBowlStack) { + public boolean canCraftWithBlockEntityTag(InstanceRecipeInput recipeInput, @Nullable CustomData spawnerBlockEntityNbt, ItemStack leftBowlStack, ItemStack rightBowlStack) { if (spawnerBlockEntityNbt == null) { return true; } diff --git a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerSpawnDelayChangeRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerSpawnDelayChangeRecipe.java index d99e6adbbd..11e16ce6de 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerSpawnDelayChangeRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/SpawnerSpawnDelayChangeRecipe.java @@ -9,6 +9,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.component.*; import net.minecraft.world.item.crafting.*; +import org.jspecify.annotations.*; public class SpawnerSpawnDelayChangeRecipe extends SpawnerChangeRecipe { @@ -25,7 +26,7 @@ public SpawnerSpawnDelayChangeRecipe() { } @Override - public boolean canCraftWithBlockEntityTag(InstanceRecipeInput recipeInput, CustomData spawnerBlockEntityNbt, ItemStack leftBowlStack, ItemStack rightBowlStack) { + public boolean canCraftWithBlockEntityTag(InstanceRecipeInput recipeInput, @Nullable CustomData spawnerBlockEntityNbt, ItemStack leftBowlStack, ItemStack rightBowlStack) { if (spawnerBlockEntityNbt == null) { return true; } diff --git a/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/package-info.java b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/package-info.java new file mode 100644 index 0000000000..16446229fc --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/recipe/spirit_instiller/dynamic/spawner_manipulation/package-info.java @@ -0,0 +1,7 @@ +@NullMarked +@MethodsReturnNonnullByDefault +@FieldsAreNonnullByDefault +package de.dafuqs.spectrum.recipe.spirit_instiller.dynamic.spawner_manipulation; + +import net.minecraft.*; +import org.jspecify.annotations.*; diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index f43cb063ea..e17b8ace05 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -5141,6 +5141,7 @@ "recipe.spectrum.spawner.lore.increased_max_nearby_entities": "Less sensitive to creatures in proximity", "recipe.spectrum.spawner.lore.increased_required_player_range": "Longer active when the player is farther away.", "recipe.spectrum.spawner.lore.increased_spawn_count": "Increased count of spawned creatures", + "recipe.spectrum.memory_to_head.lore": "Any memory of a creature will do, resulting in the corresponding head", "recipe.spectrum.spirit_instiller.secret.germinated_jade_vine_crossbreeding.hint": "Crossbreed two plants", "recipe.spectrum.spirit_instiller.secret.chorus_flower.hint": "Echo and resonance", From f6bdf854c1cdf30348e23c3634f65ef48cb4131d Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 11 Aug 2026 18:33:48 +0200 Subject: [PATCH 209/477] remove broken 'gift wet lava sponge' advancement --- .../resources/assets/spectrum/lang/en_us.json | 2 - .../advancement/gift_wet_lava_sponge.json | 43 ------------------- 2 files changed, 45 deletions(-) delete mode 100644 src/main/resources/data/spectrum/advancement/gift_wet_lava_sponge.json diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index e17b8ace05..15c81290e7 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -327,8 +327,6 @@ "advancements.spectrum.get_tool_with_inertia_500_blocks_broken.title": "The fastest Pick in the West", "advancements.spectrum.gift_or_open_present.description": "Fill and wrap a present and place it down for someone you like to open – or open one yourself", "advancements.spectrum.gift_or_open_present.title": "Colorful Spectacle", - "advancements.spectrum.gift_wet_lava_sponge.description": "Throw a Wet Lava Sponge at another player", - "advancements.spectrum.gift_wet_lava_sponge.title": "Damage to You!", "advancements.spectrum.grow_bismuth_in_crystallarieum.description": "Grow a Bismuth Crystal using the Crystallarieum", "advancements.spectrum.grow_bismuth_in_crystallarieum.title": "A solid Improvement", "advancements.spectrum.grow_bloodstone_in_crystallarieum.description": "...for upon your hand sits the will of Wyrms of Yore – their drive for conquest and domination, crystallized. And upon it, witness your reflection", diff --git a/src/main/resources/data/spectrum/advancement/gift_wet_lava_sponge.json b/src/main/resources/data/spectrum/advancement/gift_wet_lava_sponge.json deleted file mode 100644 index 085ef0a180..0000000000 --- a/src/main/resources/data/spectrum/advancement/gift_wet_lava_sponge.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "parent": "spectrum:craft_using_pedestal", - "display": { - "icon": { - "id": "spectrum:wet_lava_sponge" - }, - "title": { - "translate": "advancements.spectrum.gift_wet_lava_sponge.title" - }, - "description": { - "translate": "advancements.spectrum.gift_wet_lava_sponge.description" - }, - "hidden": true - }, - "criteria": { - "requirement": { - "trigger": "minecraft:thrown_item_picked_up_by_entity", - "conditions": { - "entity": [ - { - "condition": "minecraft:inverted", - "term": { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": {} - } - } - ], - "item": { - "items": [ - "spectrum:wet_lava_sponge" - ] - } - } - }, - "gotten_previous": { - "trigger": "revelationary:advancement_gotten", - "conditions": { - "advancement_identifier": "spectrum:craft_using_pedestal" - } - } - } -} \ No newline at end of file From fa47660bc8d9e26b9371a8abb65a9de0c37ed6ff Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Tue, 11 Aug 2026 18:35:24 +0200 Subject: [PATCH 210/477] note that kindlings have to be broken in for breeding --- src/main/resources/assets/spectrum/lang/en_us.json | 2 ++ .../guidebook/entries/creating_life/kindlings.json | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 15c81290e7..acddedc022 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -3052,6 +3052,8 @@ "book.spectrum.guidebook.kindlings.page2.title": "A small Surprise", "book.spectrum.guidebook.kindlings.page3.text": "This night alchemy I've discovered... it seems to interact in strange ways with willpower. If dragons are beings of pure will, then surely something would happen if the two interacted with each other.\\\n\\\n*I can't imagine a little nap would hurt them. But... given their track record, maybe I should do this far away from anything I care about.*", "book.spectrum.guidebook.kindlings.page3.title": "A Strange Thought", + "book.spectrum.guidebook.kindlings.breeding.title": "Offspring", + "book.spectrum.guidebook.kindlings.breeding.text": "Those little, lively little chaos gremlins are quite demanding.\\\nThey have to get used to me first before they will even think about having babies near me or allowing a saddle on them.", "book.spectrum.guidebook.knowledge_gem.page0.text": "Picking up one of those little green orbs that appear whenever I kill an enemy makes me smarter – supposedly.\\\n\\\nHowever, inevitable death by clumsiness means that I always quickly lose this experience again. Crystallized and safely stored in my chest, however, it will be as safe as can be.", "book.spectrum.guidebook.knowledge_gem.page1.text": "Holds up to 10,000 experience. Enchanting it with [#](449900)Efficiency[#]() increases this limit, [#](449900)Quick Charge[#]() boosts the transfer speed of XP.", "book.spectrum.guidebook.knowledge_gem.page2.text": "Putting a Knowledge Gem in a [Black Hole Chest](entry://magical_blocks/black_hole_chest) will allow it to absorb XP orbs and store the experience in the gem.", diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/creating_life/kindlings.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/creating_life/kindlings.json index 4b1ed0786a..a106fa7b41 100644 --- a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/creating_life/kindlings.json +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/creating_life/kindlings.json @@ -57,6 +57,18 @@ "texture_height": 150, "border": false }, + { + "type": "modonomicon:spotlight", + "condition": { + "type": "modonomicon:advancement", + "advancement_id": "spectrum:remember_kindling" + }, + "item": { + "tag": "c:tea_leaves" + }, + "title": "book.spectrum.guidebook.kindlings.breeding.title", + "text": "book.spectrum.guidebook.kindlings.breeding.text" + }, { "type": "modonomicon:text", "condition": { From 5899fcb71ffcf9c4383a0b540ee0cc6109e76eb4 Mon Sep 17 00:00:00 2001 From: SmallYii <112681916+SmallYii@users.noreply.github.com> Date: Wed, 12 Aug 2026 11:26:53 +0800 Subject: [PATCH 211/477] Sync zh_cn translations with en_us updates --- src/main/resources/assets/spectrum/lang/zh_cn.json | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/spectrum/lang/zh_cn.json b/src/main/resources/assets/spectrum/lang/zh_cn.json index c9b2f26c94..ab35d9a418 100644 --- a/src/main/resources/assets/spectrum/lang/zh_cn.json +++ b/src/main/resources/assets/spectrum/lang/zh_cn.json @@ -2645,6 +2645,7 @@ "container.spectrum.modonomicon.crystallarieum.speed": "生长速度:", "container.spectrum.modonomicon.crystallarieum.ink_drain": "墨水消耗:", "container.spectrum.modonomicon.crystallarieum.depletion": "消耗速度:", + "container.spectrum.rei.gated_crafting.title": "解锁式合成", "container.spectrum.rei.titration_barrel.time_hours": "需要现实 %d 小时", "container.spectrum.rei.titration_barrel.time_days": "需要现实 %d 天", "container.spectrum.rei.titration_barrel.time_hour": "需要 1 小时的现实时间", @@ -3286,6 +3287,7 @@ "recipe.spectrum.spawner.lore.increased_required_player_range": "提升刷怪笼激活半径", "recipe.spectrum.spawner.lore.increased_spawn_count": "增加生成数量", "recipe.spectrum.spawner.lore.decreased_spawn_delay": "降低生成延迟", + "recipe.spectrum.memory_to_head.lore": "任意生物记忆均可使用,产出对应的生物头颅", "item.spectrum.tooltip.could_use_some_sweetener": "需要加点甜味剂", @@ -4696,6 +4698,9 @@ "book.spectrum.guidebook.kindlings.page3.title": "一个奇怪的想法", "book.spectrum.guidebook.kindlings.page3.text": "我发现的这种夜幕炼金术...似乎能与意志力产生奇妙的反应.如果巨龙是纯粹意志的化身,那两者相遇,一定会发生些什么。\\\n\\\n*我想,稍微让它打个盹应该伤不到它吧。不过...考虑到它们以往的表现,也许我应该在野外来做这件事,以防万一。*", + "book.spectrum.guidebook.kindlings.breeding.title": "繁衍后代", + "book.spectrum.guidebook.kindlings.breeding.text": "这些活泼闹腾的小捣蛋鬼要求可不少。\\\n它们得先熟悉我,才愿意在我身边繁衍后代,或是允许我给它们装上鞍具。", + "book.spectrum.guidebook.knowledge_gem.page0.text": "据说杀死敌人掉落的翠绿色的球似乎有启智的功效。\\\n\\\n然而,粗心大意笨手笨脚的死亡在所难免,这些经验就这么丢失可真是可惜。把这种经验用结晶的方式存储起来塞进箱子里,总比带在身上要安全得多了。", "book.spectrum.guidebook.knowledge_gem.page1.text": "一个宝石最多可容纳10,000经验值。为其附上[#](449900)效率[#]()附魔可以增加这个上限,[#](449900)快速装填[#]()附魔则能加快经验的传输速率。", "book.spectrum.guidebook.knowledge_gem.page2.title": "经验球吸收", @@ -5834,6 +5839,10 @@ "book.spectrum.guidebook.mod_integration.the_bumblezone.essence_ink.text": "这些精华...它们肯定**充满了**能量。这些能量确实很有用,不过看起来它们也饱含墨能,如果我愿意牺牲它们。\\\n即使我可能会试一试,这些蜜蜂混沌的精华也难以安分守己地转为墨水。", "book.spectrum.guidebook.mod_integration.waystones.name": "传送石碑", "book.spectrum.guidebook.mod_integration.waystones.page0.text": "分享是一种关怀...但仔细一想,为什么传送石碑不是成对产出的呢?\\\n就我所知,把中间的传送核心换成末影辐光应该花不了多大力气。这样我可以不费吹灰之力地造出成堆的这些石碑了!", + "book.spectrum.guidebook.mod_integration.waystones.sharestones_recipe.text": "几乎可以搭配任意颜料使用", + + "book.spectrum.guidebook.mod_integration.dimensional_tears.name": "Dimensional Tears", + "book.spectrum.guidebook.mod_integration.dimensional_tears.about.text": "*末影人又搞事了!*", "book.spectrum.guidebook.forsaken_cathedral.page0.text": "*最后的里程碑*", "book.spectrum.guidebook.forsaken_cathedral.page1.text": "我的旅程,暂时到此为止了。\\\n\\\n这段路有时格外艰辛,但我也学到了很多。\\\n\\\n再见了,我的*多彩的世界*。", @@ -6021,8 +6030,6 @@ "advancements.spectrum.create_spectral_shard.description": "合成七彩碎片", "advancements.spectrum.enter_liquid_crystal.title": "液体的魔法", "advancements.spectrum.enter_liquid_crystal.description": "当你将自己沉浸在至今所学一切的结晶之中,会发生什么?", - "advancements.spectrum.gift_wet_lava_sponge.title": "烫手山芋", - "advancements.spectrum.gift_wet_lava_sponge.description": "将一个湿熔岩海绵扔给其他玩家", "advancements.spectrum.get_hit_while_wearing_full_suit_of_gemstone_armor.title": "强力超载", "advancements.spectrum.get_hit_while_wearing_full_suit_of_gemstone_armor.description": "在穿全套宝石晶盔甲时受到攻击", "advancements.spectrum.collect_mob_head_using_treasure_hunter.title": "摸不着头脑", From ddaa3f34df6ec3dc97631e7d09b352ecc0af7d60 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Wed, 12 Aug 2026 18:49:44 +0200 Subject: [PATCH 212/477] - simplified pastel node upgrade calculations a ton, making them more predicatable - Gather Nodes now have 2 upgrade slots (up from 1) - Each upgrade on a pastel node now has to be unique - overhauled and simplified `paste_upgrade` data. They are a lot easier to create now - removed `pastel_node_upgrades` item tag. Items are now checked on the fly based on pastel upgrade data --- .../PastelUpgradeSignature.java | 82 ++++++------------- .../api/pastel_network/PastelUpgradeable.java | 20 ++--- .../network/PastelTransmissionLogic.java | 5 +- .../pastel_network/nodes/PastelNodeBlock.java | 46 +++++++---- .../nodes/PastelNodeBlockEntity.java | 76 ++++++++--------- .../nodes/PastelNodeBlockEntityRenderer.java | 33 ++++---- .../pastel_network/nodes/PastelNodeType.java | 2 +- .../payloads/FluidPastelPayloadType.java | 4 +- .../payloads/ItemPastelPayloadType.java | 4 +- .../registries/SpectrumEventListeners.java | 15 +--- .../spectrum/registries/SpectrumItemTags.java | 1 - .../client/SpectrumClientEventListeners.java | 33 +++++--- .../resources/assets/spectrum/lang/en_us.json | 1 - .../resources/assets/spectrum/lang/ko_kr.json | 1 - .../resources/assets/spectrum/lang/ru_ru.json | 1 - .../resources/assets/spectrum/lang/zh_cn.json | 1 - .../midgame/upgrade_pastel_node.json | 4 +- .../pastel_upgrade/always_active.json | 1 - .../pastel_upgrade/always_inactive.json | 1 - .../spectrum/pastel_upgrade/inverted.json | 1 - .../spectrum/pastel_upgrade/lamp.json | 1 - .../spectrum/pastel_upgrade/light.json | 1 - .../spectrum/pastel_upgrade/rate.json | 3 +- .../spectrum/pastel_upgrade/sensor.json | 1 - .../pastel_upgrade/strong_filter.json | 3 +- .../spectrum/pastel_upgrade/strong_speed.json | 4 +- .../spectrum/pastel_upgrade/strong_stack.json | 4 +- .../spectrum/pastel_upgrade/trigger.json | 1 - .../spectrum/pastel_upgrade/weak_filter.json | 3 +- .../spectrum/pastel_upgrade/weak_speed.json | 4 +- .../spectrum/pastel_upgrade/weak_stack.json | 4 +- .../tags/item/pastel_node_upgrades.json | 18 ---- 32 files changed, 146 insertions(+), 233 deletions(-) delete mode 100644 src/main/resources/data/spectrum/tags/item/pastel_node_upgrades.json diff --git a/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java b/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java index 6d57978a4b..1e2c65f81a 100644 --- a/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java +++ b/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeSignature.java @@ -10,14 +10,15 @@ import net.minecraft.world.*; import net.minecraft.world.item.*; import net.minecraft.world.level.*; +import org.jspecify.annotations.*; public final class PastelUpgradeSignature { - public static Holder.Reference of(Level level, Item item) { + public static Holder.@Nullable Reference of(Level level, Item item) { return level.registryAccess().registry(SpectrumRegistryKeys.PASTEL_UPGRADE).get().holders() .filter(pastelUpgradeSignature -> pastelUpgradeSignature.value().upgradeItem.value().equals(item)) .findFirst() - .orElseThrow(() -> new IllegalArgumentException("Attempted to fetch an upgrade that does not exist")); + .orElse(null); } public enum RedstoneBehavior implements StringRepresentable { @@ -45,18 +46,15 @@ public String getSerializedName() { public static final Codec CODEC = RecordCodecBuilder.create((i -> i.group( ItemStack.ITEM_NON_AIR_CODEC.fieldOf("item").forGetter(c -> c.upgradeItem), Codec.STRING.fieldOf("name").forGetter(c -> c.name), - Codec.INT.optionalFieldOf("stack_mod", 0).forGetter(c -> c.stack), - Codec.INT.optionalFieldOf("speed_mod", 0).forGetter(c -> c.speed), - Codec.INT.optionalFieldOf("filter_row_mod", 0).forGetter(c -> c.slotRows), - Codec.FLOAT.optionalFieldOf("stack_multi", 1.0F).forGetter(c -> c.stackMult), - Codec.FLOAT.optionalFieldOf("speed_multi", 1.0F).forGetter(c -> c.speedMult), - Codec.FLOAT.optionalFieldOf("transfer_rate_mod", 1.0F).forGetter(c -> c.transferRateMult), + Codec.INT.optionalFieldOf("additional_filter_rows", 0).forGetter(c -> c.additionalFilterRows), + Codec.FLOAT.optionalFieldOf("transfer_count_multiplier", 1.0F).forGetter(c -> c.transferCountMultiplier), + Codec.FLOAT.optionalFieldOf("transfer_duration_multiplier", 1.0F).forGetter(c -> c.transferDurationMultiplier), + Codec.FLOAT.optionalFieldOf("transfer_cooldown_multiplier", 1.0F).forGetter(c -> c.transferCooldownMultiplier), Codec.BOOL.optionalFieldOf("light", false).forGetter(c -> c.light), Codec.BOOL.optionalFieldOf("trigger", false).forGetter(c -> c.triggerTransfer), Codec.BOOL.optionalFieldOf("lamp", false).forGetter(c -> c.lamp), Codec.BOOL.optionalFieldOf("sensor", false).forGetter(c -> c.sensor), - Category.CODEC.fieldOf("category").forGetter(c -> c.category), - RedstoneBehavior.CODEC.optionalFieldOf("redstone", RedstoneBehavior.NONE).forGetter(c -> c.redstone) + RedstoneBehavior.CODEC.optionalFieldOf("redstone", RedstoneBehavior.NONE).forGetter(c -> c.redstoneBehavior) ).apply(i, PastelUpgradeSignature::new))); public static final String INNER_RING_BASE_PATH = "textures/block/pastel_node_inner_ring_"; @@ -66,44 +64,40 @@ public String getSerializedName() { public final Holder upgradeItem; public final String name; public final ResourceLocation outerRing, innerRing; - public final int stack, speed, slotRows; - public final float stackMult, speedMult, transferRateMult; + public final int additionalFilterRows; + public final float transferCountMultiplier, transferDurationMultiplier, transferCooldownMultiplier; public final boolean light, triggerTransfer, lamp, sensor; - public final Category category; - public final RedstoneBehavior redstone; + public final RedstoneBehavior redstoneBehavior; public final RedstoneStateModifier preProcessor; public final RedstoneStateModifier postProcessor; - private PastelUpgradeSignature(Holder upgradeItem, String name, int stack, int speed, int slotRows, float stackMult, float speedMult, float transferRateMult, boolean light, boolean triggerTransfer, boolean lamp, boolean sensor, Category category, RedstoneBehavior redstone) { - this(upgradeItem, name, stack, speed, slotRows, stackMult, speedMult, transferRateMult, light, category == Category.REDSTONE || triggerTransfer, lamp, sensor, category, redstone, switch (redstone) { + private PastelUpgradeSignature(Holder upgradeItem, String name, int additionalFilterRows, float transferCountMultiplier, float transferDurationMultiplier, float transferCooldownMultiplier, boolean light, boolean triggerTransfer, boolean lamp, boolean sensor, RedstoneBehavior redstoneBehavior) { + this(upgradeItem, name, additionalFilterRows, transferCountMultiplier, transferDurationMultiplier, transferCooldownMultiplier, light, redstoneBehavior != RedstoneBehavior.NONE || triggerTransfer, lamp, sensor, redstoneBehavior, switch (redstoneBehavior) { case ALWAYS_ACTIVE -> (RedstoneStateModifier) context -> InteractionResult.SUCCESS; case ALWAYS_INACTIVE -> (RedstoneStateModifier) context -> InteractionResult.FAIL; default -> RedstoneStateModifier.PASS; - }, switch (redstone) { + }, switch (redstoneBehavior) { case INVERTED -> (RedstoneStateModifier) context -> context.active() ? InteractionResult.FAIL : InteractionResult.SUCCESS; default -> RedstoneStateModifier.PASS; }); } - private PastelUpgradeSignature(Holder upgradeItem, String name, int stack, int speed, int slotRows, float stackMult, float speedMult, float transferRateMult, boolean light, boolean triggerTransfer, boolean lamp, boolean sensor, Category category, RedstoneBehavior redstone, RedstoneStateModifier preProcessor, RedstoneStateModifier postProcessor) { + private PastelUpgradeSignature(Holder upgradeItem, String name, int additionalFilterRows, float transferCountMultiplier, float transferDurationMultiplier, float transferCooldownMultiplier, boolean light, boolean triggerTransfer, boolean lamp, boolean sensor, RedstoneBehavior redstoneBehavior, RedstoneStateModifier preProcessor, RedstoneStateModifier postProcessor) { this.upgradeItem = upgradeItem; this.name = name; this.innerRing = SpectrumCommon.locate(INNER_RING_BASE_PATH + name + ".png"); - this.outerRing = category == Category.REDSTONE ? SpectrumCommon.locate(REDSTONE_RING_BASE_PATH + name + ".png") : SpectrumCommon.locate(OUTER_RING_BASE_PATH + name + ".png"); - this.stack = stack; - this.speed = speed; - this.slotRows = slotRows; - this.stackMult = stackMult; - this.speedMult = speedMult; - this.transferRateMult = transferRateMult; + this.outerRing = redstoneBehavior != RedstoneBehavior.NONE ? SpectrumCommon.locate(REDSTONE_RING_BASE_PATH + name + ".png") : SpectrumCommon.locate(OUTER_RING_BASE_PATH + name + ".png"); + this.additionalFilterRows = additionalFilterRows; + this.transferCountMultiplier = transferCountMultiplier; + this.transferDurationMultiplier = transferDurationMultiplier; + this.transferCooldownMultiplier = transferCooldownMultiplier; this.light = light; this.triggerTransfer = triggerTransfer; this.lamp = lamp; - this.category = category; this.preProcessor = preProcessor; this.postProcessor = postProcessor; this.sensor = sensor; - this.redstone = redstone; + this.redstoneBehavior = redstoneBehavior; } public ResourceLocation outerRing() { @@ -114,6 +108,10 @@ public ResourceLocation innerRing() { return innerRing; } + public boolean goesToRedstoneRing() { + return redstoneBehavior != RedstoneBehavior.NONE; + } + /** * SUCCESS = on

* FAIL = off

@@ -129,34 +127,4 @@ public interface RedstoneStateModifier { public record RedstoneContext(PastelUpgradeable upgradeable, Level world, BlockPos pos, boolean active) { } - public enum Category implements StringRepresentable { - SIMPLE("simple", false, false), - NON_COMPOUNDING("non_compounding", true, false), - REDSTONE("redstone", true, true); - - public static final Codec CODEC = StringRepresentable.fromEnum(Category::values); - - private final String name; - private final boolean nonCompounding; - private final boolean isRedstone; - - Category(String name, boolean nonCompounding, boolean isRedstone) { - this.name = name; - this.nonCompounding = nonCompounding; - this.isRedstone = isRedstone; - } - - public boolean compoundsWith(Category other) { - return nonCompounding ? false : other == this; - } - - public boolean isRedstone() { - return isRedstone; - } - - @Override - public String getSerializedName() { - return name; - } - } } diff --git a/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeable.java b/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeable.java index 950a1060c1..f45de4c72d 100644 --- a/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeable.java +++ b/src/main/java/de/dafuqs/spectrum/api/pastel_network/PastelUpgradeable.java @@ -18,23 +18,13 @@ default void apply(PastelUpgradeSignature upgrade, @Nullable PastelUpgradeSignat if (upgrade.sensor) markSensor(); - if (upgrade.category.isRedstone()) + if (upgrade.goesToRedstoneRing()) return; - - if (previous != null && previous.category.compoundsWith(upgrade.category)) { - applyCompounding(upgrade); - } else { - applySimple(upgrade); - } - - applySlotUpgrade(upgrade); + + applySignature(upgrade); } - - void applyCompounding(PastelUpgradeSignature upgrade); - - void applySimple(PastelUpgradeSignature upgrade); - - void applySlotUpgrade(PastelUpgradeSignature upgrade); + + void applySignature(PastelUpgradeSignature upgrade); void markLit(); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java index 8894c74636..b030d70617 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java @@ -17,7 +17,6 @@ import java.util.*; import java.util.function.*; -@SuppressWarnings("UnstableApiUsage") public class PastelTransmissionLogic { public enum TransferMode { @@ -26,9 +25,9 @@ public enum TransferMode { PUSH_PULL } - public static final int DEFAULT_MAX_TRANSFER_AMOUNT = 1; + public static final int DEFAULT_MAX_TRANSFER_COUNT_MULTIPLIER = 1; public static final int DEFAULT_TRANSFER_TICKS_PER_NODE = 30; - public static final int DEFAULT_TRANSFER_RATE = 20; + public static final int DEFAULT_TRANSFER_COOLDOWN_TICKS = 20; private final ServerPastelNetwork network; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java index beb8188425..4c515bfc80 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlock.java @@ -3,6 +3,7 @@ import com.mojang.serialization.*; import de.dafuqs.revelationary.api.advancements.*; import de.dafuqs.spectrum.api.block.*; +import de.dafuqs.spectrum.api.pastel_network.*; import de.dafuqs.spectrum.blocks.decoration.*; import de.dafuqs.spectrum.blocks.pastel_network.*; import de.dafuqs.spectrum.blocks.pastel_network.network.*; @@ -138,15 +139,15 @@ public BlockState updateShape(BlockState state, Direction direction, BlockState } @Override - public ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { - PastelNodeBlockEntity blockEntity = getBlockEntity(world, pos); + public ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { + PastelNodeBlockEntity blockEntity = getBlockEntity(level, pos); if (blockEntity == null) { - return super.useItemOn(stack, state, world, pos, player, hand, hit); + return super.useItemOn(stack, state, level, pos, player, hand, hit); } if (player.isShiftKeyDown() && stack.isEmpty()) { if (AdvancementHelper.hasAdvancement(player, SpectrumAdvancements.PASTEL_NODE_UPGRADING)) { - if (!world.isClientSide()) { + if (!level.isClientSide()) { var removed = blockEntity.tryRemoveUpgrade(); if (!removed.isEmpty()) { if (!player.getAbilities().instabuild) { @@ -157,14 +158,19 @@ public ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level blockEntity.updateInClientWorld(); } } - return ItemInteractionResult.sidedSuccess(world.isClientSide()); + return ItemInteractionResult.sidedSuccess(level.isClientSide()); } return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; - } else if (player.isCreative() && stack.is(SpectrumItems.PAINTBRUSH)) { - sendDebugMessage(world, pos, player, blockEntity); - return ItemInteractionResult.sidedSuccess(world.isClientSide()); - } else if (AdvancementHelper.hasAdvancement(player, SpectrumAdvancements.PASTEL_NODE_UPGRADING) && stack.is(SpectrumItemTags.PASTEL_NODE_UPGRADES)) { - if (!world.isClientSide() && blockEntity.tryInteractRings(stack, pastelNodeType)) { + } + + if (player.isCreative() && stack.is(SpectrumItems.PAINTBRUSH)) { + sendDebugMessage(level, pos, player, blockEntity); + return ItemInteractionResult.sidedSuccess(level.isClientSide()); + } + + Holder.@Nullable Reference upgradeSignature = PastelUpgradeSignature.of(level, stack.getItem()); + if (AdvancementHelper.hasAdvancement(player, SpectrumAdvancements.PASTEL_NODE_UPGRADING) && upgradeSignature != null) { + if (!level.isClientSide() && blockEntity.applyUpgrade(upgradeSignature)) { SpectrumAdvancementCriteria.PASTEL_NODE_UPGRADING.trigger((ServerPlayer) player, stack); if (!player.getAbilities().instabuild) stack.shrink(1); @@ -173,18 +179,22 @@ public ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level blockEntity.updateInClientWorld(); } - world.playLocalSound(pos, SpectrumSoundEvents.MEDIUM_CRYSTAL_RING, SoundSource.BLOCKS, 0.25F, 0.9F + world.getRandom().nextFloat() * 0.2F, true); - return ItemInteractionResult.sidedSuccess(world.isClientSide()); - } else if (tryColorUsingStackInHand(stack, world, pos, player, hand)) { - return ItemInteractionResult.sidedSuccess(world.isClientSide()); - } else if (this.pastelNodeType.usesFilters()) { - if (!world.isClientSide()) { + level.playLocalSound(pos, SpectrumSoundEvents.MEDIUM_CRYSTAL_RING, SoundSource.BLOCKS, 0.25F, 0.9F + level.getRandom().nextFloat() * 0.2F, true); + return ItemInteractionResult.sidedSuccess(level.isClientSide()); + } + + if (tryColorUsingStackInHand(stack, level, pos, player, hand)) { + return ItemInteractionResult.sidedSuccess(level.isClientSide()); + } + + if (this.pastelNodeType.usesFilters()) { + if (!level.isClientSide()) { player.openMenu(blockEntity); } - return ItemInteractionResult.sidedSuccess(world.isClientSide()); + return ItemInteractionResult.sidedSuccess(level.isClientSide()); } - return super.useItemOn(stack, state, world, pos, player, hand, hit); + return super.useItemOn(stack, state, level, pos, player, hand, hit); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java index d2d5c2a035..3377d08877 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntity.java @@ -59,9 +59,9 @@ public class PastelNodeBlockEntity extends BlockEntity implements FilterConfigur // upgrade impl stuff protected boolean lit, triggerTransfer, triggered, waiting, lamp, sensor, upgradesInitialized; - protected int transferCount = PastelTransmissionLogic.DEFAULT_MAX_TRANSFER_AMOUNT; - protected int transferTime = PastelTransmissionLogic.DEFAULT_TRANSFER_TICKS_PER_NODE; - protected int transferRate = PastelTransmissionLogic.DEFAULT_TRANSFER_RATE; + protected int transferCountMultiplier = PastelTransmissionLogic.DEFAULT_MAX_TRANSFER_COUNT_MULTIPLIER; + protected int transferDurationTicks = PastelTransmissionLogic.DEFAULT_TRANSFER_TICKS_PER_NODE; + protected int transferCooldownTicks = PastelTransmissionLogic.DEFAULT_TRANSFER_COOLDOWN_TICKS; protected int filterSlotRows = DEFAULT_FILTER_SLOT_ROWS; protected boolean networkInitialized = false; @@ -155,10 +155,9 @@ public Optional getRedstoneRing() { } // outer goes first, then inner, then redstone - public boolean tryInteractRings(ItemStack item, PastelNodeType type) { - var upgrade = PastelUpgradeSignature.of(getLevel(), item.getItem()); - - if (upgrade.value().category.isRedstone()) { + // we do not allow duplicate upgrades + public boolean applyUpgrade(Holder.Reference upgrade) { + if (upgrade.value().goesToRedstoneRing()) { if (redstoneRing.isEmpty()) { redstoneRing = Optional.of(upgrade); return true; @@ -167,10 +166,18 @@ public boolean tryInteractRings(ItemStack item, PastelNodeType type) { return false; } - if (outerRing.isEmpty() && type.hasOuterRing()) { + if (outerRing.isEmpty() && getNodeType().hasOuterRing()) { + if(innerRing.isPresent() && innerRing.get().equals(upgrade)) { + return false; + } + outerRing = Optional.of(upgrade); return true; } else if (innerRing.isEmpty()) { + if(outerRing.isPresent() && outerRing.get().equals(upgrade)) { + return false; + } + innerRing = Optional.of(upgrade); return true; } @@ -201,23 +208,23 @@ public ItemStack tryRemoveUpgrade() { } public void updateUpgrades() { - transferCount = PastelTransmissionLogic.DEFAULT_MAX_TRANSFER_AMOUNT; - transferTime = PastelTransmissionLogic.DEFAULT_TRANSFER_TICKS_PER_NODE; - var oldFilterSlotCount = filterSlotRows; + transferCountMultiplier = PastelTransmissionLogic.DEFAULT_MAX_TRANSFER_COUNT_MULTIPLIER; + transferDurationTicks = PastelTransmissionLogic.DEFAULT_TRANSFER_TICKS_PER_NODE; + transferCooldownTicks = PastelTransmissionLogic.DEFAULT_TRANSFER_COOLDOWN_TICKS; + var oldFilterSlotRows = filterSlotRows; filterSlotRows = DEFAULT_FILTER_SLOT_ROWS; triggerTransfer = false; lit = false; lamp = false; sensor = false; - //First one processed can't compound because it has nothing to compound on outerRing.ifPresent(r -> apply(r.value(), null)); - innerRing.ifPresent(r -> apply(r.value(), outerRing.get().value())); + innerRing.ifPresent(r -> apply(r.value(), outerRing.map(Holder.Reference::value).orElse(null))); redstoneRing.ifPresent(r -> apply(r.value(), null)); // Sanity - transferCount = Math.max(transferCount, 1); - transferTime = Mth.clamp(transferTime, 2, 100); + transferCountMultiplier = Math.max(transferCountMultiplier, 1); + transferDurationTicks = Mth.clamp(transferDurationTicks, 2, 100); filterSlotRows = Mth.clamp(filterSlotRows, 1, 5); if (lit && lamp) { @@ -228,7 +235,7 @@ public void updateUpgrades() { level.setBlockAndUpdate(worldPosition, getBlockState().setValue(BlockStateProperties.LIT, lit)); } - if (filterSlotRows < oldFilterSlotCount) { + if (filterSlotRows < oldFilterSlotRows) { for (int i = getDrawnSlots(); i < filterItems.size(); i++) { updateTagFilteringItems(); filterItems.set(i, ItemStack.EMPTY); @@ -247,16 +254,16 @@ public void notifySensor() { } } - public int getMaxTransferredAmount() { - return transferCount; + public int transferMultiplier() { + return transferCountMultiplier; } - public int getTransferTime() { - return transferTime; + public int getTransferDurationTicks() { + return transferDurationTicks; } - public int getTransferRate() { - return transferRate; + public int getTransferCooldownTicks() { + return transferCooldownTicks; } public float getRedstoneAlphaMult() { @@ -299,8 +306,8 @@ public boolean isEnabled() { } public boolean cooldownExceededTo(PastelNodeBlockEntity otherNode) { - long thisNextTransferTime = this.lastTransferTick + this.getTransferRate(); - long otherNextTransferTime = otherNode.lastTransferTick + otherNode.getTransferRate(); + long thisNextTransferTime = this.lastTransferTick + this.getTransferCooldownTicks(); + long otherNextTransferTime = otherNode.lastTransferTick + otherNode.getTransferCooldownTicks(); long time = this.getLevel().getGameTime(); return time >= thisNextTransferTime && time >= otherNextTransferTime; @@ -744,22 +751,11 @@ public boolean isSensor() { } @Override - public void applySlotUpgrade(PastelUpgradeSignature upgrade) { - filterSlotRows += getNodeType().hasOuterRing() ? upgrade.slotRows : upgrade.slotRows * 2; - } - - @Override - public void applySimple(PastelUpgradeSignature upgrade) { - transferCount += upgrade.stack; - transferTime += upgrade.speed; - transferRate *= upgrade.transferRateMult; - } - - @Override - public void applyCompounding(PastelUpgradeSignature upgrade) { - transferCount = Math.round(transferCount * upgrade.stackMult); - transferTime = Math.round(transferTime * upgrade.speedMult); - transferRate = Math.round(transferRate * upgrade.transferRateMult); + public void applySignature(PastelUpgradeSignature upgrade) { + filterSlotRows += getNodeType().hasOuterRing() ? upgrade.additionalFilterRows : upgrade.additionalFilterRows * 2; + transferCountMultiplier = Math.round(transferCountMultiplier * upgrade.transferCountMultiplier); + transferDurationTicks = Math.round(transferDurationTicks * upgrade.transferDurationMultiplier); + transferCooldownTicks = Math.round(transferCooldownTicks * upgrade.transferCooldownMultiplier); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntityRenderer.java index 5a0731cab6..9b8512ed3e 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeBlockEntityRenderer.java @@ -20,14 +20,11 @@ public class PastelNodeBlockEntityRenderer implements BlockEntityRenderer CRYSTAL_CONNECTION; - case STORAGE -> CRYSTAL_STORAGE; - case PROVIDER -> CRYSTAL_PROVIDER; - case SENDER -> CRYSTAL_SENDER; - case GATHER -> CRYSTAL_GATHER; - }; - var heightMod = 0.5F; switch (node.getState()) { @@ -136,7 +125,8 @@ public void render(PastelNodeBlockEntity node, float tickDelta, PoseStack matric RenderHelper.renderFlatTransWithZYOffsetAndColor(matrices, redstoneRing, true, 5F + ringHeight, 15F, node.ringAlpha * node.getRedstoneAlphaMult(), 1F, overlay, color.x, color.y, color.z); } - if (crystal.hasOuterRing()) { + PastelNodeType nodeType = node.getNodeType(); + if (nodeType.hasOuterRing()) { var outerRing = vertexConsumers.getBuffer(RenderType.entityTranslucent(node.getOuterRing().map(PastelUpgradeSignature::outerRing).orElse(OUTER_RING))); if (node.getOuterRing().isPresent()) { RenderHelper.renderFlatTransWithZYOffset(matrices, outerRing, true, 5.75F + ringHeight * 2, 11F, node.ringAlpha, 1F, overlay); @@ -147,7 +137,14 @@ public void render(PastelNodeBlockEntity node, float tickDelta, PoseStack matric // CRYSTAL matrices.translate(0.0, node.crystalHeight, 0.0); - blockRenderManager.getModelRenderer().renderModel(matrices.last(), vertexConsumers.getBuffer(Sheets.translucentCullBlockSheet()), null, blockRenderManager.getBlockModelShaper().getModelManager().getModel(crystal.crystal), 1.0F, 1.0F, 1.0F, LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY); + ModelResourceLocation crystalLocation = switch (nodeType) { + case CONNECTION -> CRYSTAL_CONNECTION; + case STORAGE -> CRYSTAL_STORAGE; + case PROVIDER -> CRYSTAL_PROVIDER; + case SENDER -> CRYSTAL_SENDER; + case GATHER -> CRYSTAL_GATHER; + }; + blockRenderManager.getModelRenderer().renderModel(matrices.last(), vertexConsumers.getBuffer(Sheets.translucentCullBlockSheet()), null, blockRenderManager.getBlockModelShaper().getModelManager().getModel(crystalLocation), 1.0F, 1.0F, 1.0F, LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY); matrices.popPose(); } diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeType.java index 8767e33eb7..bb6851cba9 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/nodes/PastelNodeType.java @@ -7,7 +7,7 @@ public enum PastelNodeType implements StringRepresentable { STORAGE(true, true), PROVIDER(false, true), SENDER(false, true), - GATHER(true, false); + GATHER(true, true); private final boolean usesFilters, hasOuterRing; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java index 2642b67131..1175dead9f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/FluidPastelPayloadType.java @@ -63,7 +63,7 @@ private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEn continue; } - int transferLimit = Math.max(sourceNode.getMaxTransferredAmount(), destinationNode.getMaxTransferredAmount()) * 50; + int transferLimit = Math.max(sourceNode.transferMultiplier(), destinationNode.transferMultiplier()) * 50; FluidStack proposedStack = new FluidStack(sourceFluid.getFluid(), transferLimit + (int) underwayCount); int fluidSpace = destinationHandler.fill(proposedStack, IFluidHandler.FluidAction.SIMULATE); int amountToSend = Math.min(transferLimit, fluidSpace); @@ -80,7 +80,7 @@ private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEn FluidStack drainedAmount = sourceHandler.drain(sourceFluid.copyWithAmount(amountToSend), IFluidHandler.FluidAction.EXECUTE); PastelPayload payload = new FluidPastelPayload(drainedAmount); - PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), payload, sourceNode.getTransferTime()); + PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), payload, sourceNode.getTransferDurationTicks()); logic.addTransmission(sourceNode, destinationNode, transferMode, transmission); destinationNode.addUnderway(getPayloadType().getKey(), drainedAmount.getAmount()); diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java index 6a9f21fb13..c5f1f48f38 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/ItemPastelPayloadType.java @@ -60,7 +60,7 @@ public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEnti private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, IItemHandler sourceStorage, PastelNodeBlockEntity destinationNode, IItemHandler destinationStorage, PastelTransmissionLogic.TransferMode transferMode) { long underwayCount = destinationNode.getUnderway(getPayloadType().getKey()); Predicate filter = sourceNode.getTransferFilterTo(destinationNode); - int transferLimit = Math.max(sourceNode.getMaxTransferredAmount(), destinationNode.getMaxTransferredAmount()); + int transferLimit = Math.max(sourceNode.transferMultiplier(), destinationNode.transferMultiplier()); for (int slotId = 0; slotId < sourceStorage.getSlots(); slotId++) { ItemStack stack = sourceStorage.extractItem(slotId, transferLimit, true); @@ -97,7 +97,7 @@ private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEn // Send the items PastelPayload payload = new ItemPastelPayload(stack.copyWithCount(extracted)); - PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), payload, sourceNode.getTransferTime()); + PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), payload, sourceNode.getTransferDurationTicks()); logic.addTransmission(sourceNode, destinationNode, transferMode, transmission); destinationNode.addUnderway(getPayloadType().getKey(), extracted); return true; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index 9db7f397b1..60d9cbe07f 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -10,6 +10,7 @@ import de.dafuqs.spectrum.attachment_types.*; import de.dafuqs.spectrum.blocks.idols.*; import de.dafuqs.spectrum.blocks.pastel_network.*; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.entity.spawners.*; @@ -93,20 +94,6 @@ public static void modifyComponents(ModifyDefaultComponentsEvent event) { event.modify(Items.NETHER_STAR, builder -> builder.set(SpectrumDataComponentTypes.DAMAGE_IMMUNE.get(), List.of(DamageTypeTags.IS_EXPLOSION, DamageTypeTags.IS_FIRE))); } - @SubscribeEvent - public static void registerAdditional(ModelEvent.RegisterAdditional event) { - event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/connection_node_crystal"))); - event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/provider_node_crystal"))); - event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/sender_node_crystal"))); - event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/storage_node_crystal"))); - event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/gather_node_crystal"))); - - event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/pastel_item_base"))); - event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/pastel_ink_base"))); - event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/pastel_fluid_base"))); - event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/pastel_omni_base"))); - } - @SubscribeEvent public static void registerCauldronFluids(RegisterCauldronFluidContentEvent event) { event.register(SpectrumBlocks.LIQUID_CRYSTAL_CAULDRON.get(), SpectrumFluids.LIQUID_CRYSTAL.get(), FluidType.BUCKET_VOLUME, null); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemTags.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemTags.java index 8f59ff2311..e916f63d5a 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemTags.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemTags.java @@ -25,7 +25,6 @@ public class SpectrumItemTags { public static final TagKey KINDLING_FOOD = spectrum("kindling_food"); public static final TagKey REQUIRES_OMNI_ACCELERATOR_PVP_ENABLED = spectrum("requires_omni_accelerator_pvp_enabled"); public static final TagKey EMISSIVE = spectrum("emissive"); - public static final TagKey PASTEL_NODE_UPGRADES = spectrum("pastel_node_upgrades"); public static final TagKey TAG_FILTERING_ITEMS = spectrum("tag_filtering_items"); public static final TagKey PLAYER_ATTRIBUTED_PLACEMENT = spectrum("player_attributed_placement"); public static final TagKey NATURES_STAFF_CONSUMABLE = spectrum("consumable/natures_staff"); diff --git a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java index 36a9739276..b8c02f10b2 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumClientEventListeners.java @@ -9,6 +9,7 @@ import de.dafuqs.spectrum.api.interaction.*; import de.dafuqs.spectrum.attachment_types.*; import de.dafuqs.spectrum.blocks.pastel_network.*; +import de.dafuqs.spectrum.blocks.pastel_network.nodes.*; import de.dafuqs.spectrum.config.*; import de.dafuqs.spectrum.data_loaders.client.*; import de.dafuqs.spectrum.deeper_down.client.*; @@ -30,11 +31,13 @@ import net.minecraft.client.model.geom.*; import net.minecraft.client.multiplayer.*; import net.minecraft.client.renderer.*; +import net.minecraft.client.resources.model.*; import net.minecraft.core.*; import net.minecraft.core.component.*; import net.minecraft.core.particles.*; import net.minecraft.core.registries.*; import net.minecraft.network.chat.*; +import net.minecraft.resources.*; import net.minecraft.server.packs.resources.*; import net.minecraft.util.*; import net.minecraft.world.*; @@ -65,18 +68,24 @@ public class SpectrumClientEventListeners { private static boolean lookingAtUniverseSpyholeInitialEffectPlayed = false; public static void register(IEventBus modBus) { - /* TODO: port - //DynamicItemRenderer.registerDynamicItemRenderer(SpectrumBlocks.BOTTOMLESS_BUNDLE.asItem(), BottomlessBundleItem.Renderer::new); - //DynamicItemRenderer.registerDynamicItemRenderer(SpectrumItems.OMNI_ACCELERATOR.asItem(), OmniAcceleratorItem.Renderer::new); - /*ModelLoadingPlugin.register((ctx) -> { - ctx.modifyModelAfterBake().register((orig, c) -> { - ModelResourceLocation id = c.topLevelId(); - if (id instanceof ModelResourceLocation mid && CUSTOM_ITEM_MODELS.contains(mid)) { - return new DynamicRenderModel(orig); - } - return orig; - }); - });*/ + + } + + @SubscribeEvent + public static void registerAdditional(ModelEvent.RegisterAdditional event) { + event.register(PastelNodeBlockEntityRenderer.CRYSTAL_CONNECTION); + event.register(PastelNodeBlockEntityRenderer.CRYSTAL_PROVIDER); + event.register(PastelNodeBlockEntityRenderer.CRYSTAL_SENDER); + event.register(PastelNodeBlockEntityRenderer.CRYSTAL_STORAGE); + event.register(PastelNodeBlockEntityRenderer.CRYSTAL_GATHER); + + event.register(ModelResourceLocation.standalone(PastelNodeBases.BASE_LOCATION)); + event.register(ModelResourceLocation.standalone(PastelNodeBases.FLUID_LOCATION)); + event.register(ModelResourceLocation.standalone(PastelNodeBases.INK_LOCATION)); + event.register(ModelResourceLocation.standalone(PastelNodeBases.OMNI_LOCATION)); + event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/pastel_ink_base"))); + event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/pastel_fluid_base"))); + event.register(ModelResourceLocation.standalone(SpectrumCommon.locate("technical/pastel_omni_base"))); } @SubscribeEvent diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index acddedc022..acf0533285 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -5717,7 +5717,6 @@ "tag.spectrum.onyx_ores": "Onyx Ores", "tag.spectrum.orange_logs": "Orange Logs", "tag.spectrum.ores": "Ores", - "tag.spectrum.pastel_node_upgrades": "Pastel Node Upgrades", "tag.spectrum.pedestals": "Pedestals", "tag.spectrum.pickaxes": "Pickaxes", "tag.spectrum.pigment_blocks": "Pigment Blocks", diff --git a/src/main/resources/assets/spectrum/lang/ko_kr.json b/src/main/resources/assets/spectrum/lang/ko_kr.json index 0b11f7c918..55385f0fa0 100644 --- a/src/main/resources/assets/spectrum/lang/ko_kr.json +++ b/src/main/resources/assets/spectrum/lang/ko_kr.json @@ -5714,7 +5714,6 @@ "tag.spectrum.onyx_ores": "오닉스 광석", "tag.spectrum.orange_logs": "주황색 원목", "tag.spectrum.ores": "광석", - "tag.spectrum.pastel_node_upgrades": "파스텔 노드 강화", "tag.spectrum.pedestals": "받침대", "tag.spectrum.pickaxes": "곡괭이", "tag.spectrum.pigment_blocks": "안료 블록", diff --git a/src/main/resources/assets/spectrum/lang/ru_ru.json b/src/main/resources/assets/spectrum/lang/ru_ru.json index f9b657289c..946410276f 100644 --- a/src/main/resources/assets/spectrum/lang/ru_ru.json +++ b/src/main/resources/assets/spectrum/lang/ru_ru.json @@ -5699,7 +5699,6 @@ "tag.spectrum.onyx_ores": "Ониксовые руды", "tag.spectrum.orange_logs": "Оранжевые брёвна", "tag.spectrum.ores": "Руды", - "tag.spectrum.pastel_node_upgrades": "Улучшения вайдовой сети", "tag.spectrum.pedestals": "Пьедесталы", "tag.spectrum.pickaxes": "Кирки", "tag.spectrum.pigment_blocks": "Пигментные блоки", diff --git a/src/main/resources/assets/spectrum/lang/zh_cn.json b/src/main/resources/assets/spectrum/lang/zh_cn.json index c9b2f26c94..5bf4eedd57 100644 --- a/src/main/resources/assets/spectrum/lang/zh_cn.json +++ b/src/main/resources/assets/spectrum/lang/zh_cn.json @@ -3535,7 +3535,6 @@ "tag.spectrum.midnight_solution_converted": "转换后的午夜溶液", "tag.spectrum.resplendent_feathers": "龙翎", "tag.spectrum.emissive": "自发光材质物品", - "tag.spectrum.pastel_node_upgrades": "绘彩节点升级用品", "tag.spectrum.tag_filtering_items": "标签筛选物品", "tag.spectrum.unlocks_bag_of_holding": "解锁手持末影袋", diff --git a/src/main/resources/data/spectrum/advancement/midgame/upgrade_pastel_node.json b/src/main/resources/data/spectrum/advancement/midgame/upgrade_pastel_node.json index 03fcf21ad9..6c8d929753 100644 --- a/src/main/resources/data/spectrum/advancement/midgame/upgrade_pastel_node.json +++ b/src/main/resources/data/spectrum/advancement/midgame/upgrade_pastel_node.json @@ -14,9 +14,7 @@ "criteria": { "applied_any_upgrade": { "trigger": "spectrum:pastel_node_upgrade", - "conditions": { - "input": "#spectrum:pastel_node_upgrades" - } + "conditions": {} }, "gotten_previous": { "trigger": "revelationary:advancement_gotten", diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/always_active.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/always_active.json index 367c0f422b..dc3794df16 100644 --- a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/always_active.json +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/always_active.json @@ -1,6 +1,5 @@ { "name": "always_active", - "category": "redstone", "item": "spectrum:pure_redstone", "redstone": "always_active" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/always_inactive.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/always_inactive.json index c377587712..68f48cc627 100644 --- a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/always_inactive.json +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/always_inactive.json @@ -1,6 +1,5 @@ { "name": "always_inactive", - "category": "redstone", "item": "spectrum:pure_lapis", "redstone": "always_inactive" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/inverted.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/inverted.json index e2cc459b37..958ab6b336 100644 --- a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/inverted.json +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/inverted.json @@ -1,6 +1,5 @@ { "name": "inverted", - "category": "redstone", "item": "spectrum:pure_coal", "redstone": "inverted" } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/lamp.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/lamp.json index ea63b7b32f..bc90cb24b6 100644 --- a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/lamp.json +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/lamp.json @@ -1,6 +1,5 @@ { "name": "lamp", - "category": "redstone", "item": "spectrum:pure_glowstone", "lamp": true } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/light.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/light.json index eff2b05264..b91bdd9bb8 100644 --- a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/light.json +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/light.json @@ -1,6 +1,5 @@ { "name": "light", - "category": "non_compounding", "item": "spectrum:shimmerstone_gem", "light": true } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/rate.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/rate.json index b2903ff90b..6c0aaa59f6 100644 --- a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/rate.json +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/rate.json @@ -1,6 +1,5 @@ { "name": "rate", - "category": "non_compounding", "item": "spectrum:resonance_shard", - "transfer_rate_mod": 0.5 + "transfer_cooldown_multiplier": 0.5 } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/sensor.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/sensor.json index 892fb71ec2..5d198214e0 100644 --- a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/sensor.json +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/sensor.json @@ -1,6 +1,5 @@ { "name": "sensor", - "category": "redstone", "item": "spectrum:pure_echo", "sensor": true } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_filter.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_filter.json index dbd50a95a0..839e534599 100644 --- a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_filter.json +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_filter.json @@ -1,6 +1,5 @@ { "name": "strong_filter", - "category": "simple", "item": "spectrum:pure_azurite", - "filter_row_mod": 2 + "additional_filter_rows": 2 } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_speed.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_speed.json index b97f66c9e7..a029b441bb 100644 --- a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_speed.json +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_speed.json @@ -1,7 +1,5 @@ { "name": "strong_speed", - "category": "simple", "item": "spectrum:pure_malachite", - "speed_mod": -10, - "speed_multi": 0.5 + "transfer_duration_multiplier": 0.5 } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_stack.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_stack.json index ab10c30beb..c790a46b1a 100644 --- a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_stack.json +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/strong_stack.json @@ -1,7 +1,5 @@ { "name": "strong_stack", - "category": "simple", "item": "spectrum:pure_bloodstone", - "stack_mod": 15, - "stack_multi": 4 + "transfer_count_multiplier": 16.0 } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/trigger.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/trigger.json index 52a58bdbe2..5958e086a0 100644 --- a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/trigger.json +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/trigger.json @@ -1,6 +1,5 @@ { "name": "trigger", - "category": "redstone", "item": "spectrum:pure_quartz", "trigger": true } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_filter.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_filter.json index 8c034900cc..0df3ba3e05 100644 --- a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_filter.json +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_filter.json @@ -1,6 +1,5 @@ { "name": "weak_filter", - "category": "simple", "item": "spectrum:raw_azurite", - "filter_row_mod": 1 + "additional_filter_rows": 1 } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_speed.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_speed.json index 6078a577ed..7ccc40a1af 100644 --- a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_speed.json +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_speed.json @@ -1,7 +1,5 @@ { "name": "weak_speed", - "category": "simple", "item": "spectrum:raw_malachite", - "speed_mod": -5, - "speed_multi": 0.8 + "transfer_duration_multiplier": 0.75 } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_stack.json b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_stack.json index 1b74aa8db9..5909ae4ddd 100644 --- a/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_stack.json +++ b/src/main/resources/data/spectrum/spectrum/pastel_upgrade/weak_stack.json @@ -1,7 +1,5 @@ { "name": "weak_stack", - "category": "simple", "item": "spectrum:raw_bloodstone", - "stack_mod": 3, - "stack_multi": 2 + "transfer_count_multiplier": 4.0 } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/tags/item/pastel_node_upgrades.json b/src/main/resources/data/spectrum/tags/item/pastel_node_upgrades.json deleted file mode 100644 index 57fe092ce8..0000000000 --- a/src/main/resources/data/spectrum/tags/item/pastel_node_upgrades.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "values": [ - "spectrum:raw_bloodstone", - "spectrum:pure_bloodstone", - "spectrum:raw_azurite", - "spectrum:pure_azurite", - "spectrum:raw_malachite", - "spectrum:pure_malachite", - "spectrum:resonance_shard", - "spectrum:shimmerstone_gem", - "spectrum:pure_redstone", - "spectrum:pure_lapis", - "spectrum:pure_quartz", - "spectrum:pure_coal", - "spectrum:pure_echo", - "spectrum:pure_glowstone" - ] -} \ No newline at end of file From 3151f45143c0aa30cb48b60647dcd96b973b54f1 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Thu, 13 Aug 2026 09:19:29 +0200 Subject: [PATCH 213/477] fix #945: Bottling decay blocks with 1 bottle in hand deletes both the bottle and the decay --- .../registries/SpectrumEventListeners.java | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index 60d9cbe07f..3df66dd119 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -420,7 +420,7 @@ private static void mobEffectRemoval(MobEffectEvent.Remove event) { } @SubscribeEvent - private static void onIncomingDamage(PlayerInteractEvent.RightClickBlock event) { + private static void onRightClickBlock(UseItemOnBlockEvent event) { ItemStack handStack = event.getItemStack(); if(!handStack.is(Items.GLASS_BOTTLE)) { return; @@ -428,25 +428,20 @@ private static void onIncomingDamage(PlayerInteractEvent.RightClickBlock event) Level level = event.getLevel(); BlockPos blockPos = event.getPos(); - Player user = event.getEntity(); + Player user = event.getPlayer(); BlockState blockState = level.getBlockState(blockPos); if (blockState.is(SpectrumBlocks.FADING) && SpectrumConfig.CONFIG.CanBottleUpFading.get() && AdvancementHelper.hasAdvancement(user, SpectrumAdvancements.UNLOCK_BOTTLE_OF_FADING)) { - bottleUpDecay(level, user, handStack, blockPos, blockState, SpectrumItems.BOTTLE_OF_FADING.get()); - event.setCanceled(true); + event.cancelWithResult(bottleUpDecay(level, user, handStack, blockPos, blockState, SpectrumItems.BOTTLE_OF_FADING.get())); } else if (blockState.is(SpectrumBlocks.FAILING) && SpectrumConfig.CONFIG.CanBottleUpFailing.get() && AdvancementHelper.hasAdvancement(user, SpectrumAdvancements.UNLOCK_BOTTLE_OF_FAILING)) { - bottleUpDecay(level, user, handStack, blockPos, blockState, SpectrumItems.BOTTLE_OF_FAILING.get()); - event.setCanceled(true); + event.cancelWithResult(bottleUpDecay(level, user, handStack, blockPos, blockState, SpectrumItems.BOTTLE_OF_FAILING.get())); } else if (blockState.is(SpectrumBlocks.RUIN) && SpectrumConfig.CONFIG.CanBottleUpRuin.get() && AdvancementHelper.hasAdvancement(user, SpectrumAdvancements.UNLOCK_BOTTLE_OF_RUIN)) { - bottleUpDecay(level, user, handStack, blockPos, blockState, SpectrumItems.BOTTLE_OF_RUIN.get()); - event.setCanceled(true); + event.cancelWithResult(bottleUpDecay(level, user, handStack, blockPos, blockState, SpectrumItems.BOTTLE_OF_RUIN.get())); } else if (blockState.is(SpectrumBlocks.FORFEITURE) && SpectrumConfig.CONFIG.CanBottleUpForfeiture.get() && AdvancementHelper.hasAdvancement(user, SpectrumAdvancements.UNLOCK_BOTTLE_OF_FORFEITURE)) { - bottleUpDecay(level, user, handStack, blockPos, blockState, SpectrumItems.BOTTLE_OF_FORFEITURE.get()); - event.setCanceled(true); } } - private static void bottleUpDecay(Level world, Player user, @Local ItemStack handStack, @Local BlockPos blockPos, BlockState blockState, Item item) { + private static ItemInteractionResult bottleUpDecay(Level world, Player user, @Local ItemStack handStack, @Local BlockPos blockPos, BlockState blockState, Item item) { if(!world.isClientSide) { blockState.getBlock().playerWillDestroy(world, blockPos, blockState, user); world.setBlockAndUpdate(blockPos, Blocks.AIR.defaultBlockState()); @@ -454,7 +449,14 @@ private static void bottleUpDecay(Level world, Player user, @Local ItemStack han } world.playSound(user, user.getX(), user.getY(), user.getZ(), SoundEvents.BOTTLE_FILL_DRAGONBREATH, SoundSource.NEUTRAL, 1.0F, 1.0F); user.awardStat(Stats.ITEM_USED.get(handStack.getItem())); - ItemUtils.createFilledResult(handStack, user, item.getDefaultInstance(), world.isClientSide()); + ItemStack result = item.getDefaultInstance(); + + handStack.consume(1, user); + if (!user.getInventory().add(result)) { + user.drop(result, false); + } + + return ItemInteractionResult.sidedSuccess(world.isClientSide); } @SubscribeEvent From 9a71f99e082b9807bd32de22b6aed9b58018c0ed Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Thu, 13 Aug 2026 09:22:54 +0200 Subject: [PATCH 214/477] implement #946: Draconic Twinsword now comes preenchanted with Sweeping Edge V when crafted --- .../spectrum/recipe/fusion_shrine/draconic_twinsword.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/resources/data/spectrum/recipe/fusion_shrine/draconic_twinsword.json b/src/main/resources/data/spectrum/recipe/fusion_shrine/draconic_twinsword.json index 4f310da8aa..7bbeb3f5bc 100644 --- a/src/main/resources/data/spectrum/recipe/fusion_shrine/draconic_twinsword.json +++ b/src/main/resources/data/spectrum/recipe/fusion_shrine/draconic_twinsword.json @@ -47,7 +47,12 @@ } ], "result": { - "id": "spectrum:draconic_twinsword" + "id": "spectrum:draconic_twinsword", + "components": { + "enchantments": { + "minecraft:sweeping_edge": 5 + } + } }, "required_advancement": "spectrum:unlocks/equipment/draconic_twinsword", "start_crafting_effect": "single_visual_explosion_on_shrine", From 957c27332d7a70d1d08f83b2ac2f29881020408b Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Thu, 13 Aug 2026 09:49:37 +0200 Subject: [PATCH 215/477] fix #947: dafuq was this broken abomination --- .../spectrum/api/item/SlotReservingItem.java | 13 ++++++++++++ .../items/tools/DraconicTwinswordItem.java | 20 ++----------------- .../spectrum/items/tools/DragonTalonItem.java | 8 +------- 3 files changed, 16 insertions(+), 25 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/api/item/SlotReservingItem.java b/src/main/java/de/dafuqs/spectrum/api/item/SlotReservingItem.java index 60639320ef..598f95030b 100644 --- a/src/main/java/de/dafuqs/spectrum/api/item/SlotReservingItem.java +++ b/src/main/java/de/dafuqs/spectrum/api/item/SlotReservingItem.java @@ -1,6 +1,9 @@ package de.dafuqs.spectrum.api.item; import de.dafuqs.spectrum.registries.*; +import net.minecraft.core.component.*; +import net.minecraft.world.entity.*; +import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; import org.jspecify.annotations.*; @@ -28,4 +31,14 @@ static void free(ItemStack stack) { stack.remove(SpectrumDataComponentTypes.SLOT_RESERVER); } + static void inventoryTick(Entity entity, ItemStack stack) { + if (entity instanceof Player player) { + if (player.getCooldowns().isOnCooldown(stack.getItem()) || SlotReservingItem.isReservingSlot(stack)) { + stack.remove(DataComponents.ATTRIBUTE_MODIFIERS); + } else { + stack.set(DataComponents.ATTRIBUTE_MODIFIERS, stack.getPrototype().get(DataComponents.ATTRIBUTE_MODIFIERS)); + } + } + } + } diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/DraconicTwinswordItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/DraconicTwinswordItem.java index afc89101fa..e2a717c2a7 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/DraconicTwinswordItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/DraconicTwinswordItem.java @@ -27,6 +27,7 @@ import org.jspecify.annotations.*; import java.util.*; +import java.util.function.*; public class DraconicTwinswordItem extends SwordItem implements SplittableItem, SlotReservingItem, Preenchanted, ExtendedItemBarProvider, SlotBackgroundEffectProvider { @@ -106,26 +107,9 @@ public void appendHoverText(ItemStack stack, TooltipContext context, List { - ItemAttributeModifiers.Builder builder = ItemAttributeModifiers.builder(); - for (ItemAttributeModifiers.Entry entry : comp.modifiers()) { - if (!entry.modifier().is(COOLDOWN_ATTRIBUTE_ID)) { - builder.add(entry.attribute(), entry.modifier(), entry.slot()); - } - } - return builder.build(); - }); - } - } + SlotReservingItem.inventoryTick(entity, stack); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/DragonTalonItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/DragonTalonItem.java index 455c784d85..33ce613203 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/DragonTalonItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/DragonTalonItem.java @@ -146,13 +146,7 @@ public static ItemStack findThrownStack(Player player, UUID id) { @Override public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { - if (entity instanceof Player player) { - if (player.getCooldowns().isOnCooldown(stack.getItem()) || SlotReservingItem.isReservingSlot(stack)) { - stack.remove(DataComponents.ATTRIBUTE_MODIFIERS); - } else { - stack.set(DataComponents.ATTRIBUTE_MODIFIERS, modifiers); - } - } + SlotReservingItem.inventoryTick(entity, stack); } @Override From 34623cad111cc34cc4180ab996b357bb4c0fe368 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Thu, 13 Aug 2026 13:32:11 +0200 Subject: [PATCH 216/477] rework ink powered potion stuff. Potion reagents can now specify a potions color --- ....java => InkPoweredMobEffectInstance.java} | 62 +++------ .../api/item/InkPoweredPotionFillable.java | 35 ++--- .../components/InkPoweredComponent.java | 24 ---- .../InkPoweredPotionContentsComponent.java | 81 ++++++++++++ .../spectrum/helpers/SpectrumColorHelper.java | 18 +++ .../spectrum/items/ConcealingOilsItem.java | 5 +- .../ampoules/MalachiteGlassAmpouleItem.java | 5 +- .../items/tools/NightfallsBladeItem.java | 21 +-- .../items/trinkets/PotionPendantItem.java | 3 +- .../loot/SpectrumLootFunctionTypes.java | 1 - .../FillPotionFillableLootFunction.java | 85 ------------ .../de/dafuqs/spectrum/mixin/WorldMixin.java | 9 -- .../PotionWorkshopBrewingCriterion.java | 7 +- .../dynamic/ClearPotionFillableRecipe.java | 3 +- .../recipe/potion_workshop/PotionMod.java | 31 +++-- .../potion_workshop/PotionRecipeEffect.java | 5 +- .../PotionWorkshopBrewingRecipe.java | 49 ++++--- .../SpectrumDataComponentTypes.java | 2 +- .../client/SpectrumColorProviders.java | 16 ++- .../archaeology/undergrowth_manor.json | 30 +++-- .../sub_tables/treasure_potion_pendants.json | 124 ------------------ .../potion_workshop_reacting/neolith.json | 3 +- 22 files changed, 230 insertions(+), 389 deletions(-) rename src/main/java/de/dafuqs/spectrum/api/ink/{InkPoweredStatusEffectInstance.java => InkPoweredMobEffectInstance.java} (65%) delete mode 100644 src/main/java/de/dafuqs/spectrum/components/InkPoweredComponent.java create mode 100644 src/main/java/de/dafuqs/spectrum/components/InkPoweredPotionContentsComponent.java delete mode 100644 src/main/java/de/dafuqs/spectrum/loot/functions/FillPotionFillableLootFunction.java delete mode 100644 src/main/resources/data/spectrum/loot_table/chests/sub_tables/treasure_potion_pendants.json diff --git a/src/main/java/de/dafuqs/spectrum/api/ink/InkPoweredStatusEffectInstance.java b/src/main/java/de/dafuqs/spectrum/api/ink/InkPoweredMobEffectInstance.java similarity index 65% rename from src/main/java/de/dafuqs/spectrum/api/ink/InkPoweredStatusEffectInstance.java rename to src/main/java/de/dafuqs/spectrum/api/ink/InkPoweredMobEffectInstance.java index a1f3a6406d..374cafc4fb 100644 --- a/src/main/java/de/dafuqs/spectrum/api/ink/InkPoweredStatusEffectInstance.java +++ b/src/main/java/de/dafuqs/spectrum/api/ink/InkPoweredMobEffectInstance.java @@ -19,35 +19,23 @@ import java.util.*; -public class InkPoweredStatusEffectInstance { +public record InkPoweredMobEffectInstance(MobEffectInstance statusEffectInstance, InkAmount cost, Optional customColor, boolean unidentifiable) { - public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group( + public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group( MobEffectInstance.CODEC.fieldOf("effect").forGetter(c -> c.statusEffectInstance), InkAmount.CODEC.fieldOf("ink_cost").forGetter(c -> c.cost), - Codec.INT.optionalFieldOf("custom_color", -1).forGetter(c -> c.customColor), + Codec.INT.optionalFieldOf("custom_color").forGetter(c -> c.customColor), Codec.BOOL.optionalFieldOf("unidentifiable", false).forGetter(c -> c.unidentifiable) - ).apply(i, InkPoweredStatusEffectInstance::new)); + ).apply(i, InkPoweredMobEffectInstance::new)); - public static final StreamCodec PACKET_CODEC = StreamCodec.composite( + public static final StreamCodec PACKET_CODEC = StreamCodec.composite( MobEffectInstance.STREAM_CODEC, c -> c.statusEffectInstance, InkAmount.STREAM_CODEC, c -> c.cost, - ByteBufCodecs.VAR_INT, c -> c.customColor, + ByteBufCodecs.optional(ByteBufCodecs.VAR_INT), c -> c.customColor, ByteBufCodecs.BOOL, c -> c.unidentifiable, - InkPoweredStatusEffectInstance::new + InkPoweredMobEffectInstance::new ); - private final MobEffectInstance statusEffectInstance; - private final InkAmount cost; - private final int customColor; // -1: use effect default - private final boolean unidentifiable; - - public InkPoweredStatusEffectInstance(MobEffectInstance statusEffectInstance, InkAmount cost, int customColor, boolean unidentifiable) { - this.statusEffectInstance = statusEffectInstance; - this.cost = cost; - this.customColor = customColor; - this.unidentifiable = unidentifiable; - } - public MobEffectInstance getStatusEffectInstance() { return statusEffectInstance; } @@ -56,28 +44,18 @@ public InkAmount getInkCost() { return cost; } - public static List getEffects(ItemStack stack) { - return stack.getOrDefault(SpectrumDataComponentTypes.INK_POWERED, InkPoweredComponent.DEFAULT).effects(); - } - - public static void setEffects(ItemStack stack, List effects) { - stack.set(SpectrumDataComponentTypes.INK_POWERED, new InkPoweredComponent(effects)); + public int getColor() { + if(this.customColor.isPresent()) { + return this.customColor.get(); + } + return statusEffectInstance.getEffect().value().getColor(); } - public static void buildTooltip(List tooltip, List effects, MutableComponent attributeModifierText, boolean showDuration, float tickRate) { + public static void buildTooltip(List tooltip, List effects, MutableComponent attributeModifierText, boolean showDuration, float tickRate) { if (!effects.isEmpty()) { List, AttributeModifier>> attributeModifiers = Lists.newArrayList(); - for (InkPoweredStatusEffectInstance entry : effects) { - if (entry.isUnidentifiable()) { - tooltip.add(Component.translatable("item.spectrum.potion.tooltip.unidentifiable")); - continue; - } - + for (InkPoweredMobEffectInstance entry : effects) { MobEffectInstance effect = entry.getStatusEffectInstance(); - if (effect == null) { // serialization error or removed effect - continue; - } - InkAmount cost = entry.getInkCost(); MutableComponent mutableText = Component.translatable(effect.getDescriptionId()); @@ -92,7 +70,7 @@ public static void buildTooltip(List tooltip, List - attributeModifiers.add(new Tuple<>(attribute, modifier)) + attributeModifiers.add(new Tuple<>(attribute, modifier)) ); } @@ -123,14 +101,4 @@ public static void buildTooltip(List tooltip, List newEffects) { + default void addOrUpgradeEffects(ItemStack potionFillableStack, List newEffects, Optional color, boolean unidentifiable) { if (!isFull(potionFillableStack)) { // by default, values are immutable, so we need to copy the values to an arraylist to be able to add stuff to it - List existingEffects = new ArrayList<>(InkPoweredStatusEffectInstance.getEffects(potionFillableStack)); + List existingEffects = new ArrayList<>(InkPoweredPotionContentsComponent.getEffects(potionFillableStack)); int maxCount = maxEffectCount(); int maxAmplifier = maxEffectAmplifier(); - for (InkPoweredStatusEffectInstance newEffect : newEffects) { + for (InkPoweredMobEffectInstance newEffect : newEffects) { MobEffectInstance statusEffectInstance = newEffect.getStatusEffectInstance(); if (statusEffectInstance.getAmplifier() > maxAmplifier) { statusEffectInstance = new MobEffectInstance(statusEffectInstance.getEffect(), statusEffectInstance.getDuration(), maxAmplifier, statusEffectInstance.isAmbient(), statusEffectInstance.isVisible()); @@ -37,38 +39,25 @@ default void addOrUpgradeEffects(ItemStack potionFillableStack, List getEffects(ItemStack stack) { - return InkPoweredStatusEffectInstance.getEffects(stack); - } - - @Deprecated - default List getVanillaEffects(ItemStack stack) { - return InkPoweredStatusEffectInstance.getEffects(stack).stream().map(InkPoweredStatusEffectInstance::getStatusEffectInstance).toList(); - } - default boolean isFull(ItemStack itemStack) { - return InkPoweredStatusEffectInstance.getEffects(itemStack).size() >= maxEffectCount(); + return InkPoweredPotionContentsComponent.getEffects(itemStack).size() >= maxEffectCount(); } default boolean isAtLeastPartiallyFilled(ItemStack itemStack) { - return !InkPoweredStatusEffectInstance.getEffects(itemStack).isEmpty(); - } - - default void clearEffects(ItemStack itemStack) { - InkPoweredStatusEffectInstance.setEffects(itemStack, List.of()); + return !InkPoweredPotionContentsComponent.getEffects(itemStack).isEmpty(); } default void appendPotionFillableTooltip(ItemStack stack, List tooltip, MutableComponent attributeModifierText, boolean showDuration, float tickRate) { - List effects = InkPoweredStatusEffectInstance.getEffects(stack); - InkPoweredStatusEffectInstance.buildTooltip(tooltip, effects, attributeModifierText, showDuration, tickRate); + List effects = InkPoweredPotionContentsComponent.getEffects(stack); + InkPoweredMobEffectInstance.buildTooltip(tooltip, effects, attributeModifierText, showDuration, tickRate); int maxEffectCount = maxEffectCount(); if (effects.size() < maxEffectCount) { diff --git a/src/main/java/de/dafuqs/spectrum/components/InkPoweredComponent.java b/src/main/java/de/dafuqs/spectrum/components/InkPoweredComponent.java deleted file mode 100644 index 3c7512b2ab..0000000000 --- a/src/main/java/de/dafuqs/spectrum/components/InkPoweredComponent.java +++ /dev/null @@ -1,24 +0,0 @@ -package de.dafuqs.spectrum.components; - -import com.mojang.serialization.*; -import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.ink.*; -import net.minecraft.network.*; -import net.minecraft.network.codec.*; - -import java.util.*; - -public record InkPoweredComponent(List effects) { - - public static final InkPoweredComponent DEFAULT = new InkPoweredComponent(List.of()); - - public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group( - InkPoweredStatusEffectInstance.CODEC.listOf().fieldOf("effects").forGetter(InkPoweredComponent::effects) - ).apply(i, InkPoweredComponent::new)); - - public static final StreamCodec PACKET_CODEC = StreamCodec.composite( - InkPoweredStatusEffectInstance.PACKET_CODEC.apply(ByteBufCodecs.list()), InkPoweredComponent::effects, - InkPoweredComponent::new - ); - -} diff --git a/src/main/java/de/dafuqs/spectrum/components/InkPoweredPotionContentsComponent.java b/src/main/java/de/dafuqs/spectrum/components/InkPoweredPotionContentsComponent.java new file mode 100644 index 0000000000..703773c529 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/components/InkPoweredPotionContentsComponent.java @@ -0,0 +1,81 @@ +package de.dafuqs.spectrum.components; + +import com.mojang.serialization.*; +import com.mojang.serialization.codecs.*; +import de.dafuqs.spectrum.api.ink.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.network.*; +import net.minecraft.network.codec.*; +import net.minecraft.util.*; +import net.minecraft.world.effect.*; +import net.minecraft.world.item.*; +import net.minecraft.world.item.alchemy.*; + +import java.util.*; + +public record InkPoweredPotionContentsComponent(List effects) implements Iterable { + + public static final InkPoweredPotionContentsComponent DEFAULT = new InkPoweredPotionContentsComponent(List.of()); + + public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group( + InkPoweredMobEffectInstance.CODEC.listOf().fieldOf("effects").forGetter(InkPoweredPotionContentsComponent::effects) + ).apply(i, InkPoweredPotionContentsComponent::new)); + + public static final StreamCodec PACKET_CODEC = StreamCodec.composite( + InkPoweredMobEffectInstance.PACKET_CODEC.apply(ByteBufCodecs.list()), InkPoweredPotionContentsComponent::effects, + InkPoweredPotionContentsComponent::new + ); + + public static List getEffects(ItemStack stack) { + return stack.getOrDefault(SpectrumDataComponentTypes.INK_POWERED_POTION_CONTENTS, InkPoweredPotionContentsComponent.DEFAULT).effects(); + } + + public static void setEffects(ItemStack stack, List effects) { + stack.set(SpectrumDataComponentTypes.INK_POWERED_POTION_CONTENTS, new InkPoweredPotionContentsComponent(effects)); + } + + public OptionalInt getColor() { + return getColor(this.effects()); + } + + public static OptionalInt getColor(List effects) { + int i = 0; + int j = 0; + int k = 0; + int l = 0; + + for (InkPoweredMobEffectInstance instance : effects) { + if (instance.getStatusEffectInstance().isVisible()) { + int i1 = instance.getColor(); + int j1 = instance.getStatusEffectInstance().getAmplifier() + 1; + i += j1 * FastColor.ARGB32.red(i1); + j += j1 * FastColor.ARGB32.green(i1); + k += j1 * FastColor.ARGB32.blue(i1); + l += j1; + } + } + + return l == 0 ? OptionalInt.empty() : OptionalInt.of(FastColor.ARGB32.color(i / l, j / l, k / l)); + } + + @Override + public Iterator iterator() { + return this.effects.stream() + .map(InkPoweredMobEffectInstance::getStatusEffectInstance) + .iterator(); + } + + public int size() { + return this.effects.size(); + } + + @Deprecated + public List getVanillaEffects() { + return effects.stream().map(InkPoweredMobEffectInstance::getStatusEffectInstance).toList(); + } + + public static void clearEffects(ItemStack itemStack) { + itemStack.remove(SpectrumDataComponentTypes.INK_POWERED_POTION_CONTENTS); + } + +} diff --git a/src/main/java/de/dafuqs/spectrum/helpers/SpectrumColorHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/SpectrumColorHelper.java index 04590eb220..b9a965419a 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/SpectrumColorHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/SpectrumColorHelper.java @@ -2,6 +2,7 @@ import com.mojang.serialization.*; import de.dafuqs.spectrum.items.*; +import de.dafuqs.spectrum.recipe.potion_workshop.*; import net.minecraft.util.*; import net.minecraft.world.item.*; import org.joml.*; @@ -99,4 +100,21 @@ public static int interpolate(Vector3f start, Vector3f end, float delta) { return (blendedRed & 255) << 16 | (blendedGreen & 255) << 8 | (blendedBlue & 255) | 0xFF000000; } + public static Optional blendColors(Optional first, Optional second) { + if(first.isEmpty()) { + return second; + } else if(second.isEmpty()) { + return first; + } + + int f = first.get(); + int s = second.get(); + + int r = FastColor.ARGB32.red(f) + FastColor.ARGB32.red(s); + int g = FastColor.ARGB32.green(f) + FastColor.ARGB32.green(s); + int b = FastColor.ARGB32.blue(f) + FastColor.ARGB32.blue(s); + + return Optional.of(FastColor.ARGB32.color(r / 2, g / 2, b / 2)); + } + } \ No newline at end of file diff --git a/src/main/java/de/dafuqs/spectrum/items/ConcealingOilsItem.java b/src/main/java/de/dafuqs/spectrum/items/ConcealingOilsItem.java index c306f01379..4eaac47583 100644 --- a/src/main/java/de/dafuqs/spectrum/items/ConcealingOilsItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/ConcealingOilsItem.java @@ -2,6 +2,7 @@ import de.dafuqs.spectrum.api.ink.*; import de.dafuqs.spectrum.api.item.*; +import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; import net.minecraft.core.component.*; @@ -27,7 +28,7 @@ public ConcealingOilsItem(Properties settings) { @Override public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag type) { - if (!InkPoweredPotionFillable.getEffects(stack).isEmpty()) { + if (!InkPoweredPotionContentsComponent.getEffects(stack).isEmpty()) { tooltip.add(Component.translatable("item.spectrum.concealing_oils.tooltip").withStyle(s -> s.applyFormat(ChatFormatting.GRAY).withItalic(true))); } appendPotionFillableTooltip(stack, tooltip, Component.translatable("item.spectrum.concealing_oils.when_poisoned"), true, context.tickRate()); @@ -57,7 +58,7 @@ public boolean overrideStackedOnOther(ItemStack oilsStack, Slot slot, ClickActio return false; } - InkPoweredStatusEffectInstance effect = InkPoweredPotionFillable.getEffects(oilsStack).getFirst(); + InkPoweredMobEffectInstance effect = InkPoweredPotionContentsComponent.getEffects(oilsStack).getFirst(); if (InkPowered.tryDrainEnergy(player, effect.getInkCost().color(), effect.getInkCost().amount())) { stackToApplyTo.set(SpectrumDataComponentTypes.CONCEALED_EFFECT, effect.getStatusEffectInstance()); stackToApplyTo.set(SpectrumDataComponentTypes.CONCEALED_EFFECT_PROFILE, new ResolvableProfile(player.getGameProfile())); diff --git a/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/MalachiteGlassAmpouleItem.java b/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/MalachiteGlassAmpouleItem.java index 611c33d855..ed2a609d55 100644 --- a/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/MalachiteGlassAmpouleItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/magic_items/ampoules/MalachiteGlassAmpouleItem.java @@ -2,6 +2,7 @@ import de.dafuqs.spectrum.api.ink.*; import de.dafuqs.spectrum.api.item.*; +import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.entity.entity.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; @@ -28,8 +29,8 @@ public MalachiteGlassAmpouleItem(Properties settings) { public boolean trigger(Level world, ItemStack stack, @Nullable LivingEntity attacker, @Nullable LivingEntity target, Vec3 position) { List e = new ArrayList<>(); if (attacker instanceof Player player) { - List effects = InkPoweredPotionFillable.getEffects(stack); - for (InkPoweredStatusEffectInstance effect : effects) { + List effects = InkPoweredPotionContentsComponent.getEffects(stack); + for (InkPoweredMobEffectInstance effect : effects) { if (InkPowered.tryDrainEnergy(player, effect.getInkCost())) { e.add(effect.getStatusEffectInstance()); } diff --git a/src/main/java/de/dafuqs/spectrum/items/tools/NightfallsBladeItem.java b/src/main/java/de/dafuqs/spectrum/items/tools/NightfallsBladeItem.java index 2ce562b386..1b9d8e1acd 100644 --- a/src/main/java/de/dafuqs/spectrum/items/tools/NightfallsBladeItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/tools/NightfallsBladeItem.java @@ -5,6 +5,7 @@ import de.dafuqs.spectrum.api.ink.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.api.render.*; +import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.effect.*; import de.dafuqs.spectrum.registries.*; @@ -51,7 +52,7 @@ public boolean isWeapon() { } @Override - public long adjustFinalCostFor(InkPoweredStatusEffectInstance instance) { + public long adjustFinalCostFor(InkPoweredMobEffectInstance instance) { return Math.round(Math.pow(instance.getInkCost().amount(), 1.75 + instance.getStatusEffectInstance().getAmplifier())); } @@ -59,8 +60,8 @@ public long adjustFinalCostFor(InkPoweredStatusEffectInstance instance) { public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (target.isAlive() && attacker instanceof Player player) { if (AdvancementHelper.hasAdvancement(player, UNLOCK_IDENTIFIER)) { - List effects = InkPoweredPotionFillable.getEffects(stack); - for (InkPoweredStatusEffectInstance instance : effects) { + List effects = InkPoweredPotionContentsComponent.getEffects(stack); + for (InkPoweredMobEffectInstance instance : effects) { if (InkPowered.tryDrainEnergy(player, instance.getInkCost().color(), instance.getInkCost().amount())) { Level world = attacker.level(); if (world.isClientSide()) { @@ -91,7 +92,7 @@ public void appendHoverText(ItemStack stack, TooltipContext context, List effects = InkPoweredPotionFillable.getEffects(stack); + List effects = InkPoweredPotionContentsComponent.getEffects(stack); if (effects.isEmpty()) { return SlotBackgroundEffectProvider.SlotEffect.NONE; } @@ -103,16 +104,16 @@ public SlotBackgroundEffectProvider.SlotEffect backgroundType(@Nullable Player p @Override public int getBackgroundColor(@Nullable Player player, ItemStack stack, float tickDelta) { - List effects = InkPoweredPotionFillable.getEffects(stack); - if (effects.isEmpty()) - return 0x000000; - - return effects.getFirst().getColor(); + InkPoweredPotionContentsComponent effects = stack.get(SpectrumDataComponentTypes.INK_POWERED_POTION_CONTENTS); + if (effects == null) { + return 0x0; + } + return effects.getColor().orElse(0x0); } @Override public float getEffectOpacity(@Nullable Player player, ItemStack stack, float tickDelta) { - List effects = InkPoweredPotionFillable.getEffects(stack); + List effects = InkPoweredPotionContentsComponent.getEffects(stack); if (effects.isEmpty()) return 0F; diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/PotionPendantItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/PotionPendantItem.java index eba52089f3..0bc4fed6a7 100644 --- a/src/main/java/de/dafuqs/spectrum/items/trinkets/PotionPendantItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/PotionPendantItem.java @@ -2,6 +2,7 @@ import de.dafuqs.spectrum.api.ink.*; import de.dafuqs.spectrum.api.item.*; +import de.dafuqs.spectrum.components.*; import net.minecraft.core.component.*; import net.minecraft.network.chat.*; import net.minecraft.resources.*; @@ -70,7 +71,7 @@ public void curioTick(SlotContext slotContext, ItemStack stack) { } private void grantEffects(ItemStack stack, Player player) { - for (InkPoweredStatusEffectInstance inkPoweredEffect : InkPoweredPotionFillable.getEffects(stack)) { + for (InkPoweredMobEffectInstance inkPoweredEffect : InkPoweredPotionContentsComponent.getEffects(stack)) { if (InkPowered.tryDrainEnergy(player, inkPoweredEffect.getInkCost())) { MobEffectInstance effect = inkPoweredEffect.getStatusEffectInstance(); player.addEffect(new MobEffectInstance(effect.getEffect(), EFFECT_DURATION, effect.getAmplifier(), effect.isAmbient(), effect.isVisible(), true)); diff --git a/src/main/java/de/dafuqs/spectrum/loot/SpectrumLootFunctionTypes.java b/src/main/java/de/dafuqs/spectrum/loot/SpectrumLootFunctionTypes.java index 51c31fdcd5..e618b708d5 100644 --- a/src/main/java/de/dafuqs/spectrum/loot/SpectrumLootFunctionTypes.java +++ b/src/main/java/de/dafuqs/spectrum/loot/SpectrumLootFunctionTypes.java @@ -15,7 +15,6 @@ public class SpectrumLootFunctionTypes { public static final LootItemFunctionType DYE_RANDOMLY = register("dye_randomly", DyeRandomlyLootFunction.CODEC); public static final LootItemFunctionType FERMENT_RANDOMLY = register("ferment_randomly", FermentRandomlyLootFunction.CODEC); public static final LootItemFunctionType SET_COMPONENTS_RANDOMLY = register("set_components_randomly", SetComponentsRandomlyLootFunction.CODEC); - public static final LootItemFunctionType FILL_POTION_FILLABLE = register("fill_potion_fillable", FillPotionFillableLootFunction.CODEC); public static final LootItemFunctionType GRANT_ADVANCEMENT = register("grant_advancement", GrantAdvancementLootFunction.CODEC); private static LootItemFunctionType register(String id, MapCodec codec) { diff --git a/src/main/java/de/dafuqs/spectrum/loot/functions/FillPotionFillableLootFunction.java b/src/main/java/de/dafuqs/spectrum/loot/functions/FillPotionFillableLootFunction.java deleted file mode 100644 index 523a4674e2..0000000000 --- a/src/main/java/de/dafuqs/spectrum/loot/functions/FillPotionFillableLootFunction.java +++ /dev/null @@ -1,85 +0,0 @@ -package de.dafuqs.spectrum.loot.functions; - -import com.mojang.serialization.*; -import com.mojang.serialization.codecs.*; -import de.dafuqs.spectrum.api.ink.*; -import de.dafuqs.spectrum.api.ink.color.*; -import de.dafuqs.spectrum.api.item.*; -import de.dafuqs.spectrum.helpers.*; -import de.dafuqs.spectrum.loot.*; -import net.minecraft.core.*; -import net.minecraft.core.registries.*; -import net.minecraft.world.effect.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.storage.loot.*; -import net.minecraft.world.level.storage.loot.functions.*; -import net.minecraft.world.level.storage.loot.predicates.*; -import net.minecraft.world.level.storage.loot.providers.number.*; - -import java.util.*; - -public class FillPotionFillableLootFunction extends LootItemConditionalFunction { - - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> commonFields(i).and( - InkPoweredPotionTemplate.CODEC.forGetter(c -> c.template) - ).apply(i, FillPotionFillableLootFunction::new)); - - public record InkPoweredPotionTemplate( - boolean ambient, boolean showParticles, NumberProvider duration, - List> statusEffects, int color, NumberProvider amplifier, - List inkColors, NumberProvider inkCost, boolean unidentifiable - ) { - - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(i -> i.group( - Codec.BOOL.optionalFieldOf("ambient", false).forGetter(InkPoweredPotionTemplate::ambient), - Codec.BOOL.optionalFieldOf("show_particles", false).forGetter(InkPoweredPotionTemplate::showParticles), - NumberProviders.CODEC.fieldOf("duration").forGetter(InkPoweredPotionTemplate::duration), - CodecHelper.singleOrList(BuiltInRegistries.MOB_EFFECT.holderByNameCodec()).fieldOf("status_effect").forGetter(InkPoweredPotionTemplate::statusEffects), - Codec.INT.optionalFieldOf("color", -1).forGetter(InkPoweredPotionTemplate::color), - NumberProviders.CODEC.fieldOf("amplifier").forGetter(InkPoweredPotionTemplate::amplifier), - CodecHelper.singleOrList(InkColor.CODEC).fieldOf("ink_color").forGetter(InkPoweredPotionTemplate::inkColors), - NumberProviders.CODEC.fieldOf("ink_cost").forGetter(InkPoweredPotionTemplate::inkCost), - Codec.BOOL.optionalFieldOf("unidentifiable", false).forGetter(InkPoweredPotionTemplate::unidentifiable) - ).apply(i, InkPoweredPotionTemplate::new)); - - public InkPoweredStatusEffectInstance get(LootContext context) { - Holder statusEffect = this.statusEffects.get(context.getRandom().nextInt(this.statusEffects.size())); - MobEffectInstance statusEffectInstance = new MobEffectInstance(statusEffect, this.duration.getInt(context), this.amplifier.getInt(context), ambient, showParticles, true); - InkColor inkColor = this.inkColors.get(context.getRandom().nextInt(this.inkColors.size())); - int cost = this.inkCost.getInt(context); - return new InkPoweredStatusEffectInstance(statusEffectInstance, new InkAmount(inkColor, cost), this.color, this.unidentifiable); - } - - } - - private final InkPoweredPotionTemplate template; - - FillPotionFillableLootFunction(List conditions, InkPoweredPotionTemplate template) { - super(conditions); - this.template = template; - } - - @Override - public LootItemFunctionType getType() { - return SpectrumLootFunctionTypes.FILL_POTION_FILLABLE; - } - - @Override - public ItemStack run(ItemStack stack, LootContext context) { - if (!(stack.getItem() instanceof InkPoweredPotionFillable inkPoweredPotionFillable)) - return stack; - - if (inkPoweredPotionFillable.isFull(stack)) - return stack; - - InkPoweredStatusEffectInstance effect = template.get(context); - inkPoweredPotionFillable.addOrUpgradeEffects(stack, List.of(effect)); - - return stack; - } - - public static LootItemConditionalFunction.Builder builder(InkPoweredPotionTemplate template) { - return simpleBuilder((conditions) -> new FillPotionFillableLootFunction(conditions, template)); - } - -} diff --git a/src/main/java/de/dafuqs/spectrum/mixin/WorldMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/WorldMixin.java index 4e5edea865..3552dd1b3d 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/WorldMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/WorldMixin.java @@ -20,15 +20,6 @@ public abstract class WorldMixin { @Final private BiomeManager biomeManager; - // using a mixin additional to net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents, - // since the fabric api event does not trigger for indirect breaks, like via projectile - @Inject(method = "destroyBlock", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;getFluidState(Lnet/minecraft/core/BlockPos;)Lnet/minecraft/world/level/material/FluidState;")) - public void breakBlock(BlockPos pos, boolean drop, Entity breakingEntity, int maxUpdateDepth, CallbackInfoReturnable cir, @Local BlockState state) { - if (breakingEntity instanceof ServerPlayer serverPlayerEntity) { - SpectrumAdvancementCriteria.BLOCK_BROKEN.trigger(serverPlayerEntity, state); - } - } - @Inject(method = "isRainingAt", at = @At("HEAD"), cancellable = true) public void forcePermanentRain(BlockPos pos, CallbackInfoReturnable cir) { var biome = biomeManager.getBiome(pos); diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/PotionWorkshopBrewingCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/PotionWorkshopBrewingCriterion.java index aa25075ada..2a2a952f68 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/PotionWorkshopBrewingCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/PotionWorkshopBrewingCriterion.java @@ -4,7 +4,9 @@ import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.blocks.potion_workshop.*; +import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.recipe.potion_workshop.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.advancements.critereon.*; import net.minecraft.core.*; import net.minecraft.core.component.*; @@ -28,8 +30,9 @@ public void trigger(ServerPlayer player, ItemStack itemStack, int brewedCount, P this.trigger(player, conditions -> { List effects; - if (itemStack.getItem() instanceof InkPoweredPotionFillable inkPoweredPotionFillable) { - effects = inkPoweredPotionFillable.getVanillaEffects(itemStack); + InkPoweredPotionContentsComponent inkPoweredComponent = itemStack.get(SpectrumDataComponentTypes.INK_POWERED_POTION_CONTENTS); + if (inkPoweredComponent != null) { + effects = inkPoweredComponent.getVanillaEffects(); } else { PotionContents potionComponent = itemStack.getOrDefault(DataComponents.POTION_CONTENTS, PotionContents.EMPTY); effects = potionComponent.customEffects(); diff --git a/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/ClearPotionFillableRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/ClearPotionFillableRecipe.java index 9520b4e3b6..0960aaad4c 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/ClearPotionFillableRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/crafting/dynamic/ClearPotionFillableRecipe.java @@ -1,6 +1,7 @@ package de.dafuqs.spectrum.recipe.crafting.dynamic; import de.dafuqs.spectrum.api.item.*; +import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.*; @@ -18,7 +19,7 @@ public ItemStack assemble(ItemStack stack) { if (stack.getItem() instanceof InkPoweredPotionFillable inkPoweredPotionFillable) { stack = stack.copy(); stack.setCount(1); - inkPoweredPotionFillable.clearEffects(stack); + InkPoweredPotionContentsComponent.clearEffects(stack); } return stack; } diff --git a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionMod.java b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionMod.java index e98d582961..383b8f3669 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionMod.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionMod.java @@ -2,12 +2,15 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; +import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.helpers.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; import net.minecraft.util.*; +import java.awt.*; import java.util.*; +import java.util.List; import java.util.stream.*; public record PotionMod( @@ -78,8 +81,10 @@ public record PotionFlags( boolean potentDecreasingEffect, boolean negateDecreasingDuration, boolean randomColor, - List> additionalEffects + List> additionalEffects, + Optional color ) { + private static final Codec> ENTRY_CODEC = RecordCodecBuilder.create(i -> i.group( PotionRecipeEffect.CODEC.forGetter(Tuple::getA), Codec.FLOAT.optionalFieldOf("chance", 1f).forGetter(Tuple::getB) @@ -92,11 +97,7 @@ public record PotionFlags( public record Conditions(PotionFlags potionFlags) { - public Conditions(PotionFlags potionFlags) { - this.potionFlags = potionFlags; - } - - public static final PotionFlags.Conditions ANY = new Conditions(new PotionFlags(false, false, false, false, false, false, false, false, false, List.of())); + public static final PotionFlags.Conditions ANY = new Conditions(new PotionFlags(false, false, false, false, false, false, false, false, false, List.of(), Optional.empty())); public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group( PotionMod.PotionFlags.CODEC.forGetter(Conditions::potionFlags) @@ -112,6 +113,9 @@ public boolean test(PotionFlags reagentFlags) { if (this.potionFlags.potentDecreasingEffect && !reagentFlags.potentDecreasingEffect) return false; if (this.potionFlags.negateDecreasingDuration && !reagentFlags.negateDecreasingDuration) return false; if (this.potionFlags.randomColor && !reagentFlags.randomColor) return false; + if (this.potionFlags.color.isPresent()) { + return reagentFlags.color.isPresent() && this.potionFlags.color.get().equals(reagentFlags.color.get()); + } return true; } @@ -127,7 +131,8 @@ public boolean test(PotionFlags reagentFlags) { Codec.BOOL.optionalFieldOf("potent_decreasing_effect", false).forGetter(PotionFlags::potentDecreasingEffect), Codec.BOOL.optionalFieldOf("negate_decreasing_duration", false).forGetter(PotionFlags::negateDecreasingDuration), Codec.BOOL.optionalFieldOf("random_color", false).forGetter(PotionFlags::randomColor), - ENTRY_CODEC.listOf().optionalFieldOf("additional_effects", List.of()).forGetter(PotionFlags::additionalEffects) + ENTRY_CODEC.listOf().optionalFieldOf("additional_effects", List.of()).forGetter(PotionFlags::additionalEffects), + Codec.INT.optionalFieldOf("color").forGetter(PotionFlags::color) ).apply(i, PotionFlags::new)); public static final StreamCodec PACKET_CODEC = PacketCodecHelper.tuple( @@ -141,12 +146,15 @@ public boolean test(PotionFlags reagentFlags) { ByteBufCodecs.BOOL, PotionFlags::negateDecreasingDuration, ByteBufCodecs.BOOL, PotionFlags::randomColor, ENTRY_PACKET_CODEC.apply(ByteBufCodecs.list()), PotionFlags::additionalEffects, + ByteBufCodecs.optional(ByteBufCodecs.VAR_INT), PotionFlags::color, PotionFlags::new ); } - public int getColor(RandomSource random) { - return flags.randomColor ? java.awt.Color.getHSBColor(random.nextFloat(), 0.7F, 0.9F).getRGB() : flags.unidentifiable ? 0x2f2f2f : -1; // dark gray + public Optional getColor(RandomSource random) { + return flags.randomColor + ? Optional.of(Color.getHSBColor(random.nextFloat(), 0.7F, 0.9F).getRGB()) + : flags.color; } public static class Builder { @@ -167,7 +175,7 @@ public static class Builder { public int additionalDrinkDurationTicks = 0; public PotionFlags flags = new PotionFlags( false, false, false, false, false, false, - false, false, false, List.of() + false, false, false, List.of(), Optional.empty() ); public Builder() { @@ -203,7 +211,8 @@ public Builder combine(PotionMod potionMod) { this.flags.potentDecreasingEffect | potionMod.flags.potentDecreasingEffect, this.flags.negateDecreasingDuration | potionMod.flags.negateDecreasingDuration, this.flags.randomColor | potionMod.flags.randomColor, - Stream.concat(this.flags.additionalEffects.stream(), potionMod.flags.additionalEffects.stream()).toList() + Stream.concat(this.flags.additionalEffects.stream(), potionMod.flags.additionalEffects.stream()).toList(), + SpectrumColorHelper.blendColors(this.flags.color, potionMod.flags.color) ); return this; } diff --git a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionRecipeEffect.java b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionRecipeEffect.java index 8c0e98658f..1410e30c4e 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionRecipeEffect.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionRecipeEffect.java @@ -70,7 +70,7 @@ public static PotionRecipeEffect read(RegistryFriendlyByteBuf buf) { return PACKET_CODEC.decode(buf); } - public @Nullable InkPoweredStatusEffectInstance getStatusEffectInstance(PotionMod potionMod, RandomSource random) { + public @Nullable InkPoweredMobEffectInstance getStatusEffectInstance(PotionMod potionMod, RandomSource random) { float potency = potionMod.flatPotencyBonus(); int durationTicks = baseDurationTicks() + potionMod.flatDurationBonusTicks(); switch (statusEffect().value().getCategory()) { @@ -109,8 +109,7 @@ public static PotionRecipeEffect read(RegistryFriendlyByteBuf buf) { } if (potency >= 0 && durationTicks > 0) { - int effectColor = potionMod.getColor(random); - return new InkPoweredStatusEffectInstance(new MobEffectInstance(statusEffect, durationTicks, (int) potency, !potionMod.flags().noParticles(), !potionMod.flags().noParticles()), new InkAmount(inkColor(), inkCost()), effectColor, potionMod.flags().unidentifiable()); + return new InkPoweredMobEffectInstance(new MobEffectInstance(statusEffect, durationTicks, (int) potency, !potionMod.flags().noParticles(), !potionMod.flags().noParticles()), new InkAmount(inkColor(), inkCost()), potionMod.getColor(random), potionMod.flags().unidentifiable()); } else { // the effect is so borked that the effect would be too weak return null; diff --git a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java index 34ff41a864..28e780206d 100644 --- a/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java +++ b/src/main/java/de/dafuqs/spectrum/recipe/potion_workshop/PotionWorkshopBrewingRecipe.java @@ -198,7 +198,7 @@ public List getPotions(ItemStack stack, PotionMod potionMod, @Nullabl } public ItemStack getPotion(ItemStack originalStack, ItemStack targetStack, PotionMod potionMod, @Nullable RecipeHolder lastRecipe, RandomSource random) { - List effects = generateEffects(originalStack, potionMod, lastRecipe, random); + List effects = generateEffects(originalStack, potionMod, lastRecipe, random); // apply to potion if (effects.isEmpty()) { @@ -216,7 +216,7 @@ public ItemStack getTippedArrows(ItemStack stack, PotionMod potionMod, @Nullable if (potionMod.flags().negateDecreasingDuration()) { potionMod = new PotionMod.Builder(potionMod).durationMultiplier(potionMod.durationMultiplier() + 7).build(); } - List effects = generateEffects(stack, potionMod, lastRecipe, random); + List effects = generateEffects(stack, potionMod, lastRecipe, random); ItemStack itemStack = new ItemStack(Items.TIPPED_ARROW, amount); if (effects.isEmpty()) { @@ -231,19 +231,18 @@ public ItemStack getTippedArrows(ItemStack stack, PotionMod potionMod, @Nullable public void fillPotionFillable(ItemStack stack, PotionMod potionMod, @Nullable RecipeHolder lastRecipe, RandomSource random) { if (stack.getItem() instanceof InkPoweredPotionFillable inkPoweredPotionFillable) { - List effects = generateEffects(stack, potionMod, lastRecipe, random); - inkPoweredPotionFillable.addOrUpgradeEffects(stack, effects); + List effects = generateEffects(stack, potionMod, lastRecipe, random); + inkPoweredPotionFillable.addOrUpgradeEffects(stack, effects, potionMod.getColor(random), potionMod.flags().unidentifiable()); } } - private static void setCustomPotionEffects(ItemStack stack, PotionMod potionMod, List effects) { + private static void setCustomPotionEffects(ItemStack stack, PotionMod potionMod, List effects) { List instances = new ArrayList<>(); - for (InkPoweredStatusEffectInstance e : effects) { + for (InkPoweredMobEffectInstance e : effects) { instances.add(e.getStatusEffectInstance()); } - int potionColor = potionMod.flags().unidentifiable() ? InkColors.BLACK_COLOR : PotionContents.getColorOptional(instances).orElse(0); - + int potionColor = InkPoweredPotionContentsComponent.getColor(effects).orElse(0); PotionContents potionComponent = new PotionContents(Optional.of(SpectrumPotions.PIGMENT_POTION), Optional.of(potionColor), instances); stack.set(DataComponents.POTION_CONTENTS, potionComponent); @@ -252,8 +251,8 @@ private static void setCustomPotionEffects(ItemStack stack, PotionMod potionMod, } } - private List generateEffects(ItemStack baseIngredient, PotionMod potionMod, @Nullable RecipeHolder lastRecipe, RandomSource random) { - List effects = new ArrayList<>(); + private List generateEffects(ItemStack baseIngredient, PotionMod potionMod, @Nullable RecipeHolder lastRecipe, RandomSource random) { + List effects = new ArrayList<>(); addEffect(potionMod, random, effects); // main effect if (lastRecipe != null) { @@ -270,7 +269,7 @@ private List generateEffects(ItemStack baseIngre return effects; } - private static void addLastEffect(ItemStack baseIngredient, PotionMod potionMod, @Nullable PotionWorkshopBrewingRecipe lastRecipe, RandomSource random, List effects) { + private static void addLastEffect(ItemStack baseIngredient, PotionMod potionMod, @Nullable PotionWorkshopBrewingRecipe lastRecipe, RandomSource random, List effects) { if (lastRecipe != null && (potionMod.chanceToAddLastEffect() >= 1 || random.nextFloat() < potionMod.chanceToAddLastEffect()) && lastRecipe.recipeData.isApplicableTo(baseIngredient, potionMod)) { PotionMod lastEffectMod = new PotionMod.Builder(potionMod) .potencyMultiplier(potionMod.lastEffectPotencyMultiplier()) @@ -280,10 +279,10 @@ private static void addLastEffect(ItemStack baseIngredient, PotionMod potionMod, } } - private static void addAdditionalEffects(ItemStack baseIngredient, PotionMod potionMod, RandomSource random, List effects) { + private static void addAdditionalEffects(ItemStack baseIngredient, PotionMod potionMod, RandomSource random, List effects) { for (Tuple entry : potionMod.flags().additionalEffects()) { if (random.nextFloat() < entry.getB() && entry.getA().isApplicableTo(baseIngredient, potionMod)) { - InkPoweredStatusEffectInstance statusEffectInstance = entry.getA().getStatusEffectInstance(potionMod, random); + InkPoweredMobEffectInstance statusEffectInstance = entry.getA().getStatusEffectInstance(potionMod, random); if (statusEffectInstance != null) { effects.add(statusEffectInstance); } @@ -291,7 +290,7 @@ private static void addAdditionalEffects(ItemStack baseIngredient, PotionMod pot } } - private void addEffect(PotionMod potionMod, RandomSource random, List effects) { + private void addEffect(PotionMod potionMod, RandomSource random, List effects) { if (potionMod.flags().makeEffectsBeneficial() && potionMod.flags().makeEffectsHarmful()) { // listen here, you little shit if (immunityRecipe != null) { @@ -315,19 +314,19 @@ private void addEffect(PotionMod potionMod, RandomSource random, List effects) { + private void addRandomEffects(ItemStack baseIngredient, PotionMod potionMod, RandomSource random, List effects) { // random positive ones int additionalPositiveEffectCount = Support.getIntFromDecimalWithChance(potionMod.additionalRandomPositiveEffectCount(), random); if (additionalPositiveEffectCount > 0) { List randomlySelectedRecipes = pullRandomMatchingRecipes(beneficialRecipes, additionalPositiveEffectCount, effects, baseIngredient); for (PotionWorkshopBrewingRecipe recipe : randomlySelectedRecipes) { - InkPoweredStatusEffectInstance statusEffectInstance = recipe.recipeData.getStatusEffectInstance(potionMod, random); + InkPoweredMobEffectInstance statusEffectInstance = recipe.recipeData.getStatusEffectInstance(potionMod, random); if (statusEffectInstance != null) { effects.add(statusEffectInstance); } @@ -339,7 +338,7 @@ private void addRandomEffects(ItemStack baseIngredient, PotionMod potionMod, Ran if (additionalNegativeEffectCount > 0) { List randomlySelectedRecipes = pullRandomMatchingRecipes(potionMod.flags().makeEffectsBeneficial() ? beneficialRecipes : harmfulRecipes, additionalNegativeEffectCount, effects, baseIngredient); for (PotionWorkshopBrewingRecipe recipe : randomlySelectedRecipes) { - InkPoweredStatusEffectInstance statusEffectInstance = recipe.recipeData.getStatusEffectInstance(potionMod, random); + InkPoweredMobEffectInstance statusEffectInstance = recipe.recipeData.getStatusEffectInstance(potionMod, random); if (statusEffectInstance != null) { effects.add(statusEffectInstance); } @@ -347,7 +346,7 @@ private void addRandomEffects(ItemStack baseIngredient, PotionMod potionMod, Ran } } - private List pullRandomMatchingRecipes(List list, int amount, List effects, ItemStack baseIngredient) { + private List pullRandomMatchingRecipes(List list, int amount, List effects, ItemStack baseIngredient) { List results = new ArrayList<>(); List shuffledPositiveRecipes = new ArrayList<>(list); Collections.shuffle(shuffledPositiveRecipes); @@ -370,8 +369,8 @@ private List pullRandomMatchingRecipes(List effects, MobEffect statusEffect) { - for (InkPoweredStatusEffectInstance existingInstance : effects) { + private boolean containsEffect(List effects, MobEffect statusEffect) { + for (InkPoweredMobEffectInstance existingInstance : effects) { if (existingInstance.getStatusEffectInstance().getEffect().value() == statusEffect) { return true; } @@ -379,10 +378,10 @@ private boolean containsEffect(List effects, Mob return false; } - private List applyPotentDecreasingEffect(List statusEffectInstances, RandomSource random) { - List splitInstances = new ArrayList<>(); + private List applyPotentDecreasingEffect(List statusEffectInstances, RandomSource random) { + List splitInstances = new ArrayList<>(); - for (InkPoweredStatusEffectInstance poweredInstance : statusEffectInstances) { + for (InkPoweredMobEffectInstance poweredInstance : statusEffectInstances) { MobEffectInstance instance = poweredInstance.getStatusEffectInstance(); // instant effects, like harming do not get split (that would apply harming 3x @@ -395,7 +394,7 @@ private List applyPotentDecreasingEffect(List= 0) { - splitInstances.add(new InkPoweredStatusEffectInstance(new MobEffectInstance(instance.getEffect(), newDuration, newAmplifier, instance.isAmbient(), instance.isVisible()), poweredInstance.getInkCost(), poweredInstance.getColor(), poweredInstance.isUnidentifiable())); + splitInstances.add(new InkPoweredMobEffectInstance(new MobEffectInstance(instance.getEffect(), newDuration, newAmplifier, instance.isAmbient(), instance.isVisible()), poweredInstance.getInkCost(), poweredInstance.customColor(), poweredInstance.unidentifiable())); } } } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumDataComponentTypes.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumDataComponentTypes.java index 54597d1d8a..0691f0502d 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumDataComponentTypes.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumDataComponentTypes.java @@ -42,7 +42,7 @@ public class SpectrumDataComponentTypes { public static final Supplier> INERTIA = register("inertia", builder -> builder.persistent(InertiaComponent.CODEC).networkSynchronized(InertiaComponent.PACKET_CODEC)); public static final Supplier> INFUSED_BEVERAGE = register("infused_beverage", builder -> builder.persistent(InfusedBeverageComponent.CODEC).networkSynchronized(InfusedBeverageComponent.PACKET_CODEC)); public static final Supplier> INK_COLOR = register("ink_color", builder -> builder.persistent(InkColor.CODEC).networkSynchronized(InkColor.PACKET_CODEC)); - public static final Supplier> INK_POWERED = register("ink_powered", builder -> builder.persistent(InkPoweredComponent.CODEC).networkSynchronized(InkPoweredComponent.PACKET_CODEC).cacheEncoding()); + public static final Supplier> INK_POWERED_POTION_CONTENTS = register("ink_powered_potion_contents", builder -> builder.persistent(InkPoweredPotionContentsComponent.CODEC).networkSynchronized(InkPoweredPotionContentsComponent.PACKET_CODEC).cacheEncoding()); public static final Supplier> INK_STORAGE = register("ink_storage", builder -> builder.persistent(InkStorageComponent.CODEC).networkSynchronized(InkStorageComponent.PACKET_CODEC).cacheEncoding()); public static final Supplier> IS_PREVIEW_ITEM = register("is_preview_item", builder -> builder.persistent(Codec.unit(Unit.INSTANCE)).networkSynchronized(StreamCodec.unit(Unit.INSTANCE))); public static final Supplier> JADE_WINE = register("jade_wine", builder -> builder.persistent(JadeWineComponent.CODEC).networkSynchronized(JadeWineComponent.PACKET_CODEC)); diff --git a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumColorProviders.java b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumColorProviders.java index 4a1a1a8340..5b11bc5cbe 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumColorProviders.java +++ b/src/main/java/de/dafuqs/spectrum/registries/client/SpectrumColorProviders.java @@ -74,9 +74,13 @@ public static void registerItems(RegisterColorHandlersEvent.Item event) { event.register((stack, tintIndex) -> { if (tintIndex > 0) { - List effects = InkPoweredStatusEffectInstance.getEffects(stack); - if (effects.size() > tintIndex - 1) { - return FastColor.ARGB32.opaque(effects.get(tintIndex - 1).getColor()); + InkPoweredPotionContentsComponent component = stack.get(SpectrumDataComponentTypes.INK_POWERED_POTION_CONTENTS); + if(component != null) { + int effectIndex = tintIndex - 1; + List effects = component.effects(); + if (effects.size() > effectIndex) { + return FastColor.ARGB32.opaque(effects.get(effectIndex).getColor()); + } } } return -1; @@ -84,9 +88,9 @@ public static void registerItems(RegisterColorHandlersEvent.Item event) { event.register((stack, tintIndex) -> { if (tintIndex == 1) { - List effects = InkPoweredStatusEffectInstance.getEffects(stack); - if (!effects.isEmpty()) { - return FastColor.ARGB32.opaque(effects.getFirst().getColor()); + InkPoweredPotionContentsComponent component = stack.get(SpectrumDataComponentTypes.INK_POWERED_POTION_CONTENTS); + if(component != null) { + return FastColor.ARGB32.opaque(component.effects().getFirst().getColor()); } } return -1; diff --git a/src/main/resources/data/spectrum/loot_table/archaeology/undergrowth_manor.json b/src/main/resources/data/spectrum/loot_table/archaeology/undergrowth_manor.json index a84f367f28..bff17fd010 100644 --- a/src/main/resources/data/spectrum/loot_table/archaeology/undergrowth_manor.json +++ b/src/main/resources/data/spectrum/loot_table/archaeology/undergrowth_manor.json @@ -10,17 +10,25 @@ "weight": 4, "functions": [ { - "function": "spectrum:fill_potion_fillable", - "ambient": true, - "show_particles": true, - "duration": 1200, - "status_effect": [ - "spectrum:somnolence" - ], - "color": 11434988, - "amplifier": 0, - "ink_color": "spectrum:purple", - "ink_cost": 8 + "function": "minecraft:set_components", + "components": { + "spectrum:ink_powered_potion_contents": { + "effects": [ + { + "effect": { + "id": "spectrum:somnolence", + "duration": 100, + "show_particles": false + }, + "ink_cost": { + "color": "spectrum:purple", + "amount": 8 + } + } + ] + } + }, + "conditions": [] } ] }, diff --git a/src/main/resources/data/spectrum/loot_table/chests/sub_tables/treasure_potion_pendants.json b/src/main/resources/data/spectrum/loot_table/chests/sub_tables/treasure_potion_pendants.json deleted file mode 100644 index e5b8708711..0000000000 --- a/src/main/resources/data/spectrum/loot_table/chests/sub_tables/treasure_potion_pendants.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "type": "minecraft:chest", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "name": "spectrum:lesser_potion_pendant", - "functions": [ - { - "function": "spectrum:fill_potion_fillable", - "ambient": true, - "show_particles": false, - "duration": 3600, - "status_effect": [ - "spectrum:immunity" - ], - "color": -1, - "amplifier": 0, - "ink_color": [ - "spectrum:white" - ], - "ink_cost": 64 - } - ], - "conditions": [ - { - "condition": "minecraft:random_chance", - "chance": 0.05 - } - ] - }, - { - "type": "minecraft:item", - "name": "spectrum:lesser_potion_pendant", - "functions": [ - { - "function": "spectrum:fill_potion_fillable", - "ambient": true, - "show_particles": false, - "duration": 3600, - "status_effect": [ - "spectrum:frenzy" - ], - "color": -1, - "amplifier": 0, - "ink_color": [ - "spectrum:red" - ], - "ink_cost": 16 - } - ], - "conditions": [ - { - "condition": "minecraft:random_chance", - "chance": 0.05 - } - ] - }, - { - "type": "minecraft:item", - "name": "spectrum:lesser_potion_pendant", - "functions": [ - { - "function": "spectrum:fill_potion_fillable", - "ambient": true, - "show_particles": false, - "duration": 3600, - "status_effect": [ - "spectrum:lightweight" - ], - "color": -1, - "amplifier": { - "min": 0, - "max": 2 - }, - "ink_color": [ - "spectrum:light_blue" - ], - "ink_cost": 8 - } - ], - "conditions": [ - { - "condition": "minecraft:random_chance", - "chance": 0.05 - } - ] - }, - { - "type": "minecraft:item", - "name": "spectrum:lesser_potion_pendant", - "functions": [ - { - "function": "spectrum:fill_potion_fillable", - "ambient": true, - "show_particles": false, - "duration": 3600, - "status_effect": [ - "minecraft:strength", - "minecraft:speed", - "minecraft:haste" - ], - "color": -1, - "amplifier": 2, - "ink_color": [ - "spectrum:red", - "spectrum:green", - "spectrum:blue" - ], - "ink_cost": 4 - } - ] - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/recipe/potion_workshop_reacting/neolith.json b/src/main/resources/data/spectrum/recipe/potion_workshop_reacting/neolith.json index 526e0a6975..9bbaf1ced0 100644 --- a/src/main/resources/data/spectrum/recipe/potion_workshop_reacting/neolith.json +++ b/src/main/resources/data/spectrum/recipe/potion_workshop_reacting/neolith.json @@ -2,7 +2,8 @@ "type": "spectrum:potion_workshop_reacting", "item": "spectrum:neolith", "modifiers": { - "unidentifiable": true + "unidentifiable": true, + "color": -13083194 }, "required_advancement": "spectrum:unlocks/reagents/neolith" } \ No newline at end of file From 6b7819ab16d3552766022bdb8b6c6c97207006ef Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Thu, 13 Aug 2026 14:03:38 +0200 Subject: [PATCH 217/477] the `spectrum:block_broken` advancement criterion can now test for all kinds of stuff --- .../SpectrumAdvancementCriteria.java | 1 + .../advancement/BlockBrokenCriterion.java | 28 ++++++++++++++----- .../registries/SpectrumEventListeners.java | 2 +- .../advancement/break_cracked_dragonbone.json | 13 ++++++--- .../advancement/break_gemstone_ore.json | 24 +++++++--------- .../hidden/break_black_materia.json | 13 ++++++--- .../hidden/break_nightdew_vine.json | 13 ++++++--- ...eak_budding_block_with_resonance_tool.json | 13 +++++++-- ...ak_infested_block_with_resonance_tool.json | 13 +++++++-- .../break_spawner_with_resonance_tool.json | 13 +++++++-- .../midgame/break_decayed_bedrock.json | 17 +++++++---- 11 files changed, 102 insertions(+), 48 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/progression/SpectrumAdvancementCriteria.java b/src/main/java/de/dafuqs/spectrum/progression/SpectrumAdvancementCriteria.java index a2927485be..291033a8c4 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/SpectrumAdvancementCriteria.java +++ b/src/main/java/de/dafuqs/spectrum/progression/SpectrumAdvancementCriteria.java @@ -3,6 +3,7 @@ import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.progression.advancement.*; import net.minecraft.advancements.*; +import net.minecraft.advancements.critereon.*; import net.minecraft.core.registries.*; import net.neoforged.bus.api.*; import net.neoforged.neoforge.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/progression/advancement/BlockBrokenCriterion.java b/src/main/java/de/dafuqs/spectrum/progression/advancement/BlockBrokenCriterion.java index c963c24370..ebcd2ed184 100644 --- a/src/main/java/de/dafuqs/spectrum/progression/advancement/BlockBrokenCriterion.java +++ b/src/main/java/de/dafuqs/spectrum/progression/advancement/BlockBrokenCriterion.java @@ -4,8 +4,13 @@ import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.api.predicate.block.*; import net.minecraft.advancements.critereon.*; +import net.minecraft.core.*; import net.minecraft.server.level.*; +import net.minecraft.world.item.*; +import net.minecraft.world.level.*; import net.minecraft.world.level.block.state.*; +import net.minecraft.world.level.storage.loot.*; +import net.minecraft.world.level.storage.loot.parameters.*; import java.util.*; @@ -13,8 +18,17 @@ public class BlockBrokenCriterion extends SimpleCriterionTrigger conditions.matches(minedBlock)); + public void trigger(ServerPlayer player, BlockPos pos, ItemStack stack) { + ServerLevel serverlevel = player.serverLevel(); + BlockState blockstate = serverlevel.getBlockState(pos); + LootParams lootparams = new LootParams.Builder(serverlevel) + .withParameter(LootContextParams.ORIGIN, pos.getCenter()) + .withParameter(LootContextParams.THIS_ENTITY, player) + .withParameter(LootContextParams.BLOCK_STATE, blockstate) + .withParameter(LootContextParams.TOOL, stack) + .create(LootContextParamSets.ADVANCEMENT_LOCATION); + LootContext lootcontext = new LootContext.Builder(lootparams).create(Optional.empty()); + this.trigger(player, (conditions) -> conditions.matches(lootcontext)); } @Override @@ -22,18 +36,18 @@ public Codec codec() { return Conditions.CODEC; } - public record Conditions(Optional player, Optional blockPredicate) implements SimpleCriterionTrigger.SimpleInstance { + public record Conditions(Optional player, Optional location) implements SimpleCriterionTrigger.SimpleInstance { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(BlockBrokenCriterion.Conditions::player), - BrokenBlockPredicate.CODEC.optionalFieldOf("block").forGetter(BlockBrokenCriterion.Conditions::blockPredicate) + ContextAwarePredicate.CODEC.optionalFieldOf("location").forGetter(BlockBrokenCriterion.Conditions::location) ).apply(instance, Conditions::new)); - public boolean matches(BlockState blockState) { - if (blockPredicate.isEmpty()) { + public boolean matches(LootContext lootContext) { + if (location.isEmpty()) { return true; } - return this.blockPredicate.get().test(blockState); + return this.location.get().matches(lootContext); } } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index 3df66dd119..d68964bded 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -1018,7 +1018,7 @@ private static void onBlockBreak(BlockEvent.BreakEvent event) { InertiaComponent.onInertiaBlockBreak(level, pos, state, serverPlayerEntity, handStack); } - SpectrumAdvancementCriteria.BLOCK_BROKEN.trigger(serverPlayerEntity, state); + SpectrumAdvancementCriteria.BLOCK_BROKEN.trigger(serverPlayerEntity, pos, player.getMainHandItem()); } ItemStack miningStack = player.getMainHandItem(); diff --git a/src/main/resources/data/spectrum/advancement/break_cracked_dragonbone.json b/src/main/resources/data/spectrum/advancement/break_cracked_dragonbone.json index 6f59112fa5..1144bd220e 100644 --- a/src/main/resources/data/spectrum/advancement/break_cracked_dragonbone.json +++ b/src/main/resources/data/spectrum/advancement/break_cracked_dragonbone.json @@ -15,11 +15,16 @@ "criteria": { "broken_cracked_dragonbone": { "trigger": "spectrum:block_broken", - "conditions": { - "block": { - "blocks": "spectrum:cracked_dragonbone" + "location": [ + { + "condition": "minecraft:location_check", + "predicate": { + "block": { + "blocks": "spectrum:cracked_dragonbone" + } + } } - } + ] }, "has_dragonbone": { "trigger": "minecraft:inventory_changed", diff --git a/src/main/resources/data/spectrum/advancement/break_gemstone_ore.json b/src/main/resources/data/spectrum/advancement/break_gemstone_ore.json index 84bff8714f..df1cab3a9c 100644 --- a/src/main/resources/data/spectrum/advancement/break_gemstone_ore.json +++ b/src/main/resources/data/spectrum/advancement/break_gemstone_ore.json @@ -16,20 +16,16 @@ "broken_gemstone_ore": { "trigger": "spectrum:block_broken", "conditions": { - "block": { - "blocks": [ - "spectrum:topaz_ore", - "spectrum:amethyst_ore", - "spectrum:citrine_ore", - "spectrum:onyx_ore", - "spectrum:moonstone_ore", - "spectrum:deepslate_topaz_ore", - "spectrum:deepslate_amethyst_ore", - "spectrum:deepslate_citrine_ore", - "spectrum:deepslate_onyx_ore", - "spectrum:deepslate_moonstone_ore" - ] - }, + "location": [ + { + "condition": "minecraft:location_check", + "predicate": { + "block": { + "blocks": "#spectrum:gemstone_ores" + } + } + } + ], "player": [ { "condition": "minecraft:entity_properties", diff --git a/src/main/resources/data/spectrum/advancement/hidden/break_black_materia.json b/src/main/resources/data/spectrum/advancement/hidden/break_black_materia.json index 4c4d516e6d..0978d8e3bc 100644 --- a/src/main/resources/data/spectrum/advancement/hidden/break_black_materia.json +++ b/src/main/resources/data/spectrum/advancement/hidden/break_black_materia.json @@ -2,11 +2,16 @@ "criteria": { "broken_black_materia": { "trigger": "spectrum:block_broken", - "conditions": { - "block": { - "blocks": "spectrum:black_materia" + "location": [ + { + "condition": "minecraft:location_check", + "predicate": { + "block": { + "blocks": "spectrum:black_materia" + } + } } - } + ] }, "gotten_previous": { "trigger": "revelationary:advancement_gotten", diff --git a/src/main/resources/data/spectrum/advancement/hidden/break_nightdew_vine.json b/src/main/resources/data/spectrum/advancement/hidden/break_nightdew_vine.json index 4b02259fce..7b760afb8b 100644 --- a/src/main/resources/data/spectrum/advancement/hidden/break_nightdew_vine.json +++ b/src/main/resources/data/spectrum/advancement/hidden/break_nightdew_vine.json @@ -2,11 +2,16 @@ "criteria": { "broken_nightdew": { "trigger": "spectrum:block_broken", - "conditions": { - "block": { - "blocks": "spectrum:nightdew" + "location": [ + { + "condition": "minecraft:location_check", + "predicate": { + "block": { + "blocks": "spectrum:nightdew" + } + } } - } + ] }, "gotten_previous": { "trigger": "revelationary:advancement_gotten", diff --git a/src/main/resources/data/spectrum/advancement/lategame/break_budding_block_with_resonance_tool.json b/src/main/resources/data/spectrum/advancement/lategame/break_budding_block_with_resonance_tool.json index cbb7ce4514..566c6c242b 100644 --- a/src/main/resources/data/spectrum/advancement/lategame/break_budding_block_with_resonance_tool.json +++ b/src/main/resources/data/spectrum/advancement/lategame/break_budding_block_with_resonance_tool.json @@ -37,9 +37,16 @@ } } }, - "block": { - "blocks": "#spectrum:budding_blocks" - } + "location": [ + { + "condition": "minecraft:location_check", + "predicate": { + "block": { + "blocks": "#spectrum:budding_blocks" + } + } + } + ] } }, "gotten_previous": { diff --git a/src/main/resources/data/spectrum/advancement/lategame/break_infested_block_with_resonance_tool.json b/src/main/resources/data/spectrum/advancement/lategame/break_infested_block_with_resonance_tool.json index 8a58c1117a..421d66119c 100644 --- a/src/main/resources/data/spectrum/advancement/lategame/break_infested_block_with_resonance_tool.json +++ b/src/main/resources/data/spectrum/advancement/lategame/break_infested_block_with_resonance_tool.json @@ -37,9 +37,16 @@ } } }, - "block": { - "blocks": "#spectrum:infested_blocks" - } + "location": [ + { + "condition": "minecraft:location_check", + "predicate": { + "block": { + "blocks": "#spectrum:infested_blocks" + } + } + } + ] } }, "gotten_previous": { diff --git a/src/main/resources/data/spectrum/advancement/lategame/break_spawner_with_resonance_tool.json b/src/main/resources/data/spectrum/advancement/lategame/break_spawner_with_resonance_tool.json index b199f1408f..02d9eb959d 100644 --- a/src/main/resources/data/spectrum/advancement/lategame/break_spawner_with_resonance_tool.json +++ b/src/main/resources/data/spectrum/advancement/lategame/break_spawner_with_resonance_tool.json @@ -37,9 +37,16 @@ } } }, - "block": { - "blocks": "minecraft:spawner" - } + "location": [ + { + "condition": "minecraft:location_check", + "predicate": { + "block": { + "blocks": "minecraft:spawner" + } + } + } + ] } }, "gotten_previous": { diff --git a/src/main/resources/data/spectrum/advancement/midgame/break_decayed_bedrock.json b/src/main/resources/data/spectrum/advancement/midgame/break_decayed_bedrock.json index c1ba0712c4..3a4802bff9 100644 --- a/src/main/resources/data/spectrum/advancement/midgame/break_decayed_bedrock.json +++ b/src/main/resources/data/spectrum/advancement/midgame/break_decayed_bedrock.json @@ -15,12 +15,19 @@ "broken_decayed_bedrock": { "trigger": "spectrum:block_broken", "conditions": { - "block": { - "blocks": "spectrum:ruin", - "state": { - "conversion": "default" + "location": [ + { + "condition": "minecraft:location_check", + "predicate": { + "block": { + "blocks": "spectrum:ruin", + "state": { + "conversion": "default" + } + } + } } - } + ] } }, "collected_bedrock_dust": { From f21e07574f6789a8ffa0892e73eeb86e2b29f1ec Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Thu, 13 Aug 2026 14:29:19 +0200 Subject: [PATCH 218/477] removed that hideous entity type builder helper method. Potentially fix mixin crash with mekanism additions --- .../SplinterspawnInfestedBlock.java | 1 - .../blocks/mob_head/SpectrumSkullType.java | 1 - .../entity/SpectrumEntityRenderers.java | 1 + .../entity/entity/BedrockFishingHook.java | 2 +- .../spectrum/entity/entity/BidentEntity.java | 2 +- .../entity/BidentMirrorImageEntity.java | 1 - .../entity/entity/BlockFlooderProjectile.java | 1 - .../entity/DraconicTwinswordEntity.java | 1 - .../entity/entity/DragonTalonEntity.java | 1 - .../entity/EggLayingWoolyPigEntity.java | 1 - .../entity/entity/FireproofItemEntity.java | 2 +- .../entity/entity/FloatBlockEntity.java | 1 - .../entity/entity/ItemProjectileEntity.java | 2 +- .../entity/entity/KindlingCoughEntity.java | 1 - .../entity/entity/LagoonFishingHook.java | 2 +- .../entity/entity/LightMineEntity.java | 2 +- .../entity/entity/LightShardEntity.java | 2 +- .../entity/entity/LightSpearEntity.java | 2 +- .../entity/entity/MiningProjectileEntity.java | 2 +- .../entity/entity/MoltenFishingHook.java | 2 +- .../entity/entity/MonstrosityEntity.java | 1 - .../entity/ParametricMiningDeviceEntity.java | 1 - .../entity/entity/PhantomGlowFrameEntity.java | 1 - .../entity/PreservationTurretEntity.java | 1 - .../spectrum/entity/entity/SeatEntity.java | 2 +- .../entity/entity/ShootingStarEntity.java | 1 - .../render/PhantomFrameEntityRenderer.java | 2 +- .../entity/spawners/MonstrositySpawner.java | 2 +- .../items/item_frame/PhantomFrameItem.java | 2 +- .../item_frame/PhantomGlowFrameItem.java | 2 +- .../spectrum/mixin/EntityTypeMixin.java | 20 ------- .../spectrum/registries/SpectrumBlocks.java | 1 - .../SpectrumEntityColorProcessors.java | 1 - .../SpectrumEntityTypes.java | 59 +++++++------------ .../spectrum/registries/SpectrumItems.java | 1 - src/main/resources/spectrum.mixins.json | 1 - 36 files changed, 36 insertions(+), 92 deletions(-) delete mode 100644 src/main/java/de/dafuqs/spectrum/mixin/EntityTypeMixin.java rename src/main/java/de/dafuqs/spectrum/{entity => registries}/SpectrumEntityTypes.java (65%) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/SplinterspawnInfestedBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/SplinterspawnInfestedBlock.java index c47d92c77a..7ac49b60aa 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/SplinterspawnInfestedBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/deeper_down/SplinterspawnInfestedBlock.java @@ -4,7 +4,6 @@ import com.mojang.serialization.*; import com.mojang.serialization.codecs.*; import de.dafuqs.spectrum.config.*; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.entity.entity.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/blocks/mob_head/SpectrumSkullType.java b/src/main/java/de/dafuqs/spectrum/blocks/mob_head/SpectrumSkullType.java index 180f67ccf7..6c7b6f3e24 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/mob_head/SpectrumSkullType.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/mob_head/SpectrumSkullType.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.blocks.mob_head; import com.mojang.serialization.*; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.resources.*; import net.minecraft.sounds.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/SpectrumEntityRenderers.java b/src/main/java/de/dafuqs/spectrum/entity/SpectrumEntityRenderers.java index edeacbfd68..b9c29566ee 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/SpectrumEntityRenderers.java +++ b/src/main/java/de/dafuqs/spectrum/entity/SpectrumEntityRenderers.java @@ -1,6 +1,7 @@ package de.dafuqs.spectrum.entity; import de.dafuqs.spectrum.entity.render.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.client.renderer.entity.*; import net.minecraft.world.entity.*; import net.neoforged.fml.event.lifecycle.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/BedrockFishingHook.java b/src/main/java/de/dafuqs/spectrum/entity/entity/BedrockFishingHook.java index 8112d9031f..4e78bb0547 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/BedrockFishingHook.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/BedrockFishingHook.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.entity.entity; -import de.dafuqs.spectrum.entity.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.world.entity.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.level.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/BidentEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/BidentEntity.java index c5fd3fc385..bda7814adb 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/BidentEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/BidentEntity.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.entity.entity; -import de.dafuqs.spectrum.entity.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.world.entity.*; import net.minecraft.world.entity.projectile.*; import net.minecraft.world.level.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/BidentMirrorImageEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/BidentMirrorImageEntity.java index 850358691f..0d414cf6c4 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/BidentMirrorImageEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/BidentMirrorImageEntity.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.entity.entity; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.magic.*; import de.dafuqs.spectrum.particle.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/BlockFlooderProjectile.java b/src/main/java/de/dafuqs/spectrum/entity/entity/BlockFlooderProjectile.java index b21da86814..6b764bf67b 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/BlockFlooderProjectile.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/BlockFlooderProjectile.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.entity.entity; import de.dafuqs.spectrum.blocks.block_flooder.*; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.core.particles.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/DraconicTwinswordEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/DraconicTwinswordEntity.java index bc5d82856d..6f762415bc 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/DraconicTwinswordEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/DraconicTwinswordEntity.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.entity.entity; import de.dafuqs.spectrum.api.item.*; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.helpers.enchantments.*; import de.dafuqs.spectrum.items.tools.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/DragonTalonEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/DragonTalonEntity.java index 7be4f47186..c01aef9b28 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/DragonTalonEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/DragonTalonEntity.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.entity.entity; import de.dafuqs.spectrum.api.item.*; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.items.tools.*; import de.dafuqs.spectrum.mixin.accessors.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/EggLayingWoolyPigEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/EggLayingWoolyPigEntity.java index 287199d0e8..105216815c 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/EggLayingWoolyPigEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/EggLayingWoolyPigEntity.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.entity.entity; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/FireproofItemEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/FireproofItemEntity.java index 3748b2bd36..23f0b3c5bb 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/FireproofItemEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/FireproofItemEntity.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.entity.entity; -import de.dafuqs.spectrum.entity.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.tags.*; import net.minecraft.world.damagesource.*; import net.minecraft.world.entity.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/FloatBlockEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/FloatBlockEntity.java index ddf3fd98af..8cb01387a5 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/FloatBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/FloatBlockEntity.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.entity.entity; import de.dafuqs.spectrum.blocks.*; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.recipe.anvil_crushing.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/ItemProjectileEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/ItemProjectileEntity.java index d299f60053..d8154788d3 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/ItemProjectileEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/ItemProjectileEntity.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.entity.entity; import de.dafuqs.spectrum.api.interaction.*; -import de.dafuqs.spectrum.entity.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.core.particles.*; import net.minecraft.world.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/KindlingCoughEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/KindlingCoughEntity.java index 1775df39b3..cef81201c6 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/KindlingCoughEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/KindlingCoughEntity.java @@ -2,7 +2,6 @@ import de.dafuqs.spectrum.attachment_types.*; import de.dafuqs.spectrum.blocks.*; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.particle.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.network.protocol.game.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/LagoonFishingHook.java b/src/main/java/de/dafuqs/spectrum/entity/entity/LagoonFishingHook.java index a1ddb8408f..4a51549a02 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/LagoonFishingHook.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/LagoonFishingHook.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.entity.entity; -import de.dafuqs.spectrum.entity.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.world.entity.*; import net.minecraft.world.entity.player.*; import net.minecraft.world.level.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/LightMineEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/LightMineEntity.java index f536253c48..4570d57380 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/LightMineEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/LightMineEntity.java @@ -2,8 +2,8 @@ import com.google.common.collect.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.helpers.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.core.particles.*; import net.minecraft.nbt.*; import net.minecraft.network.syncher.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/LightShardEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/LightShardEntity.java index 6f23bab8a0..c18d23ae88 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/LightShardEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/LightShardEntity.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.entity.entity; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.entity.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.resources.*; import net.minecraft.util.valueproviders.*; import net.minecraft.world.entity.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/LightSpearEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/LightSpearEntity.java index 8972b1591e..5f3a15659f 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/LightSpearEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/LightSpearEntity.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.entity.entity; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.entity.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.commands.arguments.*; import net.minecraft.resources.*; import net.minecraft.util.valueproviders.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/MiningProjectileEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/MiningProjectileEntity.java index 739d0a7a91..f4b63a5b98 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/MiningProjectileEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/MiningProjectileEntity.java @@ -1,10 +1,10 @@ package de.dafuqs.spectrum.entity.entity; import de.dafuqs.spectrum.api.ink.color.*; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.magic.*; import de.dafuqs.spectrum.particle.effect.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.network.syncher.*; import net.minecraft.world.entity.*; import net.minecraft.world.entity.player.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/MoltenFishingHook.java b/src/main/java/de/dafuqs/spectrum/entity/entity/MoltenFishingHook.java index 80c36a1677..a69795f7c3 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/MoltenFishingHook.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/MoltenFishingHook.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.entity.entity; import de.dafuqs.spectrum.blocks.idols.*; -import de.dafuqs.spectrum.entity.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.server.level.*; import net.minecraft.world.entity.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/MonstrosityEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/MonstrosityEntity.java index fcc7294114..8ebc012087 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/MonstrosityEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/MonstrosityEntity.java @@ -4,7 +4,6 @@ import de.dafuqs.additionalentityattributes.*; import de.dafuqs.revelationary.api.advancements.*; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.entity.ai.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.particle.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/ParametricMiningDeviceEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/ParametricMiningDeviceEntity.java index 84a1fc591b..9f72e3bb28 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/ParametricMiningDeviceEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/ParametricMiningDeviceEntity.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.entity.entity; import de.dafuqs.spectrum.blocks.boom.*; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.particle.*; import de.dafuqs.spectrum.registries.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/PhantomGlowFrameEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/PhantomGlowFrameEntity.java index ea07872acf..9db90aae70 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/PhantomGlowFrameEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/PhantomGlowFrameEntity.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.entity.entity; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.sounds.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/PreservationTurretEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/PreservationTurretEntity.java index e988a59695..466c6f3ea7 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/PreservationTurretEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/PreservationTurretEntity.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.entity.entity; import de.dafuqs.spectrum.*; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.entity.ai.*; import de.dafuqs.spectrum.registries.*; import net.minecraft.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/SeatEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/SeatEntity.java index 16f781da15..1e69bfe67c 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/SeatEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/SeatEntity.java @@ -1,6 +1,6 @@ package de.dafuqs.spectrum.entity.entity; -import de.dafuqs.spectrum.entity.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.core.registries.*; import net.minecraft.nbt.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/entity/ShootingStarEntity.java b/src/main/java/de/dafuqs/spectrum/entity/entity/ShootingStarEntity.java index 251d891abd..9f9d635931 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/entity/ShootingStarEntity.java +++ b/src/main/java/de/dafuqs/spectrum/entity/entity/ShootingStarEntity.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.entity.entity; import de.dafuqs.spectrum.blocks.shooting_star.*; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.networking.s2c_payloads.*; import de.dafuqs.spectrum.particle.effect.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/render/PhantomFrameEntityRenderer.java b/src/main/java/de/dafuqs/spectrum/entity/render/PhantomFrameEntityRenderer.java index 4ac9b9befd..cbc0eb7992 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/render/PhantomFrameEntityRenderer.java +++ b/src/main/java/de/dafuqs/spectrum/entity/render/PhantomFrameEntityRenderer.java @@ -2,8 +2,8 @@ import com.mojang.blaze3d.vertex.*; import com.mojang.math.*; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.entity.entity.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.client.*; import net.minecraft.client.renderer.*; import net.minecraft.client.renderer.block.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/spawners/MonstrositySpawner.java b/src/main/java/de/dafuqs/spectrum/entity/spawners/MonstrositySpawner.java index 8d0686c667..cc60aea871 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/spawners/MonstrositySpawner.java +++ b/src/main/java/de/dafuqs/spectrum/entity/spawners/MonstrositySpawner.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.entity.spawners; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.entity.entity.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.server.level.*; import net.minecraft.world.*; import net.minecraft.world.entity.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/item_frame/PhantomFrameItem.java b/src/main/java/de/dafuqs/spectrum/items/item_frame/PhantomFrameItem.java index 6bf04be3ba..3affff9da7 100644 --- a/src/main/java/de/dafuqs/spectrum/items/item_frame/PhantomFrameItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/item_frame/PhantomFrameItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items.item_frame; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.entity.entity.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.world.entity.*; import net.minecraft.world.entity.decoration.*; diff --git a/src/main/java/de/dafuqs/spectrum/items/item_frame/PhantomGlowFrameItem.java b/src/main/java/de/dafuqs/spectrum/items/item_frame/PhantomGlowFrameItem.java index 74268b9966..66acd360f5 100644 --- a/src/main/java/de/dafuqs/spectrum/items/item_frame/PhantomGlowFrameItem.java +++ b/src/main/java/de/dafuqs/spectrum/items/item_frame/PhantomGlowFrameItem.java @@ -1,7 +1,7 @@ package de.dafuqs.spectrum.items.item_frame; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.entity.entity.*; +import de.dafuqs.spectrum.registries.*; import net.minecraft.core.*; import net.minecraft.world.entity.*; import net.minecraft.world.entity.decoration.*; diff --git a/src/main/java/de/dafuqs/spectrum/mixin/EntityTypeMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/EntityTypeMixin.java deleted file mode 100644 index 70e35ba2f4..0000000000 --- a/src/main/java/de/dafuqs/spectrum/mixin/EntityTypeMixin.java +++ /dev/null @@ -1,20 +0,0 @@ -package de.dafuqs.spectrum.mixin; - -import de.dafuqs.spectrum.entity.*; -import net.minecraft.world.entity.*; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.*; -import org.spongepowered.asm.mixin.injection.callback.*; - -@Mixin(EntityType.class) -public abstract class EntityTypeMixin { - - @Inject(at = @At("TAIL"), method = "trackDeltas", cancellable = true) - public void alwaysUpdateVelocity(CallbackInfoReturnable cir) { - Object thisObject = this; - if (thisObject == SpectrumEntityTypes.PHANTOM_FRAME.get() || thisObject == SpectrumEntityTypes.GLOW_PHANTOM_FRAME.get() || thisObject == SpectrumEntityTypes.KINDLING_COUGH.get()) { - cir.setReturnValue(false); - } - } - -} diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java index 6f19a6ca24..0c8b8b3fb7 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlocks.java @@ -52,7 +52,6 @@ import de.dafuqs.spectrum.blocks.upgrade.*; import de.dafuqs.spectrum.blocks.weathering.*; import de.dafuqs.spectrum.data.*; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.entity.entity.*; import de.dafuqs.spectrum.items.conditional.*; import de.dafuqs.spectrum.particle.*; diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityColorProcessors.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityColorProcessors.java index e37e1c2808..3edc66304f 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityColorProcessors.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityColorProcessors.java @@ -2,7 +2,6 @@ import de.dafuqs.spectrum.api.ink.color.*; import de.dafuqs.spectrum.api.interaction.*; -import de.dafuqs.spectrum.entity.*; import net.minecraft.world.entity.*; import net.minecraft.world.item.*; import org.jspecify.annotations.*; diff --git a/src/main/java/de/dafuqs/spectrum/entity/SpectrumEntityTypes.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityTypes.java similarity index 65% rename from src/main/java/de/dafuqs/spectrum/entity/SpectrumEntityTypes.java rename to src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityTypes.java index a1ea2da837..c36a9b057d 100644 --- a/src/main/java/de/dafuqs/spectrum/entity/SpectrumEntityTypes.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEntityTypes.java @@ -1,4 +1,4 @@ -package de.dafuqs.spectrum.entity; +package de.dafuqs.spectrum.registries; import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.entity.entity.*; @@ -12,26 +12,26 @@ public class SpectrumEntityTypes { - private static final DeferredRegister> REGISTER = DeferredRegister.create(Registries.ENTITY_TYPE, SpectrumCommon.MOD_ID); + private static final DeferredRegister> REGISTRAR = DeferredRegister.create(Registries.ENTITY_TYPE, SpectrumCommon.MOD_ID); - public static final DeferredHolder, EntityType> LIVING_MARKER = register("living_marker", 0, 2147483647, false, EntityDimensions.scalable(0F, 0F), true, LivingMarkerEntity::new); - public static final DeferredHolder, EntityType> SHOOTING_STAR = register("shooting_star", 15, 20, true, EntityDimensions.scalable(0.8F, 0.8F), true, ShootingStarEntity::new); - public static final DeferredHolder, EntityType> SEAT = register("seat", 8, 10, false, EntityDimensions.scalable(0.01F, 0.01F), true, SeatEntity::new); - public static final DeferredHolder, EntityType> FLOAT_BLOCK = register("float_block", 10, 20, true, EntityDimensions.scalable(0.98F, 0.98F), true, FloatBlockEntity::new); - public static final DeferredHolder, EntityType> PHANTOM_FRAME = register("phantom_frame", 10, 2147483647, false, EntityDimensions.scalable(0.5F, 0.5F), false, PhantomFrameEntity::new); - public static final DeferredHolder, EntityType> GLOW_PHANTOM_FRAME = register("glow_phantom_frame", 10, 2147483647, false, EntityDimensions.scalable(0.5F, 0.5F), false, PhantomGlowFrameEntity::new); - public static final DeferredHolder, EntityType> BLOCK_FLOODER_PROJECTILE = register("block_flooder_projectile", 4, 10, true, EntityDimensions.scalable(0.25F, 0.25F), true, BlockFlooderProjectile::new); - public static final DeferredHolder, EntityType> INK_PROJECTILE = register("ink_projectile", 4, 10, true, EntityDimensions.scalable(0.3F, 0.3F), true, InkProjectileEntity::new); + public static final DeferredHolder, EntityType> LIVING_MARKER = register("living_marker", EntityType.Builder.of(LivingMarkerEntity::new, MobCategory.MISC).clientTrackingRange(0).updateInterval(2147483647).setShouldReceiveVelocityUpdates(false).sized(0F, 0F).fireImmune()); + public static final DeferredHolder, EntityType> SHOOTING_STAR = register("shooting_star", EntityType.Builder.of((EntityType.EntityFactory) ShootingStarEntity::new, MobCategory.MISC).clientTrackingRange(15).updateInterval(20).setShouldReceiveVelocityUpdates(true).sized(0.8F, 0.8F).fireImmune()); + public static final DeferredHolder, EntityType> SEAT = register("seat", EntityType.Builder.of((EntityType.EntityFactory) SeatEntity::new, MobCategory.MISC).clientTrackingRange(8).updateInterval(10).setShouldReceiveVelocityUpdates(false).sized(0.01F, 0.01F).fireImmune()); + public static final DeferredHolder, EntityType> FLOAT_BLOCK = register("float_block", EntityType.Builder.of((EntityType.EntityFactory) FloatBlockEntity::new, MobCategory.MISC).clientTrackingRange(10).updateInterval(20).setShouldReceiveVelocityUpdates(true).sized(0.98F, 0.98F).fireImmune()); + public static final DeferredHolder, EntityType> PHANTOM_FRAME = register("phantom_frame", EntityType.Builder.of((EntityType.EntityFactory) PhantomFrameEntity::new, MobCategory.MISC).clientTrackingRange(10).updateInterval(2147483647).setShouldReceiveVelocityUpdates(false).sized(0.5F, 0.5F)); + public static final DeferredHolder, EntityType> GLOW_PHANTOM_FRAME = register("glow_phantom_frame", EntityType.Builder.of((EntityType.EntityFactory) PhantomGlowFrameEntity::new, MobCategory.MISC).clientTrackingRange(10).updateInterval(2147483647).setShouldReceiveVelocityUpdates(false).sized(0.5F, 0.5F)); + public static final DeferredHolder, EntityType> BLOCK_FLOODER_PROJECTILE = register("block_flooder_projectile", EntityType.Builder.of((EntityType.EntityFactory) BlockFlooderProjectile::new, MobCategory.MISC).clientTrackingRange(4).updateInterval(10).setShouldReceiveVelocityUpdates(true).sized(0.25F, 0.25F).fireImmune()); + public static final DeferredHolder, EntityType> INK_PROJECTILE = register("ink_projectile", EntityType.Builder.of((EntityType.EntityFactory) InkProjectileEntity::new, MobCategory.MISC).clientTrackingRange(4).updateInterval(10).setShouldReceiveVelocityUpdates(true).sized(0.3F, 0.3F).fireImmune()); public static final DeferredHolder, EntityType> LAGOON_FISHING_BOBBER = register("lagoon_fishing_bobber", EntityType.Builder.of(LagoonFishingHook::new, MobCategory.MISC).noSave().noSummon().fireImmune().sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(5)); public static final DeferredHolder, EntityType> MOLTEN_FISHING_BOBBER = register("molten_fishing_bobber", EntityType.Builder.of(MoltenFishingHook::new, MobCategory.MISC).noSave().noSummon().fireImmune().sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(5)); public static final DeferredHolder, EntityType> BEDROCK_FISHING_BOBBER = register("bedrock_fishing_bobber", EntityType.Builder.of(BedrockFishingHook::new, MobCategory.MISC).noSave().noSummon().fireImmune().sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(5)); - public static final DeferredHolder, EntityType> FIREPROOF_ITEM = register("fireproof_item", 6, 20, true, EntityDimensions.scalable(0.25F, 0.25F), true, FireproofItemEntity::new); + public static final DeferredHolder, EntityType> FIREPROOF_ITEM = register("fireproof_item", EntityType.Builder.of((EntityType.EntityFactory) FireproofItemEntity::new, MobCategory.MISC).clientTrackingRange(6).updateInterval(20).setShouldReceiveVelocityUpdates(true).sized(0.25F, 0.25F).fireImmune()); public static final DeferredHolder, EntityType> EGG_LAYING_WOOLY_PIG = register("egg_laying_wooly_pig", EntityType.Builder.of(EggLayingWoolyPigEntity::new, MobCategory.CREATURE).sized(0.9F, 1.3F).clientTrackingRange(10)); public static final DeferredHolder, EntityType> GLASS_ARROW = register("glass_arrow", EntityType.Builder.of(GlassArrowEntity::new, MobCategory.MISC).sized(0.5F, 0.5F).clientTrackingRange(4).updateInterval(20)); - public static final DeferredHolder, EntityType> MINING_PROJECTILE = register("mining_projectile", 4, 10, true, EntityDimensions.scalable(0.3F, 0.3F), true, MiningProjectileEntity::new); - public static final DeferredHolder, EntityType> PARAMETRIC_MINING_DEVICE_ENTITY = register("parametric_mining_device", 4, 10, true, EntityDimensions.scalable(0.25F, 0.25F), false, ParametricMiningDeviceEntity::new); - public static final DeferredHolder, EntityType> BIDENT = register("bident", 4, 10, true, EntityDimensions.scalable(0.5F, 0.5F), true, BidentEntity::new); - public static final DeferredHolder, EntityType> BIDENT_MIRROR_IMAGE = register("bident_mirror_image", 4, 10, true, EntityDimensions.scalable(0.5F, 0.5F), true, BidentMirrorImageEntity::new); + public static final DeferredHolder, EntityType> MINING_PROJECTILE = register("mining_projectile", EntityType.Builder.of((EntityType.EntityFactory) MiningProjectileEntity::new, MobCategory.MISC).clientTrackingRange(4).updateInterval(10).setShouldReceiveVelocityUpdates(true).sized(0.3F, 0.3F).fireImmune()); + public static final DeferredHolder, EntityType> PARAMETRIC_MINING_DEVICE_ENTITY = register("parametric_mining_device", EntityType.Builder.of((EntityType.EntityFactory) ParametricMiningDeviceEntity::new, MobCategory.MISC).clientTrackingRange(4).updateInterval(10).setShouldReceiveVelocityUpdates(true).sized(0.25F, 0.25F)); + public static final DeferredHolder, EntityType> BIDENT = register("bident", EntityType.Builder.of((EntityType.EntityFactory) BidentEntity::new, MobCategory.MISC).clientTrackingRange(4).updateInterval(10).setShouldReceiveVelocityUpdates(true).sized(0.5F, 0.5F).fireImmune()); + public static final DeferredHolder, EntityType> BIDENT_MIRROR_IMAGE = register("bident_mirror_image", EntityType.Builder.of((EntityType.EntityFactory) BidentMirrorImageEntity::new, MobCategory.MISC).clientTrackingRange(4).updateInterval(10).setShouldReceiveVelocityUpdates(true).sized(0.5F, 0.5F).fireImmune()); public static final DeferredHolder, EntityType> LIGHT_SHARD = register("light_shard", EntityType.Builder.of(LightShardEntity::new, MobCategory.MISC).noSave().fireImmune().sized(0.75F, 0.75F).clientTrackingRange(4).updateInterval(20)); public static final DeferredHolder, EntityType> LIGHT_SPEAR = register("light_spear", EntityType.Builder.of(LightSpearEntity::new, MobCategory.MISC).noSave().fireImmune().sized(0.75F, 0.75F).clientTrackingRange(4).updateInterval(20)); public static final DeferredHolder, EntityType> LIGHT_MINE = register("light_mine", EntityType.Builder.of(LightMineEntity::new, MobCategory.MISC).noSave().fireImmune().sized(0.75F, 0.75F).clientTrackingRange(4).updateInterval(20)); @@ -42,8 +42,8 @@ public class SpectrumEntityTypes { public static final DeferredHolder, EntityType> KINDLING_COUGH = register("kindling_cough", EntityType.Builder.of(KindlingCoughEntity::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(4).updateInterval(10).fireImmune()); public static final DeferredHolder, EntityType> ERASER = register("eraser", EntityType.Builder.of(EraserEntity::new, MobCategory.MONSTER).sized(0.3F, 0.3F).clientTrackingRange(10)); public static final DeferredHolder, EntityType> ITEM_PROJECTILE = register("item_projectile", EntityType.Builder.of(ItemProjectileEntity::new, MobCategory.MISC).sized(0.25F, 0.25F).clientTrackingRange(6).updateInterval(20)); - public static final DeferredHolder, EntityType> DRAGON_TALON = register("dragon_talon", 4, 10, true, EntityDimensions.scalable(0.5F, 0.5F), true, DragonTalonEntity::new); - public static final DeferredHolder, EntityType> DRACONIC_TWINSWORD = register("draconic_twinsword", 6, 2, true, EntityDimensions.scalable(0.5F, 0.5F), true, DraconicTwinswordEntity::new); + public static final DeferredHolder, EntityType> DRAGON_TALON = register("dragon_talon", EntityType.Builder.of((EntityType.EntityFactory) DragonTalonEntity::new, MobCategory.MISC).clientTrackingRange(4).updateInterval(10).setShouldReceiveVelocityUpdates(true).sized(0.5F, 0.5F).fireImmune()); + public static final DeferredHolder, EntityType> DRACONIC_TWINSWORD= register("draconic_twinsword", EntityType.Builder.of((EntityType.EntityFactory) DraconicTwinswordEntity::new, MobCategory.MISC).clientTrackingRange(6).updateInterval(2).setShouldReceiveVelocityUpdates(true).sized(0.5F, 0.5F).fireImmune()); public static final DeferredHolder, EntityType> MARROW = register("marrow", EntityType.Builder.of(Marrow::new, MobCategory.MONSTER).sized(0.6F, 1.99F).eyeHeight(1.74F).ridingOffset(-0.7F).clientTrackingRange(8)); public static final DeferredHolder, EntityType> SPLINTERSPAWN = register("splinterspawn", EntityType.Builder.of(Splinterspawn::new, MobCategory.MONSTER).sized(0.4F, 0.3F).eyeHeight(0.13F).passengerAttachments(0.2375F).clientTrackingRange(8)); @@ -64,33 +64,14 @@ public static void registerSpawnPlacements(RegisterSpawnPlacementsEvent event) { event.register(MARROW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Monster::checkMonsterSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); } - // TODO: remove - public static DeferredHolder, EntityType> register(String name, int trackingDistance, int updateIntervalTicks, boolean alwaysUpdateVelocity, EntityDimensions size, boolean fireImmune, EntityType.EntityFactory factory) { - return REGISTER.register( - name, () -> { - EntityType.Builder builder = EntityType.Builder.of(factory, MobCategory.MISC) - .clientTrackingRange(trackingDistance) - .updateInterval(updateIntervalTicks) - .setShouldReceiveVelocityUpdates(alwaysUpdateVelocity) - .sized(size.width(), size.height()); - - if (fireImmune) { - builder.fireImmune(); - } - - return builder.build(SpectrumCommon.MOD_ID + "." + name); - } - ); - } - - private static DeferredHolder, EntityType> register(String id, EntityType.Builder type) { - return REGISTER.register(id, () -> type.build(SpectrumCommon.MOD_ID + "." + id)); + private static DeferredHolder, EntityType> register(String name, EntityType.Builder builder) { + return REGISTRAR.register(name, () -> builder.build(SpectrumCommon.MOD_ID + "." + name)); } public static void register(IEventBus modBus) { modBus.addListener(SpectrumEntityTypes::registerAttributes); modBus.addListener(SpectrumEntityTypes::registerSpawnPlacements); - REGISTER.register(modBus); + REGISTRAR.register(modBus); } } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java index b45f0225d9..5b02a03503 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java @@ -8,7 +8,6 @@ import de.dafuqs.spectrum.blocks.jade_vines.*; import de.dafuqs.spectrum.components.*; import de.dafuqs.spectrum.config.*; -import de.dafuqs.spectrum.entity.*; import de.dafuqs.spectrum.items.*; import de.dafuqs.spectrum.items.armor.*; import de.dafuqs.spectrum.items.conditional.*; diff --git a/src/main/resources/spectrum.mixins.json b/src/main/resources/spectrum.mixins.json index 023f6ba52c..a72a09ffec 100644 --- a/src/main/resources/spectrum.mixins.json +++ b/src/main/resources/spectrum.mixins.json @@ -21,7 +21,6 @@ "EnderEyeItemMixin", "EndermanEntityMixin", "EntityMixin", - "EntityTypeMixin", "ExplosionMixin", "FallingBlockEntityMixin", "FireBlockMixin", From f8bb86534676bb74055f2a24b0a9c2696dde9c88 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Thu, 13 Aug 2026 14:47:21 +0200 Subject: [PATCH 219/477] crystallarieum now *actually* allows with 0 ink recipes. Additives with a 0 ink cost multiplier will work, too --- .../blocks/ink/sink/CrystallarieumBlockEntity.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java index ef8a2a0f42..e6d00b8d6b 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/ink/sink/CrystallarieumBlockEntity.java @@ -124,7 +124,7 @@ private static void tickRecipe(Level level, BlockPos pos, CrystallarieumBlockEnt return; } - if (crystallarieum.canWork && (!recipe.value().getFluidIngredient().test(crystallarieum.tank.getFluid()) || crystallarieum.inkStorage.getEnergy(recipe.value().getInkColor()) == 0)) { + if (!recipe.value().getFluidIngredient().test(crystallarieum.tank.getFluid())) { crystallarieum.canWork = false; return; } @@ -133,24 +133,24 @@ private static void tickRecipe(Level level, BlockPos pos, CrystallarieumBlockEnt int inkCostBase = recipe.value().getInkCost(); if(inkCostBase > 0) { float consumedInkFloat = inkCostBase * crystallarieum.currentAdditive.growthAccelerationMod() * crystallarieum.currentAdditive.inkConsumptionMod(); - int consumedInt = Support.getIntFromDecimalWithChance(consumedInkFloat, level.getRandom()); - if (crystallarieum.inkStorage.drainEnergy(recipe.value().getInkColor(), consumedInt) < consumedInt) { + int inkToConsume = Support.getIntFromDecimalWithChance(consumedInkFloat, level.getRandom()); + if (crystallarieum.inkStorage.drainEnergy(recipe.value().getInkColor(), inkToConsume) < inkToConsume) { crystallarieum.canWork = false; crystallarieum.setInkDirty(); crystallarieum.updateInClientWorld(); return; } + crystallarieum.setInkDirty(); } - crystallarieum.setInkDirty(); crystallarieum.currentGrowthStageTicks += (int) (SECOND * crystallarieum.currentAdditive.growthAccelerationMod()); // check if a catalyst should get used up if (level.getRandom().nextFloat() < crystallarieum.currentAdditive.consumeChancePerSecond()) { - ItemStack catalystStack = crystallarieum.getItem(ADDITIVE_SLOT_ID); - catalystStack.shrink(1); + ItemStack additive = crystallarieum.getItem(ADDITIVE_SLOT_ID); + additive.shrink(1); crystallarieum.updateInClientWorld(); - if (catalystStack.isEmpty()) { + if (additive.isEmpty()) { crystallarieum.currentAdditive = CrystallarieumAdditive.EMPTY; if (!recipe.value().growsWithoutAdditive()) { crystallarieum.canWork = false; From cc7b36d4bd2e06abb3e655a21a3dbba130ec935b Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Thu, 13 Aug 2026 18:22:31 +0200 Subject: [PATCH 220/477] programmer art! --- .../registries/SpectrumEventListeners.java | 24 +- .../spectrum_alternate/pack.mcmeta | 8 + .../resourcepacks/spectrum_alternate/pack.png | Bin 0 -> 176266 bytes .../models/block/potion_workshop.json | 6947 +++++++++++++++++ .../textures/block/amethyst_basalt_light.png | Bin 0 -> 1033 bytes .../textures/block/amethyst_calcite_light.png | Bin 0 -> 1043 bytes .../block/amethyst_chiseled_basalt.png | Bin 0 -> 3327 bytes .../block/amethyst_chiseled_basalt.png.mcmeta | 5 + .../block/amethyst_chiseled_calcite.png | Bin 0 -> 3281 bytes .../amethyst_chiseled_calcite.png.mcmeta | 5 + .../spectrum/textures/block/amethyst_ore.png | Bin 0 -> 6062 bytes .../textures/block/amethyst_storage_block.png | Bin 0 -> 383 bytes .../textures/block/azurite_block_bottom.png | Bin 0 -> 778 bytes .../textures/block/azurite_block_side.png | Bin 0 -> 743 bytes .../textures/block/azurite_block_top.png | Bin 0 -> 790 bytes .../spectrum/textures/block/azurite_ore.png | Bin 0 -> 6215 bytes .../spectrum/textures/block/basalt_bricks.png | Bin 0 -> 6169 bytes .../textures/block/black_hole_chest.png | Bin 0 -> 594 bytes .../spectrum/textures/block/black_leaves.png | Bin 0 -> 260 bytes .../spectrum/textures/block/black_log.png | Bin 0 -> 670 bytes .../textures/block/black_log.png.mcmeta | 6 + .../spectrum/textures/block/black_log_top.png | Bin 0 -> 9363 bytes .../textures/block/black_log_top.png.mcmeta | 6 + .../spectrum/textures/block/black_planks.png | Bin 0 -> 5877 bytes .../spectrum/textures/block/black_sapling.png | Bin 0 -> 263 bytes .../black_spirit_sallow_vines_body_lucid.png | Bin 0 -> 460 bytes .../black_spirit_sallow_vines_head_lucid.png | Bin 0 -> 411 bytes .../textures/block/blazing_crystal.png | Bin 0 -> 3465 bytes .../textures/block/blazing_crystal.png.mcmeta | 5 + .../textures/block/block_placer_front.png | Bin 0 -> 6080 bytes .../spectrum/textures/block/blue_leaves.png | Bin 0 -> 260 bytes .../spectrum/textures/block/blue_log.png | Bin 0 -> 670 bytes .../textures/block/blue_log.png.mcmeta | 6 + .../spectrum/textures/block/blue_log_top.png | Bin 0 -> 9475 bytes .../textures/block/blue_log_top.png.mcmeta | 6 + .../spectrum/textures/block/blue_planks.png | Bin 0 -> 6252 bytes .../spectrum/textures/block/blue_sapling.png | Bin 0 -> 263 bytes .../spectrum/textures/block/brown_leaves.png | Bin 0 -> 535 bytes .../spectrum/textures/block/brown_log.png | Bin 0 -> 670 bytes .../textures/block/brown_log.png.mcmeta | 6 + .../spectrum/textures/block/brown_log_top.png | Bin 0 -> 8804 bytes .../textures/block/brown_log_top.png.mcmeta | 6 + .../spectrum/textures/block/brown_planks.png | Bin 0 -> 6194 bytes .../spectrum/textures/block/brown_sapling.png | Bin 0 -> 263 bytes .../textures/block/budding_citrine.png | Bin 0 -> 853 bytes .../textures/block/budding_moonstone.png | Bin 0 -> 6858 bytes .../spectrum/textures/block/budding_onyx.png | Bin 0 -> 695 bytes .../spectrum/textures/block/budding_topaz.png | Bin 0 -> 1234 bytes .../textures/block/calcite_bricks.png | Bin 0 -> 6193 bytes .../block/chiseled_polished_basalt.png | Bin 0 -> 6447 bytes .../block/chiseled_polished_calcite.png | Bin 0 -> 6649 bytes .../spectrum/textures/block/citine_ore.png | Bin 0 -> 5887 bytes .../textures/block/citrine_basalt_light.png | Bin 0 -> 999 bytes .../spectrum/textures/block/citrine_block.png | Bin 0 -> 665 bytes .../textures/block/citrine_calcite_light.png | Bin 0 -> 1018 bytes .../block/citrine_chiseled_basalt.png | Bin 0 -> 3095 bytes .../block/citrine_chiseled_basalt.png.mcmeta | 5 + .../block/citrine_chiseled_calcite.png | Bin 0 -> 2886 bytes .../block/citrine_chiseled_calcite.png.mcmeta | 5 + .../textures/block/citrine_cluster.png | Bin 0 -> 488 bytes .../spectrum/textures/block/citrine_ore.png | Bin 0 -> 544 bytes .../textures/block/citrine_storage_block.png | Bin 0 -> 387 bytes .../assets/spectrum/textures/block/clover.png | Bin 0 -> 976 bytes .../spectrum/textures/block/cyan_leaves.png | Bin 0 -> 534 bytes .../spectrum/textures/block/cyan_log.png | Bin 0 -> 670 bytes .../textures/block/cyan_log.png.mcmeta | 6 + .../spectrum/textures/block/cyan_log_top.png | Bin 0 -> 9489 bytes .../textures/block/cyan_log_top.png.mcmeta | 6 + .../spectrum/textures/block/cyan_planks.png | Bin 0 -> 6243 bytes .../spectrum/textures/block/cyan_sapling.png | Bin 0 -> 263 bytes .../textures/block/deepslate_amethyst_ore.png | Bin 0 -> 6231 bytes .../textures/block/deepslate_azurite_ore.png | Bin 0 -> 6603 bytes .../textures/block/deepslate_citrine_ore.png | Bin 0 -> 6031 bytes .../block/deepslate_moonstone_ore.png | Bin 0 -> 6110 bytes .../textures/block/deepslate_onyx_ore.png | Bin 0 -> 5929 bytes .../block/deepslate_shimmerstone_ore.png | Bin 0 -> 12588 bytes .../deepslate_shimmerstone_ore.png.mcmeta | 6 + .../deepslate_sparklestone_ore.png.mcmeta | 6 + .../textures/block/deepslate_topaz_ore.png | Bin 0 -> 6020 bytes .../textures/block/ender_treasure.png | Bin 0 -> 782 bytes .../block/entity_detector_inverted_top.png | Bin 0 -> 2650 bytes .../textures/block/entity_detector_top.png | Bin 0 -> 2583 bytes .../textures/block/four_leaf_clover.png | Bin 0 -> 1036 bytes .../textures/block/frostbite_crystal.png | Bin 0 -> 2643 bytes .../block/frostbite_crystal.png.mcmeta | 5 + .../spectrum/textures/block/gray_leaves.png | Bin 0 -> 512 bytes .../spectrum/textures/block/gray_log.png | Bin 0 -> 670 bytes .../textures/block/gray_log.png.mcmeta | 6 + .../spectrum/textures/block/gray_log_top.png | Bin 0 -> 9165 bytes .../textures/block/gray_log_top.png.mcmeta | 6 + .../spectrum/textures/block/gray_planks.png | Bin 0 -> 6108 bytes .../spectrum/textures/block/gray_sapling.png | Bin 0 -> 263 bytes .../spectrum/textures/block/green_leaves.png | Bin 0 -> 516 bytes .../spectrum/textures/block/green_log.png | Bin 0 -> 670 bytes .../textures/block/green_log.png.mcmeta | 6 + .../spectrum/textures/block/green_log_top.png | Bin 0 -> 8818 bytes .../textures/block/green_log_top.png.mcmeta | 6 + .../spectrum/textures/block/green_planks.png | Bin 0 -> 6245 bytes .../spectrum/textures/block/green_sapling.png | Bin 0 -> 263 bytes .../spectrum/textures/block/hummingstone.png | Bin 0 -> 4568 bytes .../textures/block/hummingstone_glass.png | Bin 0 -> 4558 bytes .../textures/block/hummingstone_humming.png | Bin 0 -> 4949 bytes .../block/hummingstone_humming.png.mcmeta | 6 + .../textures/block/item_bowl_basalt.png | Bin 0 -> 5215 bytes .../textures/block/item_bowl_calcite.png | Bin 0 -> 5310 bytes .../block/item_detector_inverted_top.png | Bin 0 -> 2699 bytes .../textures/block/item_detector_top.png | Bin 0 -> 2680 bytes .../textures/block/large_citrine_bud.png | Bin 0 -> 406 bytes .../textures/block/large_moonstone_bud.png | Bin 0 -> 403 bytes .../textures/block/large_onyx_bud.png | Bin 0 -> 362 bytes .../textures/block/large_topaz_bud.png | Bin 0 -> 815 bytes .../textures/block/light_blue_leaves.png | Bin 0 -> 546 bytes .../textures/block/light_blue_log.png | Bin 0 -> 670 bytes .../textures/block/light_blue_log.png.mcmeta | 6 + .../textures/block/light_blue_log_top.png | Bin 0 -> 10275 bytes .../block/light_blue_log_top.png.mcmeta | 6 + .../textures/block/light_blue_planks.png | Bin 0 -> 6301 bytes .../textures/block/light_blue_sapling.png | Bin 0 -> 263 bytes .../textures/block/light_gray_leaves.png | Bin 0 -> 481 bytes .../textures/block/light_gray_log.png | Bin 0 -> 670 bytes .../textures/block/light_gray_log.png.mcmeta | 6 + .../textures/block/light_gray_log_top.png | Bin 0 -> 9931 bytes .../block/light_gray_log_top.png.mcmeta | 6 + .../textures/block/light_gray_planks.png | Bin 0 -> 6052 bytes .../textures/block/light_gray_sapling.png | Bin 0 -> 263 bytes .../light_level_detector_inverted_top.png | Bin 0 -> 2863 bytes .../block/light_level_detector_top.png | Bin 0 -> 2858 bytes .../spectrum/textures/block/lime_leaves.png | Bin 0 -> 541 bytes .../spectrum/textures/block/lime_log.png | Bin 0 -> 670 bytes .../textures/block/lime_log.png.mcmeta | 6 + .../spectrum/textures/block/lime_log_top.png | Bin 0 -> 9960 bytes .../textures/block/lime_log_top.png.mcmeta | 6 + .../spectrum/textures/block/lime_planks.png | Bin 0 -> 6229 bytes .../spectrum/textures/block/lime_sapling.png | Bin 0 -> 263 bytes .../textures/block/liquid_crystal_flow.png | Bin 0 -> 24252 bytes .../block/liquid_crystal_flow.png.mcmeta | 6 + .../textures/block/liquid_crystal_still.png | Bin 0 -> 26574 bytes .../block/liquid_crystal_still.png.mcmeta | 6 + .../textures/block/magenta_leaves.png | Bin 0 -> 538 bytes .../spectrum/textures/block/magenta_log.png | Bin 0 -> 670 bytes .../textures/block/magenta_log.png.mcmeta | 6 + .../textures/block/magenta_log_top.png | Bin 0 -> 9463 bytes .../textures/block/magenta_log_top.png.mcmeta | 6 + .../textures/block/magenta_planks.png | Bin 0 -> 6258 bytes .../textures/block/magenta_sapling.png | Bin 0 -> 263 bytes ...magenta_spirit_sallow_vines_body_lucid.png | Bin 0 -> 638 bytes ...magenta_spirit_sallow_vines_head_lucid.png | Bin 0 -> 580 bytes .../textures/block/medium_citrine_bud.png | Bin 0 -> 316 bytes .../textures/block/medium_moonstone_bud.png | Bin 0 -> 323 bytes .../textures/block/medium_onyx_bud.png | Bin 0 -> 299 bytes .../textures/block/medium_topaz_bud.png | Bin 0 -> 727 bytes .../textures/block/mermaids_brush_full.png | Bin 0 -> 1058 bytes .../block/mermaids_brush_full.png.mcmeta | 6 + .../textures/block/mermaids_brush_none.png | Bin 0 -> 1109 bytes .../textures/block/mermaids_brush_some.png | Bin 0 -> 1153 bytes .../block/mermaids_brush_some.png.mcmeta | 6 + .../textures/block/moonstone_basalt_light.png | Bin 0 -> 995 bytes .../textures/block/moonstone_block.png | Bin 0 -> 578 bytes .../block/moonstone_calcite_light.png | Bin 0 -> 991 bytes .../block/moonstone_chiseled_basalt.png | Bin 0 -> 1985 bytes .../moonstone_chiseled_basalt.png.mcmeta | 5 + .../block/moonstone_chiseled_calcite.png | Bin 0 -> 1951 bytes .../moonstone_chiseled_calcite.png.mcmeta | 5 + .../textures/block/moonstone_cluster.png | Bin 0 -> 493 bytes .../spectrum/textures/block/moonstone_ore.png | Bin 0 -> 5966 bytes .../block/moonstone_storage_block.png | Bin 0 -> 369 bytes .../textures/block/mud_flow.png.mcmeta | 5 + .../spectrum/textures/block/mud_overlay.png | Bin 0 -> 86 bytes .../textures/block/mud_still.png.mcmeta | 5 + .../textures/block/onyx_basalt_light.png | Bin 0 -> 943 bytes .../spectrum/textures/block/onyx_block.png | Bin 0 -> 522 bytes .../textures/block/onyx_calcite_light.png | Bin 0 -> 961 bytes .../textures/block/onyx_chiseled_basalt.png | Bin 0 -> 2486 bytes .../block/onyx_chiseled_basalt.png.mcmeta | 5 + .../textures/block/onyx_chiseled_calcite.png | Bin 0 -> 2794 bytes .../block/onyx_chiseled_calcite.png.mcmeta | 5 + .../spectrum/textures/block/onyx_cluster.png | Bin 0 -> 449 bytes .../spectrum/textures/block/onyx_ore.png | Bin 0 -> 5768 bytes .../textures/block/onyx_storage_block.png | Bin 0 -> 363 bytes .../spectrum/textures/block/orange_leaves.png | Bin 0 -> 473 bytes .../spectrum/textures/block/orange_log.png | Bin 0 -> 670 bytes .../textures/block/orange_log.png.mcmeta | 6 + .../textures/block/orange_log_top.png | Bin 0 -> 9736 bytes .../textures/block/orange_log_top.png.mcmeta | 6 + .../spectrum/textures/block/orange_planks.png | Bin 0 -> 6520 bytes .../textures/block/orange_sapling.png | Bin 0 -> 263 bytes .../block/paltaeria_fragment_block_side.png | Bin 0 -> 760 bytes .../paltaeria_fragment_block_vertical.png | Bin 0 -> 676 bytes .../spectrum/textures/block/paltaeria_ore.png | Bin 0 -> 1184 bytes .../block/particle_spawner_top.png.mcmeta | 6 + .../block/particle_spawner_top_off.png | Bin 0 -> 5083 bytes .../pedestal_all_basic_amethyst_powered.png | Bin 0 -> 617 bytes .../pedestal_all_basic_amethyst_unpowered.png | Bin 0 -> 619 bytes .../pedestal_all_basic_citrine_powered.png | Bin 0 -> 612 bytes .../pedestal_all_basic_citrine_unpowered.png | Bin 0 -> 617 bytes .../textures/block/pedestal_all_basic_top.png | Bin 0 -> 648 bytes .../pedestal_all_basic_topaz_powered.png | Bin 0 -> 622 bytes .../pedestal_all_basic_topaz_unpowered.png | Bin 0 -> 621 bytes .../block/pedestal_basic_amethyst_powered.png | Bin 0 -> 541 bytes .../block/pedestal_basic_amethyst_top.png | Bin 0 -> 654 bytes .../pedestal_basic_amethyst_unpowered.png | Bin 0 -> 537 bytes .../block/pedestal_basic_citrine_powered.png | Bin 0 -> 536 bytes .../block/pedestal_basic_citrine_top.png | Bin 0 -> 634 bytes .../pedestal_basic_citrine_unpowered.png | Bin 0 -> 534 bytes .../block/pedestal_basic_topaz_powered.png | Bin 0 -> 538 bytes .../block/pedestal_basic_topaz_top.png | Bin 0 -> 638 bytes .../block/pedestal_basic_topaz_unpowered.png | Bin 0 -> 537 bytes .../textures/block/pedestal_bottom.png | Bin 0 -> 516 bytes ...destal_moonstone_amethyst_side_powered.png | Bin 0 -> 681 bytes ...stal_moonstone_amethyst_side_unpowered.png | Bin 0 -> 687 bytes ...edestal_moonstone_citrine_side_powered.png | Bin 0 -> 674 bytes ...estal_moonstone_citrine_side_unpowered.png | Bin 0 -> 683 bytes .../textures/block/pedestal_moonstone_top.png | Bin 0 -> 778 bytes .../pedestal_moonstone_topaz_side_powered.png | Bin 0 -> 684 bytes ...edestal_moonstone_topaz_side_unpowered.png | Bin 0 -> 689 bytes .../pedestal_onyx_amethyst_side_powered.png | Bin 0 -> 650 bytes .../pedestal_onyx_amethyst_side_unpowered.png | Bin 0 -> 656 bytes .../pedestal_onyx_citrine_side_powered.png | Bin 0 -> 646 bytes .../pedestal_onyx_citrine_side_unpowered.png | Bin 0 -> 653 bytes .../textures/block/pedestal_onyx_top.png | Bin 0 -> 764 bytes .../pedestal_onyx_topaz_side_powered.png | Bin 0 -> 655 bytes .../pedestal_onyx_topaz_side_unpowered.png | Bin 0 -> 659 bytes .../spectrum/textures/block/pink_leaves.png | Bin 0 -> 554 bytes .../spectrum/textures/block/pink_log.png | Bin 0 -> 670 bytes .../textures/block/pink_log.png.mcmeta | 6 + .../spectrum/textures/block/pink_log_top.png | Bin 0 -> 10128 bytes .../textures/block/pink_log_top.png.mcmeta | 6 + .../spectrum/textures/block/pink_planks.png | Bin 0 -> 6262 bytes .../spectrum/textures/block/pink_sapling.png | Bin 0 -> 263 bytes .../block/player_detector_inverted_top.png | Bin 0 -> 2662 bytes .../textures/block/player_detector_top.png | Bin 0 -> 2627 bytes .../textures/block/polished_basalt.png | Bin 0 -> 6086 bytes .../block/polished_basalt_pillar_side.png | Bin 0 -> 5783 bytes .../block/polished_basalt_pillar_top.png | Bin 0 -> 605 bytes .../textures/block/polished_calcite.png | Bin 0 -> 6213 bytes .../block/polished_calcite_pillar_side.png | Bin 0 -> 5956 bytes .../block/polished_calcite_pillar_top.png | Bin 0 -> 549 bytes .../textures/block/potion_workshop.png | Bin 0 -> 2294 bytes .../spectrum/textures/block/purple_leaves.png | Bin 0 -> 539 bytes .../spectrum/textures/block/purple_log.png | Bin 0 -> 670 bytes .../textures/block/purple_log.png.mcmeta | 6 + .../textures/block/purple_log_top.png | Bin 0 -> 9363 bytes .../textures/block/purple_log_top.png.mcmeta | 6 + .../spectrum/textures/block/purple_planks.png | Bin 0 -> 6281 bytes .../textures/block/purple_sapling.png | Bin 0 -> 263 bytes .../textures/block/quitoxic_reeds.png | Bin 0 -> 544 bytes .../textures/block/radiating_ender.png | Bin 0 -> 782 bytes .../spectrum/textures/block/red_leaves.png | Bin 0 -> 516 bytes .../spectrum/textures/block/red_log.png | Bin 0 -> 670 bytes .../textures/block/red_log.png.mcmeta | 6 + .../spectrum/textures/block/red_log_top.png | Bin 0 -> 9165 bytes .../textures/block/red_log_top.png.mcmeta | 6 + .../spectrum/textures/block/red_planks.png | Bin 0 -> 6240 bytes .../spectrum/textures/block/red_sapling.png | Bin 0 -> 263 bytes .../block/redstone_transceiver_receiver.png | Bin 0 -> 5597 bytes .../block/redstone_transceiver_sender.png | Bin 0 -> 5723 bytes .../block/scarlet_fragment_block_side.png | Bin 0 -> 736 bytes .../spectrum/textures/block/scarlet_ore.png | Bin 0 -> 1167 bytes .../spectrum/textures/block/shimmel_side.png | Bin 0 -> 6038 bytes .../spectrum/textures/block/shimmel_snow.png | Bin 0 -> 5908 bytes .../spectrum/textures/block/shimmel_top.png | Bin 0 -> 234 bytes .../textures/block/shimmerstone_block.png | Bin 0 -> 1060 bytes .../block/shimmerstone_gem.png.mcmeta | 6 + .../textures/block/shimmerstone_light.png | Bin 0 -> 183 bytes .../textures/block/shimmerstone_ore.png | Bin 0 -> 11494 bytes .../block/shimmerstone_ore.png.mcmeta | 6 + .../textures/block/small_citrine_bud.png | Bin 0 -> 286 bytes .../textures/block/small_moonstone_bud.png | Bin 0 -> 295 bytes .../textures/block/small_onyx_bud.png | Bin 0 -> 270 bytes .../textures/block/small_topaz_bud.png | Bin 0 -> 678 bytes .../spectral_shard_storage_block.png.mcmeta | 6 + .../block/spirit_sallow_log_top.png.mcmeta | 6 + .../block/stratine_fragment_block_side.png | Bin 0 -> 736 bytes .../stratine_fragment_block_vertical.png | Bin 0 -> 664 bytes .../spectrum/textures/block/stratine_ore.png | Bin 0 -> 1167 bytes .../textures/block/topaz_basalt_light.png | Bin 0 -> 1027 bytes .../spectrum/textures/block/topaz_block.png | Bin 0 -> 1068 bytes .../textures/block/topaz_calcite_light.png | Bin 0 -> 1027 bytes .../textures/block/topaz_chiseled_basalt.png | Bin 0 -> 10217 bytes .../block/topaz_chiseled_basalt.png.mcmeta | 5 + .../textures/block/topaz_chiseled_calcite.png | Bin 0 -> 10391 bytes .../block/topaz_chiseled_calcite.png.mcmeta | 5 + .../spectrum/textures/block/topaz_cluster.png | Bin 0 -> 918 bytes .../spectrum/textures/block/topaz_ore.png | Bin 0 -> 5900 bytes .../textures/block/topaz_storage_block.png | Bin 0 -> 873 bytes .../spectrum/textures/block/upgrade_base.png | Bin 0 -> 5200 bytes .../block/upgrade_efficiency_inner.png | Bin 0 -> 315 bytes .../block/upgrade_experience_inner.png | Bin 0 -> 251 bytes .../textures/block/upgrade_speed_inner.png | Bin 0 -> 6223 bytes .../textures/block/upgrade_speed_outer.png | Bin 0 -> 5076 bytes .../textures/block/upgrade_yield_inner.png | Bin 0 -> 238 bytes .../textures/block/upgrade_yield_outer.png | Bin 0 -> 292 bytes .../block/weather_detector_inverted_top.png | Bin 0 -> 2615 bytes .../textures/block/weather_detector_top.png | Bin 0 -> 2623 bytes .../textures/block/wet_lava_sponge.png.mcmeta | 11 + .../spectrum/textures/block/white_leaves.png | Bin 0 -> 482 bytes .../spectrum/textures/block/white_log.png | Bin 0 -> 670 bytes .../textures/block/white_log.png.mcmeta | 6 + .../spectrum/textures/block/white_log_top.png | Bin 0 -> 10449 bytes .../textures/block/white_log_top.png.mcmeta | 6 + .../spectrum/textures/block/white_planks.png | Bin 0 -> 6017 bytes .../spectrum/textures/block/white_sapling.png | Bin 0 -> 263 bytes .../white_spirit_sallow_vines_body_lucid.png | Bin 0 -> 557 bytes .../white_spirit_sallow_vines_head_lucid.png | Bin 0 -> 489 bytes .../spectrum/textures/block/yellow_leaves.png | Bin 0 -> 536 bytes .../spectrum/textures/block/yellow_log.png | Bin 0 -> 670 bytes .../textures/block/yellow_log.png.mcmeta | 6 + .../textures/block/yellow_log_top.png | Bin 0 -> 10143 bytes .../textures/block/yellow_log_top.png.mcmeta | 6 + .../spectrum/textures/block/yellow_planks.png | Bin 0 -> 6263 bytes .../textures/block/yellow_sapling.png | Bin 0 -> 263 bytes .../yellow_spirit_sallow_vines_body_lucid.png | Bin 0 -> 607 bytes .../yellow_spirit_sallow_vines_head_lucid.png | Bin 0 -> 556 bytes .../gui/container/crafting_tablet1.png | Bin 0 -> 16107 bytes .../gui/container/crafting_tablet2.png | Bin 0 -> 16705 bytes .../gui/container/crafting_tablet3.png | Bin 0 -> 20619 bytes .../gui/container/crafting_tablet4.png | Bin 0 -> 21853 bytes .../textures/gui/container/enchanter.png | Bin 0 -> 3806 bytes .../textures/gui/container/pedestal1.png | Bin 0 -> 17474 bytes .../textures/gui/container/pedestal2.png | Bin 0 -> 31480 bytes .../textures/gui/container/pedestal3.png | Bin 0 -> 37062 bytes .../textures/gui/container/pedestal4.png | Bin 0 -> 38904 bytes .../gui/container/pedestal_crafting1.png | Bin 0 -> 4555 bytes .../gui/container/pedestal_crafting2.png | Bin 0 -> 4834 bytes .../gui/container/pedestal_crafting3.png | Bin 0 -> 5561 bytes .../gui/container/pedestal_crafting4.png | Bin 0 -> 6136 bytes .../gui/container/restocking_chest.png | Bin 0 -> 9139 bytes .../gui/modonomicon/enchanter_crafting.png | Bin 0 -> 11154 bytes .../gui/modonomicon/pedestal_crafting1.png | Bin 0 -> 4555 bytes .../gui/modonomicon/pedestal_crafting2.png | Bin 0 -> 4834 bytes .../gui/modonomicon/pedestal_crafting3.png | Bin 0 -> 5561 bytes .../gui/modonomicon/pedestal_crafting4.png | Bin 0 -> 6136 bytes .../textures/item/amethyst_powder.png | Bin 0 -> 5449 bytes .../spectrum/textures/item/bedrock_axe.png | Bin 0 -> 395 bytes .../spectrum/textures/item/bedrock_boots.png | Bin 0 -> 404 bytes .../spectrum/textures/item/bedrock_bow.png | Bin 0 -> 1888 bytes .../textures/item/bedrock_bow_pulling_0.png | Bin 0 -> 1999 bytes .../textures/item/bedrock_bow_pulling_1.png | Bin 0 -> 2004 bytes .../textures/item/bedrock_bow_pulling_2.png | Bin 0 -> 1978 bytes .../textures/item/bedrock_chestplate.png | Bin 0 -> 504 bytes .../textures/item/bedrock_crossbow_arrow.png | Bin 0 -> 2154 bytes .../item/bedrock_crossbow_firework.png | Bin 0 -> 2477 bytes .../item/bedrock_crossbow_pulling_0.png | Bin 0 -> 2123 bytes .../item/bedrock_crossbow_pulling_1.png | Bin 0 -> 2156 bytes .../item/bedrock_crossbow_pulling_2.png | Bin 0 -> 2257 bytes .../item/bedrock_crossbow_standby.png | Bin 0 -> 2159 bytes .../spectrum/textures/item/bedrock_dust.png | Bin 0 -> 319 bytes .../textures/item/bedrock_fishing_rod.png | Bin 0 -> 1930 bytes .../item/bedrock_fishing_rod_cast.png | Bin 0 -> 1879 bytes .../spectrum/textures/item/bedrock_helmet.png | Bin 0 -> 411 bytes .../spectrum/textures/item/bedrock_hoe.png | Bin 0 -> 377 bytes .../textures/item/bedrock_leggings.png | Bin 0 -> 449 bytes .../textures/item/bedrock_pickaxe.png | Bin 0 -> 5322 bytes .../spectrum/textures/item/bedrock_shears.png | Bin 0 -> 1978 bytes .../spectrum/textures/item/bedrock_shovel.png | Bin 0 -> 369 bytes .../spectrum/textures/item/bedrock_sword.png | Bin 0 -> 423 bytes .../spectrum/textures/item/black_pigment.png | Bin 0 -> 358 bytes .../spectrum/textures/item/block_flooder.png | Bin 0 -> 1600 bytes .../textures/item/block_flooder.png.mcmeta | 6 + .../spectrum/textures/item/blue_pigment.png | Bin 0 -> 359 bytes .../textures/item/bottle_of_decay_away.png | Bin 0 -> 327 bytes .../textures/item/bottle_of_fading.png | Bin 0 -> 2038 bytes .../textures/item/bottle_of_failing.png | Bin 0 -> 2013 bytes .../spectrum/textures/item/bottle_of_ruin.png | Bin 0 -> 1973 bytes .../spectrum/textures/item/brown_pigment.png | Bin 0 -> 365 bytes .../spectrum/textures/item/citrine_powder.png | Bin 0 -> 5518 bytes .../spectrum/textures/item/citrine_shard.png | Bin 0 -> 418 bytes .../assets/spectrum/textures/item/clover.png | Bin 0 -> 839 bytes .../textures/item/constructors_staff.png | Bin 0 -> 876 bytes .../textures/item/crafting_tablet.png | Bin 0 -> 1055 bytes .../spectrum/textures/item/cyan_pigment.png | Bin 0 -> 297 bytes .../textures/item/downstone_fragments.png | Bin 0 -> 302 bytes .../textures/item/ender_splice_bound.png | Bin 0 -> 375 bytes .../textures/item/ender_splice_unbound.png | Bin 0 -> 378 bytes .../textures/item/everpromise_ribbon.png | Bin 0 -> 4568 bytes .../textures/item/exchanging_staff.png | Bin 0 -> 862 bytes .../textures/item/four_leaf_clover.png | Bin 0 -> 857 bytes .../item/germinated_jade_vine_bulb.png | Bin 0 -> 308 bytes .../textures/item/glow_vision_goggles.png | Bin 0 -> 1839 bytes .../spectrum/textures/item/gray_pigment.png | Bin 0 -> 338 bytes .../spectrum/textures/item/green_pigment.png | Bin 0 -> 328 bytes .../spectrum/textures/item/guidebook.png | Bin 0 -> 5895 bytes .../item/hibernating_jade_vine_bulb.png | Bin 0 -> 831 bytes .../textures/item/light_blue_pigment.png | Bin 0 -> 343 bytes .../textures/item/light_gray_pigment.png | Bin 0 -> 355 bytes .../textures/item/light_staff_use.png.mcmeta | 6 + .../textures/item/lightning_stone.png | Bin 0 -> 1508 bytes .../textures/item/lightning_stone.png.mcmeta | 16 + .../spectrum/textures/item/lime_pigment.png | Bin 0 -> 302 bytes .../textures/item/liquid_crystal_bucket.png | Bin 0 -> 5364 bytes .../spectrum/textures/item/lucky_pickaxe.png | Bin 0 -> 778 bytes .../textures/item/magenta_pigment.png | Bin 0 -> 323 bytes .../spectrum/textures/item/mermaids_brush.png | Bin 0 -> 813 bytes .../spectrum/textures/item/mermaids_gem.png | Bin 0 -> 2167 bytes .../textures/item/moonstone_powder.png | Bin 0 -> 5425 bytes .../textures/item/moonstone_shard.png | Bin 0 -> 412 bytes .../spectrum/textures/item/natures_staff.png | Bin 0 -> 388 bytes .../textures/item/natures_staff_use.png | Bin 0 -> 5105 bytes .../item/natures_staff_use.png.mcmeta | 6 + .../textures/item/oblivion_pickaxe.png | Bin 0 -> 383 bytes .../spectrum/textures/item/onyx_powder.png | Bin 0 -> 5177 bytes .../spectrum/textures/item/onyx_shard.png | Bin 0 -> 371 bytes .../spectrum/textures/item/orange_pigment.png | Bin 0 -> 337 bytes .../textures/item/paltaeria_fragments.png | Bin 0 -> 742 bytes .../spectrum/textures/item/paltaeria_gem.png | Bin 0 -> 715 bytes .../spectrum/textures/item/pink_pigment.png | Bin 0 -> 357 bytes .../spectrum/textures/item/pure_azurite.png | Bin 0 -> 427 bytes .../spectrum/textures/item/purple_pigment.png | Bin 0 -> 337 bytes .../textures/item/quitoxic_powder.png | Bin 0 -> 832 bytes .../spectrum/textures/item/quitoxic_reeds.png | Bin 0 -> 748 bytes .../spectrum/textures/item/radiance_staff.png | Bin 0 -> 5374 bytes .../textures/item/radiance_staff_use.png | Bin 0 -> 9105 bytes .../spectrum/textures/item/raw_azurite.png | Bin 0 -> 275 bytes .../spectrum/textures/item/razor_falchion.png | Bin 0 -> 837 bytes .../spectrum/textures/item/red_pigment.png | Bin 0 -> 301 bytes .../textures/item/resonance_shard.png | Bin 0 -> 257 bytes .../textures/item/resonant_pickaxe.png | Bin 0 -> 5577 bytes .../textures/item/shimmerstone_gem.png | Bin 0 -> 1503 bytes .../textures/item/shimmerstone_gem.png.mcmeta | 6 + .../spectrum/textures/item/silker_pickaxe.png | Bin 0 -> 955 bytes .../spectrum/textures/item/spectral_shard.png | Bin 0 -> 551 bytes .../textures/item/staff_of_remembrance.png | Bin 0 -> 4458 bytes .../item/staff_of_remembrance_use.png | Bin 0 -> 4458 bytes .../spectrum/textures/item/star_fragment.png | Bin 0 -> 841 bytes .../textures/item/stratine_fragments.png | Bin 0 -> 830 bytes .../spectrum/textures/item/stratine_gem.png | Bin 0 -> 725 bytes .../spectrum/textures/item/tender_pickaxe.png | Bin 0 -> 955 bytes .../spectrum/textures/item/topaz_powder.png | Bin 0 -> 5393 bytes .../spectrum/textures/item/topaz_shard.png | Bin 0 -> 806 bytes .../assets/spectrum/textures/item/vegetal.png | Bin 0 -> 446 bytes .../spectrum/textures/item/void_bundle.png | Bin 0 -> 341 bytes .../spectrum/textures/item/white_pigment.png | Bin 0 -> 344 bytes .../spectrum/textures/item/yellow_pigment.png | Bin 0 -> 325 bytes .../spectrum_programmer_art/pack.mcmeta | 8 + .../spectrum_programmer_art/pack.png | Bin 0 -> 108979 bytes 435 files changed, 7371 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/resourcepacks/spectrum_alternate/pack.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_alternate/pack.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/models/block/potion_workshop.json create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/amethyst_basalt_light.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/amethyst_calcite_light.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/amethyst_chiseled_basalt.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/amethyst_chiseled_basalt.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/amethyst_chiseled_calcite.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/amethyst_chiseled_calcite.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/amethyst_ore.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/amethyst_storage_block.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/azurite_block_bottom.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/azurite_block_side.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/azurite_block_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/azurite_ore.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/basalt_bricks.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/black_hole_chest.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/black_leaves.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/black_log.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/black_log.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/black_log_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/black_log_top.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/black_planks.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/black_sapling.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/black_spirit_sallow_vines_body_lucid.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/black_spirit_sallow_vines_head_lucid.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/blazing_crystal.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/blazing_crystal.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/block_placer_front.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/blue_leaves.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/blue_log.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/blue_log.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/blue_log_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/blue_log_top.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/blue_planks.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/blue_sapling.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/brown_leaves.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/brown_log.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/brown_log.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/brown_log_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/brown_log_top.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/brown_planks.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/brown_sapling.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/budding_citrine.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/budding_moonstone.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/budding_onyx.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/budding_topaz.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/calcite_bricks.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/chiseled_polished_basalt.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/chiseled_polished_calcite.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/citine_ore.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/citrine_basalt_light.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/citrine_block.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/citrine_calcite_light.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/citrine_chiseled_basalt.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/citrine_chiseled_basalt.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/citrine_chiseled_calcite.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/citrine_chiseled_calcite.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/citrine_cluster.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/citrine_ore.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/citrine_storage_block.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/clover.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/cyan_leaves.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/cyan_log.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/cyan_log.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/cyan_log_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/cyan_log_top.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/cyan_planks.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/cyan_sapling.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/deepslate_amethyst_ore.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/deepslate_azurite_ore.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/deepslate_citrine_ore.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/deepslate_moonstone_ore.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/deepslate_onyx_ore.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/deepslate_shimmerstone_ore.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/deepslate_shimmerstone_ore.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/deepslate_sparklestone_ore.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/deepslate_topaz_ore.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/ender_treasure.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/entity_detector_inverted_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/entity_detector_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/four_leaf_clover.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/frostbite_crystal.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/frostbite_crystal.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/gray_leaves.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/gray_log.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/gray_log.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/gray_log_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/gray_log_top.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/gray_planks.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/gray_sapling.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/green_leaves.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/green_log.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/green_log.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/green_log_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/green_log_top.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/green_planks.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/green_sapling.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/hummingstone.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/hummingstone_glass.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/hummingstone_humming.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/hummingstone_humming.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/item_bowl_basalt.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/item_bowl_calcite.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/item_detector_inverted_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/item_detector_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/large_citrine_bud.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/large_moonstone_bud.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/large_onyx_bud.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/large_topaz_bud.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/light_blue_leaves.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/light_blue_log.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/light_blue_log.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/light_blue_log_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/light_blue_log_top.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/light_blue_planks.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/light_blue_sapling.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/light_gray_leaves.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/light_gray_log.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/light_gray_log.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/light_gray_log_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/light_gray_log_top.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/light_gray_planks.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/light_gray_sapling.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/light_level_detector_inverted_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/light_level_detector_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/lime_leaves.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/lime_log.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/lime_log.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/lime_log_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/lime_log_top.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/lime_planks.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/lime_sapling.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/liquid_crystal_flow.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/liquid_crystal_flow.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/liquid_crystal_still.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/liquid_crystal_still.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/magenta_leaves.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/magenta_log.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/magenta_log.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/magenta_log_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/magenta_log_top.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/magenta_planks.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/magenta_sapling.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/magenta_spirit_sallow_vines_body_lucid.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/magenta_spirit_sallow_vines_head_lucid.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/medium_citrine_bud.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/medium_moonstone_bud.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/medium_onyx_bud.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/medium_topaz_bud.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/mermaids_brush_full.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/mermaids_brush_full.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/mermaids_brush_none.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/mermaids_brush_some.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/mermaids_brush_some.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/moonstone_basalt_light.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/moonstone_block.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/moonstone_calcite_light.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/moonstone_chiseled_basalt.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/moonstone_chiseled_basalt.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/moonstone_chiseled_calcite.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/moonstone_chiseled_calcite.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/moonstone_cluster.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/moonstone_ore.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/moonstone_storage_block.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/mud_flow.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/mud_overlay.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/mud_still.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/onyx_basalt_light.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/onyx_block.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/onyx_calcite_light.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/onyx_chiseled_basalt.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/onyx_chiseled_basalt.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/onyx_chiseled_calcite.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/onyx_chiseled_calcite.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/onyx_cluster.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/onyx_ore.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/onyx_storage_block.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/orange_leaves.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/orange_log.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/orange_log.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/orange_log_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/orange_log_top.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/orange_planks.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/orange_sapling.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/paltaeria_fragment_block_side.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/paltaeria_fragment_block_vertical.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/paltaeria_ore.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/particle_spawner_top.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/particle_spawner_top_off.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_all_basic_amethyst_powered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_all_basic_amethyst_unpowered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_all_basic_citrine_powered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_all_basic_citrine_unpowered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_all_basic_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_all_basic_topaz_powered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_all_basic_topaz_unpowered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_basic_amethyst_powered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_basic_amethyst_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_basic_amethyst_unpowered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_basic_citrine_powered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_basic_citrine_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_basic_citrine_unpowered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_basic_topaz_powered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_basic_topaz_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_basic_topaz_unpowered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_bottom.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_moonstone_amethyst_side_powered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_moonstone_amethyst_side_unpowered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_moonstone_citrine_side_powered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_moonstone_citrine_side_unpowered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_moonstone_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_moonstone_topaz_side_powered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_moonstone_topaz_side_unpowered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_onyx_amethyst_side_powered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_onyx_amethyst_side_unpowered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_onyx_citrine_side_powered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_onyx_citrine_side_unpowered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_onyx_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_onyx_topaz_side_powered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pedestal_onyx_topaz_side_unpowered.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pink_leaves.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pink_log.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pink_log.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pink_log_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pink_log_top.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pink_planks.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/pink_sapling.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/player_detector_inverted_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/player_detector_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/polished_basalt.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/polished_basalt_pillar_side.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/polished_basalt_pillar_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/polished_calcite.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/polished_calcite_pillar_side.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/polished_calcite_pillar_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/potion_workshop.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/purple_leaves.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/purple_log.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/purple_log.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/purple_log_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/purple_log_top.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/purple_planks.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/purple_sapling.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/quitoxic_reeds.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/radiating_ender.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/red_leaves.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/red_log.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/red_log.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/red_log_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/red_log_top.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/red_planks.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/red_sapling.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/redstone_transceiver_receiver.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/redstone_transceiver_sender.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/scarlet_fragment_block_side.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/scarlet_ore.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/shimmel_side.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/shimmel_snow.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/shimmel_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/shimmerstone_block.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/shimmerstone_gem.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/shimmerstone_light.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/shimmerstone_ore.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/shimmerstone_ore.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/small_citrine_bud.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/small_moonstone_bud.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/small_onyx_bud.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/small_topaz_bud.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/spectral_shard_storage_block.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/spirit_sallow_log_top.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/stratine_fragment_block_side.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/stratine_fragment_block_vertical.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/stratine_ore.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/topaz_basalt_light.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/topaz_block.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/topaz_calcite_light.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/topaz_chiseled_basalt.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/topaz_chiseled_basalt.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/topaz_chiseled_calcite.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/topaz_chiseled_calcite.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/topaz_cluster.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/topaz_ore.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/topaz_storage_block.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/upgrade_base.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/upgrade_efficiency_inner.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/upgrade_experience_inner.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/upgrade_speed_inner.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/upgrade_speed_outer.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/upgrade_yield_inner.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/upgrade_yield_outer.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/weather_detector_inverted_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/weather_detector_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/wet_lava_sponge.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/white_leaves.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/white_log.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/white_log.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/white_log_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/white_log_top.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/white_planks.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/white_sapling.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/white_spirit_sallow_vines_body_lucid.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/white_spirit_sallow_vines_head_lucid.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/yellow_leaves.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/yellow_log.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/yellow_log.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/yellow_log_top.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/yellow_log_top.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/yellow_planks.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/yellow_sapling.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/yellow_spirit_sallow_vines_body_lucid.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/block/yellow_spirit_sallow_vines_head_lucid.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/container/crafting_tablet1.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/container/crafting_tablet2.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/container/crafting_tablet3.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/container/crafting_tablet4.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/container/enchanter.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/container/pedestal1.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/container/pedestal2.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/container/pedestal3.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/container/pedestal4.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/container/pedestal_crafting1.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/container/pedestal_crafting2.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/container/pedestal_crafting3.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/container/pedestal_crafting4.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/container/restocking_chest.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/modonomicon/enchanter_crafting.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/modonomicon/pedestal_crafting1.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/modonomicon/pedestal_crafting2.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/modonomicon/pedestal_crafting3.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/gui/modonomicon/pedestal_crafting4.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/amethyst_powder.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_axe.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_boots.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_bow.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_bow_pulling_0.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_bow_pulling_1.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_bow_pulling_2.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_chestplate.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_crossbow_arrow.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_crossbow_firework.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_crossbow_pulling_0.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_crossbow_pulling_1.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_crossbow_pulling_2.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_crossbow_standby.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_dust.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_fishing_rod.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_fishing_rod_cast.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_helmet.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_hoe.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_leggings.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_pickaxe.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_shears.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_shovel.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bedrock_sword.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/black_pigment.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/block_flooder.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/block_flooder.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/blue_pigment.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bottle_of_decay_away.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bottle_of_fading.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bottle_of_failing.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/bottle_of_ruin.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/brown_pigment.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/citrine_powder.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/citrine_shard.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/clover.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/constructors_staff.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/crafting_tablet.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/cyan_pigment.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/downstone_fragments.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/ender_splice_bound.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/ender_splice_unbound.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/everpromise_ribbon.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/exchanging_staff.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/four_leaf_clover.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/germinated_jade_vine_bulb.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/glow_vision_goggles.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/gray_pigment.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/green_pigment.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/guidebook.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/hibernating_jade_vine_bulb.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/light_blue_pigment.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/light_gray_pigment.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/light_staff_use.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/lightning_stone.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/lightning_stone.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/lime_pigment.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/liquid_crystal_bucket.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/lucky_pickaxe.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/magenta_pigment.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/mermaids_brush.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/mermaids_gem.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/moonstone_powder.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/moonstone_shard.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/natures_staff.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/natures_staff_use.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/natures_staff_use.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/oblivion_pickaxe.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/onyx_powder.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/onyx_shard.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/orange_pigment.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/paltaeria_fragments.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/paltaeria_gem.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/pink_pigment.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/pure_azurite.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/purple_pigment.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/quitoxic_powder.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/quitoxic_reeds.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/radiance_staff.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/radiance_staff_use.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/raw_azurite.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/razor_falchion.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/red_pigment.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/resonance_shard.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/resonant_pickaxe.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/shimmerstone_gem.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/shimmerstone_gem.png.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/silker_pickaxe.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/spectral_shard.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/staff_of_remembrance.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/staff_of_remembrance_use.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/star_fragment.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/stratine_fragments.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/stratine_gem.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/tender_pickaxe.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/topaz_powder.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/topaz_shard.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/vegetal.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/void_bundle.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/white_pigment.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/assets/spectrum/textures/item/yellow_pigment.png create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/pack.mcmeta create mode 100644 src/main/resources/resourcepacks/spectrum_programmer_art/pack.png diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java index d68964bded..1be0287786 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEventListeners.java @@ -37,6 +37,8 @@ import net.minecraft.resources.*; import net.minecraft.server.*; import net.minecraft.server.level.*; +import net.minecraft.server.packs.*; +import net.minecraft.server.packs.repository.*; import net.minecraft.server.packs.resources.*; import net.minecraft.sounds.*; import net.minecraft.stats.*; @@ -64,6 +66,7 @@ import net.minecraft.world.phys.*; import net.neoforged.api.distmarker.*; import net.neoforged.bus.api.*; +import net.neoforged.fml.*; import net.neoforged.fml.common.*; import net.neoforged.fml.loading.*; import net.neoforged.neoforge.client.event.*; @@ -79,6 +82,7 @@ import net.neoforged.neoforge.fluids.*; import net.neoforged.neoforge.items.*; import net.neoforged.neoforge.items.wrapper.*; +import net.neoforged.neoforgespi.locating.*; import org.jspecify.annotations.*; import top.theillusivec4.curios.api.*; import top.theillusivec4.curios.api.type.capability.*; @@ -1114,7 +1118,7 @@ private static void tickGravity(EntityTickEvent.Pre event) { if(entity instanceof AbstractChestedHorse horse && horse.hasChest()) { float appliedGravity = applyGravityBasedOnInventory(horse, new InvWrapper(horse.getInventory())); - + // when the animal is sent flying trigger a hidden advancement if (appliedGravity > 0.081 && level.getGameTime() % 20 == 0) { Player owner = PlayerOwned.getPlayerIfOnline(level, horse.getOwnerUUID()); @@ -1216,4 +1220,22 @@ private static void modifyBreakSpeed(PlayerEvent.BreakSpeed event) { } } + @SubscribeEvent + private static void addPackFinders(AddPackFindersEvent event) { + if (event.getPackType() == PackType.CLIENT_RESOURCES) { + IModFile modFile = ModList.get().getModFileById(SpectrumCommon.MOD_ID).getFile(); + + event.addRepositorySource(packConsumer -> { + packConsumer.accept( + Pack.readMetaAndCreate( + new PackLocationInfo("spectrum_programmer_art", Component.literal("Spectrum Programmer Art"), PackSource.BUILT_IN, Optional.empty()), + new PathPackResources.PathResourcesSupplier(modFile.findResource("resourcepacks", "spectrum_programmer_art")), + PackType.CLIENT_RESOURCES, + new PackSelectionConfig(false, Pack.Position.TOP, false) + ) + ); + }); + } + } + } diff --git a/src/main/resources/resourcepacks/spectrum_alternate/pack.mcmeta b/src/main/resources/resourcepacks/spectrum_alternate/pack.mcmeta new file mode 100644 index 0000000000..2b3be84e31 --- /dev/null +++ b/src/main/resources/resourcepacks/spectrum_alternate/pack.mcmeta @@ -0,0 +1,8 @@ +{ + "pack": { + "pack_format": 34, + "description": { + "text": "Eternal Classics" + } + } +} \ No newline at end of file diff --git a/src/main/resources/resourcepacks/spectrum_alternate/pack.png b/src/main/resources/resourcepacks/spectrum_alternate/pack.png new file mode 100644 index 0000000000000000000000000000000000000000..1206e17605095c2c85735015327e9408ee464952 GIT binary patch literal 176266 zcmY(q1yqz#*9H8{4Bb-FAq~=j)zY+i>MBsmL zc9BN_0D0`GscEdMsmT=( zBsdn;Ggya8v>cM>$nXk@B|r53^eN@b+eZl>tEs9Va-Beatu2?VUE{-v3)Mf{!!&d5 zY^!X~Lo|v%n|}0$8q0pu`QqX%*Cc$@ehtA*!S%Sd+dw7F{yRE2dakQ?qD^pcU-kI+ z+P!^#SoF0$wo%H2h({4_qa%ttbWbgHO`Z)t@1<B{S|19 z4D%#tZ0}11U4Ko+fLtQRKU$c}c~Yq>FT@0Eb?`ZNpy;rCrLAp~>;vlNSx9_gNM9;jpV2)*dc?8xSs9x| z1o>fgOGm>|;2Gdr@ot3`gP~y(F*$1OZG+`^TttIMKVK=;;7(}?NK zIe4C3Xbc8F@q1wQm214K2F)@>0}jOM5`8`TDOi9ir;mFh&qz; zVMcr_p^q$Id~U6?8ZmG5Mf0zjTc8bv1VtPeXvn$M6V+*7=}M_>|32?kOgGSoHQ+z) zRXlDlNa+3a@G)WwfFD(v651CiUgC> zmpjQ9>lOz1whz4w>wyv~M>~r<>4iqCxI_0DJe<$GOwFeAZ{U+Hj^1B~sP(x;l#=X4 zr@%#Ld%9XmPi6aD;e!6I8J{kaSNAPkV?lQ!>^at_td!Kt|E$4z<3qx{rQ3Z9TS@-F zlr}}i74LwnaC?+yk<$g$lSlWQ1rl5Y5}JBWfjbG(g1u8V9u6Z}V; z5+?BFpWU%G8YoWkM%L%l*XNyhV*;*{Ry+JX{gV>+Ddgv;WWq zd?T+isLSpC_6hWIPF^dn@C`v+_V9VoW08@X;pI-a!04vo_JKJslPHtz z68`iJ`WK1ahaYbc;InyG_&$mIXRQ%4mf!oUt^Gt>d+$8FZhNlg7bBVTaOas~8;XG_t9ZQS;^GR8r#RbV>2cqaK*Bfg5XC_G*&4t1T zanfPUalxku-aaUTw^EE0E*?kh@tZ83$#JIj!oHYCcC7I}Y->GcR)PU@Ji@A!MX7_l z4(K3zUakq;JB3*UFvTc$q0$m}9eNsxVvuz%^-inF($IlgF0Ow|nKs*p6Bdu2!WQ^~ z9^}|&AL^evOR6JXAz*wG_sbXTsg!lYu8KQug9u(b9(4s42M^OOq?)P-0lH!Xr)YLo1rpe_yb*QgAn)7%_WC%sB9>p+um^ zunG4qILkkKcrSWz`jdRluKx74*sj_YPZy!xD;PL*gCshWq$uSFk?z0c)a7DRs+ZtI z&8OJEFpIq1Zv8tOS@j2P=m+Q-NJW`i2XlnW*@ZO*>L_?9>5BdrEg?-(HKq4U)aW-^ z=dX^(z7gq<9Ie9qVR}jzGgn?yo@_{di7SN2LnRL-odLdo@qJE;PcG~EYM7#8)SLPC zQ+oXcJEnb(5ePG%C?fQAzuT?Gz$-im|2d8YM82Y~(V3@cIVZM2XrT&t;Uu1HM-{I5ypnSdhU!rX0W1M`O%y#bQjTN~X+t7V(vi zN0$-c70MdXij{oqY7I}cQ991b-HX_Sae2ODMn8>fG*EdffcT5v0WOMC9HQR*+wS|a zi=0XgoXEe}(86godlku7c2VDWylsiN80MzX^#*F6g#)}J+es?oRcHHeA-!I^lJI&i zL?3orjUs9T2HyYW<-sP5qW%o@yUfx+cc!E^`;Y|3E5Gh0Hwr~FoLIgOKnmPJ9_32| zyq@BsdD7k?Ecg{(_9}4!Pq*>>m0otlZSiC29iekT=ZP%4!jt!dz~rz9S__kcz(eyi zFyjHzxynWV0{Q3VNs8Z0lbp)Y>iV8hQd%xYR6(-nK*`JN!159EEl1`)S`ow!tf}Re zIg3{yHDM2WF#VvtSWU7I&c9fa#WTVf9(CovcUN2jxo)X;7+ z?WiC=&%vvAbw|AE@Wboa1p*F`EpWC<@C!gdc@HUIDg1Wb^UrJ~jxyrP36M|mn01m~ zr2dJjmh$?)`Gvhaae&NHC>v4z{A;xQ#-9_YMEAiv%ke1|49(9=BF^QDsGC&NE;GA6 zv_uUlv;WBTyfagFn)tQplOyh|?|O`Y^-niP+Fgyazp*zWWU-}5Fg}nDOWyF~U2@MT zVJf#H=84UD0wr zU^Xm{J%Xf?SptFshxolSxm^*=60Z_DHvF9M--k~PvD&O>Rl4voUsI$i064_DQkGuX z2`$x7P*Sl5CSN&W?qiD4sK=`I&lzrLa@tTNm6$KN4I!;%Pf=tZ#6Q#Nl?-wBST!BD zGo4`E41F>D__kpxHUcbN?KSfgR)l5XYXg&wz0drWX0*8NqX7v8Df*qz9Q=u?{rc|{ z0XrhD24yf0l1LIu7W^T1fCAE(NtxRw`X2HG$e@Cg<5YtMTcvhB4XF`$UD{NK?iH%2 z@u@0g{UeE0Tr>L#+3tYlBBLY2Zs<9IPXGDsJIMX)6Ni`lV4fyUDtv*9|Ly)N3P!+s zVM^f)wL=tVp>sxHOBxL@k;K@zlk1p>O~TYo3Xr({>}5_z(xLnNYLYu2s1c?V$IK5| z)&Ms^WJJxuO^0_S4MhJ6_a3L=F6tFWRFa5Ke--%fncDe@&ZlQ8$Uf8tK6k5^cZL`zpc6(BzGJn||>%B8~f)Mk{= zKwbR%f$t(xx>gR<8695PN91aJveKsx`gH>f%P3vBcr>5?D^IQx^ZWaS4EgJOR+yib zi<_2#Tz5>C9xSGfz3=Aq*~}vSUBd~~UPX-Qm6dBx;N6G0c9nN+(0|d|aokx%I$i|s zfR5L#U-0qIiXS6KyWze$C%IVn?yAvNL5q%^4C?`*c&_3bh^{yXfRjiS`W^a=p+8>R zL`4zYMmswE;mj8;p0=_c-c$TOkGEiwB}uCF=c)B!KHx#n)!lIPf+DN>zsTU<<`U*U zJvmwO76o*wK5yaoJtS0AVR-~tsY6L0%S#92`l}}AUHi!3o>43N>oM9s)Exd``wo(J zU!`ARIcS!6F7G0t4WgKCE|Fk zkPOQJJfT`t+Dqw=kPb$V&xdSH_$QE``=FBv&d0v|(R3GW&$7f@k z;*Wg-D=Wunx1|Y0E65|nYaz`N=9Z2+yoQfKJZ|a#s$q2D1cZLu;vEQb5$B^jD9G$q zH3Zr7jRQa$UZzc5fm(l>~r=BnGjPZiYpEEsB(qxj<3`Z#o=OtB4MLx;+>$ zl|m#m!FD13g6cJ~B~1Ng6DzH5)GrXF{J3eaPpjOjxD#tuh~5Jk6_o-{L9$HG$DFN)cga@5xiF;^`uTG%>P65GBhR}bME^!TOknq)f0ziiCZT9%>PEp zzvRMz&vfF<6hh*8xEecF{;5-Mo&cTzv$ZZE`+u8^L&gB$gT3yWIl}sW##unzpQy%D zBwSj&=O{8CF9Umy7`5nma2xFNeD`ZQ>Yku?XdXyh9K1UsPJQtS3}GLtK0k?jX#L%- z{;YF~xFbD*G=InfR7{%9Bv1jSF142x_6JNvkYV=G>-e1J>{XZ=@ivrkhEv_^((GJ* zKt|~EB5K};i?^~NiHe8=5>0lZ^*%s4zPcn1+7Tz`pgjYTz5+hHX@J~|Ye4g%Hz=QHIDqcU09$HjUHgCp5zHAi z?5JZU{SOUe67S+P5qudZUd_+lDV~D?Hi@Cb-+b-EJ61vc{Qq?audV|M7Y;u@FrLgD zo{K+GEs)^7+@}UZYz_1V;#*QY%Y82c{+z>$-3OqTunG=~tOs7NK46YuI&lPp6`(Wa zP7MgD^{MgWz3MNw#hFehcN?7Ms39>UP}4(J-u=QRQQzt}1t7%v9PeCQKJEYGHp1lYG&}w0Y>l zgNlrU>!tLoXyacRsS#xMlKD%~gK@3Y5hE@zqJyWyS3b{*cGXiWk#nI`$qfuskYfQL zK}TSuKYXtG@R^k&Va)OfNM-rDb&(PN(&9`J*Ox_kYkL;Be$DDso?@23*2i-H>tDPV zyErU-xX1l-(xj6)XfPCR-=F4Yc$3Qs%-kqEpG+X)xw;As|8TK}uW$g|7pnn9 zssBI``4;^I%?`R_Rw@wk8BN^_RCq7lBgohE^SI-!)g2UNo=^6^DG+dmvR)wB)ehNL z>!S3LVl(l*oL+~2Ss#iWHy*@)yE(>MzU#i4YF$lM$<)y{TgnV{^{Y_4`ja7|=p0d> zXAJY4A{msIVDB%H{DCvTjw9uWvuWqZB+iqG{G4X0ZQ4d&;lj09>y(?Rwee>3{zfUk zVcldq61*n9&ET_qf1xHlDo6$#)X=0x?XFx>8$=lC#F_yI!p_GtP`A8MyqRq-!XNkz z`csOh;B&m(el6G)7(DQxt6`#KSbyX){O#grBE6xi$#uYp(ZN^%d(Ql< zv|yl3!@F#LF%)&HOs+T(HdfO|>^{4oytNvgsUnY?c?r5ti`B$C_$-1xF$nw%*w}{4znRGf`7LsWiW0TcT08XOJDgr2b z`U9SWc@VB7@l($Ht8J4WIx}YgMcA1nl5%P8$lqu>ZZyyaO%Zf~s+V?$ra%j2{v`tA zbG*k#lt0vh>56A=i%q;IXIL#C>i~}xiw*h5(FFnBmLWo{J7(Q-(db{Cb5iT47N!s1 zu?n&>c;+&s_bW$~!~i+|Vto}cRjMQU>pQvL9v{(v@gouJR9N%(L(C%IrP;ug^PIgb z@*`XY=M$1}C3ZRVi?tR_&Fqe&qLAc@y&dIi7ahn95dp|XoLVBo^uK4Z812IuXk1>V zC&kx$Uur;wG?4R-F$o{G5;4mt!DEXT-%8R&b3(wJc;xcLQK!T=T2p6+7Vqb%TKm~U zXXztYi2}b>kKTOpcmX1OeD4^}`u>UB;Nf9JSy3wgYcktxM%X;v*`$vSsD-rTzrX*{ zTOjw=ZOjO)Le*dWk6?(iK8tUISl)^WKV&EJ`|JzJwFDFhK`(ahMzdDh4ZE}qPhSl1 z0kpPM?>}k5N9@6Z`^a{AjKpsEaG@srNe9y zzSX5U3jd>Tk7q4tyRps#{I(B7mE^q)HtE+PywaWnHb5Su>?&w_3lv*IkSLlCZ5|Oy zRPtXEI{E9sKOeRh3PPZT4FFdqLpwu+gn2XJN%UG5znn0A7Es~QsXMY+!@4HLHqx1Z zWVQ;V=dnuOUxzWUkN`0LC@L0W2}R+e&V*Y{4WZ*L(G1uD=PqOzA7lae6R?GjUlHpbRPw z>3*Sj*+^=s11o(I#5dia=WVMFUWfsb(zk&X9bj5BpMP!ScAPViCorK41@Np9{N|Gj z0Tm2WF!id;lkjvO|CV_Vog{ZoL}W8(gaZ-hL{nV4ippO>pc&`j)p!M?2IT|>C}JpB zX&cDgfr^(%yckjlKgdd1xyOH70Xva9M^#&va~ahoYU)X#yUw&muB>aOI=t_2l(;&bQyvW8+1-9NS~#fYeYCvb4z-W5GJYyXci!N z4CdOne%+4+=VETziHAQlfxJsya4Ed+G=oy9MA8c}K4|s&w2n71k6}GAJ-bNvW2jIL zCPM7zorITq1x!AsRGWmqbb=P z!7{o_s3W!olV(wjYT%(mfBLYBHT)`<`AI4_=wmA7p2PiHSMg-F2jVMB)q)z8UTjAL z573)=YEP${`CgYmNzu88B=mDRB2#<&dXvm_yci~n*QQ!w%b`CF^yvRA`m?}SS9 zZ{T+Z7%`8~dPW-&Eg*InSP^uZoNC}=gu%sp>%-Gx9)QT<$D1S*ytYjegE2KJ`<^!m z_>l`%*7D!1yY2Yi$L<;zxF0=fSO-Fi#SFMmmex7op}gPxA9M{FFRiYj#>j5Oc_WA^ zp49d80sYp$9Qa>t@l~(}J_|&V+dz;!3eL7G!xJ0@LFrt3dV|^uGNOq`SZyUubkh-K6?_ z5DUo+JDxAW{-iPg^*rf!@)u!GhEuJ(N?f5p(?tN~mZl%+uC+F7;Z5jI+|GA##76{Y zL~A%${;bggm1ciog=8^UdCj8hV3AmtiVcTQBNK7@URQEqA+(g;VxrgZ|1z7GlBz-f z7?f*KKU($oyB(HAUH_;cMF?wPlBsDG~2~2CkQzli_n9j(g;VnFGL!BJv z4#v_^t*gk*Tb{rx^GUGVU*M`^IlQuzy}@&ctG&m)NJ8mWD6|PEchXeXB@E-*b$-8V zfiBnNtWLUj4=i?m=;7LQv~c;X!VS$c<)PBHM@w$G=CdF`le^;)N`YjcyuT==z%u5C z^pN?>v(*8wuRY*klA{asT9RKB5Y$?e51~*ziwHJ-hM*scuvR<;muzZ$1Oc-3 zrO52ZQs!xOmo!lmxjCQEv(UiJekG^JB=0xrLzNn-1O9m|@-|{B+Ef z_SK`M5M<9Y!j&_)ZVki8lE{b823_3bK>rhe?6}ZY_X*pb^DG%H_s9D4CiUm9Zu8D8 ztT!YJuJ(3^47QidodFW03Vi0@$H71_H!U9z{ISE07us5}KR;)t)OD#6Asm>rEYU)A z@XpMi-fik#%knX{_MMZW$pr)j7Ht3PxFC;~izx!=d!_PExp&nlpLu<9A{`%@ zPCiQh)Om2GQ2Se_nA=k+%~c8Q95930Q%Wnj>wI(8eP7&@tu?N2^h-zq(X-)pLq;Iu zO4mYk1WSNbWaS?}fA8OkOR5^LZ|(B&dnP7v?zRDYC(KJLyO?qJ`dIt!y%(ATn9f>;%d9V~o5RPm-|xlj zmQ#-&r}&X@2}ufl_EodhJU13Of+&D>knYo{t$a~5aoo$QbNa!abv!bxD%W)xeyr3R z%W&dKlE@@+*~F053dfz`(>jxQ}+XITxD$ zZIxNiI+1veidNKWrOf94%nan{>^l(Ib6XXeatz|7m8HHDI0ud+sUxl#pYj9kACDfSEI7)P2I`yo@C-iQCl(yX zRC@E!X>vWL(;A+h8zk!Y^>~*Era%p*_;SH6y3w{jq&P+B$IeUkB zo22?e_!unYCB%8jy_EQ|HUq@TgjABR!7R>s{*7bn1^7c4iKvdbh}rVp$_t#;wx!}? zm~1t{eBwFsPje6Eki)%eV4PtL2)RJp7o#;;tsvno2+fEqET~^WA7%exQVI;Vm9#l=gl{5Dh(vvW~P- z*ZmSq72tt5%GrKKhX{wPFinXQ*vkz~&k4M**9Y;Zuk-UF%lo2DX__O9@qMZ_#^&(^bcJs2RbTF18GHyvFEj09+?xQbkx!YD5 z-PxY_&8$kGwQ%7f*xc2C8A6BRkF&mGrBJI&;gcLp0_Kit zaMPa8;}M{9eX+%cIUd!wj`>)Vd^mqGC)qk?qvT#p;wvB)6%xV}8^eR2^D_7esGW>H zT|e*TDveso5vR(+dnJ1CB!SPodwnTLZjOV`_2hkV{BFbIxpqb;5F5Bc;!&F z=QIi%iC{V%EFiD~h6en5vQ#1oYx7vbu?wul-yl?*iX(K_7|=a5Cq0tHE1P%4Kl|cY zwn&ii35sB^#w5^?JbZ%{lih=^TyeQC@gpX)_uRT zbG}<|3%DwunEgA%IH+^EE51wJe1u|d1UPvuW}wN809d6mh_wB==6RBp|J+%PXr5KW zCF?{u_dSsi9S>gV#^R5Ih~KR9{UG;%BYn9PsKp?A)np&+gmOMwbonj!>pqmJGA9rC z=qfX3ZD?;~5SU}dhIl`I=AZo;$wyRY0~^7Lh_QW7JNq-BdCNg=+iCFIU{}YWG(SVX zjN>!cX?SA@WFaZdC<+OF^_z#rC~D8^KLq-@B$*=@rYGv9NfLcwXte_ikm+0dSd9OH z^6l$u{I|uWFiVQ>gPS})#PhT~O<&fYz9Iw|?tn^QbmK27i^A|?;T7Gya>|U@2}}Np zpHbe}8<0S=_p~E8z>#wN<#c&^5@$AFA<33Ntn{6&O7LM)5KZ^)zZLiaMZ9>4&C+c= zZ&Nl(InO-sclxBn7zr(93^}j&D^O8*ce``g7mxk=eW2=_z*kIv!$i=poUt6Le*;GhBJbCc3+YSNMi?rK*S1gtNV3u6#U*T7mqsUVi)11UQFKB=I zMogy*H>842T;ce`Rq3OO*(33;LL#&w`pZ;%TMlvi+(+Jq_h7eh)>bW{1}LP8yJ_SR zXt^hp`AsJWw_*)WNj`QzA^J=cuCdE^z2PyyrX=yz(f#NAsNZ?kq7h7Lh9;oEUE9lw zop%)Xds+3A_{0dUFWKr;NeDFLg|w-C{qm-7FLy+?D_x}Fvn*M&3;unTUMoalI6d9- zW8ZQkf*Rs~u&E=uF`XHu)f-_V3RE;8@lt(X@heq_?W^nuVjx78&>Tv^`c0Z;oKGG(3eV!z+uRSd#U@sROtb zC%65tP0vg#E;XkFTyRED^&m_J{#l1+A)b^~Wgl$TRc%1Oy$flo7Uw#R|3z|Ob7Xag zcsnVrPN2O(v3~fhAnxb<#=&FxL6->E?13QpTw?i%o>I02hq)V72`%|GLmx_~yS1gR zHeGznUDEwCE0T*hUR?wW{PF1PF%C^(t07J~^7Syyg2SIHbB5#zm-Oye2DGWvH#G!* zJ8i1Pu#>Conb_A@p)<0dRApqQCJKwFN!5#DGz%yzOAYi#7n3!VXQp@!A=Jm+Hh?h> ztWg~m18zIne=q93E4}a)OouF(j$(u4WBy~v8XvQvISwpVn?F3)n!rbe^EJd%IZ9S3 zZ^11F&pHaCK?7#7kIHuahWcE!sE9KRZr*xWGiGLviji{;L)b>bx8!y8u;Gk(%50-(5MXgqhJR>={vlg^$F zt*s#w(*7U#lYAV0HNvZcZ4OA0rEEwU2s^p~{n_$R2g|*CLygHMB}%378Hh5(UoDs1 z{{wnQ9mP7Zrv$c?oMHGcxdI%(wFkulzkJLc|a#{WFQR^Ck&P z7q_Qw|72WGlm*mlK^#?vZbRB|J4s&egMNo+*8NH=CDQC~F35i0(Y}%#t~jLh z;T7yR|AUUd@ZJ0Tp$b+S{dJVwy9J_Mp?7d8{LFlEr~Y#`d83|_(en@H&2(EvDHpxc z@f`s)m<((1+{pxVXPJ;JmZUu;5F^=&F+?CyKH|P_37FpzmY%d4OsPCT@KA>7D?u$s zvX>o9I-`}*vXe`(JKuqV#5BBzAgIfGcl1*1;+=Q?57d1r1n-*?lyyg@;0m{U9l2#* zb7M5YYNkKk6K!lTJ>z+;)n$3~!@|lkn8ewvOZQX4Am4iFA@xn-SmR%lnkjC26BK1( z>^|xx6w^%5toHkE`LXBM92;+nJ-&m~N(q%}y(lc%BOHdI|zxs``9E;J;37*s8!sq9pN#%Tn15ta;OgNC90OYkM*B#kLEYSz!ys2+e{} z_jvH+WAksU2%U<ILX&5bZ9)sUk(lPEPiv)N$wg2b>62 z9j!-Z%AkQ)`#GtpW#0e9oAM_6CNWk@D_Mg6bdds)r!#R;(+e7)OUwMF$>DP=r4cKI zkmlv#P4r0%3%0B{&Oh#0i13IUa~(t6(3Wt?_Fwg0$rieHWwpe=xkD6p4dA{POM zO@txmYC>(*gfmLA*UPak{j*n!m0*^@P-iQ#r3(|w?^+o3;(z6og+d5c*8Nqn1_O5=SB)aAG=D%XtdtOLg+N%Z=LkwO(Y(LUZ&%M=gao{Px$>jS! zig_2_i@jJV>8+ldzX`T^`V0J!X>dBc+k-e^e=6U0XTiF@Cao|#t&z9W;KhMt_$XVv zcKj=;QvkdWlMZ$xQo&07@+MdK(L^y%(?sdS4{F!}?0sSYd-S4IK%uj5IfbpB5H7eP zp4)M65|!9D$sJ`zlR6g7Nxj?X5kG3HlA*w>MMWCN$(p2(t_RMK^ zwEY)%2;Hb!bT$ci@k(}=c-@FSDuX5eN62D5-iH}FjYwc#?J=H@9M2#Gwo*^BJl};$ zn*{wZAfim62;SSus`cv{CDMG0sv14h_bqyNgSIB$DyesFcQ;ssC!?z|6xY^SMr*|9 zS@Oq3cxzxht~TOx;T%INB2Dtx41Tk2d6{~I6|=murjljK$!V0bBS+7CNQgNAxP3bA zfL)g!dceG7;fD1~r@?9)7Z>%)qxg|q7k^A_1TD0GHQaNr566zHVVy5tzI5qAb{1}r zuid2h@bs&+Lb_g*9FWIBBI3PoW$z?4lWCb5=bu{7r!;J=FFSTqY9G~Y>^h5wtv*J( zX{J$%c@5kFxfA!U53U-L*+%)$R7oW6rXvKMwzJksi>bjaUfqBk$(wHrglDJdXlZ`}%(*m%cMUo>-3jvxYjFrwOpGa)WH{ zH&`u7XoZ)MY-%raU;rdD6xrh)i{Rn;E=#YtC%k(`vnEdusu_4ni;hgkN1y&Ti2@Z7 z_3jtE>9RFEp2Hz_l`4yHPzvY5?6PqB4NDs|7TdYd?|WRG=-t_&q}spi2@xY%G%k zo^NejLk`1NEQK-@j)sa)KN-0LwSgGIM{llKznU-j0Wh@{psw_(0cMf9Wv2RceE_<{;?E{rvl+Fw9R0>S}gH}_fIkX1bsejyzn`2}mR;X5iKzkr( zU(tnxMO-YZ-r(6>_wI{f5B4seF5BpHzV|b`^`DHd9F`YyPn7E78o<7zFu0`13ZV%z zR(xfc7ueAIVZX$nN6>%EPv7A;=e}trjcR6@Nbs8v9_;dvt54CjMYVu&$u)EkQYCH+ zJEK8}IBE>*JU-E!jokSwMr^zh8<5c~W?q^4-ptRT)hl!~*YVabXN>S*vX?6#-yQOC ziHuTW2JzR@v)?l#Aa=LPpvTDXt*_RF?&;?+V#cz+i{E=^MHGFVK#r9Rv@QiFS-NEv z)eqUhs-`S5Bh??2dMO`*qV>7F*JDTrqob|rK9z%~)H-C$bf2QfXj);R9)+I<}apkhY5w$T44zZ4aywihbcX6ZNf^#JteXWT9A@ zia-46O_cQK7piH(6pTng4W3_~U^YQRopp#58~z#^O&$RokTSK8QC8`kF{a0;y10S% z>2kCju&&b@ncc79DzIycf46;>H$xySuGO^Db_2ZT0sA}|AN#7Un!gzTt)u$woocGb zUs~E0Dt7%aqU)Rs1&oC4zwaG|rY2&=CFuzzf$v22SD|XMY)OkUA9}2*upgZSGY9Hm z68%qxdGTHd5Zw+fA>)7I3MyB3DWBLfF5} z8-otI++SPTK*ypt5b*mp5M!?buuf$lH^h-+$vmVfl3W~q^fXf_pe5)h+Fj@`1L#Nu}E%k!e-%f42qqVg|)ADHs+y9oYdGJ4+bkQ4? zAI{=FH74)Ind{(2d*E4-*5m3Ox5T_l1u~9E5q+}-I1jm9nc6R-Rq?N=m7i)NS;k3e zisk!5J8-NITlw)SXlVt#Qb~@psjk^Tyf5Ix7V!yDG5=g`IUoivR`U*Ikk!5)jR?9} zxY>z{BL{d>QWCT9VA@Q64t+I1!9?jyYImK6Ne<-J{cNnmW6HPnbpO9>R(a3MZ1D<` zx^f2>730fSKsNhG#cYhN1w7e-K0&M##HN33($QKr7&f)x)W4UiH~=F2I^R^!p&fVa zRDdP$)du3&kv3FKc3D(K@9aH2nZ9VMeGu^I=G`B(8HW*~L&GM0@MkKw+|4R0i4dbO zr~BO7_l4`zC|t2}61}4}IcuZ=)&~7!BLgZ_?Mh&7y_gREVt9eXCnP=&JMHn-pO1XX z8Nvis05`tP`K-a`(H@0#c=n&i)D2_O^?QXmHRR1QnZMM2$Jn6vNMaJZ$>3C2m$Tvp z{;ASAW=Kx9ALfq-(HoTq(z}+4?O&{b(B?)kwDiEwsPwmcZ+nEpW8H;BIIO%R>g9<> zTwUFt!#C_K*e@)?DAK+|o12V}kr}QP{H~y>^$w%7YN#sOjq+arY(02o?%w0)bfl3f zScVfx*gjt7Lcwa{;BHUR{VK-H=oEm3WbRq6yK)HnlZQpBPQa6Xcm^ z_(FOw=BsvNF$$Oj1H+;DVW(YiqUSauf5ucAMCI&BpLh_i z68^n}Dws1J|HkbKm^I%;(tXI+GL9uRI2W#2(Vm_i;yi{b=)Xo|6w~43M?aZPa+yvm zK(!jeo{zd7;)VT9%&7kh#K=~6mPBV>+?RrFl-)LGRGfZ{l_2q*H-DsF=F>yoqH7RF z(0hoL=IgH;N=I>4B;RG(-d@}%TuV+5+CYF+v=r!sm+m?7`ArP0A;K{v2>OSC$YW zRv7?u=#F%<*JJmIs{d3RH+RGhu{PN0oJ5>>@10-$S?^#@ADkv#xG{gxguEA!cDNVe zoO%?(dydqEvh8lOSVr?_b%R8GfWH8nl5B9gSo*K1c;vXhFntLS9W4?=+)MeavM(ZA z^VXOH-j4!sz(Yq>Wn*Q6ZZBX_G_-3H| z`c^V`ic+-WZlmw6r{w+0T&K(AxSGB>AST;8CAn|dC9&63+Y|fhvn8NQ<76EZbb0%sKYzih|I&set_t8V&+zjO zHqXnU$CiL`!le|0JyXtVN(QK|1410L|9bV@7BQjiAy40*C(9jB;l#x04kW6bI{46M z^vMSb25z4ZyxETvc{R3pahHxT9Zza&lYV!k%>Xz4FtRcT=``6(?#<~yL`7UJ$zmv@ zh7RV(_g^pnYz}*B-gOe*1$N60wSBcplU1`g z@@=a&&u^2kc`{uG#@+z6suw?5O;>s_yIlW+6a^jL$KFQ&gTYI%rbvpno+W~Q)TCgg zxNS%dIftkL^FA_vUb9B924of)cZyMRD|E#eQ4DQg-q{#5z`fMIG!&nf)!L8^!yQB# zghT0Kp?8y>sK!cn@cYZKgw_tx2tGZvnQaZxX=@E*c?iBAW{x?c?fH2+F|_ z1vkwF5}^m^@Ija7%nE(W4iC)#hp}&~73bL}$LS#__}ayaFSj$l8Q{z$RBmn8aXYg6 z9iB%B9q#dALeajCU!p#@#(6?kUG{6D7u;?&G7*vkQ5y;v&OjUCmCLNT4O*Ju6qRAe z&5k0;=XeSw?8KU;;?&WO22T+*$Oe68&3Serj=qlJ@A{Ah?bAv~FvO12eqX!}7&Mb` zt>6tg^zzO-KUPFz^!P(32b^o1Cpg@I?30N)D5eoEd`P)oDtW7kzFHf1qxHTct9Y5( zbY85d@&G|BK|L#3Lk}Of77=CFz^UBA-nSYG6FW0P+Ro1ssKthUQO&i;tU{igi7 zZATd}@n|sTWJ2aRr2}26r9t>JS1iuTNAOR`1f0hVGy35(A36vV;fPF|dP4O&0lY9V z7I_=tp@zsO=%HyZ18O<6%g5gQ-%QGHV`OUVg0ojw^)Df*}nes%XYPm%d*5MpjNW9cY1H2r;yYM;7}ANeGK z1F<0Iy?jVF!F64qbe}Ot6h`L%oTPSM1Y{ZJIIzRfJGFwc}iTc>+h~ zuqRGB=E>N4mpr(76Q6#bq*fVPPLjtj+a0B3E(RH;qPi!NV$0i<;xhN0>x8MDF0qA{5a6MeO8c((Yo=7YuCv3ZUO?%e79DuC;U zvag-({asuWoOEg)Jwe?xY`kbADKCGExzwBJEu77y^5jTT<+*OzxzRzQJmxIN=e&u{ z-9oo5IF#$U9ED-)9kXmQERDjO(!w<>PyiLF9>1+6ilYiA3?Kr~_xSO&Y_UU5vtgem z*4F*{>?1Ti_tjvz7qY8mt@Pgo0~q0rhQEszzrWGWL6*2{GZgR|Be_NM+frbld!HyDrh@?{7Ca( zlNH{sp>Erjl%k>Dr-(t=U}Jas4Z4#w@C}SdS6^@--Z;=E9}t;ER(08jlYl-FozX{p z+3k7|!@{cZdIyeO7*9|sPO1h1uE^oikF=PZW#UiNpE;oeWX46&8>2gFH#y2F!^>+b zP74e?1>AbRj&cXM-h~-|hOK+vckE$|Ak zR43c(!jf-z=%8tObrpBmm6l#8qJHpSkyBdq_3Pg%4dT9$VQ;B(u0aSDWk3ZO197Y} z!MtU?fL*s8;DZ$~RB!3{etDH0^^_$F(!AJPpTEP0xBG|%c>67c1x1_SV`PFwsqRLt=ErOQFjx)^;Q=@N#O zLz;g$(A8YB*HsqMO1C>8TN_03sT63KMEg}&jpDc+IwDIA9yE9uHB0CNBLn#3)b|(E zoj*&TpIF7DdL`)%U`e9tDKsd&qr{I zfU2)9hb4{oPJ8=W6GuLh z{?l0lCevnYuRl&ZNiOO)l+IP8@f$r4FO&(X*YjX^NzQ*fzSlWa+@eLHx9?VsaLjwZ z$gN$Jp4Iri9-N6k^{aW_1>v!EkmsM|%^&oNHI*!VZED3qoO@1=~Hn6On({lemQiDkNaD)0+eGKc(mu6jMgNWWdW5BOq;3jp_`x>h5(vruA z^&LF-KHKlGH=ky3E4Qv1)64M(`6mFY!CW&_oluwxktnYeffF& z`Hq==kf7&c&gAezb1X{m2k28xwslCB6GTK3dMZei!3|bL2|}aPO}1FV>E!G+Qh!LJ zums=tL+@Q{V2rCKFh**0=W}K~$L#ju++RrQys&L>gL0LIYz+36zx})4LNun^K6dQr z)4B5G^k{)#(N( z?T(yFeA@ceX@o>HsV0}c9y_n5;DV8!Ia-%q1Dj$7F#LyJp6%EqAbO0NvkW7AqM{h> ze{&9z*Cm{g{O`w+M9)F@o%KYs{(K=@MU(M&+q6#CO*BRha*0eKK}+oGX-m9M1wYYN zRa?{X)dI+bC#-ok9p*M8f7-CfW08$C+0}Qd3@PbbrPy+&>Q;W75L{?o3)oK}%}Dx} zS&qeR2!-{3%!rZEFBO z_RoWBNf`J%ak6#(>O&F@um#ik1{5+pt4wfteW8d?eGck97eOTVz6>#eN&dUI&O>>L z*XTc?6ts_klao*=Px^ntlKK}+d$0hzMsNjg_2~UH+g52EW;`aKe(bKBuAYlFi65}D zO)8MQ##fM0fW#FTvuOW{F-0sdYJU8XeXgK#Zupm5GuS?<40InB(oY9c=-mKp1gHm` zvYqo?#vrH@-U&vB9xM9wVFCJ?K;t{|x{|qi42|T$AI>b!Gti|!TTZr!SfaFTL_OpE z?TlFmt$mh$KC9d5nJ8eggRAjNT;||yekn0?F4#`ZfeUyKG<>`@_I`!^b&`uN27A!@ zyqYXuj+fPD&TVk9_T7$|$ye<0+0Y)#u3=IzB|T6kC_#6lA3fAUvZ}pt`k}_+IPmO~ zvqbKE{+|cmD2TH1$wXW>U>f7u0#ob8Poio(jV3rGA@~+=s+1=m?}=u&eV!D4+%vJr zHWMj-<{$aVKvI#UbgrsQqe=_)!0X}IXO%0shv0Qd2+y}YNXV>~L!6FEjI&5n1QksO zW_1Xv(KndR$)Qj;=jJ&EaAU*$uugJ^8^KeLvvhQ_e^JfHX;}mjvtAGiOE&<*+4xis1& zeM7V9Kc5G`i&#*@!3{c)nqzUKRBkza$yMt-m1q~^8Pohav)heAoea~;J{2{D#n@=A zp}c-?8W;0~Ad9*){qr9kILMdA0_t|J5MqLH&zD+uzt9)b^NRZPY|Oz=;?qEKuQ&Y| zE6^N3CUdY6g$R&98F!cgruM-fb`9`^IwR2B%qOrAe?BKv9+Af)W+krDCZ^NPcQdFG z?sf&M^}dg9nVNI=ibh2jX!4Mu$XY`B*PSt1DA#|^H8g*r%CVdnUVOq@mn4A(n)F&_ z=^$`kG{A_@ANSCM$)dsLdm8`U!ERoN@Mmbk=nD$LoD20pZ^wjpmi~iwi&u!C?(xSF zs?N)p#Xnbv=eiaF|oy|(fIx?q0tRypZ>u0My?s5aVb-=xP^hB>DqY{BeLE z!?~0011dd+e-~)|;m!}uyB#f?tpKvDGA>`_VJFs(kW!f6ArGA4mVBJwB~CMwHuFC? z4qQUePE{2W&tX;lq3@tC3Q{wF^GhkUu4hY@L^zuf8;9Of)iu@jqzN32iOM$bUTB?I zlV&>FARlEf=on45?GvltnCObB@PQ9)aYUwEh}rK@x-+Icl~kclLZ{^XCagzx5^saV z&G29`Z|?-gOoK|hOYe%G@Gk#>@mxKz(aB*CH3Tk#_@4-(eh>O;CjK1hJ$;~WabL$? zyjW_ROzvqgb*WL;PUCdx^D(2Ld^g~8=Y)B#?}i#(z9t8LIPmCOMf35}_h)Sdunl(Y zPGT&C|7C*bZg0?>=(bN)Y<%!3?7#){j|bMzUa1!$_m@%TBc*jNboOXO@MSFEL8vR1 zNVR9RHb4r!lVsz3YKPo5h$fwIO9+`|sepPSrGHO40TQ3aK<8S^%~wLMF~B^7k6S${ z_;Nn4(18Cs_E@Pqj_|WZRO1eqKOYfdQ8pkEi8eB`#iFvs;XXMk|Z-P5WM#9f4 zzW#(1GNh?lDWy>j>DNb|4*v55fIJBy<}GNbo{q~L>k)mU0cgmog7L05RW zCM_EgM%ZR`UZ1Ek!LVW0#kep{nNgiLC9!1Gf#!-!tRwtp8ScQ#$-6-Pu2bsgq()cR zUm0K~EvE(hCdWA{FvVDoZ*wZ=D%Vdi zaK6F)3-3W-nCq7U(~A5`Q;$JC5hu~0T^|0I@${G5Hud_Sch)XiZ`T;mx69Qin~loH z6T29g#_4O@@5F|r`A=P|`FF5DxV-cd<)bCNdB6^`pF)4Ary!QfZzstgH2?eL8nu&i5I^r3x@L%oeIFCR~W+qE}g)taV%jv3M@;(VkM&q{1xJ1gwZ?3;M#@@j3H*`3UyUYmR+gO-l+`exHIot zM*cMt!#gJ6aZ@eI*=C+G``iMog0G#QvtqZRr5T?|n6;z|lw5C+7fy&Dq?57;@Z1zf z@smIq9kB{V>CXk7qkUU^dYaxLS4qW$3wE+beo|lUx!Z}Y=%zLL{XKY9D@l7){`l6z z@rWozTShNceJ{YxOf3FmiLup54LXyyhd|=E?@I$mX}(ECy%49* zJ^RkrN#ARryNm`C-mF=tr=F700(6&-3gN$v^vNYZnm9U@#DN|54D&}9_kNptp!qI} ztm5LFH_e)o)|BvimC-#p6J0dPWsIC5QwqYwmMLZost#pbe{y+=3NZ zl^C`2Sv!2x{dKT^2WFDOI|$nbSLI$+vI=>veVjM&%kNAuVc(~)Fw?$eHhHdZD@YJ_$*Ea&Fr+VE9 z-SY6BkwGNr`s7PW>UP>gp%|xaF}tl}5E$B?|MRDPuHxsZ`E(V4jT5#kAkD(Sdg8Hu zXRW7xwrB3UtFv`>nrSen6`3{%F>h(lWK}cygg&9(Aae1cN|Yx)G)Y7@XJ@+m6UQVc zJ^ff;-y!m?p>HYmRfh6Adm}qn&OO7@gHD}xbF5C$iRxBP41ABse_Qw^a7c{ zlNUEGh>-rY>|Gim1V3l;dGj`KhPdTob}~-`xu}6X@+M2Z#hE*M!Dzi@hk$G4JBA(; z1T-`>oQfJ6lvs-4o)mTRt|cIf{N!yc#~2js#)!}9^^3!mi-Ee-Jg}wDn`EcOe>TcC40X@LPF&wiIzgQl zaqGv(mlW79LK*HsOGt6U6!6W8q8bU}0$UF)*2rXb>%cit?n7LpNO8XV)ds~vloO%VTN*ZLm|cQFS%TIxkL08~s-q33ZqjECk}&B=JGn zjkXKh*^(~oJ?3K1Z(M++$7;BF=|v0nSIUTUo~L8p6WtL?0S*qslViySc@+5O{oVHl z(TPF+W239_f%0`YQV!XF2B6(LY%<(`_^&4Z`(&|dv`>8vl5quxlq3h!JnmjpOVNO& z&P<+h4w)}O$TcZThGpjOFUIG1rMgdJ4IhtfBW0s`BdrT$+Pxl2#!5#g&z5_~EP7H{ z_*Cm&^phRNAnEsn#?x%L$YI{!2Hk5{pKf(_b)KQ~xdKAi?YrCDTTB5RJ1H%`hzH~* z5J1N}IBK1k4^xUy;*CavEg>ONr8FsoEG8|Ys9bP@By;CWQB9fqw73CYNT3)*NaO-9 zs{nx=J#>F0;@wuINm-h`ak8}(w%(AQ?YX|}j;Cd`eyT6Wl!fkARmnALml%q8PH+)o zGDC&T^!J8ZEnXFnX_K=n214v`&fYfZyFGiS7k9Qo_mk`1#>(6GofCeJ`aUw3zGgi()S9u zO=BT{SQ!X_q)o+EWM(ev6~M4ko9f|de8qAYct1< zMf>?Q#gJ|@l!ISQuVB5u6f>&)07vor-8@v{`rH}m4ZNVWP2V)69>3z=ai)yy0P<91-oPJB> z0YosWukO-@8!I^gG%04{u2-dGGipWlsC(*4#i=n^SA=_?RyEGkOimdRzkJ;K7qfbw z^Gwgi^18yX(6}~C#!`Qur811S{=G>?y`|rcuf_Nt_lUSN1w)zlqhh$g8;9ns@_kXn z#||`gSxdy04s4I~mf&5yvO34iC{bgdS)_M6OMSXX{6ITsx-N2T2huTvqbsmIoY0w= z7X0j?OB)>}bh3i%J4oWw($?)<2|26meaOF+^j7K z-~F^h_j8`YXgN){J#gYSkLL>MOtHu;frRNqH9v3oN?Z>BsROrp8gGR1Hl(p+Y;6Z8 zrDdisnqOi?IuELIOX05vE}Cp6kx7SfHk4!#e0mh|flVUZ zRx0;AK1wNl5l{pJOl1qKye={9B{rmnfMLd9$)_n^y`>Ze`96`m7vIynQMqx~&u8`T z7!e0$f3@lDxdHXQ7Ow8N(`}Pk(e;-=Q6==N67H{O2Xv;<)jV3PuJ1OSL^))p2Mp1a z(ea*$m`gpMRxIm&E{xVLX!-|8i(&dgCNO1uc6gj61Ci?=`J|TXZyR~pWcA)ERh!9n zSnoK)TxU@9#G$(<+ESrha8&{}A>Wkztp|RT9Jr_Z>2SKf7J9vPi^`xG2S#`PX-T}V zV@EgJ%_s<${>>`Yd`sjCsruVil$oNbW&Yu>HrGnWTQaHF_~#hJNRF-y!OzuxgW8{L z4mkJI$3drj5gCf>g`I`0K}}jYcX!{A;g$^!((pNf5xd4%-9FzaZK_9dBpuDA#Ez?S zdN>E>YSaZ>`%60wyUcJfHIlzd%GPP{xfVsd;@#K$o=;{mPb?hcPX%aASfCw4Da zVIo_NDn6~d+jr%8&`S^*R(KdbbIermPLIeFMQzsdWabKZm3mDCn}!n^ZbS$EgI`He z1JjT-tC6j^7l&TrA8JU-XF&IT-f-g&!sX6?EA2nCtfPe^klL+8ovnZC-lAE?^w(0O z9gRii+FfB!Rxw764`JC#bE>Zvk(B~V8XHkz-;oI1D6+DMxYc3!gjARH`@lu!*~a*o zd81$*CJDttEzL{FxIYGP3X^rTqFwAn#Oh2(`93Frrf8{T4W6rJsGsqfxQu78;YljkTJ@0vsG5MROo#-qYDdH3_n;ad-GUs%`VQVn*d7-$+_j)VUUf;BfkyHAlUC zjWmLL_^3O-<#&uT4w8F+A}ZeV#s&5TvNP`za9QgaVmQ&NEI;e8(BZ6V=`Iprfh|6*0ZV-Bz+xIA+yl>5i0BBY=?GG|0={VuMRZ-Is1z3{bw_*e3@J4?SRZiq;dTrUz1 zfZsZigui>?-GG22k3wU>M*3BdtYIQTm0;yJ+h@^DX zDp<~2O@)kn{Zihb!GBdC6u*zf5C38y$u3^UQ}Fcu8f9*!UBj<3Mf(kBzv0!oH`kN% zDsM6y?j#EsEW@bD*H;`@`EAXj|43s7%62EZ36+^=~mE|F_>AhcQ3y^Vl4gMY7*_sUha zB#F0L^jOi{)&0lS)WhRWMS~{`SSIv6MFZjOa=o5ZFpmn=c3matmqUwze@U|&?_2F# zOdt=3-Uh}G4&5JWyV?{Ah}`>==Tmr$jEG0u06LE|Xzu4RUD9aFRy+}w>pPANE9Rh|3dzR*aZdI~q3JU%8rS$Zah_9>|7q@Bcsu0*h64AhN<^{dgMESv$wQF}0+s2ZyjouAo z9#xM0WJ!T!240FG&?TI;Bcxor&aq(F+js?}Y6``%)y_O!_hcAFhke|+sK#_IlXvPc ztyJo5*iY|Sy}Hq?KLjyafn!3Uynm{w*NC9iilW#0vbI)dOBeDKbnQYP$dZNJxTFPJ|r~>vtQ9_dpYyy4h-0G5wkqqjqhG}$?=8;59n3zO`^h00;*-*w< zE$@L>vDJ7sP<$lVt6OJ#Hmz_Hoje>%4MUeZu7cy}rl;>a>zbu;~) z|9V*&_R9~o(GGS;1)a>^#{ zA({z_7fx%a)cc>_S_~?lIMj+Yq`aYCYBHvo@8DfK!UDzr{g4kMIuH1-cs;%bt#R~8 z`vEt{CxgKPWSfrj)Kk%y?7glJoe2D;e>gI$J^gh#MOy0j`;j^leC|i9LF?+qB58@s z-{wjs-6MSZ9_PI=z|=*Izq57KEnt>@6rp z-nLCslH%6jX#$JJj=(ea2Ot^8#1CtK{)Fx$2N9B?8I)14KU?lRu8kO&`P}}2(Tj;E z3}KuuslprIm(bfEAYS7ebIB0p6Q-;Yf2gH0#+X~RG~)u>2m8J{Gw+OF%xR-|`I?E< z<7TntrZFxb37IRPUUo5yAYgFY{>61HiCYcisT1J#7ML#=^cWo5^S z@F2wbcG@IF{IKz>V;SX3?z%*!RBp3dZ1k~aez;mv%ja2`f>a~BcpwpeAMNNMI8?jf zwI4|hY=(nbeWi`-%T{}QPvwlW@aN>V;Iij8xOFm4T|X7w96fs*9ImQo5po@&J~88h zP(Axn{~6c=ZpY5r*tH0OVmgi!@A1NU;WI>W`Yl$#Cd4o{%PeHPR)RjCsGuO!5ub`X z@8OO=c6{NdBNwLO$`_{$&qY4$uxkGrzuefOUEv)lAqoIkChvl1N7R=2wnIz;siLyOez5&uj+O zrStI_cfznDJ{g2_=?cK>=j(7Pq|Qr$_|Y}$@-{Pzcw7T=ag23HQQ>O zD4X!EILc?|Wd zft=xlOg8?U)6xxF9 zn;{R*!nC>5i}%6FPvYawRH$z>wz_QZPXd6?Sv&dpXyfp#v=lhd9C_RRc|}{W4HfFg zjbx|>POrL%>BvRNqT~ep!aq}1iQ(`2fqEVEN`W0QhfEIf`Kd?0hZ#NAI6~BjwVq=S zMMMd2Qxfy58F&jXhv@x;{wE)TgYAf8R~_FITjA^<5}WstfTB(8rXsFWKIix770rq5 zL#?7i?X=$v&V^qr5;(6WMZuM|?tI9MQpMr)_Fd|?_xzibhEJW8L4X>P>E<0Oy8Kw= zI-LN0Y!$xUf$inb^k%!S#fQ*LwwiC=EZ^)2;|~B?!fybtI)3C_xd4?-z|c);;MvuG z)wC}vlz|==PYO`y25_8k1qLMz&jyf$B#hSPwEF9O=`F2Ii$Gv+=DQn>A6Q%vP4H~l zx66)Q3uR7-#_BLltTb&)hz~{=7*i`Vx}GhLk$jkbgkQ$T-%VGWTOjd||@lwC3H~ued+?^bITWbW*_OWw0 z*8&uA0bm{ntE=SG@s`Lz%2vqT2jHex>ciZp#Pa(i1Tu%yLFal1Wm}!a{+8gEz6*Z# z!}u$*LpFr`hKH_1S>EKK3g7zJZfxUw!zF!TJ>C_%%>xcuN>xf-T19^x4i{V9S)%o3 za8T7xOy#vrEL*mt#S0K0&BpZ-MHsTv<@z8MsfpGXgIF+c6NnqGLDi?`r4{;x5@^In z#M-M49Y(i?h`H4+7pr>^%W2(VNv1%-u#S- zd!Z9iBKpp^4=yZd@~jlYDl(!J419y}l;_nffEZdswO8MTK0Ema)|_%NyipI%WEwDf zAq&MH9qdfW#;0pc6;OLMQ(Pq%vZNjtS~aY~j3uy;BI^HJ1QgAt)t=d70mP6q)$Luz zUUcMY-8_zos<3=*r>grG0-%%i?zC|-lRQ9(7KXE?=Ibh9@)Cf{J=>wvg5uf!l*Tdn zroR*cHoc;@4LOUre_Ln^FhgZuUVcN*VUZ`g#E=|)DKdK3v_OEcf6e;2?Y6r{A!^d8 ziWGQe@cT(&&^LrhJY~zDOS24Ck!RQ|SK-Fmg-oUzG9bEeC3@4%NU=3xn3ZC%w zY$F1>cfy6WG3!Wx4I{7p`cLwHW+0 zV9iiVQ=X5>vK12D(I$V%d(sxCqnugF&I=Y%#EQHvAvU!Y@!k`-nzb9xpmf1EC9rXd zEf+IgL-S@g-dAe~CzIEt8vZs~b^I?cmb`|^BwKmD!2LyY3!>m*fv)kUQ#}kaGg*Y9 zFMzAZ5^m2M&LUGb+}nA6W%l;X+U>97j7mLCtp%D4%cIbv_U=j~p*V7i)<%s7+N@Jh zYiKNEb((@(S5U~m5dkcoH+By3gy}xi!Fq9|>O6IYT-oiP7CQy#YHcak#KzunuSdzd zf1EtSV;o2ik<+xUZrksaeO2$p&C&0@JHc~L5mJVM`( zOD+U?yho5s`_-OVZ_hc&h2Mu!bjAAw(oR5r$K9G-F5*l+K_YiO5p?&Mj7ao^PgR`c zk)+%XVGH_`|3xxaNBPnH3-pR4|G0G6sb$85g%^PUPF1z)w zc~U>PXNSIYS$S1-wKNKb>M71Q7}o7kf#z~9M9r9Fu;h-nF{5ft68OXT_dBx@2d76` zOlH}`%~wq!q{N^vvICZwsC^ZJ{w9j#q2rzLCykHvEm}5*L&qIt^}6x}8MI}N4|mH( z5Pqv5Dz6hVV@|GEfrEY}Qf_^GZ;9-(h{q`b}iQh5m=vXA)r0GPpM)PE#` z`u*yrMeO+nmN8)ZPe5usN#IRzLfPHg96k_sh+wIvKbXFqN+B|E7Z73&+>acth`<2N z^*0^Vz;Zj*q9ID4($_C|nDH)zcjMm)yJzNgFK&}tul_6ketebf74o)2$#K@MtgFiA zugGegevS`ip1$d{HN5-ay;U<-w9ELNb&deCqNcGV8phOixK zqg2n*7N8&fn}aDQ>u{-bDlxrslZY=?wEJr;pmGY&Fmciw1N(LU0jZ~9t$-M6Z5Z-|o^OV=H}Y<*=J zwgz4ZPiJ!^5y@{`%W!kWdJW<04nbm=OjDC4r}hi}(kmp-rpw{0hJYE?aK_X3#MQqP z)cbtQt>l%CeUl82lLv!gv#M)nor_-5IqPMrqUwZOP z%oI7L6h{mBm|=6ALTEeWK0l7uy`xb#IaQInH$nCL_o5TUpM(gM_c|pQumIX~x=gxmlHHv}`oso;sKtS)&=w_Wt$5l~sY8UD>5a!9ON1f3YV_$MY#fl$E{}(XGAv z=tirHl?-MsgnkpNfju5raw(HS=8QcBl8x87cwFx031(PNTkDzaeE5opS%*u(tY!X* zlB~Bc@#+Y*YbS(G2Uve`@NFm*`L6|{H2Pp>kR1~-%wZiB*u(Xj1_$udML@kTnB(~or_465J_`rkzQ%m&FL_>hsXK@4@_md4xxSPx z#_AH4$gRD?LH-v_2e$}N#`moKw*@j^4?0sMRM(;q2{C7Rd2j^Glcvgo+SC4tazd^z zO^7Dn<ThUXjBPB=k94&r8TiukAKm~{Z|F$ajF>1}!Q0W=Z$7B;YI zrw-J3ti2uP;UTeC(eMSpL*nHQRQQ$MA5N#uvLA2XnsXM9Qq?S0`&;2yZSAK``zHsm zq?ZIY?$UdPIE-T5K22(6iTW#t=?8tsrO`In30QQD|AudgnGDsi| zA1`T2LR%=Iv{>43KvmhuhBFOspuKjPu}0Y&!QoYYlPY6j+n~o(9#8m<-4di)FikaV zL0luKnY9(4(?=zlAszI?sVGFu_Jru?ASu#iH#FRvj>Sc9xy(43IKTf>%ydSn(YZaS zKjK%^U02Llf{UeNi}uEO$w-Y9<|gPKn?)FKhob0;qz7ZGWu}%-?)dO)IYI!%e`A>s zLz2C9Pkq5fE!KbI$WD#hDv9k9_l^xH_d^ATp~ZD{w}1jxTI+I!9sd_Sdi0GL3w8p@ z6vHI92l1|XE_9dIuT2Pfx|m#8+W0?Yga#& z`}O5F6T5n@xw!cf_G^Mg>(eCOE$>`-rIDNy;NR8_#n#0DrX3Kz3~p&Xa3n`KFGDa4 zL~VGx+I`eszrL+Ay>lmCzhBPLa4R?Mk4btZT_jMVGdIbjW!!2yr=f4f+Q8+yA*>@k zWXiy8yWfPsuQDnw*LqvVfBW9KNXAj0RyJA|Brni~i_zEVx3LTXE)*;j)(G8Rl>HV! zIi8$yC#8k-Lbg)UXbE?6=)*|u)#?wHrUzYSBHB&uzb~V{ixH&YIh0dRZ<>etLhcQE ztv2WSd#-Cs^J8SEdvuX9^>3HwGI!nE73HXZ(*Tt4+qj9cANjZ)2u9Ga{9^U5jkm8;VjvwCn`zZYLWUkiIRoPm%IFCDt6=bmK?--NQ`;@t?u=}j3z{^UMt_raJFkoYu!?GkCa0C#bcdT)-0c)z&3`Li*GE7ZH~&f#WB>Qjm~t?%G13zSo?* zvgCBm#OPYT=C(!dp^79ij+%lo&~NklF!0Xp^S#H_>xx-vsm;c2GWN{Yq=_dtOowU0Y$ff%&PPyEha{bi&D%WR;!c@dK&X4Wy}1)0x7qfRrtFQ<&a?(rB+GU zI-))9-4beu$2&B?{6=PfiCivDn%*gp1@Ts>7AfHLH1LoCAd!2D1<(ToKT3P4BLsUj z5~H3-LxM4?Pmb5V5U8j$^F-jw^HxJumOj5a&imA=JMC8M9>(Z2tBUOS#*U5Y^@w4s z9B@umYh=)jL5YnMZ8rR3h#z@&cDBtCfs~|`WMA9KJ?;1F zewofJ?*{!V5P$y^nRgPU4`u=4p``gE<*XSK+PWVd1n@G{8~!0c!ps-`e26#~g>L{m zDcW%F8}yc!yp13BaD!#qc|tA!`r3Hl|6KVpc*`+qH$Inu|Bmy^HCr1zf-3l(cfCh%)ulP_WQ%W_m^j*8i+gKndW0PNI zwR?JJ{&Z%8*c3q1O(B1UD)ji!IjbmRZklp|>P9_wncivd`@(^H6&Ia`maX9-@isLM zVQN+e0+Gc;rbsZpOm@v z>X;8y0pF@58l#_BbkmW4PSmtRu|*_Uy--%58SOKs3Y7Nk%?jDd2b@*MUAah4`^+zs zyQ#MA=ijFlNT$*+djt+nP}kp>i@2R354bOmjvWQj1WU>0mhK}d-|$rId7>6Efa2b~ zkXpl6+MsX)J#YvMfO2?U2P_>~wKGFm1FC`)^Ig}YqkpQ%&|0kzO@aNbI`l;2bosIh zSzeOjHB4t7I&+w9)M*%N&an(HmPq{InxsjFcfcpb=2+eNw>J5)MD(&HeevZ&Wbzs7 zo2?-VlkJ8*Nxmdrm6T4bvFcYSaL*qbwAd)BmP;3xR75X_d1ON{rcP1~oUWei-06IC z#i@UZuEPM~JIUab20H}5YvYo|l*7Y^GK@nQM|nU?+$Quxm?644?@Q8xoV^ywr&j9` zPYcqJJaG5#48jBIA3H5ZJs+_D+2MssqZ{{%cPS!K#~CH$F0L3b{doPXU72?L-yQ!L z1=XARoS2@Ml3~MlI;6QP#gxpa&qzakQOKc*q_@W=gx-g{Q^-27GbjikJ4CRSSMK9> zhj^1K@8{BwtQe+kJ)YcSEy-wwmbEmC=ui9tuaqLxm$ajUPjo-+48JI6dv)~Vf`s+; zdWGwo5lzg!_U>~mF*pmOy6B8ovCOuiyM%QGrIo@`;NV;4miIDHMv;EyUQu1D!!_*8 zl5$UW-=sKMMx>cuE7ac61^&Pjsdq24n}>dveOE32bK?55)n}1DW;7UMA`;if>fU&>@O=mR*R^yR@2ji32KM*@u5e^U|+!H zjs?0ej8o+XB`DEyicxPY6cV$=CKkDP5m#>Q`=m>LS1HPcmc@&-NE#(pp~>NwGFTPf z_i<0Fr06tk>sELpmn@WMb854Zl9}*NKC-v&9f3F2=aD$P+-J%~VdvnQZH>?P1!@z` zT$Wf~?|2pY_F=?d-=tRvy+{7Lz{)RE2H(}>YEo`@0ufvZ2&`IWEZR1p6Ut)`3IX-t z!MKq|WDNuRucV+aPZ!q6Kec76yIow^Ib?(H2Iu=Iey6(b-=#y;G2`8wA<)dQkvAO9 zOfP`?CA|0OU(Nx=%koxI6&F?Z8foR+zrmqBE5&w*q4aSUK&-ZNqOqW3E^Zg2E~>+k}uEXd6aDaP`ojjR`oWYv3w8zu5=L~@p}w6*25LMa7? zg9|Vwz$4DoryCu3laG_Zq$pWL`_)J2q3>Yy{IqvrmU_G)|Fyw?C=uVA=>=8N3<93~ z8F#B9KS=y3dSxzi=;InQzxPS{p0o}<$hkqZ^?fIwKl`=#kkk}0o|*!(?*7!oW+%fC zlRnIoXMm`4Hs09Sa+R#-mgVe6OchVnz{EPEQ>UCQ!L3pQS)YB%|7LJiHJUb{cYetlwgZ zu#id_ciU_Y6fthZ_};2eu1sGhFQ<}cG?qA$jzFor*|zyXVju`=3~AA^Z5R|KO%VxZ z4t+7=gbH3n>;{XV!bXq~=hI{1jV1?ntAwd4gZ&czqkCOb`oXtOUF*mpbmOSww$t$*zBuD`5TYfF_$hi_+en>5jShb4mScA|hEj9=bjI?D@YR zx#)|HRuQO~`ZmaiQ-sY63WT#y`PyJ_U} z;3t-q4QTL5(XIqFp0+$1*gGS-l|;Nmd}BuK+TlqN9aCUY7QP)2;C_`t;am z(&kC8T0-gVGq<;Ik03yL752zMA(5!L9VubHkJK6f1Zh14b{BQpRlp@$Cy-{V|H zDy>dPI`%NjFBFtA@zwrOWN>`k*F{bIV;I`jYmYrH};_1L;UTJ$PXqx8eS8T z@K|5A1hB6Myr9>SVYDo4i|kdXa!g}%vdXb3@K0JE`mJ{XQlR4!PYV0alY24!D8yE! zdm$rJlhmSBsZ zK`3FSUPt}bE>WqbLKrP6NI!9p0$ABqmvU}hOp;MSr(Te=p96T5MrHBmUCTqsMa%X3 z8^5Z4uUB;j0+@sU%jBF+GE2UHpx&&|sfXjk3$KVN8jbo zd5fIlft-s3sPo3`KtrB`y;hFzhOgfhN#5CFjhpx9> zg7{rQhA)=kit()lwjmg~p)@4;Dciwj>)3bg?Zve=*sv1)-1Wbuwt4%0(u6)N5$TzkpSed&t!F6*q}qAs@Qd>FLAVEoxyJ<@7A85 zbGv$;esBWKX?ezr--I)-6Qg`lMKt}syX@b$Ou1QS$~M0A&{gvg4bq9rOx5@!Tnw>f z_t-5=X`%@zL_H>LJ#;zPEnym~qJxY3B;O761#XZ0WyBk)Iq>oF9DW#29(&zgAxA_$ z!F2U-?H;h7qAqR@V)hfoum>9s=l%YgzYkU*aa-^ zx{oe_CgVKUa5lxk-GDY@h=?|DlSWemT&`sUauw&>WLLN!(0cyrAka9!+oKfMUjzsu zxqlQRA{<@>ZD2Kp)(y}Ut7r2Vb2i{U7P<6Jt7L}%)Z2z;Myr1pIla-Sq!U{FifBGX zjr33Gq~v8o+hP0b_y`jweLcx(N2Js~SHHx2QA01+;#F<2RLa4z`W!~@o09Pa%zhoA zLLpdi6?aj8srfCw&<$IOX+cbtmLoTvPPPB=5v9CPF&;Fy zPeCTXbYwZB#N=c-oJMQ!%i}<3VEb(~Yxd=O=&~6P1%(Lj!34-4;A_fkp!(ZkL?{iz z{p`_`Bf>X7H`kNMX*vNFR<%>}!2SPd`pT#_yQXU-K=9!1?pD0G6^9mgw?eUE#oeJe zEnc8_aVzc)#i3a6;!e=y%l)kHUHNzYoSfNb&fa@wmhdXHcX?gK3->UUU~);vR7V^L z`BfLTiR96WE-%8C0b9E>FQU4y#qiXUdV5yTV+~r-IQ-_~yHgOMUimHfpo&n%xNfr} z#*1lV7S&Jm`x9#q)f}$dV}9=0Ph0W&&V?qRmU43s@R7ExL#Wqi>p*U4%aY z9q;C9uo2WZ%=LykBkn_6IvcY7_5woaeq=f=hQmy0NnTUfyq!6=RVra@z+zIw_6kSg z_vXr$+cc!y;`PmIBBTr*m50kwTI90Pd(aaZQ6dNc--vJ+Vh(+fddh({1z~DDC|~L# zz(7(zue!YCofbq0gQy;?m26RcZH(Paq2|TIgO_yRoW02-8LGJO-L8u-TUeK84{1Rz zC5a<*jDh}ydLOzel+Z)b9fk!a1(Q>vYWQMv&g-7?w1c{4QA;@tPfQ2f@hf^=r72fH zdP)0)Mb~rA)1`y><-B)QWIa^2U*+_)a4?1Rqf92NXrcMMWX2$yK=ROS=nz>LZT4@( z;uvtQ^`8wpTN^U5p<#8CY#lrKR!R&^RqP#aEbW+4gyXN~_p+6*GX^u(le=m>vvS9{8bYmPC4Bs^?GQ z4GS{b3qCBNiF~WuVy_yf^|){y^QoLP@?F^jdrH+ZLpWvinnZJge70s+d%ms#mlyj_ zUzu-~&Y^Ljbh23sWCGHtSc|X_5q0zd2X@(zW~N7nh{nvtW}@6?Mx@fb;skOBkkx<< zd+RvDL<%T|mjH8&RVkXRB!y*--a+7ABW8YQ)7tV~P3ih30$jL-+vG$P`yIZ>_KKj& zRGsl~0o@D(nq@8C*t8~CsVo=6jdkcYkv%*bDfzWH*?LO`BBgbm5{*yZy4<2b(VOs% zD{~nC%-g`0ppVq#!PE{2!M|}763NkqAr;rE^hyHC7w=k(0}p%{z#F|h3y@kkdY~hC z9Nd~vMIqzCgpnW!!AK9?Cucs&xqqDB;O)JOfFpG%`p8S~AGNh*uNz@}-ZbvS5$F(s z_bZ7Gm7yqU2L$tDSG+T}ewmb>Tkb`&Q4+m(49417D(v^$eqAOi@#ww#<68ZWuWKhB zRm~~ZrCM>O+qLZd(@z-DN>2Pff9Q@o;Dg zGK;)HPaYtId9&`6;^bK${!JT!CRL#9<8F_{PK8g`Ou5e`oCkjmw#!}F;N2z0Ln8R& z=+k-9%@-}SEigYVDRHE8EH3I!9O{zr&wI4f)xFlGEO4R$m8JgqML@c^wR+f7b=6o#Y(*8Jt z1D)?l+5oxWd_5o42c&y9B#YEZdYJsKx6)4#{uhk>VoDpo?F^lqPa=QrszJY8>&;r2 zE!W=deE?kU)7!MhBV1Bm=09~Wmb`!%vqVS8V@e1_8lOJa2yBocThf3$_>1*34Rl_G?JAbXD}nun{_}%WocSA`hCGDW_+6)+qDQVrQ zooEl-V1b`tpkr!7T>vE?Duahb50Y>`Ur&3tO6}H78t1(l2t_dH)$YvJIsHjW9Na8# zJ=3;7+G_c5Xl;(0#uHeeJo}ib8K|a!sTmNT7(qAtLZ96$wMImya{Q2=xkk~p-FxF+ z6LXO?@^PHDgMD~4+%(?fE~Wd;=i8e1{bptQ2_ce~j^LSi*C9EJHHn+giiut8_vbfJzx-A_zKBl6%6lQjaR?1nyYLJ$&`)#Z81XhEx$D zpecd?O*t;9z85qMKr5`8rf@z)#YuU^$5_(u+R@&fy!T-pkM`%ebH5j$eKNHeSeiLrY`%rqLBkjhZz8%qn8zF4T-g`Y|?oDQHDsIQp;PoR+2-v zx55>dmCM6+ZTbA-#>k_}gq&S3qdOe=7Z^(e_Yne&OkZZ8=onq}_=a)8+$n>=Aro~O4 zh}|d+&M?uo44kR|aH06gi=L!GP7N84+KDW;KeDL!;uB@AO3_hs0H}pTp?295yT?^SEVNFK@Wxd3uivdUMF+()_fq_Ne8n|Kp54h=6c2O-s$Z>p#mTpbMW^q=$jFy-TQFd?TZ169*XuoEW zopi+;*dHY=vALK{u}a$?gV=4rb_3xTc;sRUUWdaTOuoBR&6!A@-LKrPA27xSr#)iCWbUPg8ielMZWE?%?`0cxb(RK5nu{~dQ z%!kMKtwn7MbMrV1;wfc_27})sn>~^3F(r6tzI^+%6^bw*J64^#Pxi4(a);Bs~n$lBz2CmN|``7IudyePO%J)aV8e3#P4vZFQ7ziH%uB!!J0U_C?<#VC)*k5hqQwt z|HcUVovbvu9OaK18y{?4_`@WHW{X93#aRxd!>IN^yJAVh)upxHfF*otPK5E3OD(~} zM&wtfJB|?Ats+j01>U8=+nd{=r^MIF{dKE|uO6{iz)g6Po?=Rg zZbG5gTpS1suP{L;H2@casOJ~AECN{VVAg#w(`DWw6R!#gz~~;v7d5nM9U=3M^r13@ z-9T3RK%}{&XZm_J{}qw>3F&InE5Rt~(@3g9(w6x&DcO(%ihX3*#Rbh?Q2N#qLX?7F z;HLP*k9}p^{N#VQUsiq;KF<-EI0i;WsRc_YS&qKEAgvkaVBM_eplFD{-MtT+uCN}R zq_1HtvgEqGVHnl8r&D`F|G5Qy_+boDNiVD}`XgUdoj^1Iky-iWLAsRQHmn|jw;$)J zTh>B^G+vYlE?3ia(N*8CkQ;FCtDKitO7|g2AqAjHxgYGpW8u0~G3m>O>zL+2=CJhN z^(g(IhX+;Q`Y+86t!V8vwwl==KU@SAlwTA1>ccKjp*9)I1c1JWCaE8bzK<@Bj9fo> z6$e4t#TRt<+^0;HNqyzfUM=4XP2^6axs>q4m+Vy}>$7$3Et!2~zxscWGCX?n*pAx? zN1P)SMDkSEWE{zzIuKo(>4}-bj5;w+9|$-_3eNh9SO#!^=jn)pj%;V{BV}2Io)DQc z)wfbi2f0_$9b$U(&toJ9b-2itpuCQb<8;z$E~*y9iz*6EPmSFeX((CWlwaI#z*^8a zv^#ryvVqs|cdaI2g;EriSW)9hSE}h^3;6=Mh2qk9z&^kG#Q0Ii4;jG;h;I3Hkj3f3t?~%Jn9Xew(NHz1IEUzjfD*+Fct={J;jTG4Z;qjd;M6EuJk* zdGqPPHI0=?-3XY#fyAr{U$9ioafI7p9Sw83Ru=qP`e}I;7D>Qh_K&a-TuJY=^!Nd0 z8RYfZKsRt*v9rj;!fiqTgj)NUsjKUjRC74P|953L$s0h}Oc7eEz@x9{8Lj)ts^4!9y#r3=2awb;U4}{C++K1MBW$9- zkVohK`A|G;8aIRNN@8i{|L%WB;slHq3OoD6_8NTAvANvWDxTi!2&UOi471C=j=)c; z>YAaKEnB3+DBjrG@+G({9)uU3pC;AR04sD)hJ04p*a#a`7s4(g$lO{DQM=(3xnP*}@1pn=7NW_Xa-i1yJ1^9>PKUZS@n+~!?`tiubh&7_isEdvW zHRSYPTM3%E(4AI?8gBh#*qFs$4y&}^Y}cK}?E-yuv>l>gs>8kwaV2>m{j&@|7aVKP zI*)eX0__wU=S1>WQK%~(w7*2s*-H7o?Z1OTjy8aB{?ZL|h5ar7oqRq7fNPP1am@cN zAZTbSthE8PNoUD&K0O9(ovvc3U&)s?C2hLp=vkv$Pli5Uy&m@Qo@l4H3%kubB{eJ{ zVB}z;6i7(+V>l}%sc<-ZMU#4`IKLgA(fh2hEBK>P{d3E9a8EM94i)~om^&q3RI{eU z#iNGfMakzT(dY>fUsU;UF$OUsmhq1&TpYG#h?~Oh@uR#qGdxr%?7Vf6 z5XKAj{_U8mFVbhzOEg=hA*Wbw< z!`~?5;q_bae{mp{j{zo@G+)eyR3<^oqbp0BTKIQ*!ZBF{xM$LBLahb8(*hkS0g(zz zzjvvx_#SJI!{q<$3w@W*zm1Nbus1cdQX<=T7(BiR#K|FQy}O}i#8Y+km$3YfUxLmY zhogk5dNO9AN6XQLF>;3(3TOZAv_BPLE9*FRG9`2xTKp~dj-cHHYfm6~WqNo9w$APM z?)4P-A8?~>2z_4GuoBnj-pjZ?<3Zv{8VcPac{rg;>AN?jM=HN|d2s6a?>@n005<^( zx)%ZeA3}<~SPGy$5Yr2Pgom65YM2kQX9jA=D!KS$G@x&mQa(aP9^Tc(%bYZK@~N+M zsxw{+dfUT#jiHE{RIAvBI<5+_!?GT68fYLFPtY@HWDCO*SfTc_hncmA4|K(yX0S?= ztZgz$Cer2>isk~HxE_~;el$^Z$!`redQ0d%?C-2&^91t#SdjSs6u=*DX!dC+4Ar-(D%h4Q^2S5E*c=i+CB zM`K%lzyrhZsapjw8jp3NqGGI-PL@GsTg3u39B{X7FT_eeJoNY-im&4ZZzJsEe#N>* zQe>K=;LGJvqjjKrP(`F{6hnuqJN&;j+Y~JOT=%9=ycwwTiPeSv6i}`!+J5oW2c~Fm687A6iymu zM}a;NSIHazT6c)yc$JugkHs2}%Ik0;d|(3=Q+mWZCo^Z4cK=M0@6nl#0DpXvdaHEJ|ya3{fiQw+d=)8 zf-Tb4y$E#H&|2ha9R-ygR(cEu^X89OiB0XQDnH%Fxq(ZWST}uDK}MOltj>J*7}=5^ zQ?7VJWk%*c8b8JErp1$$N*97O#OXG-5pn+6LnC}X0tW)tSH#aGPp)8&OhH&C2&@dy)9yzK8lf7*%&WpX&71G9t0Pt|S(twYwy#>MrT z!KEkZN$izbNcsihRf(CJNM25wNiC@W515Q|W&Hd!`t?$;zdY9Uv5~^?lhQA6rnmzk zsFY5IQ0Ff-XqpSuVqfu@&)i>mTKki$Z*qvIzD05CM^*!r-|cf80fN1mH6n`RwLz~| z*FBO~wk#&3?+{;xcQqweJLKd;Ko5+UPhu$5+Pep=A;1R((oU+)22RS~rVgpaEl$^P z78Y7?^diIpjqgS8tk{xL!=Hbg<8h6iS_;9m_iPAl=n@l37T+n+0EO{NgZ|dspOf~e z#P)cWi(NMqE?;z2yS8mOUyy?|xUTR?1*xW43p#uTAMK7i`399-VVS*=-ejz4#r?+jE1{Y2&oCE z2>)wymYd9=DhCrw7`Nxh8o*NFU=!nSOc7qOLM*&YJOV}L9Y09xvg+33Ok-0Sx?-Ye z&P1F@sq_eMj)i|a39?s+H zr-UOsB>T3WUi2qVJ-KdUT&l9-dcLCxk-MlH>UloXGl=MV@?I>jcMXuZq!aagYN>yQ zf*UVLA{A(zA@n&3)N+Awixop1kYcO7BrPcE7F2fOzNgSC@f3 z3=GiS_LYIzkUj?yX4I$3lTU)iW&r7=)9SFwz=vbZvL7 zvKH^~Dvy^Z1!IPnyh#4oZ(Aat`>-t@j_(mgCTA;d z7+FzCp&u~r!j+QnU6ZhDq#wo!)Vq&UQ0RLUKXW39fG?0>NUYTGm?y3YK5CbuoAlB+ zFIf+MTwfd=#_h-1h7p77`Hq4KI_K_TFxiJ+ay=9{TnI0h?RpQF#{vsPaK7mj&GT<+en#Rs2)SgJTmn-`#k8Y}t=;z2X1ARSEADU>${QB=)^*>| z5hQD;Ouv6)rwtIS4Gg0~mBmLXaqO*sKIHA=vM_SUBSC6G9X)W%3RL^fi*)O`|1#>% z;Q3fF^bUajU&*RQxJCVe5usY4M&ViR)IMLSX00nagPYDGaL<6P(|@uAqJ@}**5BIW zmmi(f3`{U*sSVXF#C<`!3=AP6g|3$6cb*LcD;r{HVh!L7-MQFl`W*}(PLF6JxuSLZ zzd(eu@9aY_kp zx?zLI&HLgfaz*G*y!XiQ72mM3@MN<72Bn)@&|~K{6MfVbnAKVXP z@!5p=!^$NuzeL0@Vj%qUJk5nl-Np%zXEz6uHEy3DiQfpO#T z4bOz;2|=-RogqdQ40_*b>LfS6XLk?fux8)fdqdfysS?ln{5SE-v!KXUEfYc*MNwCBa2 zioMa743XHEACjf+_INhATMaU5QJ_)*6P}6WK7`x2A?AMA{V)x%Fb?EOD)|yS105kw zDAeAs<{C!D2d>R4{e=VPG;B!`r0DH6V7**wFEGyTNf?#&j#PaBj>W!5UzwB;c)bim zjnyRiq>^2mFol^-5lcBWVdOwJUR$W&NY!j_PeJku`l^^}r6x@|GN>J3Doc9|qiCYi zC-#Jka4*i&qgqr~G&J#d!l;Db;7f8>)+uwos9%O@49c?piHl(TdNMzs=N{x3G5sc> zHdy>l0!k#dMB|e1f(vYvymF)ZV56_JXv*^rgIk3y4aW&7u5F)c6_=vKUG8q(M7ARh z#DrM$$V?zADWT?@OW&0O+d895cu9Do7%~s(m*IhwT)ZzzJ3^PTNeJ^sBanZW>bq0h zYAX1UZ$|m4D*he~3K_t=ABs1NUAB4>l%zvA-9gO%(I!de!bL%c)g<^2%q5k z(Ysz}>P+*%3x%)YmVz#%!Dd|OkpcuZm*KV58aYmFe;}R+N++%e_KW6j4=i!)wfsWi zVb=HqLODt(x!|v8rTxhx+)b;9U{t9zVX6yE%|u8I!^Gh)lX1f?oj)5M0apY;Hp?23 z^_8iE=x~-6mCo_~E31?)(}aLdMxTSUVWyIkPxpa}ZE>h4C4+E6-^C9Q!&(gKJ z04GVvO%2ERs{+8DD*Oy@T1<}zas-KwC4lMg_%b%h(!Kc_b?vmXrSgX{g7JE==RLK+ zE2)AZ?gzVUeuh!BS`gCPt5$ac66QAEqIZ9lnhFDdZaFD%Qn^|p$$2sl0e=3iM7Wfd z)}uA_+Yr5N*Y&_;s4^LCej=?1;{!|)TiO$&7mFu9m@5Gh{%{VM8p)`}cQj!bN(LoW z;>C2dr;2Y8^ETD#bq{yBLH(Wy;?aX|w+*Q!H#fU7ltQ*ppnTo%wGjVBwY7S+4nAc} zN~scOn<4c2+yUK;ym-T;m@m?I8N;jN;ELO8BnE^$x?5HTQRLCNECRTnsIL z#ufwFUY($HZa>&bRnsz~S*`v3zc(~5`h%>uyU2^lGif3U33R#Ne~4M@>b++7?YXV5==r#^T9lpB&3y|vMsSq46%?H;Itm71rCQ-3CsF{bTqG{ zXw)DE&)1s1f`-yp=oL-$2izETOTsjv?}Y8wV=yuBoITYL!r;5oO37W z_UQHppQJo{7;L^G-0#?~$7lWF>|x@rsvBP|VnFR~Ah`LLLn11f^+RmYxXgF?lJda} ztRMO=W09r%Y^4<&y3~B;OFaI}@A~ zKLa84Rz)@5*YPwt{DqP7YFVHy^p}Xeax9@&5bHa6!!8@irXTK7uf<1fV;gAx(QWio z`&?0_v&nJ8Z=qYVpEXH~aZe%8leOkqf0FD!=O@xZrgEyN$2Nds_EzPIWzt^qM*U#JnUl6pm15Q~$Eq9A~EifZB|zv8hoW@%G?WyYKOhRU*a4=0@Q7<_yL zdkxx}c}xfMJNA?$^^{+VL*DRq-gKitCp$CNRX|2% zX+m_`K)j`p!%!*QYQzC0xFIbSTu~fb#}9RB)FAn&hDmgPMMIp^n}f%#Zj6v^@(7bb z38nfk+{QFj{}uVy=`lTz-=(0~=fyOSy~5xsobSEHZGGib#zu;-r?zF_G<8V;0ig5z z&XwM!C1y99H3&QU*}Yrp-(kQ`>&(pr>_8zQg@FL+n!Zfxw74?e*6@s-PZGh&;tZF2 z-qcA;9Q9NSONrg9s#b)ppJ38EI3L!Q_+zn|jWt{P zUlTnN1Lu~w+=9rHUQ%Bv$1S(X@IF&<4Rvkx{1UCKx-^;KSdOR87i(Sg{*d-aAsL6Z z!zo-)>&5$N8?OBuo*x4#7ciRrj5xaX58Y=~)CahMM*|U-z3XZdxRhj4nhIuGgeYOW zB`kgLWa*a$rGJMa#q``7D#)|w6|6HmBcV?unmpl{U= zQ`Omo-#ssAUu$bLcd z-*@kWHE~rfEQzZgnf}^JaC+Ok#X)GA86X=B>^0_76lZ)|sK9Y2$1la(RzHZ32e#Dh z4Nw}3n2EKjYquSDkBCHJHlkbF{F@YZm=!&3F_m*+Q;fgh>LRV+KACaB#D{T3dNIC(pXg78*ET0EwAvr zB9x#GsS`FklJENy2@%{e-1CAy?BSb8uB7nbngYk}ZYCINfAV@4Qt!uDM6V8bCTJq~ zp0fJGq@Gf68GB&}xd15O@@IHZCKuN#?+9E0>KN2utNAg>#obsJkiZ)E&D?}MOX6HY z^zK7m#C9E6fTm}V2eyv+Ss$~1#jUQ>m@FyE;BfRN_XlUv=k%?qR3A3WhbZC=H1Txh z-eU=u&jAt*1&n5ZW@2H=!sEIwmnKeJZ+!2mgr@)<{(t+B9LO8uF5oBr z2A_6!7l<)^D*dcMrPTj*DRvj&{+YMoGsm#QTUl;(xugvNYC7Q@{D?lug7&NOelDp> zx4=@(R(&1F#_-n1Anu~oq}chdO97q`YRYVBBURW7lTeRuQl~I^PSUuUuqZF0!e2ym z)>I+xgep&;&t`i@-9GvER?%&Xg`QSNPUxdl@-KLQpdkNq`tzOfU%>aasMHkOJTJ4t zjUsD13s)$aBw}q6Epw-x1j5V0Y&T(d8D1?*!gwiiJvj+@se>Se=O9BU@uhYr-z5ro zgeLGb)>(zV*BmjZni#=}(n)o1Kk%g|hKHja1%4-Vymor#rUf_~A@zFhns*;&;%ff) zh@(aZE5Xf$Z67{`eNHfnxm2(-(KiC}{ zWE&fFvSU%wUrcyTumnSpie<)Fg8d^g3(g6c!_fDbb8;>6m^k?1m9bk$GhF}R+0~1J z8jI}-@V)M%R*kI1oTuGxg?#%PM8c)&EF^p5tSSGeX4B4mwi1IU3*{d} zhsRST+^+P0u2^GAktCum4aehEBU_CdaRzUf`T??@EurX>oA<COS? z3getogJ$4mtJ&-!6h3aXI!hJXMp2zU_C{5gB#FXjDvR3tFfYr`BD1{bF)DMPSaa+&>hxC_LFH zm}8a1%hwt%`JZLu*F1^%L5=M;YZQvDrQgxIkZnfkmbkL>H@azjJJWt`pX;&iCrL=8 z@Ve%25lxUn#MzQA{T+Gz`;#%4DvzEC^^9(ks4xM+2x84@#FFgIySB0z-gWAFkNSxv z@1U4dOOGvyI4sDfupB9hd}0hQe{I)B!m_$3C0ze{^iGCrgvpf}dH|hLHF$EP2_gzr zwB^>32$-p@9sb9CtBYZ1buL<2;O2hZ&}~Lefv4#o836g zbA#~QyW-fcbNPs%+L?@-too&f=I+?W^Pg6|I7hg0qN5csbwOP41$g8x@EVS659@g7 z2kZXbq5gnWD)Lar3woh!PL zk8mXH%g}?`oqD9{uKV!zugRQfgN%^32!w^QQYE*9F%fmjF8-PN3&46(M`Ow7rM>%M zl_+Q**?jN%#_WX0bMa(_|jSX6TPj)c37?F3rhY1qU~94EYVoA+NS{_Fyaejee6< z;maw>?0Mn!1Y7QP(k@lf%p2bcX zbR>UpPf>ah>!U!2$$`s4&x?~Ku2vb^&e-6t$F<|z`r)cgx!n>74%dkkup4FDd{9JS0P|DnBlQTxRX>b9S&1BDWCMg{ueDWkLjzBKrsp-AzHG zzCO-Qbcvnguyti+{4Je_(b0pjHi{Ri@mFu2@Zav@gSWqw6Z!yAZ5tL>F0PEuB_fBB zzc&Ad#FO~5>Zm}G85ry7l90~*ERtw3ehM+WDg|iiI$O4X_D<`pvuUsTe0DmB5^Alg zevp*htk(>tq$u#q@B7PqOxQe6?!~=1A%|5w?QQ}J%{C2AW(P%~f;76%N#k+z0C-^{ zJDCxl4vus)Y*Mdp#Ypv*botEgftS)O`!lasJli$Nxz~Job7tqcYh5uDhdlLP9ErS= z=y_gZX6k3R@X}!V9=w<@7?=8&Xbl)9`4Rdd>;k?Qp~QmcM(a$0FVT@h6h7T3mb>LB zA?9GGnXA0S-=>Ab+gFrsc0C8d|8c3Ppe#SbX-@C%e!xMQdRo%kahLUuVqu&Giu9tK|7-s^T85^yXPl*TBZ*FKK#+`2fFABbKp*MS^2 z=Wbh4o$-ZL;0`(M^eXs2KPe-abBELRo9F(xt;$CZQ+;|_{$*ww!>4UdAxFK>RQb>A z{tfE>-P>yfJK)T}d*kZ_shh)JZ%DpmP|W1eGaS`gj8E#P=$HoKa`MnHd}`_gU}5eL zrN~vdL3C`n(c3S4DFlAy1F1zKzn$rH=bzSTwznf1OW2g2kbHrynEdZ4I^3s>4 z6ZV%y5DOVZr))h*s6nekmA9&JK$3(9Kuok-%Zg9ln%1>S$7ZV;GK}}S|Nc==kK2ds zIyL!q*bjQcV?wWnE5`43!Jo`ZD9~TJ9Gy<*+=6X5`m3=AfGE?bE+U|SCk^niC2DPn zwG;haADE$w)UKN=+p5KVFyB#-(i>O-ccr4pvWh=;6&{mfKUM!SqvK(xoE0%sMQURm zO0@4GIhsrlYNOfqI_`$Q6Y!YmWbk!rS~qyp>b{kZs$6ULsUH3g!uqaufz)5ElnvpX zwu-YX-PWSTk;}}?H8BEn$ii*)Gp3O=;4lz%Lcf$Y>seYrg(#;PrO+*$d*b3rfm2dzOLaSAsQL#6>v9Zm>&QU_XY3aYlFa_5Rr!% zHDZ2{GDPuWxi7(8AJ#Sd{qa11HrAzot|ygY7}~L6v^F|RCi<|zxWLhH#Z1|!cP5bh zAyh1*^Ty4E21XI$N(S>&f5PQNSWkA_c0fV6m3U}4Aph^_HoTJd4D+1nh6Qz|!LZ=CGMN%qH3< z(=5Vxiqh1-DJzhkm^>7O@)h;^IHT%V8DfIg$cw40<~GydiY-!kSC-VUtdKW=jpkt3 z8Bjo;#iA^QeDd`igeuyxtIC{Eq^qYo(Hc0`6>w*KQTC1bZNOH&O5~`1DvVLthvVv3 z;JJ>azh@pNMSXMk@bSLtuG03udyT{Nw~+P=!9AE!Cm;a906FOPsw{tf9qm!LS94o^ z^P@oT8lkxDYqR@S$}W8UIz6EhJwn15tWml#>5lq;lt}MJ6yl{ioDzxtCHDlQ08d=$ zYT+UWJ4(%1lSTuIgm*BD2eJTF?8AUbE=~dfoq#81iKFL>Y;9@)aN01Ae?*jNLdl<5 zjy{NS?#U^6>#@1<rVf!->_r0WYrlz3U6w9vr6G9GS#@$)v_!1 zMZJdw|KJ0ikjKr2$s(?`Yf1L=g-jTzQ3OqU5OBB-m-U`a$Imm(IfXld;RjI>WshlY z3g_$4COFcCYU^nltr($pj+K5;J0XTH)_M~Ao`UQGvQeWhw7d+8 zXy7zx_oX(@B&fk!p@WGd^-^CK1&0W8V1^|B2cR%pTva}l>7A}*r**{$*xv@|yx?{L zYB$>U2n51hgA!r{Dt9M*sLK_7J=gylgdD)NIRz6B@u9ho23ShZ#h~{Grh>Y@%uy)t zP2FS3fa(KY7%fS4gLVx5;veR+{A{sFrwX9Vjj8Jr1^2u>#oH98Zov|DpH5KhYLmux z@q=@E!P$M0{g2N`EfhPdFSs(y;d;?^0^t!?(8$ay<+3FH&%E-{46eDh8=+%gKdg|7 zszgq`AH%7~B9^1W|2HTrkd8d@j$T%X^3Ta9%bMb~iw%BUzfF^pcjEtKUU`R+jLWFz z9U@AmV!rL)=QR^x+%BWtwhCNNHniu_WVgj~ppR3!Gbsm8iNAi}x>AbJXjCSRdh^|d z{A@ZjrUA@>^t=5%YcLpGg++*Ww4d%dh1=z zGqI!(G%)4RM8qfa$LQ+j3M~ybt}c*fANzVsz z5Py0Z`T2vOzmt3L6GD7w0}fdKbNvRtx02rAc4H|<`A?Y5hZAR9;F?~}%iZ3bb}_?$ ze^&4iz4Q7YAtH{xKa%I1y$vLTF1WN09BLG_ql)Ql4b^TNb&FV4g6;+i4ts)b`8SAo zkW7|oEOHV4Mrk!gb}|KA6@9hpuUV04RQQvBRfD;`*`@219@^Zt=mqDkvrBRcb|OP$ z&>3`5{U>jbLdh5aND~zxbze?hcuPUGS&=X$co@C`H68(Tr7e;?Twr?>ne&gMLPRKU z>-rDD<+dAvbhF{VrQFl(Yp+)3jH8;@01EU7>h$co=b;3(i zh)Ziv1!Ao91W*|vzQVQrTSQE_>?K%v65jOOf##T>cNbW2n7g&#)f1SL|2%!JQf2xT zWK>*E+m=wTz51TenHPyju^-jMJp~XD8&1Vu|Fsf-L|Iq5g&?&Ji8&nr)a^xiPp`nK zm?BLKRQ}fh`L=rW?dbWe>-E!N?u&cS#=HRh2Z3y?LX4TbX4bl1p_`t5(>JgAhx`I4 zMp?4GlFlmH;M^fNtZYm%@B>i|&uNFBq9-v&&+;|&b}8rGM~!K|{UAr{JQ3d-tf*Le zSF*;cZ5vG$NPFFL@?bo1r~m8E>N>3|eyU9HR`9ZsQYvZOfKr9?qf`N65HStiWd`JB z<@wrl`izB)B!os8zCtHx1|eBsdY1+f(E{Icrq$LO(Sj40;I4+$%d)o$Dwu&gRf0Jb zLfOrDB|Pj~y+&yN&kLXfV80vhDn^tC4gm2i?Fvus9d_E%aef;?GRv1%=xY3knQeD@LTxgoztey0M`f`L%Z9k`qmp(TaRa;WW zvo+cSCyNBkd2mhX?Kjo&{{G)uuFI6Pu&0S8C!~siG=_y*kZDqHu}cMqGVz@bVKwJe z8VQPmwna77xdxAv1D^1hQ<}(Lw(ZnR;}JQNiWpWyZTAfZ>cjoy>qRS|DZHvY)f?cq z3Rj5=JLcJB)5{iiEb0fvY0|hvT{Zr;yX_>8!j=Qun&{8?u)l$Sy~)wiQVw_|yfQCf z=dB>6ZrxqhQyIJ>eEpc>@su?b92!xB9Lu*)xoaY zA5l5G4o5bZJFMfR5MGw8TRlWb53hQhE*pD;N2rmxA6h( zzaB5~^koIN69E%xbe@Jr7J0j?wd;GZ*SoCImS1fs&i{J2-;&k6DXpX5W100+FJXkn zxp|Ni4f)g|#!q<09dgU1exU;co^r$svqTTZmu!cU{%sYS%r+MB8eTPn7SJF5v?LI& z8kiQ%pQV$J)LO= zQN6}Ywl;9YDWbG)EOUtLw$vje&x$8cxTq3&^r39F@2Zux^;}PW+G>>_tbs$EUP?4Q zEGzzg#2iN^Yp@5O;O!$RepIQ5+X#htd}C5TAW9DNi1|W)<{jo!#RX+u>5tPo+Yj#2 z3LM=xu>t`XK3(68nCu8!z?oF#gStDcl6oB$iSWOtc5VCmX2z`*h3cEGIoSV_H` zi{ONG#Yf9*%G0W2p?Uh@ zBn){4o}Va7W_wB6wA8uPxGImg_ULHq$Y}w;0KcTN4a7ZnaZhke6k7u2>%@?>OYR)i zz>&GD-`La2a$>F(-i}<-hcwo;{IPWR3yC>&9w!{^Vj3h*AF~`C+|oDnQEOpwXkh{2 z-Ac}RCE3&%*NLEtcBZaS{fO9#)HB zLNB!%m$~$K8`4i3pJPF(%S1SRSdo5f4fRRMue zp>O}NfawUb@;72yG~tR4Hk|9QFhyihLx>=W{j%!{`^5vuqK1(apl%Aad}on+81Z|l zRSCfMJu#a{xMxAIxgFjWr?=`AF}2vcRJtdpa0($3zqNOt)^-uj77dK582g~ZE|~O2 z`K4E~m_Zqp)S7n*>vc&_{vE35jHFMv`P1I=KaFJrS4WI}Oc*u+djjxp+E<(G3D54l ztxONTrpNFSw{=PbJ9-5MF`0gMseV(!TQLgGT22A-$eX~pDr^qMMMn+OY%7lz87*|M zuF)#&;Q%+Tq?a($#wC28v)`zEgkhan7{sw3{{BjoNn0#$iG$ zO|??>f|3q~BF>A*b~J!B1`%QY#!cp~yaLEclm9!h1pKimCqMY3Kl<(EYZGImd2|@( z@jr9|z_*kK*8?~1o~|Jru0}Q<*^$7@I)+(kJ4;7DYi}irWN$VM3LvjB}0`Us+&%v(HzrEbxnea+P+VsB5)-;pir6xONSq z;ABXMbBGSm^@i`}P;Vf5$9s$5vK)J30dwu9uXZi!*e^!~NR1;YAhV7ecT@sA6ABeA zL>j8W2?+ru;TZI~7*o*ib=mB75r&*k?;K8t6qP1Uv~Le6nzFbB?N&s4s)`OY^@%E? zMuOiC52X+?*i2Zu*Pb!F z{r2LyNQjhB2_Qa6LC!i*g1T@Ti9*!W1k$McF*60G=kxGQuZuIqiOr!CsAY~*D;8Zi zCNCS=$oHxYeW$t%X7MY-}d$I{`61%z4AvtKlV2F;*Z`Q*1wbRw}4NMhv;F| zcP7gNWAH#*G#;;q43~E#;y!L~r3w7Zo5y0n@e2U5RU{4P&;p{4DKyhLbQ}>xAvy}F zwwt&8?9PMKSi{=J3L-+F1LCMcphJ%1&ZsDItaD^pN?v3PGlW;lB8Y<|V{Ty;XC1~l ze&-LL<+op4Vj@tSi-X&}Y(Uog{+nuq3$+&lj*Iw*5h{w1AS7tCZaK+2=g~PN4A2+O zl$`)_-0B8ykRF>;of?O+(9Iq5`R?mvKKJ1O(}6JQxd4?wj%_lXF{H@==PawMD-6;U zFSZS@IA#imh$603z36(3 zbC?#s6<{ZKEbOuuy%^v)6AFzGwDLm0af)3;A!=p<0&kZjjwvg}`7u+PpxM4v6QIbk zS%%BAW3ySVB>(lyac15y^Stp)NPvo@{Gl$h2gjU z+j_1b#)+b+w8-Pe{`RpFE?)9&0ClMD-M;f7BL23p6q%vO3g)hEkmY-y$1v>@B%6q{ zs3IMSkEE4i_S9*DFhU0bN*~=E9%e62YGJnG_g|>xXyuYE@_%NA;L!`d`u`qbdL7K5 zkFy4s=SMnL0FBfU6^@BD%gl4;{$##1nXTD~cfI$Us5fJp?JAW@c;tdypna>vYFs4< zM&sU1L@=gcV{MJg&p%6%?~N9wsii1v*_h_&g@C-sF~-p8cUjq3-KHu3^yfaPOaA)D zdnGup6^!%v$Jl{?4txyZ-ye+tpxpbh{3FIK03S|4VCw|^$?N|6ODp?W9b=UE#Gl!P zzx|wB{hgfxz!sE1e3)ne5l;|As83H2#?eludjMZtd`dvQwOxSdpu~TR{P+7k9Bw3T zGy6%3F^(@i_X@xC@4k*8Y-GiOFLzu$!p$`OcYTa(*W{tq;d&S7rM zV{a~lF{Kc2aG%~dFxGKxU`gGr_GA0xcs}(7c%-VR28R;?tSLpMUWet?l@o0hdB0ET zbbu2@TA#s$@qUieyF>s7oIBf~b*hfi>Y+4_*7$aCgUy7wYny((?VCLK-`9Cc+*?MR zMNGl43o58G6=!B@nrgl2>xyj4F9DFZs?Za5$VpXA)_=vQ_p6PLj1OYPD-Z%N* zHZ*`u6Y|Y9AI(%0ht-v+W)5+1;T1!3&WpUVM-5s8qPj+D;T?bT4P1O|iXc$Lm7}?( z4}yStwSg!fMKTI7MS(G36-I_3I@8ZoK~k zAAFs2OaRwk>s(}<$3MmcmdE5?QULZE0q_ps+@NW+rFRYVS_# z7Rk@@j3gP11o3yykrxJIET8z?SNWqC=ILdIoBizYZkLn=9kjxpZtpK8Kzwexgc0Gy z^mZtSh&uc{8Vk;1H#(RXuHee{S9=Xd-uktE;kc1ltb^=`qF`fz3sprekbP?$&RQIf zjnx&py)M>zk!d8zY)~O-&f-Mjl;S9qQmuqDr|Yy&H~d;r4~P2dthWp63td*0`&b8g zaoBUjA=V!cAz@8?>jUeNBpe667*_jLbOZ29|+6++GwQDvyzK zm4od?U_1IrKXx8{YWkKCdT?Xy#bZ;DudRS7d(iK54!6kvo zzU{lt^7MCHLPQ8deSmTI;RRZ2>eYsC%{wxC(z0;#1~;!=1?R}~!wJV*XYXKOu+|-D z8(M3z&N9EUNN>=)^KX0!_`&yo;Daxe@A)@?-`LH^df2d)$G;olALsFpaSwbQ__x4+ z^`K4wdldk-!vDt+0Iwx6pa=ZNUHFwIyszUuk-s_?1MVdN{HFQFyMWgNzgUU@>?Q(4 zdZ{dqU6Cnh__n#nD8d znJ=;0NqAwY!}VT9ppN*?MSwWKo@zlHK3Ftx4qa;yG+Vbv030=p#pM|;%Q4Ts>}vx& zfM@`0rk1tbQ8?%y!!*{EuUbAC3awZ@_|PfW)9Ug9d0vngIk_<-aBt?Hz=jo)#wn~m z`W)UcR8%5OwGuFMvF&dR<<%(!IOlNIv3zZVK~j)phCH)J9#y8w2!N=+N|1ILc8diE zgjy2@Az>IWHFMgNzdg=lH*+j!4(l9UJLJ8%gZu|iJ%-e3ND#o0rm8qxDOl#4YuIG4 z=iMmIlmEw_E2ykkPyFSu>(+}_6K7*4Pgj^dU*|9Ul_v;G!B=E&5lvAPQ;91GGBV_U zOQ4^hyT<(7E9BYH){ohW07w#_BCuCvdB*(8BGwwR+}97f1786C^7}vV!A?0x|0(dH zhg|^J%H#h7;5&ftEngq!@sF_w{4-=bFyu%CfHC=hEu$=E&HFm=e>UO0Wl!?4Ah2bt zKPB&e`ak;3U;D5)_!#hg_jFpz+`~YGV3#ATHq|DGBUGS|jr8v(0#xHFB8sW@^j+17 zt+fo2{;5i4Yi6yhpwT{6FOk-6+LkW?Bsfya=v4lKJ*jQV| zSxaxw$5=Ze1lUnj+T?K)L}7yHINu5#2ouc+r4`d>o4$46tEEPuK#>%z-0WbDWxbPO z3U}=3WXj}-H3V6oaIiKKWJ@bWz3RKOv?r$sqsl$SiS^VnC}3cZp7`&7FYZt?;*j7C zkD?~q{>J|pqbyvWKg%13o z{U7}KOU#~Y`$(&MAdX@xado6_{jD*~UA;^)7|`!^NC$&sv#r)Ttc9YmWSPB>sSuJZ zVR3bdUeYfc@a+0be_RRxo8|eXfd3WviHDK!@0Q0uCj4XU16#L06A1Thz4bt^v<&|r zlmFK`wxVx;xhz)pD_dXR?7zP6wJQiXaouB1{lr zbQ$M6k}W+3W6@$B=5RPNi1go=1m|!dXlmi97kdXt8L4cBBYYc}r{^GTHPUN3=#w zw0y4rF|R!dLqsA(Yg82DikzaeajT1f_>kz+85eb%llaw8w^9Oe#gW)3NdhvWkWo2zX0dbb?Y zVG;i_Y~3kMUY)>+##9=(AS~zcM4Mm(u(aZd^mJBGALN8_K($pFA>&uxoZtGIM_g}@ii5Ou&%aj>PEMN16o;1o~1Yy;G#MfSV$eI8{S^@ zXOSfosGpl6o@yc03Tk@7Pw+|FFz1jUM2C?t4yY8?Ic%@P*`qpwou*o?5{H$MN!bw*l0l!fl@*FSW8wN7)|!3S zq&U0~Am#G$7Yljr==6H5Y^>59^nIO-`;XZRz`x!}W<-&?oOcm0cb7QuDk1#iJpM6` z8E*!j0G>aT0HCg_kBrB1jC~0Lid%I9e)!D~yBN^lWh6cYJXvnQ2Z{jJ`Sw`-?togO zhSF+iH+?qG!8z7D9c+;kSL-y|(?s#flMdf|yX4tP&b9d!k}T&p{@vI3gPR+)1H~ip zkXkC0wnJ*4I;#q&Tsg>|KQ>5mr`HR#p;P&4^hMD$RJf>F(uw zC!G{qSk_nitga@*8>gKjfM{%Mis^}nAa5bo&|g|5+2{?eu7bB^j?J`S&7|1ClAG%A z#IDFVwri_5U)6#;zY>*ZqT8iL(TJ_ zU*oyYu5;;4lLRVeV$yQ%k%&qqC_Cc}kN5*5g8>USuKPlNJ6<2oGeM=|FE%>e4$JE+ z^pn2tp7CIORf+sB|IN>Rz}>-I-u`NE4s(2azTd~^@xQBleVoTX#xbL}mtP9T<21&x zi2-+}3-H)2Vc;PZ1m69gAGW}UKKg4Pe%)RKfNfG#7}l27K_CbNf-pdz)XlqdxU$`v z84Pe`Q9ltymh|a3XtsR^f*_2J-I1|gbo&WP2}`RTKJNxgitTO020>1L8`+)VUU-ro5w5s}QZMQw&lD>zz_qloNe8rz7&( zBzfEz5xd|+-6vWRN(obEngl8%TUkWK6@q3PM4`g)#Dxkc5EPDyr5>k0yMXTc97Hz) z_q|$cqEHitA=zrkr+(!cab5FQf8+@!XKFNBF}1o+7dq)j~2%|r-3_rJNzo}&A>k%HNw9$kN@x9hwzWd{}{)JI`FUH z{z92N;K-`&RY@3Qj6LH{+yCko1l}p{e)$hZkx=o{9Ki*uz ztyWA$K`|KIBDnW>E~Nw7)3b!p@r61%2faapv6jz%=_Nk$`4_2ZMd2Ks%nY{{no>wD z2CWHRe+jAAb}AOH3OMVq#<1|U%PihlrN}KK(wZ8bC&ayFU**Z<94o68A#PL=t!TgQ z5vtQuyUwL^4ngRy^|^VyLz)f06`|n6Yqb_GJ~}~I2~k>5`gpHJt+CjW{9n7Wjxo-+ z{ThL_Q;9W!5+aGlwJD0YJ{o&X3)R>Y z+1W=X(BUrKUqleC2`6WetyHiRuytW!335YiGv&-@7EpaNGDR?zQZ#CHDslC$O&OM* z6~62HFY&}1XVHP8T8mEX+0rE8>PyeFv9=1%*Yz3tdE*?NUZ0n*U8gX{r&#UpPy80} z?)QJ-gT)xm8I{W7^TcQ6Os~b4yXiYYcmTd2EcuksO()7N>f9G?VB4=Y|f%epCqDu8>mxOcV zc|n#NKK9I?^3}ODHq)G5Vd)n`o`0=CYot*nc*A4f5k4Vj_{hnl60{09{l>=-C9KS^ zV~i!whfi!x7&B;}L##Qr{_dg_IttKH$jqDGfUZ`2UhF;Qa%=C^C##%O!i{SixU!f1 zu!24uV64Mf$F(c#0GvJ7q&`{oq2|YM6Yrd(w>IGB4R4#XeE2q51j4{qu|IpEMYS2< zyTDobT4idIc%qFNBrJdRc}$jLvSK^x=_q9yrxZ>!X>%4^iU1>F0|cfgD@>nnBf`Cf zqf#8sSC)KaT6+o|SIRVx9h`Htr&_m> zkpnvm*4`H4@9h4`l_?4~Ru^eao+7T+IBccut$fMVjV{0OdtaiPd7H3u z6vQ9k%*$&`erXNWHKP-mq%_S&6Rq@~BJu_s1v`9%Bm9L4Rbrge;gN^g}$9R?E6A$`@ z2MGX^r9rXi#;66Y5pMeJOpKSYu`#hViwe&W7WJyL4Y9?kT4wMq$jKL&{ zCo9Gr`bO0hIi2+tdYyGDwFb3D>tL?32rthq@|iEcOfSiK=A}gj#t|tY7=hb${pfk$ z0xJxWYW(Wy#lF|i7yI1ai3_vTXC}zHeO~&~IH!`DF{N%^tl%55Zy7H zb*$aoBuxtXgTnXp9tBe7pjHhycd1QOk38{r`?o#15(6;x)a$Uu(7V3C`sEvkh@fy3 zag)5_yAar5w8X;m=NnX-F*;D_1JqD)rT`qK*TJR<5{87Wi9?G3+E~tieT8TvBU(vO z9dmb@;IM3@)->x)!Z2jda&$@Z`x^zl)ecduPfo07a!r&nbx6+x`@!(-04$; zUH||f07*naRN&gnFVfvy_o+%F5|OsByvqFYGD(_w(fr^>hA5u>`ax(Gfjdh z*fZe}5sIu}W3h`hj+M29JTt>z3(kM8smTfxGrm(wr4b*^GnI2z^m^p|0ePp#>T_3o zz0W;~0p30o)iznRjny$DV=&4>f9KCPX-?JlwH6+<#zbpWr3Ok7G+Iay?0IiFf$E@O z_Qf?+W~sl_MQ;{3J$#$vaKvFuC9a^9A_}8J&w(i%2)yynPct!7;gQ!*@z@hHWiuJK zkEJTCE-kXLzD7D2u)exH8ioF>Wqx^uJTKVj_827T;h#(R`S<_a2mk(kmf+R}<`v-l zLEk3D-*9db{vW~L?EHhVw>`$I8y(O9yi!&!?h3S6Ea8!7RmF{8J+hBXGI6xBxat_r_f zVUJl}@YNUQ=%+b<@Ml-~zg}KuCeTcVLoDs=d>=+>)=+0pL7>s6reVvOb?!B>t(~NN2SNT82t&t&Xrkj5RS%X~g;d?(A0N$~klt(ti8`Dh#O3Oc7Ko zej1N*F3Ud^HzEWd8Q_4W<^FA?a!6_p);boJ`iKZYq^UJyqFRL8P0SJygsh*@@1zu& z;pRebyW_=BtNWL8Hak~lvn>czQBi!)z2*d*2=!jZ z>hcmd=3b$*zKVz%I{6n7io&qCy2||03RzLyyAH=b#%qU%cfTcAxB+zz z(4qLwu>M~tU;iH9sWJH<d5f=l7lP<8A=r6S^ z>pw(+z|L9+hoi^~niEZ;GADhD@Z%gNO?{~UNe~f{G9_RcRkkgx)|=bkiwND`fNS%s z^pcc+^Lts zwzs1|`~l)9Mkz%c#Yac}?|=>k9co_s;yTa$;Tq?js$+~J2owmMz0juKh;NGwu-3A< zzJ@6Z=C5C)ySa{1!|jJCBBWVHw?81ubFMEeVXZ~UA#*owUkVTWkW!`R9Dfb?_xBSF z?j-!*TfV+qSpTzQ&w7l92Oqf?`M<9KQ0|C)Jbq)m>IH%0=`QdC^6sZU{ea(j8Tcyj z#*(Gnec0{SDJyU5y6ZihgL<Tay~TdwYQs-cH%09 z6Gd8`^x@4WMT(4SJtS(@iRv|)k6iGT{ZDW%or9lmm}NMZ18>ZT?uOrL9Q=c}J+fwS^PyZOik zu#T+TC+qY`JAF_AMcgE#~!TzTPH@+>QddH4kqvMgt5b&cx_OFIqCk&u76?3WKZ**Ae8J{RV0>nQI6_rR+scKGLm^f4s!y{F9fZi)N=)N>Z9@SZ|Opa6=&{`!x zD`EO{oyOE?lx=b%geqXVc?vCx=`Sx*d9E`u#9u_VEBiO=O|%~VSr9}DXB}^Q=ULwT zw(|`7J+5DQmLeaWySSn-++14b=F;+mXv9IuKfurY)1Uj`Ki}i_405=l;ruv{e~dA1 z!+#I_6J&RW5!{3PhrnM4dW<^&jPbDG=;{Zo@AWP7EYC#=!ENMxm#hB+L<4N)3#Mtx z!qO^dPE8RGK?JbYkr$Rhn)Bg5xXR@k`-j7oM2LWQH48*2xM(Uih&46L;K!NPLL+xr(CNm;@`Z*2T>7+%uH9AIO8L? z)Tr!9=l`!>YtT4KfhbgHCB7pG>W(CiK?} zGNo|1p|-2r%25x)kY=rU_?-2lB-fd5E&AEtz07Am`5aTH6yNl%5n2mDC_^=Eg)uni zxUsmz;>!AQ5&!MC+v}fLyg_~P+&GVaj4^h>&j7#7Ju+K@-S?#A4)@M6`5)t<7XuDb zKfp>vq4$&|`1wEh98;&JdBZn9h0WPou*;l)p`keez&8^Cl!xsXS zZ-dpGsdGUIbJsQjFefUU`1cC49$|kC!67E6C|&HhyNuMQ$>TcrbjObgx-Nt)0f^vfYWc_E-ysZyy_5#&H^b&qeC`mq=!1A2oV);KnoU}Zib zt_n|oM}t~J55=_QdCv1!uQEsyoD-Zo9`e6c<6}R6{q%V@PCNeI0(^AqwQ(N*7-Imw zSouphLgen0{(D6Lyn~0n@zoe(>_HINt$x5D`T_ad-}H&S{MpXhCRvh^3{t`<;E8W~ zl1i;o?k>5@N#AdQKtWKVa1N3*V_|s}r4*CxCbdd@tYqxDt80AW#Z@*21s|R3dxu%w zp4*v~w`2q7U|>f|1aN~4aG2aPp|J=6&KQb~HJmlL+;@|>ZQe!DkwycjF0@gy$?|G) zBAjt55N2Y33l{2Kx=UM!^isrFoD$r06T;C*@en1{C#t-z7E)w}YgaeOPbe)W8f>7m z0b&c3N$(=~Vhh6l8bQ**L{+lt#ECpt7$`1YY7<17APP{S8Xd1AH^@o{u?~_PjJrix z1OoBm#l@Ppz00X%r8uF7chGJ{oWAI9{YUK>eWDZc=#2`MzPhbr=N8$n##N#)!kB_i zuX~~*K)qI{8dpb(_-_&4Zoi8$hQbt{1S=>qSiNCT8oubdgpu(2H&&QE6P;KZR+eSF z_{uA+tgmB?A&#mCuazM8{-?E;8`o~o@AVK7w~zfG3-H#l6FbHjccBLS2*NMzVLN)5 zOQx-^s;fYIJbq)0!R_?}EbkO#PXfSC{Lp*PJLi7fIrmSrR+V#?F7Wu1uczLq@8bBl z`~LG@Fs7iN^ntAwLXK)BW@@5EqgFjK2TMe-*7C*Ymsng+cy7MO$6hJh#O;CAYhWhy zx3=v_2=%Ba0S>7|$n=CS40z$JuORwfAIePsb zg(;3Dia|uE*Xn4c34>th74&x-hu)yaAQ@ntMeecStnnu7{1XAKDb4h3z{N)^TU+0YG*q9wLG%3^%XeWbwwlP5Q~da?btB|L6aE=J|ar zzzA3c>SJehj4^J}1K@PI=~nh50DJ^^$9Vk47~?kdfgjkb08okm--a(p+jP$H$m=h0 z>2;6MY&GxE)@px3fENIIcR3ZcYK2-QCJY0b^@A0Lk}|}4kQ99F@(M|A_{3LN`2EEM z0zs4`2yya}KREwQ7xOrRpQ)Mkuh=7(vyTNl z@WqOF)G^v=1C(jMor4z{GCt0C$z~)K!&_$^RH*92tV0 z2kg}st{|eAIyFtTTA@8TamV3*M=^j0)CLeygh51J)KYAwBx`#isT;0w3MqtFXlDXJTl=r6k0?6uJpiBTr6h@xfYf9yNOcPl6GmYKU`=wT*O3RoVB4RVG6hDPju3!P>!v z7!h!maIosf&l>Vd8>0+b@m)I^228c?lA)F!L9jls}&L_hWU{oTah`g5>o3e5V2SXOS$7fK>^MoN|>Fg(VlG*#=$)V;7rP;W5zfy?#EHTkFtWZ9 z`V~pGItH9fUKYE}5U_%>{^HF>&&2bUHF~+zZ`?~$#aqj6` zJX7(?i&wbv+)JFfc#bFD_y!tHUyb;dbGLU9Kq*BO#uO&M?a<#kY_q&zX?4RpMoJM! z;XQL8xA?-^WPO*9&F2ns$5bH9ig%tz1?KW~a1M3hH2T6> zq*{6PivZ4Ivkd2~&-34^0(TU*unvMqGj*t5V2~p#-Ez|iE)IuZ^Pv<_D$SS~KnDtA9P68@zs=jj<0+FP)(~Vpf9rpwViDVa zvxw?ArAr}TZ$m!Oj?r3}JXI%d#vDpDJchBCBtw?FkQQ48^GFD?RxnjjWmyzUYM^Hw z{k`1KI!734+RX?Z2vcX9=ui)x_=C^!pDYyZRMAK^m#)PqTb>C=u$AH{CXQnAB1Z2MJ8f9L+vAq+Z>&wsLq*6{RStT8baP^~Fyb-lHm_ORp} z-CmEEuU%uk(?R423MAemrfC_HD0-dl7j3 z*i9W{jBWfl_h^c->qc{deJ6$d)>r@-V~pF-_nSucm1p)7KlI*j!MEc0mb>cW>zc)>`_>0}3jY?T$`QPn6LBa+ed(>E{@0`TZ}?^RK_QN<|5a zC(ycVLJMcAKGaaFk!cm}3D((D=!<84R6rcR>K3iD7OcVMImP-)*`xlL=d>iY8;e~Q z7kXrw-E~rH3IY)(L!lj?(5#EES>a||xJY}prbegbT#*$lUfZB3EWM<_6mHkCQ^rU9 z#QimN+U0n|8vNfjaf7rr3CMkg03|}Z8FKoO34$mXtqpA*7=sv#ENntmzRoF1d(-|+Z>#X=>nmt2RI2KM zy0;n%_aOgSnlX3v8Y>IS+wXmczVssSlfV1Sr#^jvMOp>EG8O>F7~?j4rTqF9?#QIv zT>!vsB^1}jV>iYaw+R6IjsW;OKlEPZJo*1PaPF={TPeaQB#cA8<*jd_*=p|M^xa$S45pCii+NoM%9&s^cTm6WB-ay7RnHn4&Z{|?I*ZzGWsaBG4< zE2L2)c*A49Ho&W(TfkNYf79<`Ivak;SbMV1;2fJvJr)1Tajct812-WuY)>@3Uq*=x{UV4dsl049Vc%T4qpDO=(mUH!` zE37TA-s^q3!1oLC>EC(gllxy`j<=NGeUZ_U9LE@As3r*b`v@O;z;@jh0M;3I02pJ8 zJMm7xY4)80z)$?pdmjZp16;VbZ!I+14Ziv5Z((9`;vV#U_kZqH0N8ezv|@UqMY~z& z=5mkU_}m=*-14Q>lpFWBaXcw!v!>wu4iR8vPI4tkyFu{e<482(B7k$`8*A8f0M_BG z8QP;*V{z7z_A;(r-5|nop&|q#TO542&=5mi4H@m28K-^nF zoJCB*@Z#wOrvscQ()tW0h!KI=nHrO4TV;6i2$6pWve82}2A+u*c9@Ssk~>}*SWIbG z9B|=6i^f!KWQhMx^8c3WRq8#BE(Bc+=lQmXbdo0Y2mKvpSv>gI1@J$NUDYwh*hZQ6$OOV|j^JH20L&%R z=IWUIk1@vXXWahD|K1O5M`yjmvtRi-Z+O#FOwUa3QXFsx^Ork*w2uhj!dTWeyIj7$ z%;&zb#Ba`*w|FvK#_fQfh55u1h%gZfjc7!iI_q$qKKbf0gaJXbjVg;*jU@RW^tPh_ zhN_!r1p!obg~#3yAjT4{bdcPP#&{WvtoM;#ii-o>bYo;h03G=2y4I-%$|S5jyNoi~ zC@iuv`T*kIG8V-@L1hP7TMXRw)0x-rHJJCM^zi&^T@%qv#FMZ=hmZz4O zoSx#;=~KJ>DRZAiiZse_@GqeS@MmKo#l8MV_c4ML9>dyhPrN31&}iKl@N& z9kSN*`Tm1^B*_2vUWfz2DQ{1xMmQxSQ5HxF~+zHKZ4_z5k7NY0RZ^unEa11#*t$c_#c6P z$S!pNZa=UU%kztDuB|iZ4GErIqL4In`1EMd{(3}6w~bd6L- z;})-LK~hU@1ua4|l9S;-JA262A_%naA-`i>ZJJPY1eK;p5Ta{!hTmV#6Gs(Se9=d( zDWDVqVCW2}92!@PVcLgcOD~1q!P~DLDd9F2*&LMZ3mtBv4qAY?jlT zU!uRffoL^Sxy^Sz^I&xon4=h^s3@d%`V^w|iH{w5fpikE)`$EXTei6z0d`F(CQj9H z^~x=CF#_b@2t3venCS*oQpMD=&!=}Iv*a96SRv3MS_Onbbcfz!$?}xE$cDC0(k!Jv z=#l052<=q?EWLDvUcSh5QwXau?ywVk5AxsH?2rr+x|J_KAn|*-hF`QMSe>pkO%w9&Or^!{6>Pd36aeRM93w; zjED%3IUfu3J{$ z_gi~E(>vFAhI{UOduA|kLX(($h!x=oA`}Y&0ZR^vM40=7u`scS7$TVuK${jAun|Lu zEu1hIf-oJ?vd9Op6iWuWZJ?)nyYFzOnycRN8TMZJu-~e4>Yj7z)Lc*Zeg3V}=T@Dn z_u0=L*MIG`{tI;_CW>owODj=~mqTb~Hq4rnPoblQg<#0rl#<=MWo5YwX zy5NTcMTJcA@MmirZv7t`&nqYXoisQUds+CqCU6o+{)^*?m+q&mtR=LjHW2@sOt~b^ zh@+G=X_3Z{3ei~`5!o0KgEa;bgTEx*6GbVCg0d=^%qF3PVJ+6G;MFlJcPPp+!`VG5 zm$P^yA?w%^ukFykawPd54M(isUuSE5i`jU3%%}_jWF6#t{`DVy?9Len!xBoKeOY6& zHfV5wRbY)Db>r*G|2&BdKM)ewNGNh!oKk*F4(S1PiAD}-vN=X^Yh;AS)2ETXqqa%Kba{nT#hP=0J~2{tx~mI)~SG zDBlZwQ^R8#G&sOI@LP`~ByY#x2L7<=uLcbcFu96{s`se(hzYlUuBv$Lldtmf`v^_| zYu|Q|D#lpU>!U`}(<0N~_HUhPNQWUa+r~$IW;KZhs1!aw4XzdiV*mgk07*naREEWK znb1$n*`oohf!Lz4MOS(c^1k(SV^;2Nfq;nl^#Zip=4W8g}-Y+YGpWs;S6cT_|<-J4xIyBo}=C~zH^`LSKoY)<|AJORjlUk zviVo9p{gvt@*JIKt|P`^)AW3vQMyptZ)=2%YNn4MK$hTFgUH`$_mqoTZn476X~g?p zZxQDP(fWk@iwM?OjIp${9!5^KhekH0+aBP(V>}z8>T%wkn+kvUJdbnk5c#hIoG(%J zVY%AsQ@&rsnh7&vh|i;|PCaA&|QDJ!D+e zOJH$YV%GNX*ZN`poS}}PD++c#{W&HZ+o%tgxz1Ei@oY#{l_+|qb*8G!@|@9Rbntau;MFmjtue_r=F$>}+ZMM&gwDwZ z!bC;k8xa1S`IoQ;nHzXE(`W4bnIaDZPux(s0Wr?Tm% z1`QrLP=4Z^xa))y1UNs=ws4i>jn`i1t=HdT<@yS@o`3crJW}K-0f=&(1N!X-50kv{?ATlQ^wPA?VNS0p1sK( zCPi3Zk8Gn>$cp74_%!KZ+46S#X$UC{;pPGhz< zXmAMs2<2-L^2a*>;2+Rb0BF$QqA&tJ1pE`u7^YU_1**#Zx9*{;Jp00Pb0@$tPxiM( z0~o^-{qKSj`<$EQCW>J*?lYEpq}P=i{^Y7K^-p&KSc6{cqmhN!%wPN>S&t8;`0^PN z$Harh!*!Xi)Cmx7CT*t&K()71uhn7=y4*zjJTX%j-v0ofQLM$rCTEb?jd zbuwl5v!BOTj@kC!JBIup>OSY0tZn1VPhld<;9V~gciP9Bvy&Xz9EDr|I=)-K74$=D zcI$6|53FY_?nT6ICHf$nng9H-G<+{;)cy zskDdk4Zz15le0mC1N@7J$^Rn`06~6K(H|g$JU3|2;KABBvkt&7{a^pw{m=jX|L_S# zH_xR_A{0fz+MP9uyda7rZax3(@o&>4gb4P#8DIYu&+-3!{4KT%_t>L4H~~UR!g2`` z^%o_o0*oCqyZ3J}ud*Hc4v^8^P1GyZG^f}b61Q8luC0WM5PMT_KBR%< z!GTsA24)0Z?1V^_b`pgCYT}skK+g&9-b{&{u(TDEX+i>Y2{9QtC4G1fg^@Mzi~j^9>Z8S09j*8xcp2ks*nKR>#)n z78`3D6nSx^^U_rnu5u@N_C=H#`d@&r172>d&ISztcmvp-ZxwoI;VC)*{%zAo4H_K6 z$AE7<=g&O$f#;p0Dodg`e(FK3Ub*|m9m=X;`PvdmnjA9rk913%P#!q-Q!=L{tqwj- z*sY0>lmd4PWi=MMfVN_Eq4S`e-&Nb^s<_c!$RGEPsM|;4q#nd!u0C(u-2*2@HQcL* z6JWo6M$p0BN4-xBi|XpzClX50ZI-CDj7pCOhM&93Y-1B+EhaKG=t3olB6__(0K?%P zMO9t7BS4HWUfW`HcZ1ea5APL;T6FfNh;yNT>msD78XQs!ZFHgiAeyKKYuE!$V5u~` zvX$`6-4x@3x_=!M{=+$=SR0WgEz-FI;Hr_t+1#gNiKCLd$Qe$DOlFgsl=XW+=8I}f z1Xp>6lM&u|*6yuQ7Ufg-3RgM2bH^qBuLHjhheMOk z0UrdOZOqpO4G!=k@Cw3bA0Z-w>?-;PO&>LAa0p+6@IjRS_Z)4sKemzm5|rnib5A`? z^I3u27t1;ZHg0dA-qY^2Nz#N?r}fl>Uje7eNh**jLL7Sr?Ghovt1v3fl~r!D0!xu# zfyGpat)NAPjAp1c=U>15EMyUI<6&rb)&^@s*}xjXw!5I<^C{{azQ}9Sf4b0_pI{bd zB~nzi2o3iLlbPeK?LA6Wk|M%%7N9CHF6XKmsB_|)#4&^ZfZjr=0%43{cW;-XEJL}& zt6mmq#yB?&KXni7Eb?4Cq8$sha4)Jt8lh<%%7!kq=aD^E-!xAk_}6knzp(VDmS^sy zwJPnWDDAjQ619k;m^5yoc#3L@;;BPuhqX4O)=7c)o-|G=%Az)Vvhy>>`5NQd#ynj@ zjwJB=Fct>aqYxQ*4B{^WRavpOJ7i~l=Rmgj_>RJ3kL4$TpZeE-^oQ3M>{ENGP{JyXL>+cqk zuk`Nef+g>5m`ksA+_0MYK{! z7JIxCN^dUJCQbx;R_I&dTFcN)1UnB=l)OTQGo-9S?!T>5$tyw20yiC_mBS>-fiPcP zV3Gve>L8KDmqmTF0rru_(9Iw+!3p55hK+fJ$}6)9-kAAtx{Bc9j4JJdu~=6idinjQ zKo-ZONlLHVqrb2es)dM3}Tml0+Gm zuP|cfVtiNEXy+Z%*_dfQM%9z08F3WjybJBSvIq~w`4ZKNX}QU)*m+7@9!&*^QsMaz zv`Je}JOAWB+;4AZ$l6=?iQ?!)z8P0J{4vf65y4pVX=BW9e(JT)`g86w!-L3zv@v5F zG#~+15Ps`mUwE+WWil54Y|x-Vz=R99miP~>>(_t}q#kCISs)STNv<@w>^E+&QPhA4hCl0X&OSkVXv?k9ub?!gIoW_ z%*;u`6MlGFV%B!?*9K><-+mzkGM`fJc;ba+5EDcKYt%lIwulEpxw92Y*?CtVAwHOw za};D_IFEzAobqsfo>ej|Ja_W&!0Iv2Ez>TFkWMy(hJn8v75ii!IkdRAOsm`5x4a*= z!s#t6(OXzzIvTRQy@{$)RF~5}H4%uAx0k7sN9Bhq4GtB6XHub;muJq7W zy&`n>sotP8eBgGA?$9Fh>;Afse?f?Bf)T@wg%|0hgNIrURw5R%)v$*0&4XwFe~FGV zuR&L2G8hj06>wG6rg6lF9XQkE57{UtgB6z2=Z#XY=M^XDG#*8fq$%_G%+-u}DJ zIX3RCv%S6r2o>bTYv|rYzX0ObrQQS*ozTw#|5NOp?aD>r38E*3O<_ z=Z5l2$9|rGOp5TFc}TV~%3`NP2u^@~l60>2_*@6B ziT}fJNt;QWVO&WzS_AKb(A_yVQ09iaHHOt|H;9w;Na4Z#@3*>LvUZ2E$XQ>zhw~oq z^;l)nPSuAtX4buiw{a+q`GofE_v_tUSuY%eNLYEA!|z-syo9PD*ZU!Qs7?+!g;<4_ z6TbY-7Tvvi-S~%S4MSp6o>_bsk%_TSh;9-IW7$iWAcbi;WK`_T*V)B70-UQD&-U=D z=o1|9A|c1V+v$PAWHw7wl#k!)4eRp6l9*{YutKm@TCtR-Gprrg=8k1oKz)5`|Z=5Gu@6|*&h@%cI`oQJik zr&Jhwr97tjsv;m3XAIN+4Mdf6yoo8#cZ12&l;zcH7%|xR_^Cr82C;lMt!mPWBi_>H8H>HL@RjJIJCl4FY}+<=YW{>Fo}HUkCn#P&%VQg9Z>|`Pc=0 z_CEs_fWN!{4I5dqc1Av#@vu0csyx%Ztn5=r$5j0?|Ol5zxx>D z<$MfXYZQ#qG2!#i>ICQ+xSkn|Kx)q+7r3ZGDY@YcS_#^3)oS8tSy1h6Bi3TFHn!cV zRr@4Phz3jG9d0_tjYst%NdhEczWL=IA|qrtJ9GOAr)=knQ`oG|axX4;8=_D0&N9h( z3tNoO+&-^LuhnL8d4(iBeQ8b+Axc8~mRDBU-rQg~onX#7zN)yiLzxXwF}V12Z7dab zT+l6$nP(*n4#6|iFa_y!VVIqjO8) zE2<&0Y8&TgkGyYL6}Us`L-N!~lXMNwzBeUG4hvR_2>GmF<6cM;9PaGlD}SagmZy+^ z8y#|{-TTeo`<+)Wa60yZ9|C@fhxE=GGeOfj>z5g)TQ}~GG|tdDP4Ky z@_t4PNt}fDlyLh!&8L)Qd5W@{;ov!n`~!IJ=4laf?5S;I==7t9^7+Hf{%ks9)WX6JR0$w&j@3Pk_eC>CU`u5!TCVgM)~@N{5NQDfL|q4#`y8W4uDF2b53;PrjHsl z2uFw@lMDR(#~w`k2c@+(7|-ST3UY}NHtuZTooDg-A|k@V@_@)%{`$+yly05Z_X?~$ zFif6myFA4S(9SCMBRRKbmdYJ%Y+R3p#6T+&TBkAUk85)wkh>5KFc&k_PIk#EV@JiUWh$62HR?bG4&APQw`+{lN3{x;g)wi3Pq=-7KO(ljnOQDq5=ikn;w+4da948 zQYsIl>io(70l|wiT++ftDQY9cJEGa}$aS}GurCf4h@yzB-673d7ZQ$~w%TMO#7RON zCsb9%&fe|=(r{$w3su^uXfNQS6fPi~`~Ex!W7R{~Lp0wvjx{#~bdUw1zfM{!@~=Ro z@Sfd-q!L!QV!C_vBK`;SuydWI?u}5|PdP{3i10aC)D35%M8qzm@&&VMJYT|3?~J0H z;nh==In_Ck|HH?KkR{pttP{$(qN*zLB0rWRKvBwSh~mks-6xX&Lub~hj}u`snvl7Hci9 z+*;!GwIQ$W<_}c@IKl}aAeD!_4E3>(=CX9!4-A)H%Ed7N= zY#j7HE>f9XRY}r}Bx~Wy0ujM`$7no$OzA)cF}S3QilJyN1fjnRc37>K%6h3RSYag% zKD;z~0@X7T2)~hV>mOULxC-5&G4=wP7hV`fy!ci|k_#%}Yg5Hku_mUQE?|shrFVvZzDhW*9Me_2ku*AgLpdC)Z`cWHx%JvcSc8PtqhKO@yM%F($OHc%oRU zpg78E%%ogLwc>Fl{2t>0IQ2m{9nV<5yUya$94c16Y>;~%1snw7;X>wG3~xanQ(&!attNKpl0$jajtDz7*XZ%#eA zUIiai)L8P)a)_?*72=8qP61=-_j)WWtv(p{%Zvn3#YQoUE7yXtZ`Rox4yl|&B$V}2 zo8V1E-d#cE^5^D`Q+6jxD)8J~Brw_+3{}8N2=`y^adn%`lWA_p34_wmE)1`{(IP6P zUU~i~k%{QHmbpH7{y@C%vN};wVw*Cs*KodKk4?NfDqkE_4N&!=iiJAHv*CqT6L@tjL5(A zsxj~@M@0izYiZ3@`%iNFA15)OOvg{pdsc;FR`8ime44dMO!Pzp;R(?Ir?CCnSs*o1 z#;l}f{(dzWd9TR&FudtPJCryyQm@&mO1Za9ga&N@ky<$df`ej#3UJd&xS{s0KJ7CS zYP$onGluO6lbPqunMZkgNxuspUNPj|)j%dD+eF0}3-r4k7M50OG1g)X3rnkjFqw>T z3e&hl(OwLs;|dqE0yBlrO+$3TbD5!&S;Pw3P7ag*+7N3L13{tBsL~ zF~-tO7q~WfJ}Bc~A*_j5$gZI%!+ev%P4V6{E2m8J(R{1Cy2Wg*WzZdpaB3=;73rt38CEIy}xGur$K`TmxQ1Cg`d&+f_xjne%wKR+C06J{Z3Umyq@o8 z9)(s~(QTI?O08;Hc@2($oe8o%I{3P7P5?LDrC7g9wYM`57q1aSu)P7vwHrkJK_IO) zb5bAz3mwM&Huoz~BUeuTA2VNCB=Fz&a|XP40BZtci_;)To$@7Ydx{&tFSQakc*#IVx4#Y?MSdQjr8 z9?MuTV(2D|EVXW8C1IM6gFt2tbW%hFV+`GPhe59oX2!JKMDfQb|0qS7<4)*Am8hiB z`@Hqq>r96y$z+rhzhjc6$0h#&`EUH*?_9h`SeOC7*jSql8U&LY_<1B;_(x%l$R8*= z0R~O~G-v<_KYn##p;s$K|FkT`!v@0H+9?9wI%Z~yU`Snx)G6N8E3!93rX?C%bhTG2 z61yK>?v==R(eS)?DyQMIygj}^g4Vxpf!t*aK5VvA%WKe5r)jq3W5&qi!jNZ@^ zl?GeYs}qCcS-3uUfkA5pW9lcWt|;Sjm(tB}T9PI0g9w0n93zg6y*J3qF=aJ7)wy|G zXThVtSW@Q4eV&|gp44t)7#cKau#Xb>eUt&hGy-rhxB;&>fNx19GF;363J1Z2$i2@!hq%J|UM(4KkQ2CHAE`;#mnh^=qqbqdg3Eo$1?7qR? zWF6gLfig;7^edc^mHr;ke)Zewvi>tQi@rA?B8h{PfJcx$VtF?WH<}z`Db7yl~iCtX{E?V zSgpxz)4o99Fb`i?L3=Goqx#sx-s7i}10jW|w}8ZPJ<0_h^rK+27O(`~<0d0~KC4a1 zKruqvOF`i#aR1I8qft3e7r6Q+<_c?NxYklUR-hL@sF-olOQ3MduvDDF{o>Sjk{8FS zRq1tOmala&Rs#7qQY(?aN?@fhyl*XIX(PsXYE{|~Li9@#WnAk&Pd{747&|A?b=gY< z=SwE#9;%*cHA2-Nl=m}YFi{f96lQ{|GAkxjzB<#8%U9-Zp~x2BeraYQROT)UstY+DP& zzmxXqW(&k7VbEE<6vBK`a$Wh7ak0y!+(pr2wJ|Sec<(5yg3=Wi_FjUJS5vl!ci0}? z368~6?i&vm0G$@0{U>TkloPe@AEB@FXuFaueOmdxv%m{{^Kbm#@BH>9PV5-?ZQ$!0 zv$jD4{tEaY!f1b${|PVw+D+dyXut&c$xD1*^mKULd@KL}AOJ~3K~&~*7HjsBtl)FD zrz)wyLgW=usaG@rAbWGt+Q~w0aTeEV61(vzl#*+Ah@*M979SyjOPiiVKJ36QiJCbAY^#lJwedwkwY!Bc@>;b| zRmr+3tGB?I5zZ@nqk;=9-F-sbEffl6ITBW~(5%>={*F_D(uFjjjhV7p)o;%cfqpN+ z8e#cnm$Z}CM!0dm4-If5w?tleaXn#aBSvc_9}+lGJL$37e~xz2J8%fp?kw;nqkNlL zH9phlBvDEdrBtp0fRb zd?HFqg78=!;Kh^MoXlkyt)Z~*w8X6K;ji_B27)!U3K#dY8AU!rqKJ5L1rx{A?J~q9 z3Gu=b<<1uBJ?g4jrBd1q6GM-jIYa?)T8u6dL+Tkl+?a&%qj6Wg``%0#= z&`!EMzx-aFUwJ=iT+aZ|%9rd+@3S?zLs3mHq#ukJx~)FF<a9h(FzdY~zAZ|k#6 z^4+-u!JlSpxpMLkA^+b-_FSGMk3M?_d@t~^OP=hzz>hU%ZG#2}_}}->D)9V&O@B0K zaDa~rmr?-$fPef?f3^~lH4!;sT{Pi1*#p)ZTJ83UoB$TZp44LX9f*|~1t&nx zG@4SGs&*Wk%0uChwIMPsYB{;J3QmAx{XT9sty${?F&42A@xl_x>J4nWTel`+B7==B zE4Kz*TW*CS0X1_3j6K|*c-|O$CdbI#pOnfQW6$k5`L7f4-|yem<&2l#x5AAV7Kv(> zZeuj;#Ltal-up(2bZUqSsU7hLp_2``x$rVclwnO&%Np*b%h{c+Q~Cn07whyDF&Htl zvJU;u(mWdC=swAdF>h`BC3iMI$+Q@rI{id0YzNRM(($9#+4;K}LCk*g|C?-;L0Q}3QPZ~4;giYXsmu>w%|Kc@qURk@hO+G76aS$Jo79fJL z=HgYcL+tQ{-zs|vH!Ot-1UvFItngD*$mS@d0(4Te->RJxKmi@@0E%tZFZ@?*7}u!R z2NB$8uXb&;v1Rc_kN!%V>9F9f+rwJ5Z{)+m^fM(Zgmxqh(!-m}Zmvu!W#*NkrqQHB15>|F%;!;Sb^$V_4l%>vf`mGhLu_RGe%dyU@F_Ur_MEcz2 z>VX&u=VY2>L^i^!V=@~ZBKLwY$#+@beSIGCueA&LH^~%}?s1u+F><^&yed!A4*`GN z7`P1@0Pqn69}yJK{{;BDrcWBYA$l^-|$yS|X}Ygh++DIROB)DCTAOa!ed!JG~k@0%D?04-+S-tEh&% zwMt!x(ug>ViIRwyQcG1j?%W>Y9JL8eA9@&irR|l{A8yo6rA+Eb{O6k8x1Qm(Ebl>C)~Q9l8pm_)S4;$qp;k)$x`fe}_4C&0de-A&O}9E1Vu2oZc)K#}94APi{R z9WbUwBwLXv!p1S`LWD^*+5_)v6L+tw*vQaZ?IUTMcrfPnXYP_uiZJ#yY3Ia2rOLG= zv}dhQiW*fj*cT#*6U()0ZHzT^7hBlG)<)r90VmLQ!n<}7VkfL_#$*#i-SkOC49lJC zSQFE4Es;j8T2)He$Fv;bwPIF{=j2~%(tkplv{ChJ4ezqK_ZHJ)4-s>2D*s3CE1t@g z7yOj)<53)k2#9kc|EdrtmQJ^Yh>SX&?3bcAdgF?Q@_T^Y#^=oL#&N?KHhlfHLKUU3#r(|$ z>#s-|e12=G-86*%_cFAd)=q5iagKm+yS@{?Hs*l{Uu_0i5o1D10HDs{^BG!|S4*%} zktD^$2@=Od-9C%`0U(sqoZa<3_O{1Y?g;1^=te?fpr3|uwc;r}jH()h|0}dx5&eEb z6k7(@x`>s->C9IQFR)M=u1zdyWq9s(N>mD3w_ATztch6Ytg_O(MPy=h{=Yg|po%B2 zCX9+LDqkWo{MrzVkY>Vu%rY%1=9OE9An*O%UQZLQd$YmM46*PyT!T zHr-wuU=R4nPk!X*-n^p0yiQ01_-X2Wr_rFng~PzN{>|Kc-@XPwL;f2y2>2*MeA#x= zcYNsYul?fBe)u1Pd=;?J>v!n&+e{}p-fuIVoF*6YAt!)80;-+C)bZbLt%q(nZtJY!M;E0D#g5p<~w`yyp^C;tz>hI5oVn;=3wSj4nC z^>P9Lh#~4P08kBggA>5H;0Uw#Jw4 z1n66cMd-&uFFE||!Q2s$6-rVnr7C;wDkdJZGRx}q4!xDm;dNDqbwMEb{YrRgJK@&t z^g!INZsGokO-Z8`NtAJ|{~Sha?W(4D^*CSRv|?|zfmc_vQjUTA?~d1b_4c10Xc35* zQ-0d%+i_V>(-ZvWk@@}#act@JJ9K-8(%!DJ1m8VE_fOEuKncW6 zw={UiL-?SmTve!;zP&N6cFOgeOWeD?NuC#{;F95BHpY;(GbW=kdXaU@Rgvu}EE_bt zx-BI*0+h(d7jIZv0c+93qO1K{g?yi79LwEpA_d!OfdqB_x*_WJq1(qzCscdeAw}TA z_Xr6Bg(5@?OTh_n#BleYy-xqx>r6IwsQ%;U84YKb);}EsH!?#S9X%hriO@}iyi(jW zQ~|gwv{H*T!t(VFz2#0VmqWiYL<%o#Cp>c}t(CI>q4i*57CYBj?%w1y<{B3cBfs`69YtP^B8~;D)=HR-3555PGmq z?>Hwow$%m^s@<(XD*VMUSQ972i_2i_yav5IrHSF++bava@Z~S_`o~|TsyumKT}VE* z0Es{(@NDbp9TZXr$o=Ty(Ak94yh$DkF!mSq;NZN5N$*KS?Cw$4>jKOY% z@zj$1TN9#RdndP4z_+e+c>h!(!{;>sk?iAIc5xjPCQfyC1(I^8ZjM{b}Yx zHo_#s3tJCQdOI6gmR9=2$>Fk+0uI;${1qC}qtm7d&Z@#R2iN-C+aYDrvjeog=h=@q)z zMhESX@BhUJ?@_={#}vg36U9UeOZAHe5W!|GOnhUW#;}1_)wx@dCQXSKmXIhuMH7W= zvBxX_#Ru@E-4B~GU5-)tk?G}Tb2;*w#pqSUMzq#-dS=_}MTTk+jGAg#ot0`VxEy=&C za&PN3Hur8*xq`CF&oqC|`kT%>igI@H2nq4?6I)L7SUL9lJo=N-oct$g{C4sW@LAx0 z1a4p91WbY70)81t8#A}TI~?Btd?W&Xy&?Y%8XVv!6m1JKxq@epfWJo&s`<*dlZQBt z0p;5DMMQ+X-SLIqnkmq?j`zkTpDN=oP$z(*68-?^;{*^vS3{1!M)r%B{6E}}-h=nJ zs)C&@qQMek>*oZJC_=0yURb8w**Yg(0L8X@*iJW8<%mw7+9Jjfw_D&n&wcsJn7{ZO zTWiB}(aX3N3kyl88j{$vQIN=l|GLqF>niLN%KcK$WmD<*Vy-_oAZaB~!%P_utQ3a# z-)&(XbVjy@bjVogLEx3Ch`GMrvj85Ud2${}8BR2%b98$EY6Kg+$X*T{>Y z({a*s;_PoFZ*LU-G>(#!`U{MZr0Em2UY<(+W6R?5lgPgSOo7k*)X)5Ud1V7EdNfK1H3!O~?4@5~Cqm_N?rnXJ z$`x$x-6k)_r;4Dsh+Kc?D`v&XBmHb^2b1g_yH&;*(suUP%Y-L|{HrRhc1ow)3i?8= zSum_`-+#2B}4#xTVv)nXuyBAuL01I{{{_U*T3MumDjJd4bf9iZiTFs zva~!PYo(M$#rD=Qa{dJ3IHt^V{0Z2+K17I)jcE~X#^d_j5-Un+9)yKI)d`^U|7*o) zCxghK-B!>Mo|Bq)Bvf&e(VS&F=ngPx{hR=*eI0lmGspL)J=io$=E}#ZF@@ zMh3MhOpY&zB%=c22#xEhxl@`DjcCT@@D4`{__BQsfCdd3z{lo)t`Z*j_rR9}H;&^7h~tRWYYV7XM#Blt={Z)R zQ-~vcs}(rYtUMkex}<^wXLSOUltgMtTpFSQgmB|;3@o(K{m{mS^gq!N;HDGYbb?7z zqQPQF38ejb#>DZQ{L7^ex_TvUrL4Z^xln>&8TpVfmRpHnz1R{vL=G zo|#0v>vl$KY-)GozfYb!X&)n&7aIf`GEYFjPf03)v$(}e`wFFm~e0FHSTPD z`b=Vp7k%rms`wLDGO@-W*%-0YW4BO5FxDLW^b>FX1+px`m{8&`O&^edIr_c+9Qd&- z&HsOZXMk^N4($dFm;(PH0)CDr4WK~-fUhIei`~7d27Jed{(kj~Kl|Yy23CP@KdwO$ zMV9L~mjETtORCc0-1+2O8dV0O>@Kv?oiS2*a31^@2P>|`p*AP=8ImUGwE;x7_704? z!52B@&KB{)GGa^+39MOZH;H26#T8VQYG(^y6`)`{-4OOacWPWEqBP;gm%f5}Px7hP z8E%d6dC8(H>1XB~2*|nlept#3;MuDbi3~n6bh`;l&kPVl?MnM8ka?k739ZWT-ZxsL zGgCX_zfaCuagUn|FB97o5$c)i?<*8#m~W9+;~J8G4Ql%8xxM)r?r*(zYVvmm=MBSD8B~$U~^hG zc!#3}{OW!LKtui;G=L33cCWe-b0>g1*>4HfT5deEj4Ety?6SQ%eDtV`;wy$LeTk8%BY`8TPjGGfJ%rzOeC5*Uz^Y92HQ^Q9~(H`hRfcyYOY zDFJilDk8)SO9wMkL~7-%5F?1OtiJCBRu$acHT>(h5$EgHl`Lh3#mK@^7ag?btG<3~ zKJ|iCxH*n^<;@nN5LNYC<3@!nD5HX}lh7mb=rJhIZ0eR%#lQd>|rH_s5Nr`{mrh)+9+?>)4 z8ZZGq9AWtb9N*gXM}r2mztCU67z-%ND+5G?&Gkq98EGpR>1A=esJu`U+wWVa;VkX9 z1CbiejyiC^u$%y{B;ULbA|y*I^(3!f2zJ(7VY1xWBpxhbvblaj&2ED+ruOEmnU`8L z&s@V-x8UXNIxTTDu>ZTV$jg)@|`iQ|Zcg)V6pQQg1skw&0-V}- zMdApO7-_YL-v0_XhkN}FI-30d?7exICD~ct`TNc}5pmaCtE#K2tGilTYi%J32?Vl0 z1_@*dFc=x|gJBHVz&wmt2WA*Az=JV1>bBH0^fR>KkMVc}Gb{#UG)S_c!3YUP7DA{c zwYt^SU0r)su6K>?eDg=#%-XUl@6F76>sDpF{q!G|nQ`OX6DK0R_dVbDev`|tP(>Ow z?D3;uEoOG6@XNTeO`-_4Qbpz$QSZsx>u3^BGy`O#*8i0kBf`|sT(?tA{tq^fQ3+~< zL6y)}rn1&w5c*l0cCt#6_Xkh&Df9RcVXbqK<@K{9S)Y~G*>O|%F%f?mk^C#UT}Gul z+Q{|#b2VmaG-qlAfxX7)Z{!(y{=r{-^lzqU0V~Rv087AhwkIl4Vlt=!Kjg6d1X(#7 zB}xGAnG*8P_rCkbKK|Gv5B=qC1OQcVfnz3giVDok4>T z@`35W!Sx1LZ={Jj3_wJh!1vS&>@UN;EV_0k)WxjqFfh(NVr;+^k(iXX9#941Z{-=-l z1FUr}apuxfEUleF#O%oI?^f^n=RPOTuMf%tSD5u#r0!!Q{{VTO zkzZq0=v=TV0PNN1jj=fAFh-~i()}CFT9NXvyPS*S;As>9-cQl_%u%Am{>BeE;K$2( zC{bc6@f7eG;1zoj%!$Cl;w-9AtwprfTCAP9n+OWVVcRSPZN@*3y86Viw6dzrrg2a$y}mJw!VT$(UwnKPzV7fb_8>95p(DO zeszsJ_eC}Ux_co&Ko({ZXE8_b!pzO?T&z*WL={X_L9>(;#rJ!AL;&Hg*iy}eL+b%| zoeQV(Iw?xzszk0zC8!UK{-*O8=+%??1g|;k@e*G1>D%>3@S4-=E_34SU(@Xu?=mBH zr_248lmD&0qqUCEMPq2GsRj9ORGFJ=Am&E<{j!s3coz87wB3XEd-?mHH>KcQq6B~_ z`XS(LV&02N%yTbL!c%r0H-qK$)@p z_3R;5jom&Z*vtg*MP`6C+aGYdJT#3VTs(-a*2_$QU5f$WnlsqO3}Q+_W!J=Qy-ohi zN$?)+^sXq!8C6vfWTt_;e_--A$cEW7>XBungH8dOWw3)5avSAH^Qqw#XR6GtxZ-D1 z`Y3TWgxqIjSwfQac>45zr=N7jP1`3%{F5{$ z%hOFUBMi19|B6aN=1!y1+x|pS!~jtxVt#R!x%uW*pTA>ohs%eY0eh3|M zq43chURAy=O6+sAT}l2+lmG^|MK`pKk(iE@SFPxzjEg6`FfV+3+ys|ZR2G> zJJ%#VnsM&*1+u+%6c^A&1?k2}yN}M+wm;xD5dqYDlBJ6T3xo9LfhbU7WTpX7cmt^7 znllA0D(7;?FwHvVftR9bM)u@0(2EO#oexQ{twEfFYJ_{~3kT$X?;*|+E*wNrvegxQ z+%Hn#hZF*gLd^@#3$Hp=rMc#IpSC(A{o+uu4wm&Y%(xMgEO7hzQM@+EwI#m-YS(Uf|2X z{|fy2G_IWtz6E%B`KBnb&*6dhilVE)Y&jn#O7Js+{PeU9>d!v(dzF41-~HV4XXf)f z|25#%d-1txlG5)bv|Am{oH~zs#owfN_edE4n~xbCmBqo8lbe}W%^kcRgc$v3YTC3DZBl5RT=5n