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()) {
|
||||
Enchantment enchantment = entry.getKey();
|
||||
|
||||
int[] supportedItemIds = enchantment.supportedItems().resolve(session, TagRegistry.ITEM);
|
||||
boolean canApply = isEnchantedBook(input) || IntStream.of(supportedItemIds).anyMatch(id -> id == input.getJavaId());
|
||||
boolean canApply = isEnchantedBook(input) || session.getTagCache().is(enchantment.supportedItems(), input.getJavaId(), TagRegistry.ITEM);
|
||||
|
||||
int[] incompatibleEnchantments = enchantment.exclusiveSet().resolve(session, TagRegistry.ENCHANTMENT);
|
||||
int[] incompatibleEnchantments = enchantment.exclusiveSet().resolve(session.getTagCache(), TagRegistry.ENCHANTMENT);
|
||||
for (int i : incompatibleEnchantments) {
|
||||
Enchantment incompatible = session.getRegistryCache().enchantments().byId(i);
|
||||
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.Object2IntOpenHashMap;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
import net.kyori.adventure.key.Key;
|
||||
import org.geysermc.geyser.GeyserImpl;
|
||||
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.level.block.type.Block;
|
||||
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.TagRegistry;
|
||||
import org.geysermc.geyser.session.cache.tags.VanillaTag;
|
||||
import org.geysermc.geyser.util.MinecraftKey;
|
||||
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
|
||||
* will remain empty, matching Java Edition behavior.
|
||||
|
|
@ -142,6 +144,13 @@ public final class TagCache {
|
|||
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) {
|
||||
if (tag instanceof VanillaTag vanillaTag) {
|
||||
return this.tags[tag.registry().ordinal()][vanillaTag.ordinal()];
|
||||
|
|
|
|||
|
|
@ -25,11 +25,12 @@
|
|||
|
||||
package org.geysermc.geyser.session.cache.tags;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.kyori.adventure.key.Key;
|
||||
import org.geysermc.geyser.util.MinecraftKey;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class BlockTag {
|
||||
public static final Map<Key, Tag> ALL_BLOCK_TAGS = new HashMap<>();
|
||||
|
|
|
|||
|
|
@ -25,11 +25,12 @@
|
|||
|
||||
package org.geysermc.geyser.session.cache.tags;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.kyori.adventure.key.Key;
|
||||
import org.geysermc.geyser.util.MinecraftKey;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class EnchantmentTag {
|
||||
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 org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.geysermc.geyser.session.GeyserSession;
|
||||
import org.geysermc.geyser.session.cache.TagCache;
|
||||
|
||||
@Data
|
||||
public final class HolderSet {
|
||||
|
|
@ -49,12 +49,12 @@ public final class HolderSet {
|
|||
this.holders = null;
|
||||
}
|
||||
|
||||
public int[] resolve(GeyserSession session, TagRegistry registry) {
|
||||
public int[] resolve(TagCache tagCache, TagRegistry registry) {
|
||||
if (holders != null) {
|
||||
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) {
|
||||
|
|
|
|||
|
|
@ -25,11 +25,12 @@
|
|||
|
||||
package org.geysermc.geyser.session.cache.tags;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.kyori.adventure.key.Key;
|
||||
import org.geysermc.geyser.util.MinecraftKey;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class ItemTag {
|
||||
public static final Map<Key, Tag> ALL_ITEM_TAGS = new HashMap<>();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue