Skip to content

Commit

Permalink
Ensure lists/maps in data components are immutable, add lombok's `@Bu…
Browse files Browse the repository at this point in the history
…ilder`'s for ease of use (#882)

* ensure lists/maps in data components are immutable, add lombok's with and builder's for ease of use

* remove with where a builder is already present
  • Loading branch information
onebeastchris authored Feb 18, 2025
1 parent 04834f2 commit 5743ca3
Show file tree
Hide file tree
Showing 28 changed files with 146 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,7 @@ public static void writeOptionalItemStack(ByteBuf buf, ItemStack item) {
MinecraftTypes.writeVarInt(buf, !empty ? item.getAmount() : 0);
if (!empty) {
MinecraftTypes.writeVarInt(buf, item.getId());
MinecraftTypes.writeDataComponentPatch(buf, item.getDataComponents());
MinecraftTypes.writeDataComponentPatch(buf, item.getDataComponentsPatch());
}
}

Expand Down Expand Up @@ -517,7 +517,7 @@ public static void writeTradeItemStack(ByteBuf buf, @NotNull ItemStack item) {
MinecraftTypes.writeVarInt(buf, item.getId());
MinecraftTypes.writeVarInt(buf, item.getAmount());

DataComponents dataComponents = item.getDataComponents();
DataComponents dataComponents = item.getDataComponentsPatch();
if (dataComponents == null) {
MinecraftTypes.writeVarInt(buf, 0);
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
public class ItemStack {
private final int id;
private final int amount;
private final @Nullable DataComponents dataComponents;
private final @Nullable DataComponents dataComponentsPatch;

public ItemStack(int id) {
this(id, 1);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,40 @@
package org.geysermc.mcprotocollib.protocol.data.game.item.component;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import net.kyori.adventure.key.Key;
import org.cloudburstmc.nbt.NbtMap;
import org.jetbrains.annotations.Nullable;

import java.util.List;

@Data
@AllArgsConstructor
@Builder(toBuilder = true)
public class AdventureModePredicate {
private final List<BlockPredicate> predicates;
private final boolean showInTooltip;

public AdventureModePredicate(List<BlockPredicate>predicates, boolean showInTooltip) {
this.predicates = List.copyOf(predicates);
this.showInTooltip = showInTooltip;
}

@Data
@AllArgsConstructor
@Builder(toBuilder = true)
public static class BlockPredicate {
private final @Nullable HolderSet blocks;
private final @Nullable List<PropertyMatcher> properties;
private final @Nullable NbtMap nbt;

public BlockPredicate(@Nullable HolderSet blocks, List<PropertyMatcher> properties, @Nullable NbtMap nbt) {
this.blocks = blocks;
this.properties = List.copyOf(properties);
this.nbt = nbt;
}
}

@Data
@Builder(toBuilder = true)
@AllArgsConstructor
public static class PropertyMatcher {
private final String name;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,26 @@
package org.geysermc.mcprotocollib.protocol.data.game.item.component;

import lombok.Builder;
import net.kyori.adventure.key.Key;
import net.kyori.adventure.text.Component;
import org.geysermc.mcprotocollib.protocol.data.game.Holder;

import java.util.Map;

@Builder(toBuilder = true)
public record ArmorTrim(Holder<TrimMaterial> material, Holder<TrimPattern> pattern, boolean showInTooltip) {

@Builder(toBuilder = true)
public record TrimMaterial(String assetName, int ingredientId, Map<Key, String> overrideArmorAssets, Component description) {
public TrimMaterial(String assetName, int ingredientId, Map<Key, String> overrideArmorAssets, Component description) {
this.assetName = assetName;
this.ingredientId = ingredientId;
this.overrideArmorAssets = Map.copyOf(overrideArmorAssets);
this.description = description;
}
}

@Builder(toBuilder = true)
public record TrimPattern(Key assetId, int templateItemId, Component description, boolean decal) {
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
package org.geysermc.mcprotocollib.protocol.data.game.item.component;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import net.kyori.adventure.key.Key;
import org.geysermc.mcprotocollib.protocol.data.game.Holder;

@Data
@AllArgsConstructor
@Builder(toBuilder = true)
public class BannerPatternLayer {
private final Holder<BannerPattern> pattern;
private final int colorId;

@Data
@AllArgsConstructor
@Builder(toBuilder = true)
public static class BannerPattern {
private final Key assetId;
private final String translationKey;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package org.geysermc.mcprotocollib.protocol.data.game.item.component;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import org.cloudburstmc.nbt.NbtMap;

@Data
@AllArgsConstructor
@Builder(toBuilder = true)
public class BeehiveOccupant {
private final NbtMap entityData;
private final int ticksInHive;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package org.geysermc.mcprotocollib.protocol.data.game.item.component;

import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.Map;

@Data
@AllArgsConstructor
public class BlockStateProperties {
private final Map<String, String> properties;

public BlockStateProperties(Map<String, String> properties) {
this.properties = Map.copyOf(properties);
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
package org.geysermc.mcprotocollib.protocol.data.game.item.component;

import lombok.Builder;
import org.geysermc.mcprotocollib.protocol.data.game.level.sound.Sound;

import java.util.List;

@Builder(toBuilder = true)
public record Consumable(float consumeSeconds, ItemUseAnimation animation, Sound sound, boolean hasConsumeParticles, List<ConsumeEffect> onConsumeEffects) {
public Consumable(float consumeSeconds, ItemUseAnimation animation, Sound sound, boolean hasConsumeParticles, List<ConsumeEffect> onConsumeEffects) {
this.consumeSeconds = consumeSeconds;
this.animation = animation;
this.sound = sound;
this.hasConsumeParticles = hasConsumeParticles;
this.onConsumeEffects = List.copyOf(onConsumeEffects);
}

public enum ItemUseAnimation {
NONE,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
package org.geysermc.mcprotocollib.protocol.data.game.item.component;

import lombok.Builder;
import org.geysermc.mcprotocollib.protocol.data.game.level.sound.Sound;

import java.util.List;

public interface ConsumeEffect {

@Builder(toBuilder = true)
record ApplyEffects(List<MobEffectInstance> effects, float probability) implements ConsumeEffect {
public ApplyEffects(List<MobEffectInstance> effects, float probability) {
this.effects = List.copyOf(effects);
this.probability = probability;
}
}

record RemoveEffects(HolderSet effects) implements ConsumeEffect {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
package org.geysermc.mcprotocollib.protocol.data.game.item.component;

import lombok.Builder;

import java.util.List;

@Builder(toBuilder = true)
public record CustomModelData(List<Float> floats, List<Boolean> flags, List<String> strings, List<Integer> colors) {
public CustomModelData(List<Float> floats, List<Boolean> flags, List<String> strings, List<Integer> colors) {
this.floats = List.copyOf(floats);
this.flags = List.copyOf(flags);
this.strings = List.copyOf(strings);
this.colors = List.copyOf(colors);
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package org.geysermc.mcprotocollib.protocol.data.game.item.component;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

@Data
@AllArgsConstructor
@Builder(toBuilder = true)
public class DyedItemColor {
private final int rgb;
private final boolean showInTooltip;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package org.geysermc.mcprotocollib.protocol.data.game.item.component;

import lombok.Builder;
import net.kyori.adventure.key.Key;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.geysermc.mcprotocollib.protocol.data.game.entity.EquipmentSlot;
import org.geysermc.mcprotocollib.protocol.data.game.level.sound.Sound;

@Builder(toBuilder = true)
public record Equippable(EquipmentSlot slot, Sound equipSound, @Nullable Key model, @Nullable Key cameraOverlay,
@Nullable HolderSet allowedEntities, boolean dispensable, boolean swappable, boolean damageOnHurt) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.With;
import org.jetbrains.annotations.Nullable;

@Data
@With
@AllArgsConstructor
public class Filterable<T> {
private final T raw;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,26 @@
package org.geysermc.mcprotocollib.protocol.data.game.item.component;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.With;

import java.util.List;

@Data
@AllArgsConstructor
@With
public class Fireworks {
private final int flightDuration;
private final List<FireworkExplosion> explosions;

public Fireworks(int flightDuration, List<FireworkExplosion> explosions) {
this.flightDuration = flightDuration;
this.explosions = List.copyOf(explosions);
}

@Data
@AllArgsConstructor
@Builder(toBuilder = true)
public static class FireworkExplosion {
private final int shapeId;
private final int[] colors;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
package org.geysermc.mcprotocollib.protocol.data.game.item.component;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack;

import java.util.List;

@Data
@AllArgsConstructor
@Builder(toBuilder = true)
public class FoodProperties {
private final int nutrition;
private final float saturationModifier;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package org.geysermc.mcprotocollib.protocol.data.game.item.component;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import net.kyori.adventure.text.Component;
import org.geysermc.mcprotocollib.protocol.data.game.level.sound.Sound;

@Data
@AllArgsConstructor
@Builder(toBuilder = true)
public class Instrument {
private final Sound soundEvent;
private final float useDuration;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,27 @@
package org.geysermc.mcprotocollib.protocol.data.game.item.component;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.With;
import net.kyori.adventure.key.Key;
import org.geysermc.mcprotocollib.protocol.data.game.entity.attribute.ModifierOperation;

import java.util.List;

@Data
@AllArgsConstructor
@With
public class ItemAttributeModifiers {
private final List<Entry> modifiers;
private final boolean showInTooltip;

public ItemAttributeModifiers(List<Entry> modifiers, boolean showInTooltip) {
this.modifiers = List.copyOf(modifiers);
this.showInTooltip = showInTooltip;
}

@Data
@Builder(toBuilder = true)
@AllArgsConstructor
public static class Entry {
private final int attribute;
Expand All @@ -22,6 +30,7 @@ public static class Entry {
}

@Data
@Builder(toBuilder = true)
@AllArgsConstructor
public static class AttributeModifier {
private final Key id;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
package org.geysermc.mcprotocollib.protocol.data.game.item.component;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.With;

import java.util.Map;

@Data
@AllArgsConstructor
@With
public class ItemEnchantments {
private final Map<Integer, Integer> enchantments;
private final boolean showInTooltip;

public ItemEnchantments(Map<Integer, Integer> enchantments, boolean showInTooltip) {
this.enchantments = Map.copyOf(enchantments);
this.showInTooltip = showInTooltip;
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
package org.geysermc.mcprotocollib.protocol.data.game.item.component;

import lombok.Builder;
import net.kyori.adventure.key.Key;
import net.kyori.adventure.text.Component;
import org.geysermc.mcprotocollib.protocol.data.game.Holder;
import org.geysermc.mcprotocollib.protocol.data.game.level.sound.Sound;
import org.jetbrains.annotations.Nullable;

@Builder(toBuilder = true)
public record JukeboxPlayable(@Nullable Holder<JukeboxSong> songHolder, @Nullable Key songLocation, boolean showInTooltip) {

@Builder(toBuilder = true)
public record JukeboxSong(Sound soundEvent, Component description, float lengthInSeconds, int comparatorOutput) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.With;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.GlobalPos;
import org.jetbrains.annotations.Nullable;

@Data
@With
@AllArgsConstructor
public class LodestoneTracker {
private final @Nullable GlobalPos pos;
Expand Down
Loading

0 comments on commit 5743ca3

Please sign in to comment.