From c77d00efe49ebb07ec4332a132935d42e768b078 Mon Sep 17 00:00:00 2001 From: LexManos Date: Sun, 16 Sep 2018 04:20:28 -0700 Subject: [PATCH] Recipe work. No longer a registry. OreDictionary related code removed in favor of Tags. Started moving some OreDict items to tags. Added code to RuntimeEnumExtender to return existing enum values with the same name if they exist instead of creating more. --- .../minecraft/item/EnumDyeColor.java.patch | 40 +++ .../BannerAddPatternRecipe.java.patch | 19 ++ .../crafting/BannerDuplicateRecipe.java.patch | 19 ++ .../crafting/FireworkRocketRecipe.java.patch | 19 ++ .../FireworkStarFadeRecipe.java.patch | 19 ++ .../crafting/FireworkStarRecipe.java.patch | 19 ++ .../item/crafting/FurnaceRecipe.java.patch | 27 ++ .../item/crafting/IRecipe.java.patch | 50 +++- .../item/crafting/IRecipeHidden.java.patch | 11 - .../item/crafting/Ingredient.java.patch | 61 +++++ .../crafting/RecipeBookCloning.java.patch | 30 ++ .../item/crafting/RecipeRepairItem.java.patch | 39 +++ .../crafting/RecipeTippedArrow.java.patch | 19 ++ .../item/crafting/RecipesArmorDyes.java.patch | 43 +++ .../crafting/RecipesMapCloning.java.patch | 19 ++ .../item/crafting/ShapedRecipe.java.patch | 62 +++++ .../item/crafting/ShapelessRecipe.java.patch | 77 ++++++ .../item/crafting/ShieldRecipes.java.patch | 19 ++ .../ShulkerBoxColoringRecipe.java.patch | 55 ++++ .../net/minecraft/tags/ItemTags.java.patch | 27 ++ .../minecraftforge/common/EnumPlantType.java | 22 +- .../net/minecraftforge/common/ForgeHooks.java | 40 +-- .../common/asm/RuntimeEnumExtender.java | 98 +++++-- .../common/util/RecipeMatcher.java | 5 +- .../net/minecraftforge/oredict/DyeUtils.java | 126 --------- .../minecraftforge/oredict/OreDictionary.java | 14 - .../minecraftforge/oredict/OreIngredient.java | 126 --------- .../oredict/ShapedOreRecipe.java | 259 ------------------ .../oredict/ShapelessOreRecipe.java | 161 ----------- .../registries/ForgeRegistries.java | 2 - .../minecraftforge/registries/GameData.java | 3 - .../data/minecraft/tags/items/dyes.json | 21 ++ .../data/minecraft/tags/items/dyes_black.json | 6 + .../data/minecraft/tags/items/dyes_blue.json | 6 + .../data/minecraft/tags/items/dyes_brown.json | 6 + .../data/minecraft/tags/items/dyes_cyan.json | 6 + .../data/minecraft/tags/items/dyes_gray.json | 6 + .../data/minecraft/tags/items/dyes_green.json | 6 + .../minecraft/tags/items/dyes_light_blue.json | 6 + .../minecraft/tags/items/dyes_light_gray.json | 6 + .../data/minecraft/tags/items/dyes_lime.json | 6 + .../minecraft/tags/items/dyes_magenta.json | 6 + .../minecraft/tags/items/dyes_orange.json | 6 + .../data/minecraft/tags/items/dyes_pink.json | 6 + .../minecraft/tags/items/dyes_purple.json | 6 + .../data/minecraft/tags/items/dyes_red.json | 6 + .../data/minecraft/tags/items/dyes_white.json | 21 ++ .../minecraft/tags/items/dyes_yellow.json | 6 + .../minecraft/tags/items/music_discs.json | 17 ++ 49 files changed, 893 insertions(+), 786 deletions(-) create mode 100644 patches/minecraft/net/minecraft/item/EnumDyeColor.java.patch create mode 100644 patches/minecraft/net/minecraft/item/crafting/BannerAddPatternRecipe.java.patch create mode 100644 patches/minecraft/net/minecraft/item/crafting/BannerDuplicateRecipe.java.patch create mode 100644 patches/minecraft/net/minecraft/item/crafting/FireworkRocketRecipe.java.patch create mode 100644 patches/minecraft/net/minecraft/item/crafting/FireworkStarFadeRecipe.java.patch create mode 100644 patches/minecraft/net/minecraft/item/crafting/FireworkStarRecipe.java.patch create mode 100644 patches/minecraft/net/minecraft/item/crafting/FurnaceRecipe.java.patch delete mode 100644 patches/minecraft/net/minecraft/item/crafting/IRecipeHidden.java.patch create mode 100644 patches/minecraft/net/minecraft/item/crafting/Ingredient.java.patch create mode 100644 patches/minecraft/net/minecraft/item/crafting/RecipeBookCloning.java.patch create mode 100644 patches/minecraft/net/minecraft/item/crafting/RecipeRepairItem.java.patch create mode 100644 patches/minecraft/net/minecraft/item/crafting/RecipeTippedArrow.java.patch create mode 100644 patches/minecraft/net/minecraft/item/crafting/RecipesArmorDyes.java.patch create mode 100644 patches/minecraft/net/minecraft/item/crafting/RecipesMapCloning.java.patch create mode 100644 patches/minecraft/net/minecraft/item/crafting/ShapedRecipe.java.patch create mode 100644 patches/minecraft/net/minecraft/item/crafting/ShapelessRecipe.java.patch create mode 100644 patches/minecraft/net/minecraft/item/crafting/ShieldRecipes.java.patch create mode 100644 patches/minecraft/net/minecraft/item/crafting/ShulkerBoxColoringRecipe.java.patch create mode 100644 patches/minecraft/net/minecraft/tags/ItemTags.java.patch delete mode 100644 src/main/java/net/minecraftforge/oredict/DyeUtils.java delete mode 100644 src/main/java/net/minecraftforge/oredict/OreIngredient.java delete mode 100644 src/main/java/net/minecraftforge/oredict/ShapedOreRecipe.java delete mode 100644 src/main/java/net/minecraftforge/oredict/ShapelessOreRecipe.java create mode 100644 src/main/resources/data/minecraft/tags/items/dyes.json create mode 100644 src/main/resources/data/minecraft/tags/items/dyes_black.json create mode 100644 src/main/resources/data/minecraft/tags/items/dyes_blue.json create mode 100644 src/main/resources/data/minecraft/tags/items/dyes_brown.json create mode 100644 src/main/resources/data/minecraft/tags/items/dyes_cyan.json create mode 100644 src/main/resources/data/minecraft/tags/items/dyes_gray.json create mode 100644 src/main/resources/data/minecraft/tags/items/dyes_green.json create mode 100644 src/main/resources/data/minecraft/tags/items/dyes_light_blue.json create mode 100644 src/main/resources/data/minecraft/tags/items/dyes_light_gray.json create mode 100644 src/main/resources/data/minecraft/tags/items/dyes_lime.json create mode 100644 src/main/resources/data/minecraft/tags/items/dyes_magenta.json create mode 100644 src/main/resources/data/minecraft/tags/items/dyes_orange.json create mode 100644 src/main/resources/data/minecraft/tags/items/dyes_pink.json create mode 100644 src/main/resources/data/minecraft/tags/items/dyes_purple.json create mode 100644 src/main/resources/data/minecraft/tags/items/dyes_red.json create mode 100644 src/main/resources/data/minecraft/tags/items/dyes_white.json create mode 100644 src/main/resources/data/minecraft/tags/items/dyes_yellow.json create mode 100644 src/main/resources/data/minecraft/tags/items/music_discs.json diff --git a/patches/minecraft/net/minecraft/item/EnumDyeColor.java.patch b/patches/minecraft/net/minecraft/item/EnumDyeColor.java.patch new file mode 100644 index 0000000000..cc8ac5b6aa --- /dev/null +++ b/patches/minecraft/net/minecraft/item/EnumDyeColor.java.patch @@ -0,0 +1,40 @@ +--- a/net/minecraft/item/EnumDyeColor.java ++++ b/net/minecraft/item/EnumDyeColor.java +@@ -44,6 +44,7 @@ + private final int field_196066_w; + private final float[] colorComponentValues; + private final int field_196067_y; ++ private final net.minecraft.tags.Tag tag; + + private EnumDyeColor(int p_i47810_3_, String p_i47810_4_, int p_i47810_5_, MapColor p_i47810_6_, int p_i47810_7_) { + this.field_196064_s = p_i47810_3_; +@@ -56,6 +57,7 @@ + this.field_196066_w = k << 16 | j << 8 | i << 0; + this.colorComponentValues = new float[]{(float)i / 255.0F, (float)j / 255.0F, (float)k / 255.0F}; + this.field_196067_y = p_i47810_7_; ++ this.tag = new net.minecraft.tags.ItemTags.Wrapper(new net.minecraft.util.ResourceLocation("minecraft", "dyes_" + p_i47810_4_)); + } + + public int func_196059_a() { +@@ -114,4 +116,21 @@ + public String getName() { + return this.translationKey; + } ++ ++ public net.minecraft.tags.Tag getTag() { ++ return tag; ++ } ++ ++ @Nullable ++ public static EnumDyeColor getColor(ItemStack stack) { ++ if (stack.getItem() instanceof ItemDye) ++ return ((ItemDye)stack.getItem()).func_195962_g(); ++ ++ for (EnumDyeColor color : field_196062_q) { ++ if (stack.getItem().func_206844_a(color.getTag())) ++ return color; ++ } ++ ++ return null; ++ } + } diff --git a/patches/minecraft/net/minecraft/item/crafting/BannerAddPatternRecipe.java.patch b/patches/minecraft/net/minecraft/item/crafting/BannerAddPatternRecipe.java.patch new file mode 100644 index 0000000000..4c04da5f5f --- /dev/null +++ b/patches/minecraft/net/minecraft/item/crafting/BannerAddPatternRecipe.java.patch @@ -0,0 +1,19 @@ +--- a/net/minecraft/item/crafting/BannerAddPatternRecipe.java ++++ b/net/minecraft/item/crafting/BannerAddPatternRecipe.java +@@ -15,8 +15,6 @@ + import net.minecraft.tileentity.TileEntityBanner; + import net.minecraft.util.ResourceLocation; + import net.minecraft.world.World; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.api.distmarker.OnlyIn; + + public class BannerAddPatternRecipe extends IRecipeHidden { + public BannerAddPatternRecipe(ResourceLocation p_i48172_1_) { +@@ -167,7 +165,6 @@ + return null; + } + +- @OnlyIn(Dist.CLIENT) + public boolean canFit(int width, int height) { + return width >= 3 && height >= 3; + } diff --git a/patches/minecraft/net/minecraft/item/crafting/BannerDuplicateRecipe.java.patch b/patches/minecraft/net/minecraft/item/crafting/BannerDuplicateRecipe.java.patch new file mode 100644 index 0000000000..884dddf587 --- /dev/null +++ b/patches/minecraft/net/minecraft/item/crafting/BannerDuplicateRecipe.java.patch @@ -0,0 +1,19 @@ +--- a/net/minecraft/item/crafting/BannerDuplicateRecipe.java ++++ b/net/minecraft/item/crafting/BannerDuplicateRecipe.java +@@ -10,8 +10,6 @@ + import net.minecraft.util.NonNullList; + import net.minecraft.util.ResourceLocation; + import net.minecraft.world.World; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.api.distmarker.OnlyIn; + + public class BannerDuplicateRecipe extends IRecipeHidden { + public BannerDuplicateRecipe(ResourceLocation p_i48171_1_) { +@@ -94,7 +92,6 @@ + return RecipeSerializers.field_199586_l; + } + +- @OnlyIn(Dist.CLIENT) + public boolean canFit(int width, int height) { + return width * height >= 2; + } diff --git a/patches/minecraft/net/minecraft/item/crafting/FireworkRocketRecipe.java.patch b/patches/minecraft/net/minecraft/item/crafting/FireworkRocketRecipe.java.patch new file mode 100644 index 0000000000..9c9d021ba5 --- /dev/null +++ b/patches/minecraft/net/minecraft/item/crafting/FireworkRocketRecipe.java.patch @@ -0,0 +1,19 @@ +--- a/net/minecraft/item/crafting/FireworkRocketRecipe.java ++++ b/net/minecraft/item/crafting/FireworkRocketRecipe.java +@@ -9,8 +9,6 @@ + import net.minecraft.nbt.NBTTagList; + import net.minecraft.util.ResourceLocation; + import net.minecraft.world.World; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.api.distmarker.OnlyIn; + + public class FireworkRocketRecipe extends IRecipeHidden { + private static final Ingredient field_196209_a = Ingredient.func_199804_a(Items.PAPER); +@@ -80,7 +78,6 @@ + return itemstack; + } + +- @OnlyIn(Dist.CLIENT) + public boolean canFit(int width, int height) { + return width * height >= 2; + } diff --git a/patches/minecraft/net/minecraft/item/crafting/FireworkStarFadeRecipe.java.patch b/patches/minecraft/net/minecraft/item/crafting/FireworkStarFadeRecipe.java.patch new file mode 100644 index 0000000000..ce4c13cb3d --- /dev/null +++ b/patches/minecraft/net/minecraft/item/crafting/FireworkStarFadeRecipe.java.patch @@ -0,0 +1,19 @@ +--- a/net/minecraft/item/crafting/FireworkStarFadeRecipe.java ++++ b/net/minecraft/item/crafting/FireworkStarFadeRecipe.java +@@ -10,8 +10,6 @@ + import net.minecraft.item.ItemStack; + import net.minecraft.util.ResourceLocation; + import net.minecraft.world.World; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.api.distmarker.OnlyIn; + + public class FireworkStarFadeRecipe extends IRecipeHidden { + private static final Ingredient field_196217_a = Ingredient.func_199804_a(Items.field_196153_dF); +@@ -73,7 +71,6 @@ + } + } + +- @OnlyIn(Dist.CLIENT) + public boolean canFit(int width, int height) { + return width * height >= 2; + } diff --git a/patches/minecraft/net/minecraft/item/crafting/FireworkStarRecipe.java.patch b/patches/minecraft/net/minecraft/item/crafting/FireworkStarRecipe.java.patch new file mode 100644 index 0000000000..f9a3d3f678 --- /dev/null +++ b/patches/minecraft/net/minecraft/item/crafting/FireworkStarRecipe.java.patch @@ -0,0 +1,19 @@ +--- a/net/minecraft/item/crafting/FireworkStarRecipe.java ++++ b/net/minecraft/item/crafting/FireworkStarRecipe.java +@@ -15,8 +15,6 @@ + import net.minecraft.util.ResourceLocation; + import net.minecraft.util.Util; + import net.minecraft.world.World; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.api.distmarker.OnlyIn; + + public class FireworkStarRecipe extends IRecipeHidden { + private static final Ingredient field_196212_a = Ingredient.func_199804_a(Items.FIRE_CHARGE, Items.FEATHER, Items.GOLD_NUGGET, Items.field_196182_dv, Items.field_196183_dw, Items.field_196185_dy, Items.field_196184_dx, Items.field_196151_dA, Items.field_196186_dz); +@@ -116,7 +114,6 @@ + return itemstack; + } + +- @OnlyIn(Dist.CLIENT) + public boolean canFit(int width, int height) { + return width * height >= 2; + } diff --git a/patches/minecraft/net/minecraft/item/crafting/FurnaceRecipe.java.patch b/patches/minecraft/net/minecraft/item/crafting/FurnaceRecipe.java.patch new file mode 100644 index 0000000000..ec5b0533c1 --- /dev/null +++ b/patches/minecraft/net/minecraft/item/crafting/FurnaceRecipe.java.patch @@ -0,0 +1,27 @@ +--- a/net/minecraft/item/crafting/FurnaceRecipe.java ++++ b/net/minecraft/item/crafting/FurnaceRecipe.java +@@ -10,8 +10,6 @@ + import net.minecraft.util.NonNullList; + import net.minecraft.util.ResourceLocation; + import net.minecraft.world.World; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.api.distmarker.OnlyIn; + + public class FurnaceRecipe implements IRecipe { + private final ResourceLocation field_201832_a; +@@ -38,7 +36,6 @@ + return this.field_201835_d.copy(); + } + +- @OnlyIn(Dist.CLIENT) + public boolean canFit(int width, int height) { + return true; + } +@@ -61,7 +58,6 @@ + return this.field_201835_d; + } + +- @OnlyIn(Dist.CLIENT) + public String getGroup() { + return this.field_201833_b; + } diff --git a/patches/minecraft/net/minecraft/item/crafting/IRecipe.java.patch b/patches/minecraft/net/minecraft/item/crafting/IRecipe.java.patch index 518d551c12..3def838da1 100644 --- a/patches/minecraft/net/minecraft/item/crafting/IRecipe.java.patch +++ b/patches/minecraft/net/minecraft/item/crafting/IRecipe.java.patch @@ -1,21 +1,43 @@ --- a/net/minecraft/item/crafting/IRecipe.java +++ b/net/minecraft/item/crafting/IRecipe.java -@@ -9,7 +9,7 @@ - import net.minecraftforge.api.distmarker.Dist; - import net.minecraftforge.api.distmarker.OnlyIn; +@@ -1,20 +1,16 @@ + package net.minecraft.item.crafting; --public interface IRecipe { -+public interface IRecipe extends net.minecraftforge.registries.IForgeRegistryEntry { + import net.minecraft.inventory.IInventory; +-import net.minecraft.item.Item; + import net.minecraft.item.ItemStack; + import net.minecraft.util.NonNullList; + import net.minecraft.util.ResourceLocation; + import net.minecraft.world.World; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.api.distmarker.OnlyIn; + + public interface IRecipe { boolean matches(IInventory inv, World worldIn); ItemStack getCraftingResult(IInventory inv); -@@ -48,4 +48,9 @@ - ResourceLocation func_199560_c(); - IRecipeSerializer func_199559_b(); -+ -+ @Override -+ default Class getRegistryType() { -+ return IRecipe.class; - } -+} +- @OnlyIn(Dist.CLIENT) + boolean canFit(int width, int height); + + ItemStack getRecipeOutput(); +@@ -23,9 +19,9 @@ + NonNullList nonnulllist = NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY); + + for(int i = 0; i < nonnulllist.size(); ++i) { +- Item item = inv.getStackInSlot(i).getItem(); ++ ItemStack item = inv.getStackInSlot(i); + if (item.hasContainerItem()) { +- nonnulllist.set(i, new ItemStack(item.getContainerItem())); ++ nonnulllist.set(i, item.getContainerItem()); + } + } + +@@ -40,7 +36,6 @@ + return false; + } + +- @OnlyIn(Dist.CLIENT) + default String getGroup() { + return ""; + } diff --git a/patches/minecraft/net/minecraft/item/crafting/IRecipeHidden.java.patch b/patches/minecraft/net/minecraft/item/crafting/IRecipeHidden.java.patch deleted file mode 100644 index b26f8939c7..0000000000 --- a/patches/minecraft/net/minecraft/item/crafting/IRecipeHidden.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/item/crafting/IRecipeHidden.java -+++ b/net/minecraft/item/crafting/IRecipeHidden.java -@@ -3,7 +3,7 @@ - import net.minecraft.item.ItemStack; - import net.minecraft.util.ResourceLocation; - --public abstract class IRecipeHidden implements IRecipe { -+public abstract class IRecipeHidden extends net.minecraftforge.registries.ForgeRegistryEntry implements IRecipe { - private final ResourceLocation field_199563_a; - - public IRecipeHidden(ResourceLocation p_i48169_1_) { diff --git a/patches/minecraft/net/minecraft/item/crafting/Ingredient.java.patch b/patches/minecraft/net/minecraft/item/crafting/Ingredient.java.patch new file mode 100644 index 0000000000..bf218d2163 --- /dev/null +++ b/patches/minecraft/net/minecraft/item/crafting/Ingredient.java.patch @@ -0,0 +1,61 @@ +--- a/net/minecraft/item/crafting/Ingredient.java ++++ b/net/minecraft/item/crafting/Ingredient.java +@@ -25,10 +25,14 @@ + import net.minecraft.util.IItemProvider; + import net.minecraft.util.JsonUtils; + import net.minecraft.util.ResourceLocation; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.api.distmarker.OnlyIn; + + public final class Ingredient implements Predicate { ++ //Because Mojang caches things... we need to invalidate them.. so... here we go.. ++ private static final java.util.Set INSTANCES = java.util.Collections.newSetFromMap(new java.util.WeakHashMap()); ++ public static void invalidateAll() { ++ INSTANCES.stream().filter(e -> e != null).forEach(i -> i.invalidate()); ++ } ++ + private static final Predicate field_209362_b = (p_209361_0_) -> { + return !p_209361_0_.func_199799_a().stream().allMatch(ItemStack::isEmpty); + }; +@@ -36,14 +40,16 @@ + private final Ingredient.IItemList[] field_199807_b; + private ItemStack[] matchingStacks; + private IntList matchingStacksPacked; ++ private final boolean isSimple; + + private Ingredient(Stream p_i49381_1_) { + this.field_199807_b = (Ingredient.IItemList[])p_i49381_1_.filter(field_209362_b).toArray((p_209360_0_) -> { + return new Ingredient.IItemList[p_209360_0_]; + }); ++ this.isSimple = !Arrays.stream(field_199807_b).anyMatch(list -> list.func_199799_a().stream().anyMatch(stack -> stack.getItem().isDamageable())); ++ Ingredient.INSTANCES.add(this); + } + +- @OnlyIn(Dist.CLIENT) + public ItemStack[] getMatchingStacks() { + this.func_199806_d(); + return this.matchingStacks; +@@ -121,6 +127,15 @@ + return this.field_199807_b.length == 0 && (this.matchingStacks == null || this.matchingStacks.length == 0) && (this.matchingStacksPacked == null || this.matchingStacksPacked.isEmpty()); + } + ++ protected void invalidate() { ++ this.matchingStacks = null; ++ this.matchingStacksPacked = null; ++ } ++ ++ public boolean isSimple() { ++ return isSimple || this == EMPTY; ++ } ++ + private static Ingredient func_209357_a(Stream p_209357_0_) { + Ingredient ingredient = new Ingredient(p_209357_0_); + return ingredient.field_199807_b.length == 0 ? EMPTY : ingredient; +@@ -132,7 +147,6 @@ + })); + } + +- @OnlyIn(Dist.CLIENT) + public static Ingredient fromStacks(ItemStack... stacks) { + return func_209357_a(Arrays.stream(stacks).map((p_209356_0_) -> { + return new Ingredient.SingleItemList(p_209356_0_); diff --git a/patches/minecraft/net/minecraft/item/crafting/RecipeBookCloning.java.patch b/patches/minecraft/net/minecraft/item/crafting/RecipeBookCloning.java.patch new file mode 100644 index 0000000000..d9d91b03dd --- /dev/null +++ b/patches/minecraft/net/minecraft/item/crafting/RecipeBookCloning.java.patch @@ -0,0 +1,30 @@ +--- a/net/minecraft/item/crafting/RecipeBookCloning.java ++++ b/net/minecraft/item/crafting/RecipeBookCloning.java +@@ -9,8 +9,6 @@ + import net.minecraft.util.NonNullList; + import net.minecraft.util.ResourceLocation; + import net.minecraft.world.World; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.api.distmarker.OnlyIn; + + public class RecipeBookCloning extends IRecipeHidden { + public RecipeBookCloning(ResourceLocation p_i48170_1_) { +@@ -86,8 +84,8 @@ + + for(int i = 0; i < nonnulllist.size(); ++i) { + ItemStack itemstack = inv.getStackInSlot(i); +- if (itemstack.getItem().hasContainerItem()) { +- nonnulllist.set(i, new ItemStack(itemstack.getItem().getContainerItem())); ++ if (itemstack.hasContainerItem()) { ++ nonnulllist.set(i, itemstack.getContainerItem()); + } else if (itemstack.getItem() instanceof ItemWrittenBook) { + ItemStack itemstack1 = itemstack.copy(); + itemstack1.setCount(1); +@@ -103,7 +101,6 @@ + return RecipeSerializers.field_199578_d; + } + +- @OnlyIn(Dist.CLIENT) + public boolean canFit(int width, int height) { + return width >= 3 && height >= 3; + } diff --git a/patches/minecraft/net/minecraft/item/crafting/RecipeRepairItem.java.patch b/patches/minecraft/net/minecraft/item/crafting/RecipeRepairItem.java.patch new file mode 100644 index 0000000000..32b44ec440 --- /dev/null +++ b/patches/minecraft/net/minecraft/item/crafting/RecipeRepairItem.java.patch @@ -0,0 +1,39 @@ +--- a/net/minecraft/item/crafting/RecipeRepairItem.java ++++ b/net/minecraft/item/crafting/RecipeRepairItem.java +@@ -4,12 +4,9 @@ + import java.util.List; + import net.minecraft.inventory.IInventory; + import net.minecraft.inventory.InventoryCrafting; +-import net.minecraft.item.Item; + import net.minecraft.item.ItemStack; + import net.minecraft.util.ResourceLocation; + import net.minecraft.world.World; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.api.distmarker.OnlyIn; + + public class RecipeRepairItem extends IRecipeHidden { + public RecipeRepairItem(ResourceLocation p_i48163_1_) { +@@ -59,11 +56,10 @@ + ItemStack itemstack3 = list.get(0); + ItemStack itemstack4 = list.get(1); + if (itemstack3.getItem() == itemstack4.getItem() && itemstack3.getCount() == 1 && itemstack4.getCount() == 1 && itemstack3.getItem().isDamageable()) { +- Item item = itemstack3.getItem(); +- int j = item.getMaxDamage() - itemstack3.getItemDamage(); +- int k = item.getMaxDamage() - itemstack4.getItemDamage(); +- int l = j + k + item.getMaxDamage() * 5 / 100; +- int i1 = item.getMaxDamage() - l; ++ int j = itemstack3.getMaxDamage() - itemstack3.getItemDamage(); ++ int k = itemstack3.getMaxDamage() - itemstack4.getItemDamage(); ++ int l = j + k + itemstack3.getMaxDamage() * 5 / 100; ++ int i1 = itemstack3.getMaxDamage() - l; + if (i1 < 0) { + i1 = 0; + } +@@ -77,7 +73,6 @@ + return ItemStack.EMPTY; + } + +- @OnlyIn(Dist.CLIENT) + public boolean canFit(int width, int height) { + return width * height >= 2; + } diff --git a/patches/minecraft/net/minecraft/item/crafting/RecipeTippedArrow.java.patch b/patches/minecraft/net/minecraft/item/crafting/RecipeTippedArrow.java.patch new file mode 100644 index 0000000000..9514153cff --- /dev/null +++ b/patches/minecraft/net/minecraft/item/crafting/RecipeTippedArrow.java.patch @@ -0,0 +1,19 @@ +--- a/net/minecraft/item/crafting/RecipeTippedArrow.java ++++ b/net/minecraft/item/crafting/RecipeTippedArrow.java +@@ -7,8 +7,6 @@ + import net.minecraft.potion.PotionUtils; + import net.minecraft.util.ResourceLocation; + import net.minecraft.world.World; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.api.distmarker.OnlyIn; + + public class RecipeTippedArrow extends IRecipeHidden { + public RecipeTippedArrow(ResourceLocation p_i48184_1_) { +@@ -53,7 +51,6 @@ + } + } + +- @OnlyIn(Dist.CLIENT) + public boolean canFit(int width, int height) { + return width >= 2 && height >= 2; + } diff --git a/patches/minecraft/net/minecraft/item/crafting/RecipesArmorDyes.java.patch b/patches/minecraft/net/minecraft/item/crafting/RecipesArmorDyes.java.patch new file mode 100644 index 0000000000..697877a9b9 --- /dev/null +++ b/patches/minecraft/net/minecraft/item/crafting/RecipesArmorDyes.java.patch @@ -0,0 +1,43 @@ +--- a/net/minecraft/item/crafting/RecipesArmorDyes.java ++++ b/net/minecraft/item/crafting/RecipesArmorDyes.java +@@ -10,8 +10,6 @@ + import net.minecraft.item.ItemStack; + import net.minecraft.util.ResourceLocation; + import net.minecraft.world.World; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.api.distmarker.OnlyIn; + + public class RecipesArmorDyes extends IRecipeHidden { + public RecipesArmorDyes(ResourceLocation p_i48173_1_) { +@@ -35,7 +33,7 @@ + + itemstack = itemstack1; + } else { +- if (!(itemstack1.getItem() instanceof ItemDye)) { ++ if (!itemstack1.getItem().func_206844_a(net.minecraft.tags.ItemTags.DYES)) { + return false; + } + +@@ -79,11 +77,12 @@ + ++j; + } + } else { +- if (!(item instanceof ItemDye)) { ++ net.minecraft.item.EnumDyeColor color = net.minecraft.item.EnumDyeColor.getColor(itemstack1); ++ if (color == null) { + return ItemStack.EMPTY; + } + +- float[] afloat = ((ItemDye)item).func_195962_g().getColorComponentValues(); ++ float[] afloat = color.getColorComponentValues(); + int l1 = (int)(afloat[0] * 255.0F); + int i2 = (int)(afloat[1] * 255.0F); + int k2 = (int)(afloat[2] * 255.0F); +@@ -114,7 +113,6 @@ + } + } + +- @OnlyIn(Dist.CLIENT) + public boolean canFit(int width, int height) { + return width * height >= 2; + } diff --git a/patches/minecraft/net/minecraft/item/crafting/RecipesMapCloning.java.patch b/patches/minecraft/net/minecraft/item/crafting/RecipesMapCloning.java.patch new file mode 100644 index 0000000000..d9c74494e4 --- /dev/null +++ b/patches/minecraft/net/minecraft/item/crafting/RecipesMapCloning.java.patch @@ -0,0 +1,19 @@ +--- a/net/minecraft/item/crafting/RecipesMapCloning.java ++++ b/net/minecraft/item/crafting/RecipesMapCloning.java +@@ -6,8 +6,6 @@ + import net.minecraft.item.ItemStack; + import net.minecraft.util.ResourceLocation; + import net.minecraft.world.World; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.api.distmarker.OnlyIn; + + public class RecipesMapCloning extends IRecipeHidden { + public RecipesMapCloning(ResourceLocation p_i48165_1_) { +@@ -76,7 +74,6 @@ + } + } + +- @OnlyIn(Dist.CLIENT) + public boolean canFit(int width, int height) { + return width >= 3 && height >= 3; + } diff --git a/patches/minecraft/net/minecraft/item/crafting/ShapedRecipe.java.patch b/patches/minecraft/net/minecraft/item/crafting/ShapedRecipe.java.patch new file mode 100644 index 0000000000..5ef53bfdac --- /dev/null +++ b/patches/minecraft/net/minecraft/item/crafting/ShapedRecipe.java.patch @@ -0,0 +1,62 @@ +--- a/net/minecraft/item/crafting/ShapedRecipe.java ++++ b/net/minecraft/item/crafting/ShapedRecipe.java +@@ -20,10 +20,21 @@ + import net.minecraft.util.NonNullList; + import net.minecraft.util.ResourceLocation; + import net.minecraft.world.World; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.api.distmarker.OnlyIn; + + public class ShapedRecipe implements IRecipe { ++ static int MAX_WIDTH = 3; ++ static int MAX_HEIGHT = 3; ++ /** ++ * Expand the max width and height allowed in the deserializer. ++ * This should be called by modders who add custom crafting tables that are larger than the vanilla 3x3. ++ * @param width your max recipe width ++ * @param height your max recipe height ++ */ ++ public static void setCraftingSize(int width, int height) { ++ if (MAX_WIDTH < width) MAX_WIDTH = width; ++ if (MAX_HEIGHT < height) MAX_HEIGHT = height; ++ } ++ + private final int recipeWidth; + private final int recipeHeight; + private final NonNullList recipeItems; +@@ -48,7 +59,6 @@ + return RecipeSerializers.field_199575_a; + } + +- @OnlyIn(Dist.CLIENT) + public String getGroup() { + return this.group; + } +@@ -61,7 +71,6 @@ + return this.recipeItems; + } + +- @OnlyIn(Dist.CLIENT) + public boolean canFit(int width, int height) { + return width >= this.recipeWidth && height >= this.recipeHeight; + } +@@ -202,15 +211,15 @@ + + private static String[] patternFromJson(JsonArray jsonArr) { + String[] astring = new String[jsonArr.size()]; +- if (astring.length > 3) { +- throw new JsonSyntaxException("Invalid pattern: too many rows, 3 is maximum"); ++ if (astring.length > MAX_HEIGHT) { ++ throw new JsonSyntaxException("Invalid pattern: too many rows, " + MAX_HEIGHT + " is maximum"); + } else if (astring.length == 0) { + throw new JsonSyntaxException("Invalid pattern: empty pattern not allowed"); + } else { + for(int i = 0; i < astring.length; ++i) { + String s = JsonUtils.getString(jsonArr.get(i), "pattern[" + i + "]"); +- if (s.length() > 3) { +- throw new JsonSyntaxException("Invalid pattern: too many columns, 3 is maximum"); ++ if (s.length() > MAX_WIDTH) { ++ throw new JsonSyntaxException("Invalid pattern: too many columns, " + MAX_WIDTH + " is maximum"); + } + + if (i > 0 && astring[0].length() != s.length()) { diff --git a/patches/minecraft/net/minecraft/item/crafting/ShapelessRecipe.java.patch b/patches/minecraft/net/minecraft/item/crafting/ShapelessRecipe.java.patch new file mode 100644 index 0000000000..5f1851fd28 --- /dev/null +++ b/patches/minecraft/net/minecraft/item/crafting/ShapelessRecipe.java.patch @@ -0,0 +1,77 @@ +--- a/net/minecraft/item/crafting/ShapelessRecipe.java ++++ b/net/minecraft/item/crafting/ShapelessRecipe.java +@@ -12,20 +12,20 @@ + import net.minecraft.util.NonNullList; + import net.minecraft.util.ResourceLocation; + import net.minecraft.world.World; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.api.distmarker.OnlyIn; + + public class ShapelessRecipe implements IRecipe { + private final ResourceLocation field_199562_a; + private final String group; + private final ItemStack recipeOutput; + private final NonNullList recipeItems; ++ private final boolean isSimple; + + public ShapelessRecipe(ResourceLocation p_i48161_1_, String p_i48161_2_, ItemStack p_i48161_3_, NonNullList p_i48161_4_) { + this.field_199562_a = p_i48161_1_; + this.group = p_i48161_2_; + this.recipeOutput = p_i48161_3_; + this.recipeItems = p_i48161_4_; ++ this.isSimple = p_i48161_4_.stream().allMatch(Ingredient::isSimple); + } + + public ResourceLocation func_199560_c() { +@@ -36,7 +36,6 @@ + return RecipeSerializers.field_199576_b; + } + +- @OnlyIn(Dist.CLIENT) + public String getGroup() { + return this.group; + } +@@ -54,6 +53,7 @@ + return false; + } else { + RecipeItemHelper recipeitemhelper = new RecipeItemHelper(); ++ java.util.List inputs = new java.util.ArrayList<>(); + int i = 0; + + for(int j = 0; j < inv.getHeight(); ++j) { +@@ -61,12 +61,15 @@ + ItemStack itemstack = inv.getStackInSlot(k + j * inv.getWidth()); + if (!itemstack.isEmpty()) { + ++i; ++ if (isSimple) + recipeitemhelper.accountStack(new ItemStack(itemstack.getItem())); ++ else ++ inputs.add(itemstack); + } + } + } + +- return i == this.recipeItems.size() && recipeitemhelper.canCraft(this, (IntList)null); ++ return i == this.recipeItems.size() && (isSimple ? recipeitemhelper.canCraft(this, (IntList)null) : net.minecraftforge.common.util.RecipeMatcher.findMatches(inputs, this.recipeItems) != null); + } + } + +@@ -74,7 +77,6 @@ + return this.recipeOutput.copy(); + } + +- @OnlyIn(Dist.CLIENT) + public boolean canFit(int width, int height) { + return width * height >= this.recipeItems.size(); + } +@@ -85,8 +87,8 @@ + NonNullList nonnulllist = func_199568_a(JsonUtils.getJsonArray(p_199425_2_, "ingredients")); + if (nonnulllist.isEmpty()) { + throw new JsonParseException("No ingredients for shapeless recipe"); +- } else if (nonnulllist.size() > 9) { +- throw new JsonParseException("Too many ingredients for shapeless recipe"); ++ } else if (nonnulllist.size() > ShapedRecipe.MAX_WIDTH * ShapedRecipe.MAX_HEIGHT) { ++ throw new JsonParseException("Too many ingredients for shapeless recipe the max is " + (ShapedRecipe.MAX_WIDTH * ShapedRecipe.MAX_HEIGHT)); + } else { + ItemStack itemstack = ShapedRecipe.func_199798_a(JsonUtils.getJsonObject(p_199425_2_, "result")); + return new ShapelessRecipe(p_199425_1_, s, itemstack, nonnulllist); diff --git a/patches/minecraft/net/minecraft/item/crafting/ShieldRecipes.java.patch b/patches/minecraft/net/minecraft/item/crafting/ShieldRecipes.java.patch new file mode 100644 index 0000000000..97e7193d85 --- /dev/null +++ b/patches/minecraft/net/minecraft/item/crafting/ShieldRecipes.java.patch @@ -0,0 +1,19 @@ +--- a/net/minecraft/item/crafting/ShieldRecipes.java ++++ b/net/minecraft/item/crafting/ShieldRecipes.java +@@ -8,8 +8,6 @@ + import net.minecraft.nbt.NBTTagCompound; + import net.minecraft.util.ResourceLocation; + import net.minecraft.world.World; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.api.distmarker.OnlyIn; + + public class ShieldRecipes extends IRecipeHidden { + public ShieldRecipes(ResourceLocation p_i48160_1_) { +@@ -84,7 +82,6 @@ + } + } + +- @OnlyIn(Dist.CLIENT) + public boolean canFit(int width, int height) { + return width * height >= 2; + } diff --git a/patches/minecraft/net/minecraft/item/crafting/ShulkerBoxColoringRecipe.java.patch b/patches/minecraft/net/minecraft/item/crafting/ShulkerBoxColoringRecipe.java.patch new file mode 100644 index 0000000000..58b20f27c6 --- /dev/null +++ b/patches/minecraft/net/minecraft/item/crafting/ShulkerBoxColoringRecipe.java.patch @@ -0,0 +1,55 @@ +--- a/net/minecraft/item/crafting/ShulkerBoxColoringRecipe.java ++++ b/net/minecraft/item/crafting/ShulkerBoxColoringRecipe.java +@@ -10,8 +10,6 @@ + import net.minecraft.item.ItemStack; + import net.minecraft.util.ResourceLocation; + import net.minecraft.world.World; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.api.distmarker.OnlyIn; + + public class ShulkerBoxColoringRecipe extends IRecipeHidden { + public ShulkerBoxColoringRecipe(ResourceLocation p_i48159_1_) { +@@ -31,7 +29,7 @@ + if (Block.getBlockFromItem(itemstack.getItem()) instanceof BlockShulkerBox) { + ++i; + } else { +- if (!(itemstack.getItem() instanceof ItemDye)) { ++ if (!itemstack.getItem().func_206844_a(net.minecraft.tags.ItemTags.DYES)) { + return false; + } + +@@ -50,7 +48,7 @@ + + public ItemStack getCraftingResult(IInventory inv) { + ItemStack itemstack = ItemStack.EMPTY; +- ItemDye itemdye = (ItemDye)Items.field_196106_bc; ++ net.minecraft.item.EnumDyeColor color = net.minecraft.item.EnumDyeColor.WHITE; + + for(int i = 0; i < inv.getSizeInventory(); ++i) { + ItemStack itemstack1 = inv.getStackInSlot(i); +@@ -58,13 +56,14 @@ + Item item = itemstack1.getItem(); + if (Block.getBlockFromItem(item) instanceof BlockShulkerBox) { + itemstack = itemstack1; +- } else if (item instanceof ItemDye) { +- itemdye = (ItemDye)item; ++ } else { ++ net.minecraft.item.EnumDyeColor tmp = net.minecraft.item.EnumDyeColor.getColor(itemstack1); ++ if (tmp != null) color = tmp; + } + } + } + +- ItemStack itemstack2 = BlockShulkerBox.getColoredItemStack(itemdye.func_195962_g()); ++ ItemStack itemstack2 = BlockShulkerBox.getColoredItemStack(color); + if (itemstack.hasTagCompound()) { + itemstack2.setTagCompound(itemstack.getTagCompound().copy()); + } +@@ -72,7 +71,6 @@ + return itemstack2; + } + +- @OnlyIn(Dist.CLIENT) + public boolean canFit(int width, int height) { + return width * height >= 2; + } 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..2d0ceb18c2 --- /dev/null +++ b/patches/minecraft/net/minecraft/tags/ItemTags.java.patch @@ -0,0 +1,27 @@ +--- a/net/minecraft/tags/ItemTags.java ++++ b/net/minecraft/tags/ItemTags.java +@@ -41,6 +41,24 @@ + public static final Tag field_212187_B = func_199901_a("trapdoors"); + public static final Tag field_202902_o = func_199901_a("boats"); + public static final Tag field_206964_G = func_199901_a("fishes"); ++ public static final Tag DYES = func_199901_a("dyes"); ++ public static final Tag DYES_BLACK = func_199901_a("dyes_black"); ++ public static final Tag DYES_RED = func_199901_a("dyes_red"); ++ public static final Tag DYES_GREEN = func_199901_a("dyes_green"); ++ public static final Tag DYES_BROWN = func_199901_a("dyes_brown"); ++ public static final Tag DYES_BLUE = func_199901_a("dyes_blue"); ++ public static final Tag DYES_PURPLE = func_199901_a("dyes_purple"); ++ public static final Tag DYES_CYAN = func_199901_a("dyes_cyan"); ++ public static final Tag DYES_LIGHT_GRAY = func_199901_a("dyes_light_gray"); ++ public static final Tag DYES_GRAY = func_199901_a("dyes_gray"); ++ public static final Tag DYES_PINK = func_199901_a("dyes_pink"); ++ public static final Tag DYES_LIME = func_199901_a("dyes_lime"); ++ public static final Tag DYES_YELLOW = func_199901_a("dyes_yellow"); ++ public static final Tag DYES_LIGHT_BLUE = func_199901_a("dyes_light_blue"); ++ public static final Tag DYES_MAGENTA = func_199901_a("dyes_magenta"); ++ public static final Tag DYES_ORANGE = func_199901_a("dyes_orange"); ++ public static final Tag DYES_WHITE = func_199901_a("dyes_white"); ++ public static final Tag MUSIC_DISCS = func_199901_a("music_discs"); + + public static void func_199902_a(TagCollection p_199902_0_) { + field_199906_c = p_199902_0_; diff --git a/src/main/java/net/minecraftforge/common/EnumPlantType.java b/src/main/java/net/minecraftforge/common/EnumPlantType.java index 97108a2e9d..83503d2441 100644 --- a/src/main/java/net/minecraftforge/common/EnumPlantType.java +++ b/src/main/java/net/minecraftforge/common/EnumPlantType.java @@ -22,8 +22,7 @@ package net.minecraftforge.common; import net.minecraft.block.state.IBlockState; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraftforge.common.util.EnumHelper; +import net.minecraft.world.IWorldReader; public enum EnumPlantType { @@ -38,22 +37,15 @@ public enum EnumPlantType /** * Getting a custom {@link EnumPlantType}, or an existing one if it has the same name as that one. Your plant should implement {@link IPlantable} * and return this custom type in {@link IPlantable#getPlantType(IBlockAccess, BlockPos)}. - * - *

If your new plant grows on blocks like any one of them above, never create a new {@link EnumPlantType}. - * This enumeration is only functioning in - * {@link net.minecraft.block.Block#canSustainPlant(IBlockState, IBlockAccess, BlockPos, EnumFacing, IPlantable)}, + * + *

If your new plant grows on blocks like any one of them above, never create a new {@link EnumPlantType}. + * This enumeration is only functioning in + * {@link net.minecraft.block.Block#canSustainPlant(IBlockState, IWorldReader, BlockPos, EnumFacing, IPlantable)}, * which you are supposed to override this function in your new block and create a new plant type to grow on that block. - * + * *

You can create an instance of your plant type in your API and let your/others mods access it. It will be faster than calling this method. * @param name the name of the type of plant, you had better follow the style above * @return the acquired {@link EnumPlantType}, a new one if not found. */ - public static EnumPlantType getPlantType(String name) - { - for (EnumPlantType t : values()) - { - if (t.name().equalsIgnoreCase(name)) return t; - } - return EnumHelper.addEnum(EnumPlantType.class, name, new Class[0], new Object[0]); - } + public static EnumPlantType create(String name, int test, long bar, String foo){ return null; } } diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index af6e4371e2..a3efc1e85f 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -91,6 +91,8 @@ import net.minecraft.network.play.server.SPacketRecipeBook.State; import net.minecraft.potion.PotionType; import net.minecraft.potion.PotionUtils; import net.minecraft.stats.StatList; +import net.minecraft.tags.ItemTags; +import net.minecraft.tags.Tag; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityNote; import net.minecraft.util.DamageSource; @@ -870,9 +872,9 @@ public class ForgeHooks public static EnumActionResult onPlaceItemIntoWorld(@Nonnull ItemUseContext context) { - ItemStack itemstack = context.func_195996_i(); - World world = context.func_195991_k(); - + ItemStack itemstack = context.func_195996_i(); + World world = context.func_195991_k(); + // handle all placement events here int meta = itemstack.getItemDamage(); int size = itemstack.getCount(); @@ -912,10 +914,10 @@ public class ForgeHooks { itemstack.setTagCompound(nbt); } - + EntityPlayer player = context.func_195999_j(); EnumFacing side = context.func_196000_l(); - + if (blockSnapshots.size() > 1) { placeEvent = ForgeEventFactory.onPlayerMultiBlockPlace(player, blockSnapshots, side, hand); @@ -997,23 +999,6 @@ public class ForgeHooks return true; } - /** - * Default implementation of IRecipe.func_179532_b {getRemainingItems} because - * this is just copy pasted over a lot of recipes. - * - * @param inv Crafting inventory - * @return Crafting inventory contents after the recipe. - */ - public static NonNullList defaultRecipeGetRemainingItems(InventoryCrafting inv) - { - NonNullList ret = NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY); - for (int i = 0; i < ret.size(); i++) - { - ret.set(i, getContainerItem(inv.getStackInSlot(i))); - } - return ret; - } - private static ThreadLocal craftingPlayer = new ThreadLocal(); public static void setCraftingPlayer(EntityPlayer player) { @@ -1209,7 +1194,7 @@ public class ForgeHooks { this.name = name; this.custom = custom; - this.vanilla = "minecraft".equals(this.name.getResourceDomain()); + this.vanilla = "minecraft".equals(this.name.getNamespace()); } private void resetPoolCtx() @@ -1422,7 +1407,7 @@ public class ForgeHooks { Item item = itemStack.getItem(); ResourceLocation registryName = item.getRegistryName(); - String modId = registryName == null ? null : registryName.getResourceDomain(); + String modId = registryName == null ? null : registryName.getNamespace(); if ("minecraft".equals(modId)) { if (item instanceof ItemEnchantedBook) @@ -1437,7 +1422,7 @@ public class ForgeHooks ResourceLocation resourceLocation = ForgeRegistries.ENCHANTMENTS.getKey(enchantment); if (resourceLocation != null) { - return resourceLocation.getResourceDomain(); + return resourceLocation.getNamespace(); } } } @@ -1448,7 +1433,7 @@ public class ForgeHooks ResourceLocation resourceLocation = ForgeRegistries.POTION_TYPES.getKey(potionType); if (resourceLocation != null) { - return resourceLocation.getResourceDomain(); + return resourceLocation.getNamespace(); } } else if (item instanceof ItemMonsterPlacer) @@ -1456,7 +1441,7 @@ public class ForgeHooks ResourceLocation resourceLocation = ItemMonsterPlacer.getNamedIdFrom(itemStack); if (resourceLocation != null) { - return resourceLocation.getResourceDomain(); + return resourceLocation.getNamespace(); } } } @@ -1474,5 +1459,4 @@ public class ForgeHooks } return false; } - } diff --git a/src/main/java/net/minecraftforge/common/asm/RuntimeEnumExtender.java b/src/main/java/net/minecraftforge/common/asm/RuntimeEnumExtender.java index df442bb570..772ad6942c 100644 --- a/src/main/java/net/minecraftforge/common/asm/RuntimeEnumExtender.java +++ b/src/main/java/net/minecraftforge/common/asm/RuntimeEnumExtender.java @@ -23,6 +23,7 @@ import java.nio.file.Path; import net.minecraftforge.fml.AdvancedLogMessageAdapter; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.objectweb.asm.Label; import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import org.objectweb.asm.commons.InstructionAdapter; @@ -40,10 +41,13 @@ public class RuntimeEnumExtender implements ILaunchPluginService { private static final Logger LOGGER = LogManager.getLogger(); private final Type STRING = Type.getType(String.class); + private final Type ENUM = Type.getType(Enum.class); private final Type ARRAY_UTILS = Type.getType("Lorg/apache/commons/lang3/ArrayUtils;"); //Don't directly reference this to prevent class loading. private final String ADD_DESC = Type.getMethodDescriptor(Type.getType(Object[].class), Type.getType(Object[].class), Type.getType(Object.class)); private final Type ENUM_HELPER = Type.getType("Lnet/minecraftforge/common/util/EnumHelper;"); //Again, not direct reference to prevent class loading. private final String CLEAN_DESC = Type.getMethodDescriptor(Type.VOID_TYPE, Type.getType(Class.class)); + private final String NAME_DESC = Type.getMethodDescriptor(STRING); + private final String EQUALS_DESC = Type.getMethodDescriptor(Type.BOOLEAN_TYPE, STRING); @Override public String name() { @@ -110,30 +114,76 @@ public class RuntimeEnumExtender implements ILaunchPluginService { mtd.instructions.clear(); InstructionAdapter ins = new InstructionAdapter(mtd); - //ret = new ThisType(name, VALUES.length + 1, args..) - ins.anew(classType); - ins.dup(); - ins.load(0, STRING); - ins.getstatic(classType.getInternalName(), values.name, values.desc); - ins.arraylength(); - ins.iconst(1); - ins.add(Type.INT_TYPE); - for (int x = 1; x < args.length; x++) - ins.load(x, args[x]); - ins.invokespecial(classType.getInternalName(), "", desc, false); - ins.store(1, classType); - // VALUES = ArrayUtils.add(VALUES, ret) - ins.getstatic(classType.getInternalName(), values.name, values.desc); - ins.load(1, classType); - ins.invokestatic(ARRAY_UTILS.getInternalName(), "add", ADD_DESC, false); - ins.checkcast(Type.getType(values.desc)); - ins.putstatic(classType.getInternalName(), values.name, values.desc); - //EnumHelper.cleanEnumCache(ThisType.class) - ins.visitLdcInsn(classType); - ins.invokestatic(ENUM_HELPER.getInternalName(), "cleanEnumCache", CLEAN_DESC, false); - //return ret - ins.load(1, classType); - ins.areturn(classType); + + int vars = 0; + for (Type arg : args) + vars += arg.getSize(); + + { + vars += 1; //int x + Label for_start = new Label(); + Label for_condition = new Label(); + Label for_inc = new Label(); + + ins.iconst(0); + ins.store(vars, Type.INT_TYPE); + ins.goTo(for_condition); + //if (!VALUES[x].name().equalsIgnoreCase(name)) goto for_inc + ins.mark(for_start); + ins.getstatic(classType.getInternalName(), values.name, values.desc); + ins.load(vars, Type.INT_TYPE); + ins.aload(array); + ins.invokevirtual(ENUM.getInternalName(), "name", NAME_DESC, false); + ins.load(0, STRING); + ins.invokevirtual(STRING.getInternalName(), "equalsIgnoreCase", EQUALS_DESC, false); + ins.ifeq(for_inc); + //return VALUES[x]; + ins.getstatic(classType.getInternalName(), values.name, values.desc); + ins.load(vars, Type.INT_TYPE); + ins.aload(array); + ins.areturn(classType); + //x++ + ins.mark(for_inc); + ins.iinc(vars, 1); + //if (x < VALUES.length) goto for_start + ins.mark(for_condition); + ins.load(vars, Type.INT_TYPE); + ins.getstatic(classType.getInternalName(), values.name, values.desc); + ins.arraylength(); + ins.ificmplt(for_start); + } + + { + vars += 1; //enum ret; + //ret = new ThisType(name, VALUES.length + 1, args..) + ins.anew(classType); + ins.dup(); + ins.load(0, STRING); + ins.getstatic(classType.getInternalName(), values.name, values.desc); + ins.arraylength(); + ins.iconst(1); + ins.add(Type.INT_TYPE); + int idx = 1; + for (int x = 1; x < args.length; x++) + { + ins.load(idx, args[x]); + idx += args[x].getSize(); + } + ins.invokespecial(classType.getInternalName(), "", desc, false); + ins.store(vars, classType); + // VALUES = ArrayUtils.add(VALUES, ret) + ins.getstatic(classType.getInternalName(), values.name, values.desc); + ins.load(vars, classType); + ins.invokestatic(ARRAY_UTILS.getInternalName(), "add", ADD_DESC, false); + ins.checkcast(array); + ins.putstatic(classType.getInternalName(), values.name, values.desc); + //EnumHelper.cleanEnumCache(ThisType.class) + ins.visitLdcInsn(classType); + ins.invokestatic(ENUM_HELPER.getInternalName(), "cleanEnumCache", CLEAN_DESC, false); + //return ret + ins.load(vars, classType); + ins.areturn(classType); + } }); return classNode; } diff --git a/src/main/java/net/minecraftforge/common/util/RecipeMatcher.java b/src/main/java/net/minecraftforge/common/util/RecipeMatcher.java index bbc099d5d8..16225387d4 100644 --- a/src/main/java/net/minecraftforge/common/util/RecipeMatcher.java +++ b/src/main/java/net/minecraftforge/common/util/RecipeMatcher.java @@ -23,8 +23,7 @@ import java.util.BitSet; import java.util.LinkedList; import java.util.List; import java.util.Queue; - -import com.google.common.base.Predicate; +import java.util.function.Predicate; public class RecipeMatcher { @@ -61,7 +60,7 @@ public class RecipeMatcher if (data.get(y)) continue; - if (test.apply(inputs.get(y))) + if (test.test(inputs.get(y))) { data.set(offset + y); matched++; diff --git a/src/main/java/net/minecraftforge/oredict/DyeUtils.java b/src/main/java/net/minecraftforge/oredict/DyeUtils.java deleted file mode 100644 index b43991b6c8..0000000000 --- a/src/main/java/net/minecraftforge/oredict/DyeUtils.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Minecraft Forge - * Copyright (c) 2016-2018. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -package net.minecraftforge.oredict; - -import net.minecraft.item.EnumDyeColor; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import org.apache.commons.lang3.ArrayUtils; - -import java.util.Arrays; -import java.util.Optional; -import java.util.OptionalInt; - -/** - * Utility class for working with ore dictionary dyes. - */ -public class DyeUtils -{ -/* - private static final String[] dyeOredicts = new String[] - { - "dyeWhite", - "dyeOrange", - "dyeMagenta", - "dyeLightBlue", - "dyeYellow", - "dyeLime", - "dyePink", - "dyeGray", - "dyeLightGray", - "dyeCyan", - "dyePurple", - "dyeBlue", - "dyeBrown", - "dyeGreen", - "dyeRed", - "dyeBlack" - }; - - /** - * Check if an item stack is a dye. - * @param stack the item stack - * @return whether the stack is a dye - * / - public static boolean isDye(ItemStack stack) - { - return metaFromStack(stack).isPresent(); - } - - /** - * Get the dye metadata from the stack, which can be passed into {@link EnumDyeColor#byMetadata(int)}. - * @param stack the item stack - * @return an {@link OptionalInt} holding the dye metadata for a dye, or an empty {@link OptionalInt} otherwise - * / - public static OptionalInt metaFromStack(ItemStack stack) - { - if (stack.isEmpty()) return OptionalInt.empty(); - return Arrays.stream(OreDictionary.getOreIDs(stack)) - .mapToObj(OreDictionary::getOreName) - .mapToInt(name -> ArrayUtils.indexOf(dyeOredicts, name)) - .filter(id -> id >= 0) - .findFirst(); - } - - /** - * Similar to {@link #metaFromStack(ItemStack)}, except that it returns the raw integer (with a {@code -1} sentinel); - * this follows vanilla conventions. - * @param stack the item stack - * @return the dye metadata for a dye, or {@code -1} otherwise - * / - public static int rawMetaFromStack(ItemStack stack) - { - return metaFromStack(stack).orElse(-1); - } - - /** - * Get the dye damage from the stack, which can be passed into {@link EnumDyeColor#byDyeDamage(int)}. - * @param stack the item stack - * @return an {@link OptionalInt} holding the dye damage for a dye, or an empty {@link OptionalInt} otherwise - * / - public static OptionalInt dyeDamageFromStack(ItemStack stack) - { - final OptionalInt meta = metaFromStack(stack); - return meta.isPresent() ? OptionalInt.of(0xF - meta.getAsInt()) : OptionalInt.empty(); - } - - /** - * Similar to {@link #dyeDamageFromStack(ItemStack)}, except that it returns the raw integer (with a {@code -1} sentinel); - * this follows vanilla conventions. - * @param stack the item stack - * @return the dye damage for a dye, or {@code -1} otherwise - * / - public static int rawDyeDamageFromStack(ItemStack stack) - { - return dyeDamageFromStack(stack).orElse(-1); - } - - /** - * Get a dye's color. - * @param stack the item stack - * @return an {@link Optional} holding the dye color if present, or an empty {@link Optional} otherwise - * / - public static Optional colorFromStack(ItemStack stack) - { - final OptionalInt meta = metaFromStack(stack); - return meta.isPresent() ? Optional.of(EnumDyeColor.byMetadata(meta.getAsInt())) : Optional.empty(); - } - */ -} diff --git a/src/main/java/net/minecraftforge/oredict/OreDictionary.java b/src/main/java/net/minecraftforge/oredict/OreDictionary.java index f1fcb10037..4bb6673f2f 100644 --- a/src/main/java/net/minecraftforge/oredict/OreDictionary.java +++ b/src/main/java/net/minecraftforge/oredict/OreDictionary.java @@ -174,20 +174,6 @@ public class OreDictionary registerOre("feather", Items.FEATHER); registerOre("egg", Items.EGG); - // records - registerOre("record", Items.RECORD_13); - registerOre("record", Items.RECORD_CAT); - registerOre("record", Items.RECORD_BLOCKS); - registerOre("record", Items.RECORD_CHIRP); - registerOre("record", Items.RECORD_FAR); - registerOre("record", Items.RECORD_MALL); - registerOre("record", Items.RECORD_MELLOHI); - registerOre("record", Items.RECORD_STAL); - registerOre("record", Items.RECORD_STRAD); - registerOre("record", Items.RECORD_WARD); - registerOre("record", Items.RECORD_11); - registerOre("record", Items.RECORD_WAIT); - // blocks registerOre("dirt", Blocks.DIRT); registerOre("grass", Blocks.GRASS); diff --git a/src/main/java/net/minecraftforge/oredict/OreIngredient.java b/src/main/java/net/minecraftforge/oredict/OreIngredient.java deleted file mode 100644 index 76415bd711..0000000000 --- a/src/main/java/net/minecraftforge/oredict/OreIngredient.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Minecraft Forge - * Copyright (c) 2016-2018. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -package net.minecraftforge.oredict; -/* -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import it.unimi.dsi.fastutil.ints.IntArrayList; -import it.unimi.dsi.fastutil.ints.IntComparators; -import it.unimi.dsi.fastutil.ints.IntList; -import net.minecraft.client.util.RecipeItemHelper; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.util.NonNullList; -*/ -public class OreIngredient //extends Ingredient -{ -/* - private NonNullList ores; - private IntList itemIds = null; - private ItemStack[] array = null; - private int lastSizeA = -1, lastSizeL = -1; - - public OreIngredient(String ore) - { - super(0); - ores = OreDictionary.getOres(ore); - } - - @Override - @Nonnull - public ItemStack[] getMatchingStacks() - { - if (array == null || this.lastSizeA != ores.size()) - { - NonNullList lst = NonNullList.create(); - for (ItemStack itemstack : this.ores) - { - if (itemstack.getMetadata() == OreDictionary.WILDCARD_VALUE) - itemstack.getItem().getSubItems(CreativeTabs.SEARCH, lst); - else - lst.add(itemstack); - } - this.array = lst.toArray(new ItemStack[lst.size()]); - this.lastSizeA = ores.size(); - } - return this.array; - } - - - @Override - @Nonnull - public IntList getValidItemStacksPacked() - { - if (this.itemIds == null || this.lastSizeL != ores.size()) - { - this.itemIds = new IntArrayList(this.ores.size()); - - for (ItemStack itemstack : this.ores) - { - if (itemstack.getMetadata() == OreDictionary.WILDCARD_VALUE) - { - NonNullList lst = NonNullList.create(); - itemstack.getItem().getSubItems(CreativeTabs.SEARCH, lst); - for (ItemStack item : lst) - this.itemIds.add(RecipeItemHelper.pack(item)); - } - else - { - this.itemIds.add(RecipeItemHelper.pack(itemstack)); - } - } - - this.itemIds.sort(IntComparators.NATURAL_COMPARATOR); - this.lastSizeL = ores.size(); - } - - return this.itemIds; - } - - - @Override - public boolean apply(@Nullable ItemStack input) - { - if (input == null) - return false; - - for (ItemStack target : this.ores) - if (OreDictionary.itemMatches(target, input, false)) - return true; - - return false; - } - - @Override - protected void invalidate() - { - this.itemIds = null; - this.array = null; - } - - @Override - public boolean isSimple() - { - return true; - } - */ -} diff --git a/src/main/java/net/minecraftforge/oredict/ShapedOreRecipe.java b/src/main/java/net/minecraftforge/oredict/ShapedOreRecipe.java deleted file mode 100644 index 96d28a552c..0000000000 --- a/src/main/java/net/minecraftforge/oredict/ShapedOreRecipe.java +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Minecraft Forge - * Copyright (c) 2016-2018. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -package net.minecraftforge.oredict; - -import net.minecraft.block.Block; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.JsonUtils; -import net.minecraft.util.NonNullList; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; -import net.minecraftforge.common.ForgeHooks; -import net.minecraftforge.common.crafting.CraftingHelper; -import net.minecraftforge.common.crafting.CraftingHelper.ShapedPrimer; -import net.minecraftforge.common.crafting.IShapedRecipe; -import net.minecraftforge.registries.IForgeRegistryEntry; -import net.minecraftforge.common.crafting.JsonContext; - -import java.util.Map; -import java.util.Set; -import java.util.Map.Entry; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonSyntaxException; - -public class ShapedOreRecipe //extends IForgeRegistryEntry.Impl implements IShapedRecipe -{ -/* - @Deprecated - public static final int MAX_CRAFT_GRID_WIDTH = 3; - @Deprecated - public static final int MAX_CRAFT_GRID_HEIGHT = 3; - - @Nonnull - protected ItemStack output = ItemStack.EMPTY; - protected NonNullList input = null; - protected int width = 0; - protected int height = 0; - protected boolean mirrored = true; - protected ResourceLocation group; - - public ShapedOreRecipe(ResourceLocation group, Block result, Object... recipe){ this(group, new ItemStack(result), recipe); } - public ShapedOreRecipe(ResourceLocation group, Item result, Object... recipe){ this(group, new ItemStack(result), recipe); } - public ShapedOreRecipe(ResourceLocation group, @Nonnull ItemStack result, Object... recipe) { this(group, result, CraftingHelper.parseShaped(recipe)); } - public ShapedOreRecipe(ResourceLocation group, @Nonnull ItemStack result, ShapedPrimer primer) - { - this.group = group; - output = result.copy(); - this.width = primer.width; - this.height = primer.height; - this.input = primer.input; - this.mirrored = primer.mirrored; - } - - @Override - @Nonnull - public ItemStack getCraftingResult(@Nonnull InventoryCrafting var1){ return output.copy(); } - - @Override - @Nonnull - public ItemStack getRecipeOutput(){ return output; } - - @Override - public boolean matches(@Nonnull InventoryCrafting inv, @Nonnull World world) - { - for (int x = 0; x <= inv.getWidth() - width; x++) - { - for (int y = 0; y <= inv.getHeight() - height; ++y) - { - if (checkMatch(inv, x, y, false)) - { - return true; - } - - if (mirrored && checkMatch(inv, x, y, true)) - { - return true; - } - } - } - - return false; - } - - /** - * Based on {@link net.minecraft.item.crafting.ShapedRecipes#checkMatch(InventoryCrafting, int, int, boolean)} - * / - protected boolean checkMatch(InventoryCrafting inv, int startX, int startY, boolean mirror) - { - for (int x = 0; x < inv.getWidth(); x++) - { - for (int y = 0; y < inv.getHeight(); y++) - { - int subX = x - startX; - int subY = y - startY; - Ingredient target = Ingredient.EMPTY; - - if (subX >= 0 && subY >= 0 && subX < width && subY < height) - { - if (mirror) - { - target = input.get(width - subX - 1 + subY * width); - } - else - { - target = input.get(subX + subY * width); - } - } - - if (!target.apply(inv.getStackInRowAndColumn(x, y))) - { - return false; - } - } - } - - return true; - } - - public ShapedOreRecipe setMirrored(boolean mirror) - { - mirrored = mirror; - return this; - } - - @Override - @Nonnull - public NonNullList getIngredients() - { - return this.input; - } - - @Deprecated //Use IShapedRecipe.getRecipeWidth - public int getWidth() - { - return width; - } - - @Override - public int getRecipeWidth() - { - return this.getWidth(); - } - - @Deprecated //Use IShapedRecipe.getRecipeHeight - public int getHeight() - { - return height; - } - - @Override - public int getRecipeHeight() - { - return this.getHeight(); - } - - @Override - @Nonnull - public String getGroup() - { - return this.group == null ? "" : this.group.toString(); - } - - @Override - public boolean canFit(int p_194133_1_, int p_194133_2_) - { - return p_194133_1_ >= this.width && p_194133_2_ >= this.height; - } - - public static ShapedOreRecipe factory(JsonContext context, JsonObject json) - { - String group = JsonUtils.getString(json, "group", ""); - //if (!group.isEmpty() && group.indexOf(':') == -1) - // group = context.getModId() + ":" + group; - - Map ingMap = Maps.newHashMap(); - for (Entry entry : JsonUtils.getJsonObject(json, "key").entrySet()) - { - if (entry.getKey().length() != 1) - throw new JsonSyntaxException("Invalid key entry: '" + entry.getKey() + "' is an invalid symbol (must be 1 character only)."); - if (" ".equals(entry.getKey())) - throw new JsonSyntaxException("Invalid key entry: ' ' is a reserved symbol."); - - ingMap.put(entry.getKey().toCharArray()[0], CraftingHelper.getIngredient(entry.getValue(), context)); - } - - ingMap.put(' ', Ingredient.EMPTY); - - JsonArray patternJ = JsonUtils.getJsonArray(json, "pattern"); - - if (patternJ.size() == 0) - throw new JsonSyntaxException("Invalid pattern: empty pattern not allowed"); - - String[] pattern = new String[patternJ.size()]; - for (int x = 0; x < pattern.length; ++x) - { - String line = JsonUtils.getString(patternJ.get(x), "pattern[" + x + "]"); - if (x > 0 && pattern[0].length() != line.length()) - throw new JsonSyntaxException("Invalid pattern: each row must be the same width"); - pattern[x] = line; - } - - ShapedPrimer primer = new ShapedPrimer(); - primer.width = pattern[0].length(); - primer.height = pattern.length; - primer.mirrored = JsonUtils.getBoolean(json, "mirrored", true); - primer.input = NonNullList.withSize(primer.width * primer.height, Ingredient.EMPTY); - - Set keys = Sets.newHashSet(ingMap.keySet()); - keys.remove(' '); - - int x = 0; - for (String line : pattern) - { - for (char chr : line.toCharArray()) - { - Ingredient ing = ingMap.get(chr); - if (ing == null) - throw new JsonSyntaxException("Pattern references symbol '" + chr + "' but it's not defined in the key"); - primer.input.set(x++, ing); - keys.remove(chr); - } - } - - if (!keys.isEmpty()) - throw new JsonSyntaxException("Key defines symbols that aren't used in pattern: " + keys); - - ItemStack result = CraftingHelper.getItemStack(JsonUtils.getJsonObject(json, "result"), context); - return new ShapedOreRecipe(group.isEmpty() ? null : new ResourceLocation(group), result, primer); - } - */ -} diff --git a/src/main/java/net/minecraftforge/oredict/ShapelessOreRecipe.java b/src/main/java/net/minecraftforge/oredict/ShapelessOreRecipe.java deleted file mode 100644 index 460b17eb03..0000000000 --- a/src/main/java/net/minecraftforge/oredict/ShapelessOreRecipe.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Minecraft Forge - * Copyright (c) 2016-2018. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -package net.minecraftforge.oredict; -/* -import java.util.List; -import net.minecraft.block.Block; -import net.minecraft.client.util.RecipeItemHelper; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.JsonUtils; -import net.minecraft.util.NonNullList; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; -import net.minecraftforge.common.crafting.CraftingHelper; -import net.minecraftforge.common.crafting.JsonContext; -import net.minecraftforge.common.util.RecipeMatcher; -import net.minecraftforge.registries.IForgeRegistryEntry; - -import javax.annotation.Nonnull; - -import com.google.common.collect.Lists; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -*/ -public class ShapelessOreRecipe {} /*extends IForgeRegistryEntry.Impl implements IRecipe -{ - @Nonnull - protected ItemStack output = ItemStack.EMPTY; - protected NonNullList input = NonNullList.create(); - protected ResourceLocation group; - protected boolean isSimple = true; - - public ShapelessOreRecipe(ResourceLocation group, Block result, Object... recipe){ this(group, new ItemStack(result), recipe); } - public ShapelessOreRecipe(ResourceLocation group, Item result, Object... recipe){ this(group, new ItemStack(result), recipe); } - public ShapelessOreRecipe(ResourceLocation group, NonNullList input, @Nonnull ItemStack result) - { - this.group = group; - output = result.copy(); - this.input = input; - for (Ingredient i : input) - this.isSimple &= i.isSimple(); - } - public ShapelessOreRecipe(ResourceLocation group, @Nonnull ItemStack result, Object... recipe) - { - this.group = group; - output = result.copy(); - for (Object in : recipe) - { - Ingredient ing = CraftingHelper.getIngredient(in); - if (ing != null) - { - input.add(ing); - this.isSimple &= ing.isSimple(); - } - else - { - String ret = "Invalid shapeless ore recipe: "; - for (Object tmp : recipe) - { - ret += tmp + ", "; - } - ret += output; - throw new RuntimeException(ret); - } - } - } - - @Override - @Nonnull - public ItemStack getRecipeOutput(){ return output; } - - @Override - @Nonnull - public ItemStack getCraftingResult(@Nonnull InventoryCrafting var1){ return output.copy(); } - - @Override - public boolean matches(@Nonnull InventoryCrafting inv, @Nonnull World world) - { - int ingredientCount = 0; - RecipeItemHelper recipeItemHelper = new RecipeItemHelper(); - List items = Lists.newArrayList(); - - for (int i = 0; i < inv.getSizeInventory(); ++i) - { - ItemStack itemstack = inv.getStackInSlot(i); - if (!itemstack.isEmpty()) - { - ++ingredientCount; - if (this.isSimple) - recipeItemHelper.accountStack(itemstack, 1); - else - items.add(itemstack); - } - } - - if (ingredientCount != this.input.size()) - return false; - - if (this.isSimple) - return recipeItemHelper.canCraft(this, null); - - return RecipeMatcher.findMatches(items, this.input) != null; - } - - @Override - @Nonnull - public NonNullList getIngredients() - { - return this.input; - } - - @Override - @Nonnull - public String getGroup() - { - return this.group == null ? "" : this.group.toString(); - } - - @Override - public boolean canFit(int p_194133_1_, int p_194133_2_) - { - return p_194133_1_ * p_194133_2_ >= this.input.size(); - } - - public static ShapelessOreRecipe factory(JsonContext context, JsonObject json) - { - String group = JsonUtils.getString(json, "group", ""); - - NonNullList ings = NonNullList.create(); - for (JsonElement ele : JsonUtils.getJsonArray(json, "ingredients")) - ings.add(CraftingHelper.getIngredient(ele, context)); - - if (ings.isEmpty()) - throw new JsonParseException("No ingredients for shapeless recipe"); - - ItemStack itemstack = CraftingHelper.getItemStack(JsonUtils.getJsonObject(json, "result"), context); - return new ShapelessOreRecipe(group.isEmpty() ? null : new ResourceLocation(group), ings, itemstack); - } -} -*/ diff --git a/src/main/java/net/minecraftforge/registries/ForgeRegistries.java b/src/main/java/net/minecraftforge/registries/ForgeRegistries.java index d9f2e2295b..3dbe325b2b 100644 --- a/src/main/java/net/minecraftforge/registries/ForgeRegistries.java +++ b/src/main/java/net/minecraftforge/registries/ForgeRegistries.java @@ -54,8 +54,6 @@ public class ForgeRegistries public static final IForgeRegistry VILLAGER_PROFESSIONS = RegistryManager.ACTIVE.getRegistry(VillagerProfession.class); public static final IForgeRegistry> ENTITIES = RegistryManager.ACTIVE.getRegistry(EntityType.class); public static final IForgeRegistry> TILE_ENTITIES = RegistryManager.ACTIVE.getRegistry(TileEntityType.class); - public static final IForgeRegistry RECIPES = RegistryManager.ACTIVE.getRegistry(IRecipe.class); - /** * This function is just to make sure static inializers in other classes have run and setup their registries before we query them. */ diff --git a/src/main/java/net/minecraftforge/registries/GameData.java b/src/main/java/net/minecraftforge/registries/GameData.java index 1f231a1804..8f52a98904 100644 --- a/src/main/java/net/minecraftforge/registries/GameData.java +++ b/src/main/java/net/minecraftforge/registries/GameData.java @@ -89,7 +89,6 @@ public class GameData public static final ResourceLocation ENCHANTMENTS = new ResourceLocation("minecraft:enchantments"); public static final ResourceLocation ENTITIES = new ResourceLocation("minecraft:entities"); public static final ResourceLocation TILEENTITIES = new ResourceLocation("minecraft:tileentities"); - public static final ResourceLocation RECIPES = new ResourceLocation("minecraft:recipes"); public static final ResourceLocation PROFESSIONS = new ResourceLocation("minecraft:villagerprofessions"); private static final int MAX_BLOCK_ID = 4095; private static final int MIN_ITEM_ID = MAX_BLOCK_ID + 1; @@ -101,7 +100,6 @@ public class GameData private static final int MAX_ENCHANTMENT_ID = Short.MAX_VALUE - 1; // Short - serialized as a short in ItemStack NBTs. private static final int MAX_ENTITY_ID = Integer.MAX_VALUE >> 5; // Varint (SPacketSpawnMob) private static final int MAX_TILE_ENTITY_ID = Integer.MAX_VALUE; //Doesnt seem to be serialized anywhere, so no max. - private static final int MAX_RECIPE_ID = Integer.MAX_VALUE >> 5; // Varint CPacketRecipeInfo/SPacketRecipeBook private static final int MAX_PROFESSION_ID = 1024; //TODO: Is this serialized anywhere anymore? private static final ResourceLocation BLOCK_TO_ITEM = new ResourceLocation("minecraft:blocktoitemmap"); @@ -132,7 +130,6 @@ public class GameData makeRegistry(SOUNDEVENTS, SoundEvent.class, MAX_SOUND_ID).create(); makeRegistry(POTIONTYPES, PotionType.class, MAX_POTIONTYPE_ID, new ResourceLocation("empty")).create(); makeRegistry(ENCHANTMENTS, Enchantment.class, MAX_ENCHANTMENT_ID).create(); -// makeRegistry(RECIPES, IRecipe.class, MAX_RECIPE_ID).disableSaving().allowModification().addCallback(RecipeCallbacks.INSTANCE).create(); makeRegistry(PROFESSIONS, VillagerProfession.class, MAX_PROFESSION_ID).create(); // TODO do we need the callback and the static field anymore? makeRegistry(ENTITIES, EntityType.class, MAX_ENTITY_ID).create(); diff --git a/src/main/resources/data/minecraft/tags/items/dyes.json b/src/main/resources/data/minecraft/tags/items/dyes.json new file mode 100644 index 0000000000..785a3200fa --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/dyes.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "minecraft:ink_sack", + "minecraft:rose_red", + "minecraft:cactus_green", + "minecraft:cocoa_beans", + "minecraft:lapis_lazuli", + "minecraft:purple_dye", + "minecraft:cyan_dye", + "minecraft:light_gray_dye", + "minecraft:gray_dye", + "minecraft:pink_dye", + "minecraft:lime_dye", + "minecraft:dandelion_yellow", + "minecraft:light_blue_dye", + "minecraft:magenta_dye", + "minecraft:orange_dye", + "minecraft:bone_meal" + ] +} diff --git a/src/main/resources/data/minecraft/tags/items/dyes_black.json b/src/main/resources/data/minecraft/tags/items/dyes_black.json new file mode 100644 index 0000000000..3c014ad06a --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/dyes_black.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:ink_sack" + ] +} diff --git a/src/main/resources/data/minecraft/tags/items/dyes_blue.json b/src/main/resources/data/minecraft/tags/items/dyes_blue.json new file mode 100644 index 0000000000..d0146f687f --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/dyes_blue.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:lapis_lazuli" + ] +} diff --git a/src/main/resources/data/minecraft/tags/items/dyes_brown.json b/src/main/resources/data/minecraft/tags/items/dyes_brown.json new file mode 100644 index 0000000000..56ecbbd0a2 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/dyes_brown.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:cocoa_beans" + ] +} diff --git a/src/main/resources/data/minecraft/tags/items/dyes_cyan.json b/src/main/resources/data/minecraft/tags/items/dyes_cyan.json new file mode 100644 index 0000000000..06215afb91 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/dyes_cyan.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:cyan_dye" + ] +} diff --git a/src/main/resources/data/minecraft/tags/items/dyes_gray.json b/src/main/resources/data/minecraft/tags/items/dyes_gray.json new file mode 100644 index 0000000000..8c6e48e8a0 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/dyes_gray.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:gray_dye" + ] +} diff --git a/src/main/resources/data/minecraft/tags/items/dyes_green.json b/src/main/resources/data/minecraft/tags/items/dyes_green.json new file mode 100644 index 0000000000..64bd1e6859 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/dyes_green.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:cactus_green" + ] +} diff --git a/src/main/resources/data/minecraft/tags/items/dyes_light_blue.json b/src/main/resources/data/minecraft/tags/items/dyes_light_blue.json new file mode 100644 index 0000000000..b483f2ad47 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/dyes_light_blue.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:light_blue_dye" + ] +} diff --git a/src/main/resources/data/minecraft/tags/items/dyes_light_gray.json b/src/main/resources/data/minecraft/tags/items/dyes_light_gray.json new file mode 100644 index 0000000000..811c46a8a2 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/dyes_light_gray.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:light_gray_dye" + ] +} diff --git a/src/main/resources/data/minecraft/tags/items/dyes_lime.json b/src/main/resources/data/minecraft/tags/items/dyes_lime.json new file mode 100644 index 0000000000..e7916df31b --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/dyes_lime.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:lime_dye" + ] +} diff --git a/src/main/resources/data/minecraft/tags/items/dyes_magenta.json b/src/main/resources/data/minecraft/tags/items/dyes_magenta.json new file mode 100644 index 0000000000..2c7129d2e9 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/dyes_magenta.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:magenta_dye" + ] +} diff --git a/src/main/resources/data/minecraft/tags/items/dyes_orange.json b/src/main/resources/data/minecraft/tags/items/dyes_orange.json new file mode 100644 index 0000000000..390bdfc72f --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/dyes_orange.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:orange_dye" + ] +} diff --git a/src/main/resources/data/minecraft/tags/items/dyes_pink.json b/src/main/resources/data/minecraft/tags/items/dyes_pink.json new file mode 100644 index 0000000000..bc35aa765e --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/dyes_pink.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:pink_dye" + ] +} diff --git a/src/main/resources/data/minecraft/tags/items/dyes_purple.json b/src/main/resources/data/minecraft/tags/items/dyes_purple.json new file mode 100644 index 0000000000..0a95460a6f --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/dyes_purple.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:purple_dye" + ] +} diff --git a/src/main/resources/data/minecraft/tags/items/dyes_red.json b/src/main/resources/data/minecraft/tags/items/dyes_red.json new file mode 100644 index 0000000000..c20cb08948 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/dyes_red.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:rose_red" + ] +} diff --git a/src/main/resources/data/minecraft/tags/items/dyes_white.json b/src/main/resources/data/minecraft/tags/items/dyes_white.json new file mode 100644 index 0000000000..785a3200fa --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/dyes_white.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "minecraft:ink_sack", + "minecraft:rose_red", + "minecraft:cactus_green", + "minecraft:cocoa_beans", + "minecraft:lapis_lazuli", + "minecraft:purple_dye", + "minecraft:cyan_dye", + "minecraft:light_gray_dye", + "minecraft:gray_dye", + "minecraft:pink_dye", + "minecraft:lime_dye", + "minecraft:dandelion_yellow", + "minecraft:light_blue_dye", + "minecraft:magenta_dye", + "minecraft:orange_dye", + "minecraft:bone_meal" + ] +} diff --git a/src/main/resources/data/minecraft/tags/items/dyes_yellow.json b/src/main/resources/data/minecraft/tags/items/dyes_yellow.json new file mode 100644 index 0000000000..e450f871fb --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/dyes_yellow.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:dandelion_yellow" + ] +} diff --git a/src/main/resources/data/minecraft/tags/items/music_discs.json b/src/main/resources/data/minecraft/tags/items/music_discs.json new file mode 100644 index 0000000000..03bdf1c035 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/music_discs.json @@ -0,0 +1,17 @@ +{ + "replace": false, + "values": [ + "minecraft:music_disc_13", + "minecraft:music_disc_cat", + "minecraft:music_disc_blocks", + "minecraft:music_disc_chirp", + "minecraft:music_disc_far", + "minecraft:music_disc_mall", + "minecraft:music_disc_mellohi", + "minecraft:music_disc_stal", + "minecraft:music_disc_strad", + "minecraft:music_disc_ward", + "minecraft:music_disc_11", + "minecraft:music_disc_wait" + ] +}