Use Forge's official tag API

This commit is contained in:
Octavia Togami 2022-03-16 20:05:15 -07:00
parent 5843aa50e6
commit 59742162cb
3 changed files with 29 additions and 19 deletions

View File

@ -16,7 +16,7 @@ val minecraftVersion = "1.18.2"
val nextMajorMinecraftVersion: String = minecraftVersion.split('.').let { (useless, major) ->
"$useless.${major.toInt() + 1}"
}
val forgeVersion = "40.0.3"
val forgeVersion = "40.0.18"
val apiClasspath = configurations.create("apiClasspath") {
isCanBeResolved = true

View File

@ -19,27 +19,32 @@
package com.sk89q.worldedit.forge;
import com.google.common.collect.ImmutableSet;
import com.sk89q.worldedit.world.block.BlockType;
import com.sk89q.worldedit.world.registry.BlockCategoryRegistry;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderSet;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey;
import net.minecraft.world.level.block.Block;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.tags.ITagManager;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
public class ForgeBlockCategoryRegistry implements BlockCategoryRegistry {
// TODO clean this up once Forge adds a proper API for this
@SuppressWarnings("deprecation")
@Override
public Set<BlockType> getCategorisedByName(String category) {
return Registry.BLOCK.getTag(TagKey.create(Registry.BLOCK_REGISTRY, new ResourceLocation(category)))
ITagManager<Block> tags = Objects.requireNonNull(
ForgeRegistries.BLOCKS.tags(), "no block tags registry"
);
return tags
.getTag(TagKey.create(
Registry.BLOCK_REGISTRY,
new ResourceLocation(category)
))
.stream()
.flatMap(HolderSet.Named::stream)
.map(Holder::value)
.map(ForgeAdapter::adapt)
.collect(Collectors.toSet());
.collect(ImmutableSet.toImmutableSet());
}
}

View File

@ -19,27 +19,32 @@
package com.sk89q.worldedit.forge;
import com.google.common.collect.ImmutableSet;
import com.sk89q.worldedit.world.item.ItemType;
import com.sk89q.worldedit.world.registry.ItemCategoryRegistry;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderSet;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.tags.ITagManager;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
public class ForgeItemCategoryRegistry implements ItemCategoryRegistry {
// TODO clean this up once Forge adds a proper API for this
@SuppressWarnings("deprecation")
@Override
public Set<ItemType> getCategorisedByName(String category) {
return Registry.ITEM.getTag(TagKey.create(Registry.ITEM_REGISTRY, new ResourceLocation(category)))
ITagManager<Item> tags = Objects.requireNonNull(
ForgeRegistries.ITEMS.tags(), "no item tags registry"
);
return tags
.getTag(TagKey.create(
Registry.ITEM_REGISTRY,
new ResourceLocation(category)
))
.stream()
.flatMap(HolderSet.Named::stream)
.map(Holder::value)
.map(ForgeAdapter::adapt)
.collect(Collectors.toSet());
.collect(ImmutableSet.toImmutableSet());
}
}