Add some code comments, update BungeeCord version check

This commit is contained in:
onebeastchris 2024-12-10 23:13:32 +08:00
parent 8779eab5e5
commit 94d77b403b
4 changed files with 30 additions and 4 deletions

View file

@ -83,7 +83,7 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap {
// Copied from ViaVersion. // Copied from ViaVersion.
// https://github.com/ViaVersion/ViaVersion/blob/b8072aad86695cc8ec6f5e4103e43baf3abf6cc5/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java#L43 // https://github.com/ViaVersion/ViaVersion/blob/b8072aad86695cc8ec6f5e4103e43baf3abf6cc5/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java#L43
try { try {
ProtocolConstants.class.getField("MINECRAFT_1_21"); ProtocolConstants.class.getField("MINECRAFT_1_21_4");
} catch (NoSuchFieldException e) { } catch (NoSuchFieldException e) {
geyserLogger.error(" / \\"); geyserLogger.error(" / \\");
geyserLogger.error(" / \\"); geyserLogger.error(" / \\");

View file

@ -128,6 +128,7 @@ public class WolfEntity extends TameableEntity {
public void setBody(ItemStack stack) { public void setBody(ItemStack stack) {
super.setBody(stack); super.setBody(stack);
isCurseOfBinding = ItemUtils.hasEffect(session, stack, EnchantmentComponent.PREVENT_ARMOR_CHANGE); isCurseOfBinding = ItemUtils.hasEffect(session, stack, EnchantmentComponent.PREVENT_ARMOR_CHANGE);
// Not using ItemStack#getDataComponents as that wouldn't include default item components
repairableItems = GeyserItemStack.from(stack).getComponent(DataComponentType.REPAIRABLE); repairableItems = GeyserItemStack.from(stack).getComponent(DataComponentType.REPAIRABLE);
} }

View file

@ -125,6 +125,10 @@ public class GeyserItemStack {
return isEmpty() ? null : components; return isEmpty() ? null : components;
} }
/**
* @return whether this GeyserItemStack has any additional components on top of
* the base item components.
*/
public boolean hasNonBaseComponents() { public boolean hasNonBaseComponents() {
return components != null; return components != null;
} }
@ -137,6 +141,15 @@ public class GeyserItemStack {
return components; return components;
} }
/**
* Returns the stored data component for a given {@link DataComponentType}, or null.
* <p>
* This method will first check the additional components that may exist,
* and fallback to the item's default (or, "base") components if need be.
* @param type the {@link DataComponentType} to query
* @return the value for said type, or null.
* @param <T> the value's type
*/
@Nullable @Nullable
public <T> T getComponent(@NonNull DataComponentType<T> type) { public <T> T getComponent(@NonNull DataComponentType<T> type) {
if (components == null) { if (components == null) {

View file

@ -100,21 +100,33 @@ public class Item {
} }
/** /**
* Returns a modifiable DataComponents map. Should only be used when it must be modified. * Returns an unmodifiable {@link DataComponents} view containing known data components.
* Otherwise, prefer using GeyserItemStack's getComponent * Optionally, additional components can be provided to replace (or add to)
* the items' base components.
* To add data components, use {@link GeyserItemStack#getOrCreateComponents()}.
*/ */
@NonNull @NonNull
@UnmodifiableView @UnmodifiableView
public DataComponents gatherComponents(DataComponents others) { public DataComponents gatherComponents(@Nullable DataComponents others) {
if (others == null) { if (others == null) {
return baseComponents; return baseComponents;
} }
// Start with the base components that always exist
DataComponents components = baseComponents.clone(); DataComponents components = baseComponents.clone();
// Add all additional components; these can override base components!
// e.g. custom stack size
components.getDataComponents().putAll(others.getDataComponents()); components.getDataComponents().putAll(others.getDataComponents());
// Return an unmodified map of the merged components
return new DataComponents(ImmutableMap.copyOf(components.getDataComponents())); return new DataComponents(ImmutableMap.copyOf(components.getDataComponents()));
} }
/**
* Returns this items value (or null) for a specific {@link DataComponentType}.
* Prefer using {@link GeyserItemStack#getComponent(DataComponentType)}
* to also query additional components that would override the default ones.
*/
@Nullable @Nullable
public <T> T getComponent(@NonNull DataComponentType<T> type) { public <T> T getComponent(@NonNull DataComponentType<T> type) {
return baseComponents.get(type); return baseComponents.get(type);