mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-14 01:04:24 +00:00
Some registry tweaking to provde a non-complicated API modders can use.
This commit is contained in:
1 parent
08663587d4
commit
46d57dc467
16 files changed
+272
-220
No files matched your search
@@ -1,7 +1,11 @@
|
||||
--- ../src-base/minecraft/net/minecraft/block/Block.java
|
||||
+++ ../src-work/minecraft/net/minecraft/block/Block.java
|
||||
@@ -46,8 +46,9 @@
|
||||
public class Block
|
||||
@@ -43,11 +43,12 @@
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
-public class Block
|
||||
+public class Block extends net.minecraftforge.fml.common.registry.IForgeRegistryEntry.Impl<Block>
|
||||
{
|
||||
private static final ResourceLocation field_176230_a = new ResourceLocation("air");
|
||||
- public static final RegistryNamespacedDefaultedByKey<ResourceLocation, Block> field_149771_c = new RegistryNamespacedDefaultedByKey(field_176230_a);
|
||||
@@ -12,17 +16,7 @@
|
||||
public static final AxisAlignedBB field_185505_j = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
|
||||
public static final AxisAlignedBB field_185506_k = null;
|
||||
private CreativeTabs field_149772_a;
|
||||
@@ -70,6 +71,9 @@
|
||||
private IBlockState field_176228_M;
|
||||
private String field_149770_b;
|
||||
|
||||
+ public final net.minecraftforge.fml.common.registry.RegistryDelegate<Block> delegate =
|
||||
+ ((net.minecraftforge.fml.common.registry.FMLControlledNamespacedRegistry)field_149771_c).getDelegate(this, Block.class);
|
||||
+
|
||||
public static int func_149682_b(Block p_149682_0_)
|
||||
{
|
||||
return field_149771_c.func_148757_b(p_149682_0_);
|
||||
@@ -83,7 +87,8 @@
|
||||
@@ -83,7 +84,8 @@
|
||||
|
||||
public static Block func_149729_e(int p_149729_0_)
|
||||
{
|
||||
@@ -32,7 +26,7 @@
|
||||
}
|
||||
|
||||
public static IBlockState func_176220_d(int p_176220_0_)
|
||||
@@ -268,7 +273,7 @@
|
||||
@@ -268,7 +270,7 @@
|
||||
|
||||
public boolean func_176200_f(IBlockAccess p_176200_1_, BlockPos p_176200_2_)
|
||||
{
|
||||
@@ -41,7 +35,7 @@
|
||||
}
|
||||
|
||||
public Block func_149711_c(float p_149711_1_)
|
||||
@@ -305,9 +310,10 @@
|
||||
@@ -305,9 +307,10 @@
|
||||
return this.field_149789_z;
|
||||
}
|
||||
|
||||
@@ -53,7 +47,7 @@
|
||||
}
|
||||
|
||||
public AxisAlignedBB func_185496_a(IBlockState p_185496_1_, IBlockAccess p_185496_2_, BlockPos p_185496_3_)
|
||||
@@ -346,13 +352,13 @@
|
||||
@@ -346,13 +349,13 @@
|
||||
@SideOnly(Side.CLIENT)
|
||||
public int func_185484_c(IBlockState p_185484_1_, IBlockAccess p_185484_2_, BlockPos p_185484_3_)
|
||||
{
|
||||
@@ -69,7 +63,7 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -415,7 +421,7 @@
|
||||
@@ -415,7 +418,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,7 +72,7 @@
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@@ -472,6 +478,10 @@
|
||||
@@ -472,6 +475,10 @@
|
||||
|
||||
public void func_180663_b(World p_180663_1_, BlockPos p_180663_2_, IBlockState p_180663_3_)
|
||||
{
|
||||
@@ -89,7 +83,7 @@
|
||||
}
|
||||
|
||||
public int func_149745_a(Random p_149745_1_)
|
||||
@@ -486,8 +496,7 @@
|
||||
@@ -486,8 +493,7 @@
|
||||
|
||||
public float func_180647_a(IBlockState p_180647_1_, EntityPlayer p_180647_2_, World p_180647_3_, BlockPos p_180647_4_)
|
||||
{
|
||||
@@ -99,7 +93,7 @@
|
||||
}
|
||||
|
||||
public final void func_176226_b(World p_176226_1_, BlockPos p_176226_2_, IBlockState p_176226_3_, int p_176226_4_)
|
||||
@@ -497,20 +506,16 @@
|
||||
@@ -497,20 +503,16 @@
|
||||
|
||||
public void func_180653_a(World p_180653_1_, BlockPos p_180653_2_, IBlockState p_180653_3_, float p_180653_4_, int p_180653_5_)
|
||||
{
|
||||
@@ -125,7 +119,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -518,8 +523,13 @@
|
||||
@@ -518,8 +520,13 @@
|
||||
|
||||
public static void func_180635_a(World p_180635_0_, BlockPos p_180635_1_, ItemStack p_180635_2_)
|
||||
{
|
||||
@@ -140,7 +134,7 @@
|
||||
float f = 0.5F;
|
||||
double d0 = (double)(p_180635_0_.field_73012_v.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
|
||||
double d1 = (double)(p_180635_0_.field_73012_v.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
|
||||
@@ -588,7 +598,7 @@
|
||||
@@ -588,7 +595,7 @@
|
||||
|
||||
public boolean func_176196_c(World p_176196_1_, BlockPos p_176196_2_)
|
||||
{
|
||||
@@ -149,7 +143,7 @@
|
||||
}
|
||||
|
||||
public boolean func_180639_a(World p_180639_1_, BlockPos p_180639_2_, IBlockState p_180639_3_, EntityPlayer p_180639_4_, EnumHand p_180639_5_, ItemStack p_180639_6_, EnumFacing p_180639_7_, float p_180639_8_, float p_180639_9_, float p_180639_10_)
|
||||
@@ -638,25 +648,35 @@
|
||||
@@ -638,25 +645,35 @@
|
||||
p_180657_2_.func_71029_a(StatList.func_188055_a(this));
|
||||
p_180657_2_.func_71020_j(0.025F);
|
||||
|
||||
@@ -188,7 +182,7 @@
|
||||
}
|
||||
|
||||
protected ItemStack func_180643_i(IBlockState p_180643_1_)
|
||||
@@ -747,6 +767,7 @@
|
||||
@@ -747,6 +764,7 @@
|
||||
p_176216_2_.field_70181_x = 0.0D;
|
||||
}
|
||||
|
||||
@@ -196,7 +190,7 @@
|
||||
public ItemStack func_185473_a(World p_185473_1_, BlockPos p_185473_2_, IBlockState p_185473_3_)
|
||||
{
|
||||
return new ItemStack(Item.func_150898_a(this), 1, this.func_180651_a(p_185473_3_));
|
||||
@@ -844,6 +865,1167 @@
|
||||
@@ -844,6 +862,1119 @@
|
||||
return "Block{" + field_149771_c.func_177774_c(this) + "}";
|
||||
}
|
||||
|
||||
@@ -1311,54 +1305,6 @@
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ private ResourceLocation registryName = null;
|
||||
+ /**
|
||||
+ * Sets a unique name for this Block. This should be used for uniquely identify the instance of the Block.
|
||||
+ * This is the valid replacement for the atrocious 'getUnlocalizedName().substring(6)' stuff that everyone does.
|
||||
+ * Unlocalized names have NOTHING to do with unique identifiers. As demonstrated by vanilla blocks and items.
|
||||
+ *
|
||||
+ * The supplied name will be prefixed with the currently active mod's modId.
|
||||
+ * If the supplied name already has a prefix that is different, it will be used and a warning will be logged.
|
||||
+ *
|
||||
+ * If a name already exists, or this Block is already registered in a registry, then an IllegalStateException is thrown.
|
||||
+ *
|
||||
+ * Returns 'this' to allow for chaining.
|
||||
+ *
|
||||
+ * @param name Unique registry name
|
||||
+ * @return This instance
|
||||
+ */
|
||||
+ public final Block setRegistryName(String name)
|
||||
+ {
|
||||
+ if (getRegistryName() != null)
|
||||
+ throw new IllegalStateException("Attempted to set registry name on block with exisiting registry name! New: " + name + " Old: " + getRegistryName());
|
||||
+ int index = name.lastIndexOf(':');
|
||||
+ String oldPrefix = index == -1 ? "" : name.substring(0, index);
|
||||
+ name = index == -1 ? name : name.substring(index + 1);
|
||||
+ net.minecraftforge.fml.common.ModContainer mc = net.minecraftforge.fml.common.Loader.instance().activeModContainer();
|
||||
+ String prefix = mc == null ? "minecraft" : mc.getModId();
|
||||
+ if (!oldPrefix.equals(prefix) && oldPrefix.length() > 0)
|
||||
+ {
|
||||
+ net.minecraftforge.fml.common.FMLLog.bigWarning("Dangerous alternative prefix %s for name %s, invalid registry invocation/invalid name?", oldPrefix, name);
|
||||
+ prefix = oldPrefix;
|
||||
+ }
|
||||
+ this.registryName = new ResourceLocation(prefix, name);
|
||||
+ return this;
|
||||
+ }
|
||||
+ public final Block setRegistryName(ResourceLocation name){ return setRegistryName(name.toString()); }
|
||||
+ public final Block setRegistryName(String modID, String name){ return setRegistryName(modID + ":" + name); }
|
||||
+
|
||||
+ /**
|
||||
+ * A unique identifier for this block, if this block is registered in the game registry it will return that name.
|
||||
+ * Otherwise it will return the name set in setRegistryName().
|
||||
+ * If neither are valid null is returned.
|
||||
+ *
|
||||
+ * @return Unique identifier or null.
|
||||
+ */
|
||||
+ public final String getRegistryName()
|
||||
+ {
|
||||
+ if (delegate.getResourceName() != null) return delegate.getResourceName().toString();
|
||||
+ return registryName != null ? registryName.toString() : null;
|
||||
+ }
|
||||
+ /* ========================================= FORGE END ======================================*/
|
||||
+
|
||||
public static void func_149671_p()
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
--- ../src-base/minecraft/net/minecraft/item/Item.java
|
||||
+++ ../src-work/minecraft/net/minecraft/item/Item.java
|
||||
@@ -58,8 +58,8 @@
|
||||
@@ -56,10 +56,10 @@
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
public class Item
|
||||
-public class Item
|
||||
+public class Item extends net.minecraftforge.fml.common.registry.IForgeRegistryEntry.Impl<Item>
|
||||
{
|
||||
- public static final RegistryNamespaced<ResourceLocation, Item> field_150901_e = new RegistryNamespaced();
|
||||
- private static final Map<Block, Item> field_179220_a = Maps.<Block, Item>newHashMap();
|
||||
@@ -11,17 +14,7 @@
|
||||
private static final IItemPropertyGetter field_185046_b = new IItemPropertyGetter()
|
||||
{
|
||||
@SideOnly(Side.CLIENT)
|
||||
@@ -104,6 +104,9 @@
|
||||
private Item field_77700_c;
|
||||
private String field_77774_bZ;
|
||||
|
||||
+ public final net.minecraftforge.fml.common.registry.RegistryDelegate<Item> delegate =
|
||||
+ ((net.minecraftforge.fml.common.registry.FMLControlledNamespacedRegistry)field_150901_e).getDelegate(this, Item.class);
|
||||
+
|
||||
public static int func_150891_b(Item p_150891_0_)
|
||||
{
|
||||
return p_150891_0_ == null ? 0 : field_150901_e.func_148757_b(p_150891_0_);
|
||||
@@ -192,6 +195,7 @@
|
||||
@@ -192,6 +192,7 @@
|
||||
return p_77654_1_;
|
||||
}
|
||||
|
||||
@@ -29,7 +22,7 @@
|
||||
public int func_77639_j()
|
||||
{
|
||||
return this.field_77777_bU;
|
||||
@@ -312,6 +316,7 @@
|
||||
@@ -312,6 +313,7 @@
|
||||
return this.field_77700_c;
|
||||
}
|
||||
|
||||
@@ -37,7 +30,7 @@
|
||||
public boolean func_77634_r()
|
||||
{
|
||||
return this.field_77700_c != null;
|
||||
@@ -367,7 +372,7 @@
|
||||
@@ -367,7 +369,7 @@
|
||||
|
||||
public boolean func_77616_k(ItemStack p_77616_1_)
|
||||
{
|
||||
@@ -46,7 +39,7 @@
|
||||
}
|
||||
|
||||
protected RayTraceResult func_77621_a(World p_77621_1_, EntityPlayer p_77621_2_, boolean p_77621_3_)
|
||||
@@ -385,6 +390,10 @@
|
||||
@@ -385,6 +387,10 @@
|
||||
float f6 = f3 * f4;
|
||||
float f7 = f2 * f4;
|
||||
double d3 = 5.0D;
|
||||
@@ -57,7 +50,7 @@
|
||||
Vec3d vec3d1 = vec3d.func_72441_c((double)f6 * d3, (double)f5 * d3, (double)f7 * d3);
|
||||
return p_77621_1_.func_147447_a(vec3d, vec3d1, p_77621_3_, !p_77621_3_, false);
|
||||
}
|
||||
@@ -422,11 +431,606 @@
|
||||
@@ -422,11 +428,557 @@
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -575,55 +568,6 @@
|
||||
+ return !ItemStack.func_77989_b(oldStack, newStack);
|
||||
+ }
|
||||
+
|
||||
+ private ResourceLocation registryName = null;
|
||||
+ /**
|
||||
+ * Sets a unique name for this Item. This should be used for uniquely identify the instance of the Item.
|
||||
+ * This is the valid replacement for the atrocious 'getUnlocalizedName().substring(6)' stuff that everyone does.
|
||||
+ * Unlocalized names have NOTHING to do with unique identifiers. As demonstrated by vanilla blocks and items.
|
||||
+ *
|
||||
+ * The supplied name will be prefixed with the currently active mod's modId.
|
||||
+ * If the supplied name already has a prefix that is different, it will be used and a warning will be logged.
|
||||
+ *
|
||||
+ * If a name already exists, or this Item is already registered in a registry, then an IllegalStateException is thrown.
|
||||
+ *
|
||||
+ * Returns 'this' to allow for chaining.
|
||||
+ *
|
||||
+ * @param name Unique registry name
|
||||
+ * @return This instance
|
||||
+ */
|
||||
+ public final Item setRegistryName(String name)
|
||||
+ {
|
||||
+ if (getRegistryName() != null)
|
||||
+ throw new IllegalStateException("Attempted to set registry name on block with exisiting registry name! New: " + name + " Old: " + getRegistryName());
|
||||
+ int index = name.lastIndexOf(':');
|
||||
+ String oldPrefix = index == -1 ? "" : name.substring(0, index);
|
||||
+ name = index == -1 ? name : name.substring(index + 1);
|
||||
+ net.minecraftforge.fml.common.ModContainer mc = net.minecraftforge.fml.common.Loader.instance().activeModContainer();
|
||||
+ String prefix = mc == null ? "minecraft" : mc.getModId();
|
||||
+ if (!oldPrefix.equals(prefix) && oldPrefix.length() > 0)
|
||||
+ {
|
||||
+ net.minecraftforge.fml.common.FMLLog.bigWarning("Dangerous alternative prefix %s for name %s, invalid registry invocation/invalid name?", oldPrefix, name);
|
||||
+ prefix = oldPrefix;
|
||||
+ }
|
||||
+ this.registryName = new ResourceLocation(prefix, name);
|
||||
+ return this;
|
||||
+ }
|
||||
+ public final Item setRegistryName(ResourceLocation name){ return setRegistryName(name.toString()); }
|
||||
+ public final Item setRegistryName(String modID, String name){ return setRegistryName(modID + ":" + name); }
|
||||
+
|
||||
+ /**
|
||||
+ * A unique identifier for this block, if this block is registered in the game registry it will return that name.
|
||||
+ * Otherwise it will return the name set in setRegistryName().
|
||||
+ * If neither are valid null is returned.
|
||||
+ *
|
||||
+ * @return Unique identifier or null.
|
||||
+ */
|
||||
+ public final String getRegistryName()
|
||||
+ {
|
||||
+ if (delegate.getResourceName() != null) return delegate.getResourceName().toString();
|
||||
+ return registryName != null ? registryName.toString() : null;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Called from ItemStack.setItem, will hold extra data for the life of this ItemStack.
|
||||
+ * Can be retrieved from stack.getCapabilities()
|
||||
@@ -664,7 +608,7 @@
|
||||
public static void func_150900_l()
|
||||
{
|
||||
func_179214_a(Blocks.field_150348_b, (new ItemMultiTexture(Blocks.field_150348_b, Blocks.field_150348_b, new Function<ItemStack, String>()
|
||||
@@ -935,6 +1539,10 @@
|
||||
@@ -935,6 +1487,10 @@
|
||||
private final float field_78011_i;
|
||||
private final int field_78008_j;
|
||||
|
||||
@@ -675,7 +619,7 @@
|
||||
private ToolMaterial(int p_i1874_3_, int p_i1874_4_, float p_i1874_5_, float p_i1874_6_, int p_i1874_7_)
|
||||
{
|
||||
this.field_78001_f = p_i1874_3_;
|
||||
@@ -969,9 +1577,36 @@
|
||||
@@ -969,9 +1525,36 @@
|
||||
return this.field_78008_j;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
--- ../src-base/minecraft/net/minecraft/potion/Potion.java
|
||||
+++ ../src-work/minecraft/net/minecraft/potion/Potion.java
|
||||
@@ -23,7 +23,7 @@
|
||||
@@ -21,9 +21,9 @@
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
public class Potion
|
||||
-public class Potion
|
||||
+public class Potion extends net.minecraftforge.fml.common.registry.IForgeRegistryEntry.Impl<Potion>
|
||||
{
|
||||
- public static final RegistryNamespaced<ResourceLocation, Potion> field_188414_b = new RegistryNamespaced();
|
||||
+ public static final RegistryNamespaced<ResourceLocation, Potion> field_188414_b = net.minecraftforge.fml.common.registry.GameData.getPotionRegistry();
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
--- ../src-base/minecraft/net/minecraft/world/biome/BiomeGenBase.java
|
||||
+++ ../src-work/minecraft/net/minecraft/world/biome/BiomeGenBase.java
|
||||
@@ -51,7 +51,7 @@
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
-public abstract class BiomeGenBase
|
||||
+public abstract class BiomeGenBase extends net.minecraftforge.fml.common.registry.IForgeRegistryEntry.Impl<BiomeGenBase>
|
||||
{
|
||||
private static final Logger field_150586_aC = LogManager.getLogger();
|
||||
protected static final IBlockState field_185365_a = Blocks.field_150348_b.func_176223_P();
|
||||
@@ -70,7 +70,7 @@
|
||||
protected static final WorldGenTrees field_76757_N = new WorldGenTrees(false);
|
||||
protected static final WorldGenBigTree field_76758_O = new WorldGenBigTree(false);
|
||||
|
||||
@@ -192,7 +192,7 @@ public final class ModelLoader extends ModelBakery
|
||||
{
|
||||
public int compare(Block b1, Block b2)
|
||||
{
|
||||
return b1.getRegistryName().compareTo(b2.getRegistryName());
|
||||
return b1.getRegistryName().toString().compareTo(b2.getRegistryName().toString());
|
||||
}
|
||||
});
|
||||
ProgressBar blockBar = ProgressManager.push("ModelLoader: blocks", blocks.size());
|
||||
@@ -201,7 +201,7 @@ public final class ModelLoader extends ModelBakery
|
||||
|
||||
for(Block block : blocks)
|
||||
{
|
||||
blockBar.step(block.getRegistryName());
|
||||
blockBar.step(block.getRegistryName().toString());
|
||||
for(ResourceLocation location : mapper.getBlockstateLocations(block))
|
||||
{
|
||||
loadBlock(mapper, block, location);
|
||||
@@ -276,14 +276,14 @@ public final class ModelLoader extends ModelBakery
|
||||
{
|
||||
public int compare(Item i1, Item i2)
|
||||
{
|
||||
return i1.getRegistryName().compareTo(i2.getRegistryName());
|
||||
return i1.getRegistryName().toString().compareTo(i2.getRegistryName().toString());
|
||||
}
|
||||
});
|
||||
|
||||
ProgressBar itemBar = ProgressManager.push("ModelLoader: items", items.size());
|
||||
for(Item item : items)
|
||||
{
|
||||
itemBar.step(item.getRegistryName());
|
||||
itemBar.step(item.getRegistryName().toString());
|
||||
for(String s : getVariantNames(item))
|
||||
{
|
||||
ResourceLocation file = getItemLocation(s);
|
||||
@@ -901,7 +901,7 @@ public final class ModelLoader extends ModelBakery
|
||||
for(String s : getVariantNames(item))
|
||||
{
|
||||
ModelResourceLocation memory = getInventoryVariant(s);
|
||||
reverseItemMap.put(memory, item.getRegistryName());
|
||||
reverseItemMap.put(memory, item.getRegistryName().toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,7 +183,7 @@ public class BlockSnapshot implements Serializable
|
||||
|
||||
if (DEBUG)
|
||||
{
|
||||
System.out.printf("Restored BlockSnapshot with data [World: %s ][Location: %d,%d,%d ][Meta: %d ][Block: %s ][TileEntity: %s ][force: %s ][applyPhysics: %s]", world.getWorldInfo().getWorldName(), pos.getX(), pos.getY(), pos.getZ(), replaced.getBlock().getMetaFromState(replaced), replaced.getBlock().delegate.name(), te, force, applyPhysics);
|
||||
System.out.printf("Restored BlockSnapshot with data [World: %s ][Location: %d,%d,%d ][Meta: %d ][Block: %s ][TileEntity: %s ][force: %s ][applyPhysics: %s]", world.getWorldInfo().getWorldName(), pos.getX(), pos.getY(), pos.getZ(), replaced.getBlock().getMetaFromState(replaced), replaced.getBlock().delegate.name().toString(), te, force, applyPhysics);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -218,7 +218,7 @@ public class BlockSnapshot implements Serializable
|
||||
|
||||
if (DEBUG)
|
||||
{
|
||||
System.out.printf("Restored BlockSnapshot with data [World: %s ][Location: %d,%d,%d ][Meta: %d ][Block: %s ][TileEntity: %s ][force: %s ][applyPhysics: %s]", world.getWorldInfo().getWorldName(), pos.getX(), pos.getY(), pos.getZ(), replaced.getBlock().getMetaFromState(replaced), replaced.getBlock().delegate.name(), te, force, applyPhysics);
|
||||
System.out.printf("Restored BlockSnapshot with data [World: %s ][Location: %d,%d,%d ][Meta: %d ][Block: %s ][TileEntity: %s ][force: %s ][applyPhysics: %s]", world.getWorldInfo().getWorldName(), pos.getX(), pos.getY(), pos.getZ(), replaced.getBlock().getMetaFromState(replaced), replaced.getBlock().delegate.name().toString(), te, force, applyPhysics);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -295,4 +295,4 @@ public class BlockSnapshot implements Serializable
|
||||
hash = 73 * hash + (this.blockIdentifier != null ? this.blockIdentifier.hashCode() : 0);
|
||||
return hash;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -423,13 +423,7 @@ public abstract class FluidRegistry
|
||||
}
|
||||
|
||||
@Override
|
||||
public String name()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getResourceName() {
|
||||
public ResourceLocation name() {
|
||||
return new ResourceLocation(name);
|
||||
}
|
||||
|
||||
|
||||
+96
-3
@@ -8,6 +8,7 @@ import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.common.base.Joiner;
|
||||
@@ -15,6 +16,7 @@ import com.google.common.base.Throwables;
|
||||
import com.google.common.collect.BiMap;
|
||||
import com.google.common.collect.HashBiMap;
|
||||
import com.google.common.collect.Iterators;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
import net.minecraft.util.IntIdentityHashBiMap;
|
||||
@@ -28,7 +30,7 @@ import net.minecraftforge.fml.common.FMLLog;
|
||||
import net.minecraftforge.fml.common.functions.GenericIterableFactory;
|
||||
import net.minecraftforge.fml.common.registry.RegistryDelegate.Delegate;
|
||||
|
||||
public class FMLControlledNamespacedRegistry<I> extends RegistryNamespacedDefaultedByKey<ResourceLocation, I>
|
||||
public class FMLControlledNamespacedRegistry<I extends IForgeRegistryEntry> extends RegistryNamespacedDefaultedByKey<ResourceLocation, I> implements IForgeRegistry<I>
|
||||
{
|
||||
public static final boolean DEBUG = Boolean.parseBoolean(System.getProperty("fml.debugRegistryEntries", "false"));
|
||||
private final Class<I> superType;
|
||||
@@ -673,7 +675,7 @@ public class FMLControlledNamespacedRegistry<I> extends RegistryNamespacedDefaul
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T> FMLControlledNamespacedRegistry<T> asType(Class<? extends T> type)
|
||||
public <T extends IForgeRegistryEntry> FMLControlledNamespacedRegistry<T> asType(Class<? extends T> type)
|
||||
{
|
||||
return (FMLControlledNamespacedRegistry<T>)this;
|
||||
}
|
||||
@@ -766,11 +768,102 @@ public class FMLControlledNamespacedRegistry<I> extends RegistryNamespacedDefaul
|
||||
@Override
|
||||
public ResourceLocation getNameForObject(I p_177774_1_)
|
||||
{
|
||||
ResourceLocation rl = super.getNameForObject(p_177774_1_);
|
||||
ResourceLocation rl = super.getNameForObjectBypass(p_177774_1_);
|
||||
if (rl == null)
|
||||
{
|
||||
rl = activeSubstitutions.inverse().get(p_177774_1_);
|
||||
}
|
||||
return rl;
|
||||
}
|
||||
|
||||
// IForgeRegistry: Modders should only interfaces with these methods
|
||||
@Override
|
||||
public void register(I value)
|
||||
{
|
||||
ResourceLocation key = value.getRegistryName();
|
||||
if (key == null)
|
||||
{
|
||||
FMLLog.severe("Attempted to register a entry with a null name: %s", value);
|
||||
throw new NullPointerException(String.format("Attempted to register a entry with a null name: %s", value));
|
||||
}
|
||||
add(-1, key, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(ResourceLocation key)
|
||||
{
|
||||
return containsKey(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(I value)
|
||||
{
|
||||
return get(value) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public I get(ResourceLocation key)
|
||||
{
|
||||
return getObject(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation get(I value)
|
||||
{
|
||||
return getNameForObject(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<I> getValues()
|
||||
{
|
||||
return Lists.newArrayList(this.iterator());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Entry<ResourceLocation, I>> getEntries()
|
||||
{
|
||||
return Sets.newHashSet(new Iterator<Entry<ResourceLocation, I>>()
|
||||
{
|
||||
Iterator<I> itr = FMLControlledNamespacedRegistry.this.iterator();
|
||||
|
||||
@Override
|
||||
public boolean hasNext()
|
||||
{
|
||||
return itr.hasNext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Entry<ResourceLocation, I> next()
|
||||
{
|
||||
final I value = itr.next();
|
||||
final ResourceLocation key = FMLControlledNamespacedRegistry.this.get(value);
|
||||
return new Entry<ResourceLocation, I>()
|
||||
{
|
||||
@Override
|
||||
public ResourceLocation getKey()
|
||||
{
|
||||
return key;
|
||||
}
|
||||
|
||||
@Override
|
||||
public I getValue()
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public I setValue(I value)
|
||||
{
|
||||
throw new UnsupportedOperationException("Setting the value in an itterator is not allowed");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove()
|
||||
{
|
||||
throw new UnsupportedOperationException("This is a READ ONLY view of this registry.");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -221,7 +221,7 @@ public class GameData
|
||||
}
|
||||
}
|
||||
|
||||
public <T> RegistryDelegate<T> makeDelegate(T obj, Class<T> rootClass)
|
||||
public <T extends IForgeRegistryEntry<T>> RegistryDelegate<T> makeDelegate(T obj, Class<T> rootClass)
|
||||
{
|
||||
return PersistentRegistryManager.makeDelegate(obj, rootClass);
|
||||
}
|
||||
@@ -273,4 +273,4 @@ public class GameData
|
||||
// no op for the minute?
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -135,7 +135,7 @@ public class GameRegistry
|
||||
*/
|
||||
public static void registerItem(Item item)
|
||||
{
|
||||
registerItem(item, item.getRegistryName());
|
||||
registerItem(item, item.getRegistryName().toString());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -153,20 +153,6 @@ public class GameRegistry
|
||||
GameData.getMain().registerItem(item, name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the specified Item with a mod specific name : overrides the standard type based name
|
||||
*
|
||||
* @param item The item to register
|
||||
* @param name The mod-unique name to register it as - null will remove a custom name
|
||||
* @param modId deprecated, unused
|
||||
*/
|
||||
@Deprecated // See version without modID remove in 1.9
|
||||
public static Item registerItem(Item item, String name, String modId)
|
||||
{
|
||||
registerItem(item, name);
|
||||
return item;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a forced persistent substitution alias for the block or item to another block or item. This will have
|
||||
* the effect of using the substituted block or item instead of the original, where ever it is
|
||||
@@ -190,7 +176,7 @@ public class GameRegistry
|
||||
*/
|
||||
public static Block registerBlock(Block block)
|
||||
{
|
||||
return registerBlock(block, block.getRegistryName());
|
||||
return registerBlock(block, block.getRegistryName().toString());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package net.minecraftforge.fml.common.registry;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public interface IForgeRegistry<V extends IForgeRegistryEntry> extends Iterable<V>
|
||||
{
|
||||
void register(V value);
|
||||
|
||||
boolean contains(ResourceLocation key);
|
||||
boolean contains(V value);
|
||||
|
||||
V get(ResourceLocation key);
|
||||
ResourceLocation get(V value);
|
||||
|
||||
Set<ResourceLocation> getKeys();
|
||||
List<V> getValues();
|
||||
Set<Entry<ResourceLocation, V>> getEntries();
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
package net.minecraftforge.fml.common.registry;
|
||||
|
||||
import com.google.common.reflect.TypeToken;
|
||||
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.fml.common.FMLLog;
|
||||
import net.minecraftforge.fml.common.Loader;
|
||||
import net.minecraftforge.fml.common.ModContainer;
|
||||
|
||||
public interface IForgeRegistryEntry<V>
|
||||
{
|
||||
/**
|
||||
* Sets a unique name for this Item. This should be used for uniquely identify the instance of the Item.
|
||||
* This is the valid replacement for the atrocious 'getUnlocalizedName().substring(6)' stuff that everyone does.
|
||||
* Unlocalized names have NOTHING to do with unique identifiers. As demonstrated by vanilla blocks and items.
|
||||
*
|
||||
* The supplied name will be prefixed with the currently active mod's modId.
|
||||
* If the supplied name already has a prefix that is different, it will be used and a warning will be logged.
|
||||
*
|
||||
* If a name already exists, or this Item is already registered in a registry, then an IllegalStateException is thrown.
|
||||
*
|
||||
* Returns 'this' to allow for chaining.
|
||||
*
|
||||
* @param name Unique registry name
|
||||
* @return This instance
|
||||
*/
|
||||
V setRegistryName(ResourceLocation name);
|
||||
|
||||
/**
|
||||
* A unique identifier for this entry, if this entry is registered already it will return it's official registry name.
|
||||
* Otherwise it will return the name set in setRegistryName().
|
||||
* If neither are valid null is returned.
|
||||
*
|
||||
* @return Unique identifier or null.
|
||||
*/
|
||||
ResourceLocation getRegistryName();
|
||||
|
||||
// Default implementation, modders who make extra items SHOULD extend this instead of Object.
|
||||
// We have to do this until we get default implementations in Java 8.
|
||||
@SuppressWarnings({ "serial", "unchecked" })
|
||||
public static class Impl<T extends IForgeRegistryEntry<T>> implements IForgeRegistryEntry<T>
|
||||
{
|
||||
private TypeToken<T> token = new TypeToken<T>(getClass()){};
|
||||
public final RegistryDelegate<T> delegate = PersistentRegistryManager.makeDelegate((T)this, (Class<T>)token.getRawType());
|
||||
private ResourceLocation registryName = null;
|
||||
|
||||
public final T setRegistryName(String name)
|
||||
{
|
||||
if (getRegistryName() != null)
|
||||
throw new IllegalStateException("Attempted to set registry name with exisiting registry name! New: " + name + " Old: " + getRegistryName());
|
||||
|
||||
int index = name.lastIndexOf(':');
|
||||
String oldPrefix = index == -1 ? "" : name.substring(0, index);
|
||||
name = index == -1 ? name : name.substring(index + 1);
|
||||
ModContainer mc = Loader.instance().activeModContainer();
|
||||
String prefix = mc == null ? "minecraft" : mc.getModId();
|
||||
if (!oldPrefix.equals(prefix) && oldPrefix.length() > 0)
|
||||
{
|
||||
FMLLog.bigWarning("Dangerous alternative prefix %s for name %s, invalid registry invocation/invalid name?", oldPrefix, name);
|
||||
prefix = oldPrefix;
|
||||
}
|
||||
this.registryName = new ResourceLocation(prefix, name);
|
||||
return (T)this;
|
||||
}
|
||||
|
||||
//Helper functions
|
||||
public final T setRegistryName(ResourceLocation name){ return setRegistryName(name.toString()); }
|
||||
public final T setRegistryName(String modID, String name){ return setRegistryName(modID + ":" + name); }
|
||||
|
||||
public final ResourceLocation getRegistryName()
|
||||
{
|
||||
if (delegate.name() != null) return delegate.name();
|
||||
return registryName != null ? registryName : null;
|
||||
}
|
||||
}
|
||||
}
|
||||
+14
-19
@@ -48,30 +48,25 @@ public class PersistentRegistryManager
|
||||
ACTIVE, FROZEN, STAGING;
|
||||
|
||||
private final BiMap<ResourceLocation, FMLControlledNamespacedRegistry<?>> registries = HashBiMap.create();
|
||||
private final BiMap<Class<?>, ResourceLocation> registrySuperTypes = HashBiMap.create();
|
||||
private final BiMap<Class<IForgeRegistryEntry>, ResourceLocation> registrySuperTypes = HashBiMap.create();
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
<T> FMLControlledNamespacedRegistry<T> getRegistry(ResourceLocation key, Class<T> regType)
|
||||
<T extends IForgeRegistryEntry<T>> FMLControlledNamespacedRegistry<T> getRegistry(ResourceLocation key, Class<T> regType)
|
||||
{
|
||||
return (FMLControlledNamespacedRegistry<T>)registries.get(key);
|
||||
}
|
||||
|
||||
<T> FMLControlledNamespacedRegistry<T> getOrShallowCopyRegistry(ResourceLocation key, Class<T> regType, FMLControlledNamespacedRegistry<T> other)
|
||||
<T extends IForgeRegistryEntry<T>> FMLControlledNamespacedRegistry<T> getOrShallowCopyRegistry(ResourceLocation key, Class<T> regType, FMLControlledNamespacedRegistry<T> other)
|
||||
{
|
||||
if (!registries.containsKey(key))
|
||||
{
|
||||
registries.put(key, other.makeShallowCopy());
|
||||
registrySuperTypes.put(regType, key);
|
||||
//TODO: Figure out this generics... registrySuperTypes.put(regType, key);
|
||||
}
|
||||
return getRegistry(key, regType);
|
||||
}
|
||||
|
||||
private <T> FMLControlledNamespacedRegistry<T> createRegistry(ResourceLocation registryName, Class<T> registryType, ResourceLocation optionalDefaultKey, int minId, int maxId, boolean hasDelegates)
|
||||
{
|
||||
return this.createRegistry(registryName, registryType, optionalDefaultKey, minId, maxId, hasDelegates, null);
|
||||
}
|
||||
|
||||
private <T> FMLControlledNamespacedRegistry<T> createRegistry(ResourceLocation registryName, Class<T> type, ResourceLocation defaultObjectKey, int minId, int maxId, boolean isDelegated, FMLControlledNamespacedRegistry.AddCallback<T> addCallback)
|
||||
private <T extends IForgeRegistryEntry<T>> FMLControlledNamespacedRegistry<T> createRegistry(ResourceLocation registryName, Class<T> type, ResourceLocation defaultObjectKey, int minId, int maxId, boolean isDelegated, FMLControlledNamespacedRegistry.AddCallback<T> addCallback)
|
||||
{
|
||||
Set<Class<?>> parents = Sets.newHashSet();
|
||||
findSuperTypes(type, parents);
|
||||
@@ -84,7 +79,7 @@ public class PersistentRegistryManager
|
||||
}
|
||||
FMLControlledNamespacedRegistry<T> fmlControlledNamespacedRegistry = new FMLControlledNamespacedRegistry<T>(defaultObjectKey, maxId, minId, type, isDelegated, addCallback);
|
||||
registries.put(registryName, fmlControlledNamespacedRegistry);
|
||||
registrySuperTypes.put(type, registryName);
|
||||
//TODO: Figure out this generics... registrySuperTypes.put(type, registryName);
|
||||
return getRegistry(registryName, type);
|
||||
}
|
||||
|
||||
@@ -119,7 +114,7 @@ public class PersistentRegistryManager
|
||||
return registries.containsValue(registry);
|
||||
}
|
||||
|
||||
public <T> FMLControlledNamespacedRegistry<T> getRegistry(Class<T> rootClass)
|
||||
public <T extends IForgeRegistryEntry<T>> FMLControlledNamespacedRegistry<T> getRegistry(Class<T> rootClass)
|
||||
{
|
||||
ResourceLocation rl = registrySuperTypes.get(rootClass);
|
||||
return getRegistry(rl, rootClass);
|
||||
@@ -131,14 +126,14 @@ public class PersistentRegistryManager
|
||||
public static final ResourceLocation POTIONS = new ResourceLocation("minecraft:potions");
|
||||
public static final ResourceLocation BIOMES = new ResourceLocation("minecraft:biomes");
|
||||
|
||||
public static <T> FMLControlledNamespacedRegistry<T> createRegistry(ResourceLocation registryName, Class<T> registryType, ResourceLocation optionalDefaultKey, int maxId, int minId, boolean hasDelegates, FMLControlledNamespacedRegistry.AddCallback<T> addCallback)
|
||||
public static <T extends IForgeRegistryEntry<T>> FMLControlledNamespacedRegistry<T> createRegistry(ResourceLocation registryName, Class<T> registryType, ResourceLocation optionalDefaultKey, int maxId, int minId, boolean hasDelegates, FMLControlledNamespacedRegistry.AddCallback<T> addCallback)
|
||||
{
|
||||
return PersistentRegistry.ACTIVE.createRegistry(registryName, registryType, optionalDefaultKey, minId, maxId, hasDelegates, addCallback);
|
||||
}
|
||||
|
||||
public static <T> FMLControlledNamespacedRegistry<T> createRegistry(ResourceLocation registryName, Class<T> registryType, ResourceLocation optionalDefaultKey, int maxId, int minId, boolean hasDelegates)
|
||||
public static <T extends IForgeRegistryEntry<T>> FMLControlledNamespacedRegistry<T> createRegistry(ResourceLocation registryName, Class<T> registryType, ResourceLocation optionalDefaultKey, int maxId, int minId, boolean hasDelegates)
|
||||
{
|
||||
return PersistentRegistry.ACTIVE.createRegistry(registryName, registryType, optionalDefaultKey, minId, maxId, hasDelegates);
|
||||
return PersistentRegistry.ACTIVE.createRegistry(registryName, registryType, optionalDefaultKey, minId, maxId, hasDelegates, null);
|
||||
}
|
||||
|
||||
public static List<String> injectSnapshot(GameDataSnapshot snapshot, boolean injectFrozenData, boolean isLocalWorld)
|
||||
@@ -256,7 +251,7 @@ public class PersistentRegistryManager
|
||||
}
|
||||
}
|
||||
|
||||
private static <T> void loadRegistry(final ResourceLocation registryName, final PersistentRegistry from, final PersistentRegistry to, Class<T> regType)
|
||||
private static <T extends IForgeRegistryEntry<T>> void loadRegistry(final ResourceLocation registryName, final PersistentRegistry from, final PersistentRegistry to, Class<T> regType)
|
||||
{
|
||||
FMLControlledNamespacedRegistry<T> fromRegistry = from.getRegistry(registryName, regType);
|
||||
if (fromRegistry == null)
|
||||
@@ -292,14 +287,14 @@ public class PersistentRegistryManager
|
||||
}
|
||||
}
|
||||
|
||||
private static <T> void loadFrozenDataToStagingRegistry(Map<ResourceLocation, Map<ResourceLocation, Integer[]>> remaps, ResourceLocation registryName, Class<T> regType)
|
||||
private static <T extends IForgeRegistryEntry<T>> void loadFrozenDataToStagingRegistry(Map<ResourceLocation, Map<ResourceLocation, Integer[]>> remaps, ResourceLocation registryName, Class<T> regType)
|
||||
{
|
||||
FMLControlledNamespacedRegistry<T> frozenRegistry = PersistentRegistry.FROZEN.getRegistry(registryName, regType);
|
||||
FMLControlledNamespacedRegistry<T> newRegistry = PersistentRegistry.STAGING.getOrShallowCopyRegistry(registryName, regType, frozenRegistry);
|
||||
newRegistry.loadIds(frozenRegistry.getEntriesNotIn(newRegistry), Maps.<ResourceLocation, Integer>newLinkedHashMap(), remaps.get(registryName), frozenRegistry, registryName);
|
||||
}
|
||||
|
||||
private static <T> void loadPersistentDataToStagingRegistry(boolean injectFrozenData, Map<ResourceLocation, Map<ResourceLocation, Integer[]>> remaps, LinkedHashMap<ResourceLocation, Map<ResourceLocation, Integer>> missing, Map.Entry<ResourceLocation, GameDataSnapshot.Entry> snapEntry, Class<T> regType)
|
||||
private static <T extends IForgeRegistryEntry<T>> void loadPersistentDataToStagingRegistry(boolean injectFrozenData, Map<ResourceLocation, Map<ResourceLocation, Integer[]>> remaps, LinkedHashMap<ResourceLocation, Map<ResourceLocation, Integer>> missing, Map.Entry<ResourceLocation, GameDataSnapshot.Entry> snapEntry, Class<T> regType)
|
||||
{
|
||||
ResourceLocation registryName = snapEntry.getKey();
|
||||
|
||||
@@ -576,7 +571,7 @@ public class PersistentRegistryManager
|
||||
public final Map<ResourceLocation, Entry> entries = Maps.newHashMap();
|
||||
}
|
||||
|
||||
public static <T> RegistryDelegate<T> makeDelegate(T obj, Class<T> rootClass)
|
||||
public static <T extends IForgeRegistryEntry<T>> RegistryDelegate<T> makeDelegate(T obj, Class<T> rootClass)
|
||||
{
|
||||
return PersistentRegistry.ACTIVE.getRegistry(rootClass).getDelegate(obj, rootClass);
|
||||
}
|
||||
|
||||
@@ -23,23 +23,12 @@ public interface RegistryDelegate<T> {
|
||||
*/
|
||||
T get();
|
||||
|
||||
/**
|
||||
* Get the name of this delegate. This is completely static after registration has completed and will never change.
|
||||
*
|
||||
* Deprecated in favour of the resource location.
|
||||
*
|
||||
* @see #getResourceName()
|
||||
* @return The name
|
||||
*/
|
||||
@Deprecated
|
||||
String name();
|
||||
|
||||
/**
|
||||
* Get the unique resource location for this delegate. Completely static after registration has completed, and
|
||||
* will never change.
|
||||
* @return The name
|
||||
*/
|
||||
ResourceLocation getResourceName();
|
||||
ResourceLocation name();
|
||||
|
||||
/**
|
||||
* Get the delegate type. It will be dependent on the registry this delegate is sourced from.
|
||||
@@ -67,12 +56,7 @@ public interface RegistryDelegate<T> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String name() {
|
||||
return name.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getResourceName() { return name; }
|
||||
public ResourceLocation name() { return name; }
|
||||
|
||||
@Override
|
||||
public Class<T> type()
|
||||
|
||||
@@ -250,7 +250,7 @@ public class VillagerRegistry
|
||||
}
|
||||
}
|
||||
|
||||
public static class VillagerProfession
|
||||
public static class VillagerProfession extends IForgeRegistryEntry.Impl
|
||||
{
|
||||
private ResourceLocation name;
|
||||
private ResourceLocation texture;
|
||||
|
||||
@@ -326,7 +326,7 @@ public class OreDictionary
|
||||
// HACK: use the registry name's ID. It is unique and it knows about substitutions. Fallback to a -1 value (what Item.getIDForItem would have returned) in the case where the registry is not aware of the item yet
|
||||
// IT should be noted that -1 will fail the gate further down, if an entry already exists with value -1 for this name. This is what is broken and being warned about.
|
||||
// APPARENTLY it's quite common to do this. OreDictionary should be considered alongside Recipes - you can't make them properly until you've registered with the game.
|
||||
ResourceLocation registryName = stack.getItem().delegate.getResourceName();
|
||||
ResourceLocation registryName = stack.getItem().delegate.name();
|
||||
int id;
|
||||
if (registryName == null)
|
||||
{
|
||||
@@ -488,7 +488,7 @@ public class OreDictionary
|
||||
// HACK: use the registry name's ID. It is unique and it knows about substitutions. Fallback to a -1 value (what Item.getIDForItem would have returned) in the case where the registry is not aware of the item yet
|
||||
// IT should be noted that -1 will fail the gate further down, if an entry already exists with value -1 for this name. This is what is broken and being warned about.
|
||||
// APPARENTLY it's quite common to do this. OreDictionary should be considered alongside Recipes - you can't make them properly until you've registered with the game.
|
||||
ResourceLocation registryName = ore.getItem().delegate.getResourceName();
|
||||
ResourceLocation registryName = ore.getItem().delegate.name();
|
||||
int hash;
|
||||
if (registryName == null)
|
||||
{
|
||||
@@ -545,7 +545,7 @@ public class OreDictionary
|
||||
for (ItemStack ore : ores)
|
||||
{
|
||||
// HACK: use the registry name's ID. It is unique and it knows about substitutions
|
||||
ResourceLocation name = ore.getItem().delegate.getResourceName();
|
||||
ResourceLocation name = ore.getItem().delegate.name();
|
||||
int hash;
|
||||
if (name == null)
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user