Replace lowercase primary constructor parameter references (dataTypes.,
subComponentRegistry., itemPalette.) with PascalCase base class property
references (DataTypes., SubComponentRegistry., ItemPalette.) in method
bodies of all StructuredComponent and SubComponent subclasses.
This eliminates CS9107 warnings where subclass primary constructor
parameters shadow the base class properties they are assigned to.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Convert remaining == null to is null and != null to is not null
across 17 files in CommandHandler/ArgumentType, StructuredComponents,
and DeclareCommands for idiomatic C# style.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add AttributeSubComponent121 that uses ResourceLocation(string) instead
of UUID+Name, matching the 1.21 attribute modifier wire format change.
Register it in SubComponentRegistry121 via new ReplaceSubComponent method.
- Add ProjectilePower packet handler: reads 1 double (accelerationPower)
for 1.21+, or 3 doubles (xPower/yPower/zPower) for 1.20.6.
- Add CustomReportDetails and ServerLinks packet handlers in both Play
and Configuration phases, consuming all fields to prevent byte offset
errors on 1.21 servers.
Made-with: Cursor
Audited all 8 batch-2 components (enchantments, stored_enchantments,
can_place_on, can_break, lodestone_tracker, firework_explosion, fireworks,
banner_patterns, suspicious_stew_effects, bees) against official 1.20.6
decompiled STREAM_CODEC definitions.
Found and fixed 3 bugs in BlockPredicate/PropertySubComponent:
1. BlockPredicateSubcomponent.Serialize(): missing HasNbt bool write.
Parse reads the bool but Serialize skipped writing it, causing all
subsequent fields to be offset by one byte.
2. BlockPredicateSubcomponent.Serialize(): missing Properties list count
VarInt write. Parse reads VarInt count before iterating, but Serialize
only wrote the elements without the preceding count.
3. PropertySubComponent: RangedMatcher min/max values must use Optional
encoding (Bool prefix + conditional String), matching the official
ByteBufCodecs.either(ExactMatcher, RangedMatcher) where RangedMatcher
uses ByteBufCodecs.optional(STRING_UTF8) for both min and max fields.
Previously read/wrote plain Strings unconditionally.
Remaining 6 components (enchantments, stored_enchantments, lodestone_tracker,
firework_explosion, fireworks, banner_patterns, suspicious_stew_effects, bees)
verified correct — no changes needed.
Made-with: Cursor