mirror of
https://github.com/GeyserMC/Geyser.git
synced 2024-08-14 23:57:35 +00:00
Add is method for HolderSets to TagCache
This commit is contained in:
parent
cd1ceaa28d
commit
dbd062d56d
6 changed files with 27 additions and 16 deletions
|
|
@ -312,10 +312,9 @@ public class AnvilInventoryUpdater extends InventoryUpdater {
|
||||||
for (Object2IntMap.Entry<Enchantment> entry : getEnchantments(session, material).object2IntEntrySet()) {
|
for (Object2IntMap.Entry<Enchantment> entry : getEnchantments(session, material).object2IntEntrySet()) {
|
||||||
Enchantment enchantment = entry.getKey();
|
Enchantment enchantment = entry.getKey();
|
||||||
|
|
||||||
int[] supportedItemIds = enchantment.supportedItems().resolve(session, TagRegistry.ITEM);
|
boolean canApply = isEnchantedBook(input) || session.getTagCache().is(enchantment.supportedItems(), input.getJavaId(), TagRegistry.ITEM);
|
||||||
boolean canApply = isEnchantedBook(input) || IntStream.of(supportedItemIds).anyMatch(id -> id == input.getJavaId());
|
|
||||||
|
|
||||||
int[] incompatibleEnchantments = enchantment.exclusiveSet().resolve(session, TagRegistry.ENCHANTMENT);
|
int[] incompatibleEnchantments = enchantment.exclusiveSet().resolve(session.getTagCache(), TagRegistry.ENCHANTMENT);
|
||||||
for (int i : incompatibleEnchantments) {
|
for (int i : incompatibleEnchantments) {
|
||||||
Enchantment incompatible = session.getRegistryCache().enchantments().byId(i);
|
Enchantment incompatible = session.getRegistryCache().enchantments().byId(i);
|
||||||
if (combinedEnchantments.containsKey(incompatible)) {
|
if (combinedEnchantments.containsKey(incompatible)) {
|
||||||
|
|
|
||||||
|
|
@ -27,10 +27,6 @@ package org.geysermc.geyser.session.cache;
|
||||||
|
|
||||||
import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
||||||
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
|
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
|
||||||
import net.kyori.adventure.key.Key;
|
import net.kyori.adventure.key.Key;
|
||||||
import org.geysermc.geyser.GeyserImpl;
|
import org.geysermc.geyser.GeyserImpl;
|
||||||
import org.geysermc.geyser.GeyserLogger;
|
import org.geysermc.geyser.GeyserLogger;
|
||||||
|
|
@ -38,12 +34,18 @@ import org.geysermc.geyser.inventory.GeyserItemStack;
|
||||||
import org.geysermc.geyser.item.type.Item;
|
import org.geysermc.geyser.item.type.Item;
|
||||||
import org.geysermc.geyser.level.block.type.Block;
|
import org.geysermc.geyser.level.block.type.Block;
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
|
import org.geysermc.geyser.session.cache.tags.HolderSet;
|
||||||
import org.geysermc.geyser.session.cache.tags.Tag;
|
import org.geysermc.geyser.session.cache.tags.Tag;
|
||||||
import org.geysermc.geyser.session.cache.tags.TagRegistry;
|
import org.geysermc.geyser.session.cache.tags.TagRegistry;
|
||||||
import org.geysermc.geyser.session.cache.tags.VanillaTag;
|
import org.geysermc.geyser.session.cache.tags.VanillaTag;
|
||||||
import org.geysermc.geyser.util.MinecraftKey;
|
import org.geysermc.geyser.util.MinecraftKey;
|
||||||
import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundUpdateTagsPacket;
|
import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundUpdateTagsPacket;
|
||||||
|
|
||||||
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages information sent from the {@link ClientboundUpdateTagsPacket}. If that packet is not sent, all lists here
|
* Manages information sent from the {@link ClientboundUpdateTagsPacket}. If that packet is not sent, all lists here
|
||||||
* will remain empty, matching Java Edition behavior.
|
* will remain empty, matching Java Edition behavior.
|
||||||
|
|
@ -142,6 +144,13 @@ public final class TagCache {
|
||||||
return contains(get(tag), item.javaId());
|
return contains(get(tag), item.javaId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if the specified network ID is in the given holder set.
|
||||||
|
*/
|
||||||
|
public boolean is(HolderSet holderSet, int id, TagRegistry registry) {
|
||||||
|
return contains(holderSet.resolve(this, registry), id);
|
||||||
|
}
|
||||||
|
|
||||||
public int[] get(Tag tag) {
|
public int[] get(Tag tag) {
|
||||||
if (tag instanceof VanillaTag vanillaTag) {
|
if (tag instanceof VanillaTag vanillaTag) {
|
||||||
return this.tags[tag.registry().ordinal()][vanillaTag.ordinal()];
|
return this.tags[tag.registry().ordinal()][vanillaTag.ordinal()];
|
||||||
|
|
|
||||||
|
|
@ -25,11 +25,12 @@
|
||||||
|
|
||||||
package org.geysermc.geyser.session.cache.tags;
|
package org.geysermc.geyser.session.cache.tags;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import net.kyori.adventure.key.Key;
|
import net.kyori.adventure.key.Key;
|
||||||
import org.geysermc.geyser.util.MinecraftKey;
|
import org.geysermc.geyser.util.MinecraftKey;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final class BlockTag {
|
public final class BlockTag {
|
||||||
public static final Map<Key, Tag> ALL_BLOCK_TAGS = new HashMap<>();
|
public static final Map<Key, Tag> ALL_BLOCK_TAGS = new HashMap<>();
|
||||||
|
|
|
||||||
|
|
@ -25,11 +25,12 @@
|
||||||
|
|
||||||
package org.geysermc.geyser.session.cache.tags;
|
package org.geysermc.geyser.session.cache.tags;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import net.kyori.adventure.key.Key;
|
import net.kyori.adventure.key.Key;
|
||||||
import org.geysermc.geyser.util.MinecraftKey;
|
import org.geysermc.geyser.util.MinecraftKey;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final class EnchantmentTag {
|
public final class EnchantmentTag {
|
||||||
public static final Map<Key, Tag> ALL_ENCHANTMENT_TAGS = new HashMap<>();
|
public static final Map<Key, Tag> ALL_ENCHANTMENT_TAGS = new HashMap<>();
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ import lombok.Data;
|
||||||
import net.kyori.adventure.key.Key;
|
import net.kyori.adventure.key.Key;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.cache.TagCache;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public final class HolderSet {
|
public final class HolderSet {
|
||||||
|
|
@ -49,12 +49,12 @@ public final class HolderSet {
|
||||||
this.holders = null;
|
this.holders = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int[] resolve(GeyserSession session, TagRegistry registry) {
|
public int[] resolve(TagCache tagCache, TagRegistry registry) {
|
||||||
if (holders != null) {
|
if (holders != null) {
|
||||||
return holders;
|
return holders;
|
||||||
}
|
}
|
||||||
|
|
||||||
return session.getTagCache().get(Tag.createTag(registry, tagId));
|
return tagCache.get(Tag.createTag(registry, tagId));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static HolderSet readHolderSet(@Nullable Object holderSet, Function<Key, Integer> keyIdMapping) {
|
public static HolderSet readHolderSet(@Nullable Object holderSet, Function<Key, Integer> keyIdMapping) {
|
||||||
|
|
|
||||||
|
|
@ -25,11 +25,12 @@
|
||||||
|
|
||||||
package org.geysermc.geyser.session.cache.tags;
|
package org.geysermc.geyser.session.cache.tags;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import net.kyori.adventure.key.Key;
|
import net.kyori.adventure.key.Key;
|
||||||
import org.geysermc.geyser.util.MinecraftKey;
|
import org.geysermc.geyser.util.MinecraftKey;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final class ItemTag {
|
public final class ItemTag {
|
||||||
public static final Map<Key, Tag> ALL_ITEM_TAGS = new HashMap<>();
|
public static final Map<Key, Tag> ALL_ITEM_TAGS = new HashMap<>();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue