diff --git a/patches/minecraft/net/minecraft/item/DyeColor.java.patch b/patches/minecraft/net/minecraft/item/DyeColor.java.patch index fd588abbce..5fde513115 100644 --- a/patches/minecraft/net/minecraft/item/DyeColor.java.patch +++ b/patches/minecraft/net/minecraft/item/DyeColor.java.patch @@ -4,7 +4,7 @@ private final int field_196066_w; private final float[] field_193352_x; private final int field_196067_y; -+ private final net.minecraft.tags.ITag.INamedTag tag; ++ private final net.minecraftforge.common.Tags.IOptionalNamedTag tag; private final int field_218390_z; private DyeColor(int p_i50049_3_, String p_i50049_4_, int p_i50049_5_, MaterialColor p_i50049_6_, int p_i50049_7_, int p_i50049_8_) { @@ -12,7 +12,7 @@ int j = (p_i50049_5_ & '\uff00') >> 8; int k = (p_i50049_5_ & 255) >> 0; this.field_196066_w = k << 16 | j << 8 | i << 0; -+ this.tag = net.minecraft.tags.ItemTags.func_199901_a("forge:dyes/" + p_i50049_4_); ++ this.tag = net.minecraft.tags.ItemTags.createOptional(new net.minecraft.util.ResourceLocation("forge", "dyes/" + p_i50049_4_)); this.field_193352_x = new float[]{(float)i / 255.0F, (float)j / 255.0F, (float)k / 255.0F}; this.field_196067_y = p_i50049_7_; } @@ -25,7 +25,7 @@ + return field_193351_w; + } + -+ public net.minecraft.tags.ITag.INamedTag getTag() { ++ public net.minecraftforge.common.Tags.IOptionalNamedTag getTag() { + return tag; + } + diff --git a/patches/minecraft/net/minecraft/tags/BlockTags.java.patch b/patches/minecraft/net/minecraft/tags/BlockTags.java.patch new file mode 100644 index 0000000000..f11705262a --- /dev/null +++ b/patches/minecraft/net/minecraft/tags/BlockTags.java.patch @@ -0,0 +1,13 @@ +--- a/net/minecraft/tags/BlockTags.java ++++ b/net/minecraft/tags/BlockTags.java +@@ -97,6 +97,10 @@ + return field_199899_c.func_232937_a_(p_199894_0_); + } + ++ public static net.minecraftforge.common.Tags.IOptionalNamedTag createOptional(ResourceLocation name) { ++ return field_199899_c.createOptional(name, () -> null); ++ } ++ + public static ITagCollection func_199896_a() { + return field_199899_c.func_232939_b_(); + } diff --git a/patches/minecraft/net/minecraft/tags/EntityTypeTags.java.patch b/patches/minecraft/net/minecraft/tags/EntityTypeTags.java.patch new file mode 100644 index 0000000000..1b247a881d --- /dev/null +++ b/patches/minecraft/net/minecraft/tags/EntityTypeTags.java.patch @@ -0,0 +1,13 @@ +--- a/net/minecraft/tags/EntityTypeTags.java ++++ b/net/minecraft/tags/EntityTypeTags.java +@@ -16,6 +16,10 @@ + return field_219766_c.func_232937_a_(p_232896_0_); + } + ++ public static net.minecraftforge.common.Tags.IOptionalNamedTag> createOptional(ResourceLocation name) { ++ return field_219766_c.createOptional(name, () -> null); ++ } ++ + public static ITagCollection> func_219762_a() { + return field_219766_c.func_232939_b_(); + } diff --git a/patches/minecraft/net/minecraft/tags/FluidTags.java.patch b/patches/minecraft/net/minecraft/tags/FluidTags.java.patch index efddbbec79..937018cede 100644 --- a/patches/minecraft/net/minecraft/tags/FluidTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/FluidTags.java.patch @@ -1,6 +1,13 @@ --- a/net/minecraft/tags/FluidTags.java +++ b/net/minecraft/tags/FluidTags.java -@@ -16,4 +16,9 @@ +@@ -13,7 +13,16 @@ + return field_206961_c.func_232937_a_(p_206956_0_); + } + ++ public static net.minecraftforge.common.Tags.IOptionalNamedTag createOptional(ResourceLocation name) { ++ return field_206961_c.createOptional(name, () -> null); ++ } ++ public static List> func_241280_c_() { return field_206961_c.func_241288_c_(); } diff --git a/patches/minecraft/net/minecraft/tags/ItemTags.java.patch b/patches/minecraft/net/minecraft/tags/ItemTags.java.patch new file mode 100644 index 0000000000..50a4ebc6e6 --- /dev/null +++ b/patches/minecraft/net/minecraft/tags/ItemTags.java.patch @@ -0,0 +1,13 @@ +--- a/net/minecraft/tags/ItemTags.java ++++ b/net/minecraft/tags/ItemTags.java +@@ -65,6 +65,10 @@ + return field_199906_c.func_232937_a_(p_199901_0_); + } + ++ public static net.minecraftforge.common.Tags.IOptionalNamedTag createOptional(ResourceLocation name) { ++ return field_199906_c.createOptional(name, () -> null); ++ } ++ + public static ITagCollection func_199903_a() { + return field_199906_c.func_232939_b_(); + } diff --git a/patches/minecraft/net/minecraft/tags/TagRegistry.java.patch b/patches/minecraft/net/minecraft/tags/TagRegistry.java.patch index c92136f0aa..1341bef050 100644 --- a/patches/minecraft/net/minecraft/tags/TagRegistry.java.patch +++ b/patches/minecraft/net/minecraft/tags/TagRegistry.java.patch @@ -1,14 +1,32 @@ --- a/net/minecraft/tags/TagRegistry.java +++ b/net/minecraft/tags/TagRegistry.java -@@ -23,6 +23,7 @@ +@@ -22,7 +22,15 @@ + } public ITag.INamedTag func_232937_a_(String p_232937_1_) { - TagRegistry.NamedTag namedtag = new TagRegistry.NamedTag<>(new ResourceLocation(p_232937_1_)); +- TagRegistry.NamedTag namedtag = new TagRegistry.NamedTag<>(new ResourceLocation(p_232937_1_)); ++ return add(new TagRegistry.NamedTag<>(new ResourceLocation(p_232937_1_))); ++ } ++ ++ public net.minecraftforge.common.Tags.IOptionalNamedTag createOptional(ResourceLocation key, @Nullable java.util.function.Supplier> defaults) { ++ return add(new TagRegistry.OptionalNamedTag<>(key, defaults)); ++ } ++ ++ private > R add(R namedtag) { + namedtag.func_232943_a_(field_232930_b_::func_199910_a); this.field_232931_c_.add(namedtag); return namedtag; } -@@ -93,5 +94,10 @@ +@@ -56,7 +64,7 @@ + + public Set func_242189_b(ITagCollectionSupplier p_242189_1_) { + ITagCollection itagcollection = this.field_242184_c.apply(p_242189_1_); +- Set set = this.field_232931_c_.stream().map(TagRegistry.NamedTag::func_230234_a_).collect(Collectors.toSet()); ++ Set set = this.field_232931_c_.stream().filter(e -> !(e instanceof OptionalNamedTag)).map(TagRegistry.NamedTag::func_230234_a_).collect(Collectors.toSet()); + ImmutableSet immutableset = ImmutableSet.copyOf(itagcollection.func_199908_a()); + return Sets.difference(set, immutableset); + } +@@ -93,5 +101,43 @@ public List func_230236_b_() { return this.func_232944_c_().func_230236_b_(); } @@ -18,4 +36,37 @@ + return "NamedTag[" + func_230234_a_().toString() + ']'; + } } ++ ++ private static class OptionalNamedTag extends NamedTag implements net.minecraftforge.common.Tags.IOptionalNamedTag { ++ @Nullable ++ private final java.util.function.Supplier> defaults; ++ private boolean defaulted = true; ++ ++ private OptionalNamedTag(ResourceLocation name, @Nullable java.util.function.Supplier> defaults) { ++ super(name); ++ this.defaults = defaults; ++ } ++ ++ @Override ++ public boolean isDefaulted() { ++ return defaulted; ++ } ++ ++ @Override ++ void func_232943_a_(Function> p_232943_1_) { ++ super.func_232943_a_(p_232943_1_); ++ if (this.field_232942_b_ == null) { ++ this.defaulted = true; ++ Set defs = defaults == null ? null : defaults.get(); ++ this.field_232942_b_ = defs == null ? Tag.func_241284_a_() : Tag.func_241286_a_(defs); ++ } else { ++ this.defaulted = false; ++ } ++ } ++ ++ @Override ++ public String toString() { ++ return "OptionalNamedTag[" + func_230234_a_().toString() + ']'; ++ } ++ } } diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index c8f10bceaf..53e15056d8 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -156,6 +156,7 @@ import org.apache.logging.log4j.util.TriConsumer; public class ForgeHooks { private static final Logger LOGGER = LogManager.getLogger(); + @SuppressWarnings("unused") private static final Marker FORGEHOOKS = MarkerManager.getMarker("FORGEHOOKS"); public static boolean canContinueUsing(@Nonnull ItemStack from, @Nonnull ItemStack to) @@ -235,6 +236,7 @@ public class ForgeHooks /** * Called when a player uses 'pick block', calls new Entity and Block hooks. */ + @SuppressWarnings("resource") public static boolean onPickBlock(RayTraceResult target, PlayerEntity player, World world) { ItemStack result = ItemStack.EMPTY; diff --git a/src/main/java/net/minecraftforge/common/Tags.java b/src/main/java/net/minecraftforge/common/Tags.java index 6c2145ed2b..8b4c4e15c9 100644 --- a/src/main/java/net/minecraftforge/common/Tags.java +++ b/src/main/java/net/minecraftforge/common/Tags.java @@ -23,8 +23,9 @@ import net.minecraft.block.Block; import net.minecraft.item.DyeColor; import net.minecraft.item.Item; import net.minecraft.tags.BlockTags; -import net.minecraft.tags.ITag; import net.minecraft.tags.ItemTags; +import net.minecraft.util.ResourceLocation; +import net.minecraft.tags.ITag.INamedTag; public class Tags { @@ -38,248 +39,256 @@ public class Tags { private static void init(){} - public static final ITag.INamedTag CHESTS = tag("chests"); - public static final ITag.INamedTag CHESTS_ENDER = tag("chests/ender"); - public static final ITag.INamedTag CHESTS_TRAPPED = tag("chests/trapped"); - public static final ITag.INamedTag CHESTS_WOODEN = tag("chests/wooden"); - public static final ITag.INamedTag COBBLESTONE = tag("cobblestone"); - public static final ITag.INamedTag DIRT = tag("dirt"); - public static final ITag.INamedTag END_STONES = tag("end_stones"); - public static final ITag.INamedTag FENCE_GATES = tag("fence_gates"); - public static final ITag.INamedTag FENCE_GATES_WOODEN = tag("fence_gates/wooden"); - public static final ITag.INamedTag FENCES = tag("fences"); - public static final ITag.INamedTag FENCES_NETHER_BRICK = tag("fences/nether_brick"); - public static final ITag.INamedTag FENCES_WOODEN = tag("fences/wooden"); + public static final IOptionalNamedTag CHESTS = tag("chests"); + public static final IOptionalNamedTag CHESTS_ENDER = tag("chests/ender"); + public static final IOptionalNamedTag CHESTS_TRAPPED = tag("chests/trapped"); + public static final IOptionalNamedTag CHESTS_WOODEN = tag("chests/wooden"); + public static final IOptionalNamedTag COBBLESTONE = tag("cobblestone"); + public static final IOptionalNamedTag DIRT = tag("dirt"); + public static final IOptionalNamedTag END_STONES = tag("end_stones"); + public static final IOptionalNamedTag FENCE_GATES = tag("fence_gates"); + public static final IOptionalNamedTag FENCE_GATES_WOODEN = tag("fence_gates/wooden"); + public static final IOptionalNamedTag FENCES = tag("fences"); + public static final IOptionalNamedTag FENCES_NETHER_BRICK = tag("fences/nether_brick"); + public static final IOptionalNamedTag FENCES_WOODEN = tag("fences/wooden"); - public static final ITag.INamedTag GLASS = tag("glass"); - public static final ITag.INamedTag GLASS_BLACK = tag("glass/black"); - public static final ITag.INamedTag GLASS_BLUE = tag("glass/blue"); - public static final ITag.INamedTag GLASS_BROWN = tag("glass/brown"); - public static final ITag.INamedTag GLASS_COLORLESS = tag("glass/colorless"); - public static final ITag.INamedTag GLASS_CYAN = tag("glass/cyan"); - public static final ITag.INamedTag GLASS_GRAY = tag("glass/gray"); - public static final ITag.INamedTag GLASS_GREEN = tag("glass/green"); - public static final ITag.INamedTag GLASS_LIGHT_BLUE = tag("glass/light_blue"); - public static final ITag.INamedTag GLASS_LIGHT_GRAY = tag("glass/light_gray"); - public static final ITag.INamedTag GLASS_LIME = tag("glass/lime"); - public static final ITag.INamedTag GLASS_MAGENTA = tag("glass/magenta"); - public static final ITag.INamedTag GLASS_ORANGE = tag("glass/orange"); - public static final ITag.INamedTag GLASS_PINK = tag("glass/pink"); - public static final ITag.INamedTag GLASS_PURPLE = tag("glass/purple"); - public static final ITag.INamedTag GLASS_RED = tag("glass/red"); - public static final ITag.INamedTag GLASS_WHITE = tag("glass/white"); - public static final ITag.INamedTag GLASS_YELLOW = tag("glass/yellow"); + public static final IOptionalNamedTag GLASS = tag("glass"); + public static final IOptionalNamedTag GLASS_BLACK = tag("glass/black"); + public static final IOptionalNamedTag GLASS_BLUE = tag("glass/blue"); + public static final IOptionalNamedTag GLASS_BROWN = tag("glass/brown"); + public static final IOptionalNamedTag GLASS_COLORLESS = tag("glass/colorless"); + public static final IOptionalNamedTag GLASS_CYAN = tag("glass/cyan"); + public static final IOptionalNamedTag GLASS_GRAY = tag("glass/gray"); + public static final IOptionalNamedTag GLASS_GREEN = tag("glass/green"); + public static final IOptionalNamedTag GLASS_LIGHT_BLUE = tag("glass/light_blue"); + public static final IOptionalNamedTag GLASS_LIGHT_GRAY = tag("glass/light_gray"); + public static final IOptionalNamedTag GLASS_LIME = tag("glass/lime"); + public static final IOptionalNamedTag GLASS_MAGENTA = tag("glass/magenta"); + public static final IOptionalNamedTag GLASS_ORANGE = tag("glass/orange"); + public static final IOptionalNamedTag GLASS_PINK = tag("glass/pink"); + public static final IOptionalNamedTag GLASS_PURPLE = tag("glass/purple"); + public static final IOptionalNamedTag GLASS_RED = tag("glass/red"); + public static final IOptionalNamedTag GLASS_WHITE = tag("glass/white"); + public static final IOptionalNamedTag GLASS_YELLOW = tag("glass/yellow"); - public static final ITag.INamedTag GLASS_PANES = tag("glass_panes"); - public static final ITag.INamedTag GLASS_PANES_BLACK = tag("glass_panes/black"); - public static final ITag.INamedTag GLASS_PANES_BLUE = tag("glass_panes/blue"); - public static final ITag.INamedTag GLASS_PANES_BROWN = tag("glass_panes/brown"); - public static final ITag.INamedTag GLASS_PANES_COLORLESS = tag("glass_panes/colorless"); - public static final ITag.INamedTag GLASS_PANES_CYAN = tag("glass_panes/cyan"); - public static final ITag.INamedTag GLASS_PANES_GRAY = tag("glass_panes/gray"); - public static final ITag.INamedTag GLASS_PANES_GREEN = tag("glass_panes/green"); - public static final ITag.INamedTag GLASS_PANES_LIGHT_BLUE = tag("glass_panes/light_blue"); - public static final ITag.INamedTag GLASS_PANES_LIGHT_GRAY = tag("glass_panes/light_gray"); - public static final ITag.INamedTag GLASS_PANES_LIME = tag("glass_panes/lime"); - public static final ITag.INamedTag GLASS_PANES_MAGENTA = tag("glass_panes/magenta"); - public static final ITag.INamedTag GLASS_PANES_ORANGE = tag("glass_panes/orange"); - public static final ITag.INamedTag GLASS_PANES_PINK = tag("glass_panes/pink"); - public static final ITag.INamedTag GLASS_PANES_PURPLE = tag("glass_panes/purple"); - public static final ITag.INamedTag GLASS_PANES_RED = tag("glass_panes/red"); - public static final ITag.INamedTag GLASS_PANES_WHITE = tag("glass_panes/white"); - public static final ITag.INamedTag GLASS_PANES_YELLOW = tag("glass_panes/yellow"); + public static final IOptionalNamedTag GLASS_PANES = tag("glass_panes"); + public static final IOptionalNamedTag GLASS_PANES_BLACK = tag("glass_panes/black"); + public static final IOptionalNamedTag GLASS_PANES_BLUE = tag("glass_panes/blue"); + public static final IOptionalNamedTag GLASS_PANES_BROWN = tag("glass_panes/brown"); + public static final IOptionalNamedTag GLASS_PANES_COLORLESS = tag("glass_panes/colorless"); + public static final IOptionalNamedTag GLASS_PANES_CYAN = tag("glass_panes/cyan"); + public static final IOptionalNamedTag GLASS_PANES_GRAY = tag("glass_panes/gray"); + public static final IOptionalNamedTag GLASS_PANES_GREEN = tag("glass_panes/green"); + public static final IOptionalNamedTag GLASS_PANES_LIGHT_BLUE = tag("glass_panes/light_blue"); + public static final IOptionalNamedTag GLASS_PANES_LIGHT_GRAY = tag("glass_panes/light_gray"); + public static final IOptionalNamedTag GLASS_PANES_LIME = tag("glass_panes/lime"); + public static final IOptionalNamedTag GLASS_PANES_MAGENTA = tag("glass_panes/magenta"); + public static final IOptionalNamedTag GLASS_PANES_ORANGE = tag("glass_panes/orange"); + public static final IOptionalNamedTag GLASS_PANES_PINK = tag("glass_panes/pink"); + public static final IOptionalNamedTag GLASS_PANES_PURPLE = tag("glass_panes/purple"); + public static final IOptionalNamedTag GLASS_PANES_RED = tag("glass_panes/red"); + public static final IOptionalNamedTag GLASS_PANES_WHITE = tag("glass_panes/white"); + public static final IOptionalNamedTag GLASS_PANES_YELLOW = tag("glass_panes/yellow"); - public static final ITag.INamedTag GRAVEL = tag("gravel"); - public static final ITag.INamedTag NETHERRACK = tag("netherrack"); - public static final ITag.INamedTag OBSIDIAN = tag("obsidian"); - public static final ITag.INamedTag ORES = tag("ores"); - public static final ITag.INamedTag ORES_COAL = tag("ores/coal"); - public static final ITag.INamedTag ORES_DIAMOND = tag("ores/diamond"); - public static final ITag.INamedTag ORES_EMERALD = tag("ores/emerald"); - public static final ITag.INamedTag ORES_GOLD = tag("ores/gold"); - public static final ITag.INamedTag ORES_IRON = tag("ores/iron"); - public static final ITag.INamedTag ORES_LAPIS = tag("ores/lapis"); - public static final ITag.INamedTag ORES_QUARTZ = tag("ores/quartz"); - public static final ITag.INamedTag ORES_REDSTONE = tag("ores/redstone"); + public static final IOptionalNamedTag GRAVEL = tag("gravel"); + public static final IOptionalNamedTag NETHERRACK = tag("netherrack"); + public static final IOptionalNamedTag OBSIDIAN = tag("obsidian"); + public static final IOptionalNamedTag ORES = tag("ores"); + public static final IOptionalNamedTag ORES_COAL = tag("ores/coal"); + public static final IOptionalNamedTag ORES_DIAMOND = tag("ores/diamond"); + public static final IOptionalNamedTag ORES_EMERALD = tag("ores/emerald"); + public static final IOptionalNamedTag ORES_GOLD = tag("ores/gold"); + public static final IOptionalNamedTag ORES_IRON = tag("ores/iron"); + public static final IOptionalNamedTag ORES_LAPIS = tag("ores/lapis"); + public static final IOptionalNamedTag ORES_QUARTZ = tag("ores/quartz"); + public static final IOptionalNamedTag ORES_REDSTONE = tag("ores/redstone"); - public static final ITag.INamedTag SAND = tag("sand"); - public static final ITag.INamedTag SAND_COLORLESS = tag("sand/colorless"); - public static final ITag.INamedTag SAND_RED = tag("sand/red"); + public static final IOptionalNamedTag SAND = tag("sand"); + public static final IOptionalNamedTag SAND_COLORLESS = tag("sand/colorless"); + public static final IOptionalNamedTag SAND_RED = tag("sand/red"); - public static final ITag.INamedTag SANDSTONE = tag("sandstone"); - public static final ITag.INamedTag STAINED_GLASS = tag("stained_glass"); - public static final ITag.INamedTag STAINED_GLASS_PANES = tag("stained_glass_panes"); - public static final ITag.INamedTag STONE = tag("stone"); - public static final ITag.INamedTag STORAGE_BLOCKS = tag("storage_blocks"); - public static final ITag.INamedTag STORAGE_BLOCKS_COAL = tag("storage_blocks/coal"); - public static final ITag.INamedTag STORAGE_BLOCKS_DIAMOND = tag("storage_blocks/diamond"); - public static final ITag.INamedTag STORAGE_BLOCKS_EMERALD = tag("storage_blocks/emerald"); - public static final ITag.INamedTag STORAGE_BLOCKS_GOLD = tag("storage_blocks/gold"); - public static final ITag.INamedTag STORAGE_BLOCKS_IRON = tag("storage_blocks/iron"); - public static final ITag.INamedTag STORAGE_BLOCKS_LAPIS = tag("storage_blocks/lapis"); - public static final ITag.INamedTag STORAGE_BLOCKS_QUARTZ = tag("storage_blocks/quartz"); - public static final ITag.INamedTag STORAGE_BLOCKS_REDSTONE = tag("storage_blocks/redstone"); + public static final IOptionalNamedTag SANDSTONE = tag("sandstone"); + public static final IOptionalNamedTag STAINED_GLASS = tag("stained_glass"); + public static final IOptionalNamedTag STAINED_GLASS_PANES = tag("stained_glass_panes"); + public static final IOptionalNamedTag STONE = tag("stone"); + public static final IOptionalNamedTag STORAGE_BLOCKS = tag("storage_blocks"); + public static final IOptionalNamedTag STORAGE_BLOCKS_COAL = tag("storage_blocks/coal"); + public static final IOptionalNamedTag STORAGE_BLOCKS_DIAMOND = tag("storage_blocks/diamond"); + public static final IOptionalNamedTag STORAGE_BLOCKS_EMERALD = tag("storage_blocks/emerald"); + public static final IOptionalNamedTag STORAGE_BLOCKS_GOLD = tag("storage_blocks/gold"); + public static final IOptionalNamedTag STORAGE_BLOCKS_IRON = tag("storage_blocks/iron"); + public static final IOptionalNamedTag STORAGE_BLOCKS_LAPIS = tag("storage_blocks/lapis"); + public static final IOptionalNamedTag STORAGE_BLOCKS_QUARTZ = tag("storage_blocks/quartz"); + public static final IOptionalNamedTag STORAGE_BLOCKS_REDSTONE = tag("storage_blocks/redstone"); - private static ITag.INamedTag tag(String name) + private static IOptionalNamedTag tag(String name) { - return BlockTags.makeWrapperTag("forge:" + name); + return BlockTags.createOptional(new ResourceLocation("forge", name)); } } public static class Items { private static void init(){} + public static final IOptionalNamedTag ARROWS = tag("arrows"); + public static final IOptionalNamedTag BONES = tag("bones"); + public static final IOptionalNamedTag BOOKSHELVES = tag("bookshelves"); + public static final IOptionalNamedTag CHESTS = tag("chests"); + public static final IOptionalNamedTag CHESTS_ENDER = tag("chests/ender"); + public static final IOptionalNamedTag CHESTS_TRAPPED = tag("chests/trapped"); + public static final IOptionalNamedTag CHESTS_WOODEN = tag("chests/wooden"); + public static final IOptionalNamedTag COBBLESTONE = tag("cobblestone"); + public static final IOptionalNamedTag CROPS = tag("crops"); + public static final IOptionalNamedTag CROPS_BEETROOT = tag("crops/beetroot"); + public static final IOptionalNamedTag CROPS_CARROT = tag("crops/carrot"); + public static final IOptionalNamedTag CROPS_NETHER_WART = tag("crops/nether_wart"); + public static final IOptionalNamedTag CROPS_POTATO = tag("crops/potato"); + public static final IOptionalNamedTag CROPS_WHEAT = tag("crops/wheat"); + public static final IOptionalNamedTag DUSTS = tag("dusts"); + public static final IOptionalNamedTag DUSTS_PRISMARINE = tag("dusts/prismarine"); + public static final IOptionalNamedTag DUSTS_REDSTONE = tag("dusts/redstone"); + public static final IOptionalNamedTag DUSTS_GLOWSTONE = tag("dusts/glowstone"); - public static final ITag.INamedTag ARROWS = tag("arrows"); - public static final ITag.INamedTag BONES = tag("bones"); - public static final ITag.INamedTag BOOKSHELVES = tag("bookshelves"); - public static final ITag.INamedTag CHESTS = tag("chests"); - public static final ITag.INamedTag CHESTS_ENDER = tag("chests/ender"); - public static final ITag.INamedTag CHESTS_TRAPPED = tag("chests/trapped"); - public static final ITag.INamedTag CHESTS_WOODEN = tag("chests/wooden"); - public static final ITag.INamedTag COBBLESTONE = tag("cobblestone"); - public static final ITag.INamedTag CROPS = tag("crops"); - public static final ITag.INamedTag CROPS_BEETROOT = tag("crops/beetroot"); - public static final ITag.INamedTag CROPS_CARROT = tag("crops/carrot"); - public static final ITag.INamedTag CROPS_NETHER_WART = tag("crops/nether_wart"); - public static final ITag.INamedTag CROPS_POTATO = tag("crops/potato"); - public static final ITag.INamedTag CROPS_WHEAT = tag("crops/wheat"); - public static final ITag.INamedTag DUSTS = tag("dusts"); - public static final ITag.INamedTag DUSTS_PRISMARINE = tag("dusts/prismarine"); - public static final ITag.INamedTag DUSTS_REDSTONE = tag("dusts/redstone"); - public static final ITag.INamedTag DUSTS_GLOWSTONE = tag("dusts/glowstone"); + public static final IOptionalNamedTag DYES = tag("dyes"); + public static final IOptionalNamedTag DYES_BLACK = DyeColor.BLACK.getTag(); + public static final IOptionalNamedTag DYES_RED = DyeColor.RED.getTag(); + public static final IOptionalNamedTag DYES_GREEN = DyeColor.GREEN.getTag(); + public static final IOptionalNamedTag DYES_BROWN = DyeColor.BROWN.getTag(); + public static final IOptionalNamedTag DYES_BLUE = DyeColor.BLUE.getTag(); + public static final IOptionalNamedTag DYES_PURPLE = DyeColor.PURPLE.getTag(); + public static final IOptionalNamedTag DYES_CYAN = DyeColor.CYAN.getTag(); + public static final IOptionalNamedTag DYES_LIGHT_GRAY = DyeColor.LIGHT_GRAY.getTag(); + public static final IOptionalNamedTag DYES_GRAY = DyeColor.GRAY.getTag(); + public static final IOptionalNamedTag DYES_PINK = DyeColor.PINK.getTag(); + public static final IOptionalNamedTag DYES_LIME = DyeColor.LIME.getTag(); + public static final IOptionalNamedTag DYES_YELLOW = DyeColor.YELLOW.getTag(); + public static final IOptionalNamedTag DYES_LIGHT_BLUE = DyeColor.LIGHT_BLUE.getTag(); + public static final IOptionalNamedTag DYES_MAGENTA = DyeColor.MAGENTA.getTag(); + public static final IOptionalNamedTag DYES_ORANGE = DyeColor.ORANGE.getTag(); + public static final IOptionalNamedTag DYES_WHITE = DyeColor.WHITE.getTag(); - public static final ITag.INamedTag DYES = tag("dyes"); - public static final ITag.INamedTag DYES_BLACK = DyeColor.BLACK.getTag(); - public static final ITag.INamedTag DYES_RED = DyeColor.RED.getTag(); - public static final ITag.INamedTag DYES_GREEN = DyeColor.GREEN.getTag(); - public static final ITag.INamedTag DYES_BROWN = DyeColor.BROWN.getTag(); - public static final ITag.INamedTag DYES_BLUE = DyeColor.BLUE.getTag(); - public static final ITag.INamedTag DYES_PURPLE = DyeColor.PURPLE.getTag(); - public static final ITag.INamedTag DYES_CYAN = DyeColor.CYAN.getTag(); - public static final ITag.INamedTag DYES_LIGHT_GRAY = DyeColor.LIGHT_GRAY.getTag(); - public static final ITag.INamedTag DYES_GRAY = DyeColor.GRAY.getTag(); - public static final ITag.INamedTag DYES_PINK = DyeColor.PINK.getTag(); - public static final ITag.INamedTag DYES_LIME = DyeColor.LIME.getTag(); - public static final ITag.INamedTag DYES_YELLOW = DyeColor.YELLOW.getTag(); - public static final ITag.INamedTag DYES_LIGHT_BLUE = DyeColor.LIGHT_BLUE.getTag(); - public static final ITag.INamedTag DYES_MAGENTA = DyeColor.MAGENTA.getTag(); - public static final ITag.INamedTag DYES_ORANGE = DyeColor.ORANGE.getTag(); - public static final ITag.INamedTag DYES_WHITE = DyeColor.WHITE.getTag(); + public static final IOptionalNamedTag EGGS = tag("eggs"); + public static final IOptionalNamedTag END_STONES = tag("end_stones"); + public static final IOptionalNamedTag ENDER_PEARLS = tag("ender_pearls"); + public static final IOptionalNamedTag FEATHERS = tag("feathers"); + public static final IOptionalNamedTag FENCE_GATES = tag("fence_gates"); + public static final IOptionalNamedTag FENCE_GATES_WOODEN = tag("fence_gates/wooden"); + public static final IOptionalNamedTag FENCES = tag("fences"); + public static final IOptionalNamedTag FENCES_NETHER_BRICK = tag("fences/nether_brick"); + public static final IOptionalNamedTag FENCES_WOODEN = tag("fences/wooden"); + public static final IOptionalNamedTag GEMS = tag("gems"); + public static final IOptionalNamedTag GEMS_DIAMOND = tag("gems/diamond"); + public static final IOptionalNamedTag GEMS_EMERALD = tag("gems/emerald"); + public static final IOptionalNamedTag GEMS_LAPIS = tag("gems/lapis"); + public static final IOptionalNamedTag GEMS_PRISMARINE = tag("gems/prismarine"); + public static final IOptionalNamedTag GEMS_QUARTZ = tag("gems/quartz"); - public static final ITag.INamedTag EGGS = tag("eggs"); - public static final ITag.INamedTag END_STONES = tag("end_stones"); - public static final ITag.INamedTag ENDER_PEARLS = tag("ender_pearls"); - public static final ITag.INamedTag FEATHERS = tag("feathers"); - public static final ITag.INamedTag FENCE_GATES = tag("fence_gates"); - public static final ITag.INamedTag FENCE_GATES_WOODEN = tag("fence_gates/wooden"); - public static final ITag.INamedTag FENCES = tag("fences"); - public static final ITag.INamedTag FENCES_NETHER_BRICK = tag("fences/nether_brick"); - public static final ITag.INamedTag FENCES_WOODEN = tag("fences/wooden"); - public static final ITag.INamedTag GEMS = tag("gems"); - public static final ITag.INamedTag GEMS_DIAMOND = tag("gems/diamond"); - public static final ITag.INamedTag GEMS_EMERALD = tag("gems/emerald"); - public static final ITag.INamedTag GEMS_LAPIS = tag("gems/lapis"); - public static final ITag.INamedTag GEMS_PRISMARINE = tag("gems/prismarine"); - public static final ITag.INamedTag GEMS_QUARTZ = tag("gems/quartz"); + public static final IOptionalNamedTag GLASS = tag("glass"); + public static final IOptionalNamedTag GLASS_BLACK = tag("glass/black"); + public static final IOptionalNamedTag GLASS_BLUE = tag("glass/blue"); + public static final IOptionalNamedTag GLASS_BROWN = tag("glass/brown"); + public static final IOptionalNamedTag GLASS_COLORLESS = tag("glass/colorless"); + public static final IOptionalNamedTag GLASS_CYAN = tag("glass/cyan"); + public static final IOptionalNamedTag GLASS_GRAY = tag("glass/gray"); + public static final IOptionalNamedTag GLASS_GREEN = tag("glass/green"); + public static final IOptionalNamedTag GLASS_LIGHT_BLUE = tag("glass/light_blue"); + public static final IOptionalNamedTag GLASS_LIGHT_GRAY = tag("glass/light_gray"); + public static final IOptionalNamedTag GLASS_LIME = tag("glass/lime"); + public static final IOptionalNamedTag GLASS_MAGENTA = tag("glass/magenta"); + public static final IOptionalNamedTag GLASS_ORANGE = tag("glass/orange"); + public static final IOptionalNamedTag GLASS_PINK = tag("glass/pink"); + public static final IOptionalNamedTag GLASS_PURPLE = tag("glass/purple"); + public static final IOptionalNamedTag GLASS_RED = tag("glass/red"); + public static final IOptionalNamedTag GLASS_WHITE = tag("glass/white"); + public static final IOptionalNamedTag GLASS_YELLOW = tag("glass/yellow"); - public static final ITag.INamedTag GLASS = tag("glass"); - public static final ITag.INamedTag GLASS_BLACK = tag("glass/black"); - public static final ITag.INamedTag GLASS_BLUE = tag("glass/blue"); - public static final ITag.INamedTag GLASS_BROWN = tag("glass/brown"); - public static final ITag.INamedTag GLASS_COLORLESS = tag("glass/colorless"); - public static final ITag.INamedTag GLASS_CYAN = tag("glass/cyan"); - public static final ITag.INamedTag GLASS_GRAY = tag("glass/gray"); - public static final ITag.INamedTag GLASS_GREEN = tag("glass/green"); - public static final ITag.INamedTag GLASS_LIGHT_BLUE = tag("glass/light_blue"); - public static final ITag.INamedTag GLASS_LIGHT_GRAY = tag("glass/light_gray"); - public static final ITag.INamedTag GLASS_LIME = tag("glass/lime"); - public static final ITag.INamedTag GLASS_MAGENTA = tag("glass/magenta"); - public static final ITag.INamedTag GLASS_ORANGE = tag("glass/orange"); - public static final ITag.INamedTag GLASS_PINK = tag("glass/pink"); - public static final ITag.INamedTag GLASS_PURPLE = tag("glass/purple"); - public static final ITag.INamedTag GLASS_RED = tag("glass/red"); - public static final ITag.INamedTag GLASS_WHITE = tag("glass/white"); - public static final ITag.INamedTag GLASS_YELLOW = tag("glass/yellow"); + public static final IOptionalNamedTag GLASS_PANES = tag("glass_panes"); + public static final IOptionalNamedTag GLASS_PANES_BLACK = tag("glass_panes/black"); + public static final IOptionalNamedTag GLASS_PANES_BLUE = tag("glass_panes/blue"); + public static final IOptionalNamedTag GLASS_PANES_BROWN = tag("glass_panes/brown"); + public static final IOptionalNamedTag GLASS_PANES_COLORLESS = tag("glass_panes/colorless"); + public static final IOptionalNamedTag GLASS_PANES_CYAN = tag("glass_panes/cyan"); + public static final IOptionalNamedTag GLASS_PANES_GRAY = tag("glass_panes/gray"); + public static final IOptionalNamedTag GLASS_PANES_GREEN = tag("glass_panes/green"); + public static final IOptionalNamedTag GLASS_PANES_LIGHT_BLUE = tag("glass_panes/light_blue"); + public static final IOptionalNamedTag GLASS_PANES_LIGHT_GRAY = tag("glass_panes/light_gray"); + public static final IOptionalNamedTag GLASS_PANES_LIME = tag("glass_panes/lime"); + public static final IOptionalNamedTag GLASS_PANES_MAGENTA = tag("glass_panes/magenta"); + public static final IOptionalNamedTag GLASS_PANES_ORANGE = tag("glass_panes/orange"); + public static final IOptionalNamedTag GLASS_PANES_PINK = tag("glass_panes/pink"); + public static final IOptionalNamedTag GLASS_PANES_PURPLE = tag("glass_panes/purple"); + public static final IOptionalNamedTag GLASS_PANES_RED = tag("glass_panes/red"); + public static final IOptionalNamedTag GLASS_PANES_WHITE = tag("glass_panes/white"); + public static final IOptionalNamedTag GLASS_PANES_YELLOW = tag("glass_panes/yellow"); - public static final ITag.INamedTag GLASS_PANES = tag("glass_panes"); - public static final ITag.INamedTag GLASS_PANES_BLACK = tag("glass_panes/black"); - public static final ITag.INamedTag GLASS_PANES_BLUE = tag("glass_panes/blue"); - public static final ITag.INamedTag GLASS_PANES_BROWN = tag("glass_panes/brown"); - public static final ITag.INamedTag GLASS_PANES_COLORLESS = tag("glass_panes/colorless"); - public static final ITag.INamedTag GLASS_PANES_CYAN = tag("glass_panes/cyan"); - public static final ITag.INamedTag GLASS_PANES_GRAY = tag("glass_panes/gray"); - public static final ITag.INamedTag GLASS_PANES_GREEN = tag("glass_panes/green"); - public static final ITag.INamedTag GLASS_PANES_LIGHT_BLUE = tag("glass_panes/light_blue"); - public static final ITag.INamedTag GLASS_PANES_LIGHT_GRAY = tag("glass_panes/light_gray"); - public static final ITag.INamedTag GLASS_PANES_LIME = tag("glass_panes/lime"); - public static final ITag.INamedTag GLASS_PANES_MAGENTA = tag("glass_panes/magenta"); - public static final ITag.INamedTag GLASS_PANES_ORANGE = tag("glass_panes/orange"); - public static final ITag.INamedTag GLASS_PANES_PINK = tag("glass_panes/pink"); - public static final ITag.INamedTag GLASS_PANES_PURPLE = tag("glass_panes/purple"); - public static final ITag.INamedTag GLASS_PANES_RED = tag("glass_panes/red"); - public static final ITag.INamedTag GLASS_PANES_WHITE = tag("glass_panes/white"); - public static final ITag.INamedTag GLASS_PANES_YELLOW = tag("glass_panes/yellow"); + public static final IOptionalNamedTag GRAVEL = tag("gravel"); + public static final IOptionalNamedTag GUNPOWDER = tag("gunpowder"); + public static final IOptionalNamedTag HEADS = tag("heads"); + public static final IOptionalNamedTag INGOTS = tag("ingots"); + public static final IOptionalNamedTag INGOTS_BRICK = tag("ingots/brick"); + public static final IOptionalNamedTag INGOTS_GOLD = tag("ingots/gold"); + public static final IOptionalNamedTag INGOTS_IRON = tag("ingots/iron"); + public static final IOptionalNamedTag INGOTS_NETHER_BRICK = tag("ingots/nether_brick"); + public static final IOptionalNamedTag LEATHER = tag("leather"); + public static final IOptionalNamedTag MUSHROOMS = tag("mushrooms"); + public static final IOptionalNamedTag MUSIC_DISCS = tag("music_discs"); + public static final IOptionalNamedTag NETHER_STARS = tag("nether_stars"); + public static final IOptionalNamedTag NETHERRACK = tag("netherrack"); + public static final IOptionalNamedTag NUGGETS = tag("nuggets"); + public static final IOptionalNamedTag NUGGETS_GOLD = tag("nuggets/gold"); + public static final IOptionalNamedTag NUGGETS_IRON = tag("nuggets/iron"); + public static final IOptionalNamedTag OBSIDIAN = tag("obsidian"); + public static final IOptionalNamedTag ORES = tag("ores"); + public static final IOptionalNamedTag ORES_COAL = tag("ores/coal"); + public static final IOptionalNamedTag ORES_DIAMOND = tag("ores/diamond"); + public static final IOptionalNamedTag ORES_EMERALD = tag("ores/emerald"); + public static final IOptionalNamedTag ORES_GOLD = tag("ores/gold"); + public static final IOptionalNamedTag ORES_IRON = tag("ores/iron"); + public static final IOptionalNamedTag ORES_LAPIS = tag("ores/lapis"); + public static final IOptionalNamedTag ORES_QUARTZ = tag("ores/quartz"); + public static final IOptionalNamedTag ORES_REDSTONE = tag("ores/redstone"); + public static final IOptionalNamedTag RODS = tag("rods"); + public static final IOptionalNamedTag RODS_BLAZE = tag("rods/blaze"); + public static final IOptionalNamedTag RODS_WOODEN = tag("rods/wooden"); - public static final ITag.INamedTag GRAVEL = tag("gravel"); - public static final ITag.INamedTag GUNPOWDER = tag("gunpowder"); - public static final ITag.INamedTag HEADS = tag("heads"); - public static final ITag.INamedTag INGOTS = tag("ingots"); - public static final ITag.INamedTag INGOTS_BRICK = tag("ingots/brick"); - public static final ITag.INamedTag INGOTS_GOLD = tag("ingots/gold"); - public static final ITag.INamedTag INGOTS_IRON = tag("ingots/iron"); - public static final ITag.INamedTag INGOTS_NETHER_BRICK = tag("ingots/nether_brick"); - public static final ITag.INamedTag LEATHER = tag("leather"); - public static final ITag.INamedTag MUSHROOMS = tag("mushrooms"); - public static final ITag.INamedTag MUSIC_DISCS = tag("music_discs"); - public static final ITag.INamedTag NETHER_STARS = tag("nether_stars"); - public static final ITag.INamedTag NETHERRACK = tag("netherrack"); - public static final ITag.INamedTag NUGGETS = tag("nuggets"); - public static final ITag.INamedTag NUGGETS_GOLD = tag("nuggets/gold"); - public static final ITag.INamedTag NUGGETS_IRON = tag("nuggets/iron"); - public static final ITag.INamedTag OBSIDIAN = tag("obsidian"); - public static final ITag.INamedTag ORES = tag("ores"); - public static final ITag.INamedTag ORES_COAL = tag("ores/coal"); - public static final ITag.INamedTag ORES_DIAMOND = tag("ores/diamond"); - public static final ITag.INamedTag ORES_EMERALD = tag("ores/emerald"); - public static final ITag.INamedTag ORES_GOLD = tag("ores/gold"); - public static final ITag.INamedTag ORES_IRON = tag("ores/iron"); - public static final ITag.INamedTag ORES_LAPIS = tag("ores/lapis"); - public static final ITag.INamedTag ORES_QUARTZ = tag("ores/quartz"); - public static final ITag.INamedTag ORES_REDSTONE = tag("ores/redstone"); - public static final ITag.INamedTag RODS = tag("rods"); - public static final ITag.INamedTag RODS_BLAZE = tag("rods/blaze"); - public static final ITag.INamedTag RODS_WOODEN = tag("rods/wooden"); + public static final IOptionalNamedTag SAND = tag("sand"); + public static final IOptionalNamedTag SAND_COLORLESS = tag("sand/colorless"); + public static final IOptionalNamedTag SAND_RED = tag("sand/red"); - public static final ITag.INamedTag SAND = tag("sand"); - public static final ITag.INamedTag SAND_COLORLESS = tag("sand/colorless"); - public static final ITag.INamedTag SAND_RED = tag("sand/red"); + public static final IOptionalNamedTag SANDSTONE = tag("sandstone"); + public static final IOptionalNamedTag SEEDS = tag("seeds"); + public static final IOptionalNamedTag SEEDS_BEETROOT = tag("seeds/beetroot"); + public static final IOptionalNamedTag SEEDS_MELON = tag("seeds/melon"); + public static final IOptionalNamedTag SEEDS_PUMPKIN = tag("seeds/pumpkin"); + public static final IOptionalNamedTag SEEDS_WHEAT = tag("seeds/wheat"); + public static final IOptionalNamedTag SHEARS = tag("shears"); + public static final IOptionalNamedTag SLIMEBALLS = tag("slimeballs"); + public static final IOptionalNamedTag STAINED_GLASS = tag("stained_glass"); + public static final IOptionalNamedTag STAINED_GLASS_PANES = tag("stained_glass_panes"); + public static final IOptionalNamedTag STONE = tag("stone"); + public static final IOptionalNamedTag STORAGE_BLOCKS = tag("storage_blocks"); + public static final IOptionalNamedTag STORAGE_BLOCKS_COAL = tag("storage_blocks/coal"); + public static final IOptionalNamedTag STORAGE_BLOCKS_DIAMOND = tag("storage_blocks/diamond"); + public static final IOptionalNamedTag STORAGE_BLOCKS_EMERALD = tag("storage_blocks/emerald"); + public static final IOptionalNamedTag STORAGE_BLOCKS_GOLD = tag("storage_blocks/gold"); + public static final IOptionalNamedTag STORAGE_BLOCKS_IRON = tag("storage_blocks/iron"); + public static final IOptionalNamedTag STORAGE_BLOCKS_LAPIS = tag("storage_blocks/lapis"); + public static final IOptionalNamedTag STORAGE_BLOCKS_QUARTZ = tag("storage_blocks/quartz"); + public static final IOptionalNamedTag STORAGE_BLOCKS_REDSTONE = tag("storage_blocks/redstone"); + public static final IOptionalNamedTag STRING = tag("string"); - public static final ITag.INamedTag SANDSTONE = tag("sandstone"); - public static final ITag.INamedTag SEEDS = tag("seeds"); - public static final ITag.INamedTag SEEDS_BEETROOT = tag("seeds/beetroot"); - public static final ITag.INamedTag SEEDS_MELON = tag("seeds/melon"); - public static final ITag.INamedTag SEEDS_PUMPKIN = tag("seeds/pumpkin"); - public static final ITag.INamedTag SEEDS_WHEAT = tag("seeds/wheat"); - public static final ITag.INamedTag SHEARS = tag("shears"); - public static final ITag.INamedTag SLIMEBALLS = tag("slimeballs"); - public static final ITag.INamedTag STAINED_GLASS = tag("stained_glass"); - public static final ITag.INamedTag STAINED_GLASS_PANES = tag("stained_glass_panes"); - public static final ITag.INamedTag STONE = tag("stone"); - public static final ITag.INamedTag STORAGE_BLOCKS = tag("storage_blocks"); - public static final ITag.INamedTag STORAGE_BLOCKS_COAL = tag("storage_blocks/coal"); - public static final ITag.INamedTag STORAGE_BLOCKS_DIAMOND = tag("storage_blocks/diamond"); - public static final ITag.INamedTag STORAGE_BLOCKS_EMERALD = tag("storage_blocks/emerald"); - public static final ITag.INamedTag STORAGE_BLOCKS_GOLD = tag("storage_blocks/gold"); - public static final ITag.INamedTag STORAGE_BLOCKS_IRON = tag("storage_blocks/iron"); - public static final ITag.INamedTag STORAGE_BLOCKS_LAPIS = tag("storage_blocks/lapis"); - public static final ITag.INamedTag STORAGE_BLOCKS_QUARTZ = tag("storage_blocks/quartz"); - public static final ITag.INamedTag STORAGE_BLOCKS_REDSTONE = tag("storage_blocks/redstone"); - public static final ITag.INamedTag STRING = tag("string"); - - private static ITag.INamedTag tag(String name) + private static IOptionalNamedTag tag(String name) { - return ItemTags.makeWrapperTag("forge:" + name); + return ItemTags.createOptional(new ResourceLocation("forge", name)); } } + + public interface IOptionalNamedTag extends INamedTag + { + /** + * Returns true if the current state is defaulted. This means we have connected to a server that does not contain this tag. + * The values referenced in this tag may be empty, or some values specified by the original tag creator. + */ + boolean isDefaulted(); + } } diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index cc36824f8f..ce4b1aff19 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -274,6 +274,7 @@ protected-f net.minecraft.tags.NetworkTagManager field_199719_a # blocks protected-f net.minecraft.tags.NetworkTagManager field_199720_b # items protected-f net.minecraft.tags.NetworkTagManager field_205705_c # fluids protected-f net.minecraft.tags.NetworkTagManager field_215299_d # entityTypes +protected net.minecraft.tags.TagRegistry$NamedTag field_232942_b_ # tagReference public net.minecraft.tileentity.HopperTileEntity func_145896_c(I)V # setTransferCooldown public net.minecraft.tileentity.HopperTileEntity func_174914_o()Z # mayTransfer #group public net.minecraft.util.DamageSource *() #All methods public, most are already