diff --git a/conf/joined.exc b/conf/joined.exc index 8cadd49f4b..9f6f603272 100644 --- a/conf/joined.exc +++ b/conf/joined.exc @@ -1194,9 +1194,9 @@ net/minecraft/command/WrongUsageException=CL_00001192 net/minecraft/dispenser/IBlockSource=CL_00001193 net/minecraft/block/BlockSourceImpl=CL_00001194 net/minecraft/dispenser/BehaviorDefaultDispenseItem=CL_00001195 -net/minecraft/init/RegistryNamespacedDefaultedByKey=CL_00001196 +net/minecraft/util/RegistryNamespacedDefaultedByKey=CL_00001196 net/minecraft/crash/CrashReport$1=CL_00001197 -net/minecraft/dispenser/RegistryDefaulted=CL_00001198 +net/minecraft/util/RegistryDefaulted=CL_00001198 net/minecraft/dispenser/IBehaviorDispenseItem=CL_00001199 net/minecraft/dispenser/IBehaviorDispenseItem$1=CL_00001200 net/minecraft/util/EnumFacing=CL_00001201 @@ -1204,11 +1204,11 @@ net/minecraft/util/IObjectIntIterable=CL_00001202 net/minecraft/util/ObjectIntIdentityMap=CL_00001203 net/minecraft/dispenser/ILocatableSource=CL_00001204 net/minecraft/dispenser/ILocation=CL_00001205 -net/minecraft/init/RegistryNamespaced=CL_00001206 +net/minecraft/util/RegistryNamespaced=CL_00001206 net/minecraft/dispenser/IPosition=CL_00001207 net/minecraft/dispenser/PositionImpl=CL_00001208 -net/minecraft/dispenser/IRegistry=CL_00001209 -net/minecraft/dispenser/RegistrySimple=CL_00001210 +net/minecraft/util/IRegistry=CL_00001209 +net/minecraft/util/RegistrySimple=CL_00001210 net/minecraft/util/StatCollector=CL_00001211 net/minecraft/util/StringTranslate=CL_00001212 net/minecraft/nbt/NBTTagByteArray=CL_00001213 @@ -10328,8 +10328,8 @@ net/minecraft/item/crafting/IRecipe.func_77569_a(Lnet/minecraft/inventory/Invent net/minecraft/item/crafting/IRecipe.func_77570_a()I=| net/minecraft/item/crafting/IRecipe.func_77571_b()Lnet/minecraft/item/ItemStack;=| net/minecraft/item/crafting/IRecipe.func_77572_b(Lnet/minecraft/inventory/InventoryCrafting;)Lnet/minecraft/item/ItemStack;=| -net/minecraft/dispenser/IRegistry.func_82594_a(Ljava/lang/Object;)Ljava/lang/Object;=| -net/minecraft/dispenser/IRegistry.func_82595_a(Ljava/lang/Object;Ljava/lang/Object;)V=| +net/minecraft/util/IRegistry.func_82594_a(Ljava/lang/Object;)Ljava/lang/Object;=| +net/minecraft/util/IRegistry.func_82595_a(Ljava/lang/Object;Ljava/lang/Object;)V=| net/minecraft/world/storage/ISaveFormat.func_75799_b()Ljava/util/List;=net/minecraft/client/AnvilConverterException| net/minecraft/world/storage/ISaveFormat.func_75800_d()V=| net/minecraft/world/storage/ISaveFormat.func_75801_b(Ljava/lang/String;)Z=| @@ -13079,32 +13079,32 @@ net/minecraft/world/chunk/storage/RegionFileCache.func_76551_a()V=| net/minecraft/world/chunk/storage/RegionFileCache.func_76552_d(Ljava/io/File;II)Ljava/io/DataOutputStream;=|p_76552_0_,p_76552_1_,p_76552_2_ net/minecraft/world/chunk/storage/RegionFile$ChunkBuffer.(Lnet/minecraft/world/chunk/storage/RegionFile;II)V=|p_i2000_1_,p_i2000_2_,p_i2000_3_ net/minecraft/world/chunk/storage/RegionFile$ChunkBuffer.close()V=java/io/IOException| -net/minecraft/dispenser/RegistryDefaulted.(Ljava/lang/Object;)V=|p_i1366_1_ -net/minecraft/dispenser/RegistryDefaulted.func_82594_a(Ljava/lang/Object;)Ljava/lang/Object;=|p_82594_1_ -net/minecraft/init/RegistryNamespaced.()V=| -net/minecraft/init/RegistryNamespaced.func_148740_a()Ljava/util/Map;=| -net/minecraft/init/RegistryNamespaced.func_148741_d(Ljava/lang/Object;)Z=|p_148741_1_ -net/minecraft/init/RegistryNamespaced.func_148750_c(Ljava/lang/Object;)Ljava/lang/String;=|p_148750_1_ -net/minecraft/init/RegistryNamespaced.func_82594_a(Ljava/lang/String;)Ljava/lang/Object;=|p_148751_1_ -net/minecraft/init/RegistryNamespaced.func_148741_d(Ljava/lang/String;)Z=|p_148752_1_ -net/minecraft/init/RegistryNamespaced.func_148753_b(I)Z=|p_148753_1_ -net/minecraft/init/RegistryNamespaced.func_148754_a(I)Ljava/lang/Object;=|p_148754_1_ -net/minecraft/init/RegistryNamespaced.func_148755_c(Ljava/lang/String;)Ljava/lang/String;=|p_148755_0_ -net/minecraft/init/RegistryNamespaced.func_148756_a(ILjava/lang/String;Ljava/lang/Object;)V=|p_148756_1_,p_148756_2_,p_148756_3_ -net/minecraft/init/RegistryNamespaced.func_148757_b(Ljava/lang/Object;)I=|p_148757_1_ -net/minecraft/init/RegistryNamespaced.func_82594_a(Ljava/lang/Object;)Ljava/lang/Object;=|p_82594_1_ -net/minecraft/init/RegistryNamespaced.iterator()Ljava/util/Iterator;=| -net/minecraft/init/RegistryNamespacedDefaultedByKey.(Ljava/lang/String;)V=|p_i45127_1_ -net/minecraft/init/RegistryNamespacedDefaultedByKey.func_82594_a(Ljava/lang/String;)Ljava/lang/Object;=|p_148751_1_ -net/minecraft/init/RegistryNamespacedDefaultedByKey.func_148754_a(I)Ljava/lang/Object;=|p_148754_1_ -net/minecraft/init/RegistryNamespacedDefaultedByKey.func_148756_a(ILjava/lang/String;Ljava/lang/Object;)V=|p_148756_1_,p_148756_2_,p_148756_3_ -net/minecraft/init/RegistryNamespacedDefaultedByKey.func_82594_a(Ljava/lang/Object;)Ljava/lang/Object;=|p_82594_1_ -net/minecraft/dispenser/RegistrySimple.()V=| -net/minecraft/dispenser/RegistrySimple.func_148740_a()Ljava/util/Map;=| -net/minecraft/dispenser/RegistrySimple.func_148741_d(Ljava/lang/Object;)Z=|p_148741_1_ -net/minecraft/dispenser/RegistrySimple.func_148742_b()Ljava/util/Set;=| -net/minecraft/dispenser/RegistrySimple.func_82594_a(Ljava/lang/Object;)Ljava/lang/Object;=|p_82594_1_ -net/minecraft/dispenser/RegistrySimple.func_82595_a(Ljava/lang/Object;Ljava/lang/Object;)V=|p_82595_1_,p_82595_2_ +net/minecraft/util/RegistryDefaulted.(Ljava/lang/Object;)V=|p_i1366_1_ +net/minecraft/util/RegistryDefaulted.func_82594_a(Ljava/lang/Object;)Ljava/lang/Object;=|p_82594_1_ +net/minecraft/util/RegistryNamespaced.()V=| +net/minecraft/util/RegistryNamespaced.func_148740_a()Ljava/util/Map;=| +net/minecraft/util/RegistryNamespaced.func_148741_d(Ljava/lang/Object;)Z=|p_148741_1_ +net/minecraft/util/RegistryNamespaced.func_148750_c(Ljava/lang/Object;)Ljava/lang/String;=|p_148750_1_ +net/minecraft/util/RegistryNamespaced.func_82594_a(Ljava/lang/String;)Ljava/lang/Object;=|p_148751_1_ +net/minecraft/util/RegistryNamespaced.func_148741_d(Ljava/lang/String;)Z=|p_148752_1_ +net/minecraft/util/RegistryNamespaced.func_148753_b(I)Z=|p_148753_1_ +net/minecraft/util/RegistryNamespaced.func_148754_a(I)Ljava/lang/Object;=|p_148754_1_ +net/minecraft/util/RegistryNamespaced.func_148755_c(Ljava/lang/String;)Ljava/lang/String;=|p_148755_0_ +net/minecraft/util/RegistryNamespaced.func_148756_a(ILjava/lang/String;Ljava/lang/Object;)V=|p_148756_1_,p_148756_2_,p_148756_3_ +net/minecraft/util/RegistryNamespaced.func_148757_b(Ljava/lang/Object;)I=|p_148757_1_ +net/minecraft/util/RegistryNamespaced.func_82594_a(Ljava/lang/Object;)Ljava/lang/Object;=|p_82594_1_ +net/minecraft/util/RegistryNamespaced.iterator()Ljava/util/Iterator;=| +net/minecraft/util/RegistryNamespacedDefaultedByKey.(Ljava/lang/String;)V=|p_i45127_1_ +net/minecraft/util/RegistryNamespacedDefaultedByKey.func_82594_a(Ljava/lang/String;)Ljava/lang/Object;=|p_148751_1_ +net/minecraft/util/RegistryNamespacedDefaultedByKey.func_148754_a(I)Ljava/lang/Object;=|p_148754_1_ +net/minecraft/util/RegistryNamespacedDefaultedByKey.func_148756_a(ILjava/lang/String;Ljava/lang/Object;)V=|p_148756_1_,p_148756_2_,p_148756_3_ +net/minecraft/util/RegistryNamespacedDefaultedByKey.func_82594_a(Ljava/lang/Object;)Ljava/lang/Object;=|p_82594_1_ +net/minecraft/util/RegistrySimple.()V=| +net/minecraft/util/RegistrySimple.func_148740_a()Ljava/util/Map;=| +net/minecraft/util/RegistrySimple.func_148741_d(Ljava/lang/Object;)Z=|p_148741_1_ +net/minecraft/util/RegistrySimple.func_148742_b()Ljava/util/Set;=| +net/minecraft/util/RegistrySimple.func_82594_a(Ljava/lang/Object;)Ljava/lang/Object;=|p_82594_1_ +net/minecraft/util/RegistrySimple.func_82595_a(Ljava/lang/Object;Ljava/lang/Object;)V=|p_82595_1_,p_82595_2_ net/minecraft/client/resources/IReloadableResourceManager.func_110541_a(Ljava/util/List;)V=| net/minecraft/client/resources/IReloadableResourceManager.func_110542_a(Lnet/minecraft/client/resources/IResourceManagerReloadListener;)V=| net/minecraft/client/renderer/entity/Render.()V=| diff --git a/conf/joined.srg b/conf/joined.srg index 1ccce117ad..6505783eed 100644 --- a/conf/joined.srg +++ b/conf/joined.srg @@ -1202,8 +1202,8 @@ CL: ch net/minecraft/command/WrongUsageException CL: cj net/minecraft/dispenser/IBlockSource CL: ck net/minecraft/block/BlockSourceImpl CL: cl net/minecraft/dispenser/BehaviorDefaultDispenseItem -CL: cm net/minecraft/init/RegistryNamespacedDefaultedByKey -CL: cn net/minecraft/dispenser/RegistryDefaulted +CL: cm net/minecraft/util/RegistryNamespacedDefaultedByKey +CL: cn net/minecraft/util/RegistryDefaulted CL: co net/minecraft/dispenser/IBehaviorDispenseItem CL: cp net/minecraft/dispenser/IBehaviorDispenseItem$1 CL: cq net/minecraft/util/EnumFacing @@ -1211,11 +1211,11 @@ CL: cr net/minecraft/util/IObjectIntIterable CL: cs net/minecraft/util/ObjectIntIdentityMap CL: ct net/minecraft/dispenser/ILocatableSource CL: cu net/minecraft/dispenser/ILocation -CL: cv net/minecraft/init/RegistryNamespaced +CL: cv net/minecraft/util/RegistryNamespaced CL: cw net/minecraft/dispenser/IPosition CL: cx net/minecraft/dispenser/PositionImpl -CL: cy net/minecraft/dispenser/IRegistry -CL: cz net/minecraft/dispenser/RegistrySimple +CL: cy net/minecraft/util/IRegistry +CL: cz net/minecraft/util/RegistrySimple CL: d net/minecraft/crash/CrashReport$2 CL: dc net/minecraft/util/StatCollector CL: dd net/minecraft/util/StringTranslate @@ -6302,9 +6302,9 @@ FD: ck/a net/minecraft/block/BlockSourceImpl/field_82627_a FD: ck/b net/minecraft/block/BlockSourceImpl/field_82625_b FD: ck/c net/minecraft/block/BlockSourceImpl/field_82626_c FD: ck/d net/minecraft/block/BlockSourceImpl/field_82624_d -FD: cm/d net/minecraft/init/RegistryNamespacedDefaultedByKey/field_148760_d -FD: cm/e net/minecraft/init/RegistryNamespacedDefaultedByKey/field_148761_e -FD: cn/a net/minecraft/dispenser/RegistryDefaulted/field_82597_b +FD: cm/d net/minecraft/util/RegistryNamespacedDefaultedByKey/field_148760_d +FD: cm/e net/minecraft/util/RegistryNamespacedDefaultedByKey/field_148761_e +FD: cn/a net/minecraft/util/RegistryDefaulted/field_82597_b FD: co/a net/minecraft/dispenser/IBehaviorDispenseItem/field_82483_a FD: cq/a net/minecraft/util/EnumFacing/DOWN FD: cq/b net/minecraft/util/EnumFacing/UP @@ -6321,13 +6321,13 @@ FD: cq/l net/minecraft/util/EnumFacing/field_82609_l FD: cq/m net/minecraft/util/EnumFacing/$VALUES FD: cs/a net/minecraft/util/ObjectIntIdentityMap/field_148749_a FD: cs/b net/minecraft/util/ObjectIntIdentityMap/field_148748_b -FD: cv/a net/minecraft/init/RegistryNamespaced/field_148759_a -FD: cv/b net/minecraft/init/RegistryNamespaced/field_148758_b +FD: cv/a net/minecraft/util/RegistryNamespaced/field_148759_a +FD: cv/b net/minecraft/util/RegistryNamespaced/field_148758_b FD: cx/a net/minecraft/dispenser/PositionImpl/field_82630_a FD: cx/b net/minecraft/dispenser/PositionImpl/field_82628_b FD: cx/c net/minecraft/dispenser/PositionImpl/field_82629_c -FD: cz/a net/minecraft/dispenser/RegistrySimple/field_148743_a -FD: cz/c net/minecraft/dispenser/RegistrySimple/field_82596_a +FD: cz/a net/minecraft/util/RegistrySimple/field_148743_a +FD: cz/c net/minecraft/util/RegistrySimple/field_82596_a FD: d/a net/minecraft/crash/CrashReport$2/field_71496_a FD: dc/a net/minecraft/util/StatCollector/field_74839_a FD: dc/b net/minecraft/util/StatCollector/field_150828_b @@ -16287,11 +16287,11 @@ MD: cl/a (Lcj;Labp;)Labp; net/minecraft/dispenser/BehaviorDefaultDispenseItem/fu MD: cl/a (Lcj;Lcq;)V net/minecraft/dispenser/BehaviorDefaultDispenseItem/func_82489_a (Lnet/minecraft/dispenser/IBlockSource;Lnet/minecraft/util/EnumFacing;)V MD: cl/a (Lcq;)I net/minecraft/dispenser/BehaviorDefaultDispenseItem/func_82488_a (Lnet/minecraft/util/EnumFacing;)I MD: cl/b (Lcj;Labp;)Labp; net/minecraft/dispenser/BehaviorDefaultDispenseItem/func_82487_b (Lnet/minecraft/dispenser/IBlockSource;Lnet/minecraft/item/ItemStack;)Lnet/minecraft/item/ItemStack; -MD: cm/a (I)Ljava/lang/Object; net/minecraft/init/RegistryNamespacedDefaultedByKey/func_148754_a (I)Ljava/lang/Object; -MD: cm/a (ILjava/lang/String;Ljava/lang/Object;)V net/minecraft/init/RegistryNamespacedDefaultedByKey/func_148756_a (ILjava/lang/String;Ljava/lang/Object;)V -MD: cm/a (Ljava/lang/Object;)Ljava/lang/Object; net/minecraft/init/RegistryNamespacedDefaultedByKey/func_82594_a (Ljava/lang/Object;)Ljava/lang/Object; -MD: cm/a (Ljava/lang/String;)Ljava/lang/Object; net/minecraft/init/RegistryNamespacedDefaultedByKey/func_82594_a (Ljava/lang/String;)Ljava/lang/Object; -MD: cn/a (Ljava/lang/Object;)Ljava/lang/Object; net/minecraft/dispenser/RegistryDefaulted/func_82594_a (Ljava/lang/Object;)Ljava/lang/Object; +MD: cm/a (I)Ljava/lang/Object; net/minecraft/util/RegistryNamespacedDefaultedByKey/func_148754_a (I)Ljava/lang/Object; +MD: cm/a (ILjava/lang/String;Ljava/lang/Object;)V net/minecraft/util/RegistryNamespacedDefaultedByKey/func_148756_a (ILjava/lang/String;Ljava/lang/Object;)V +MD: cm/a (Ljava/lang/Object;)Ljava/lang/Object; net/minecraft/util/RegistryNamespacedDefaultedByKey/func_82594_a (Ljava/lang/Object;)Ljava/lang/Object; +MD: cm/a (Ljava/lang/String;)Ljava/lang/Object; net/minecraft/util/RegistryNamespacedDefaultedByKey/func_82594_a (Ljava/lang/String;)Ljava/lang/Object; +MD: cn/a (Ljava/lang/Object;)Ljava/lang/Object; net/minecraft/util/RegistryDefaulted/func_82594_a (Ljava/lang/Object;)Ljava/lang/Object; MD: co/a (Lcj;Labp;)Labp; net/minecraft/dispenser/IBehaviorDispenseItem/func_82482_a (Lnet/minecraft/dispenser/IBlockSource;Lnet/minecraft/item/ItemStack;)Lnet/minecraft/item/ItemStack; MD: cp/a (Lcj;Labp;)Labp; net/minecraft/dispenser/IBehaviorDispenseItem$1/func_82482_a (Lnet/minecraft/dispenser/IBlockSource;Lnet/minecraft/item/ItemStack;)Lnet/minecraft/item/ItemStack; MD: cq/a (I)Lcq; net/minecraft/util/EnumFacing/func_82600_a (I)Lnet/minecraft/util/EnumFacing; @@ -16305,31 +16305,31 @@ MD: cs/b (I)Z net/minecraft/util/ObjectIntIdentityMap/func_148744_b (I)Z MD: cs/b (Ljava/lang/Object;)I net/minecraft/util/ObjectIntIdentityMap/func_148747_b (Ljava/lang/Object;)I MD: cs/iterator ()Ljava/util/Iterator; net/minecraft/util/ObjectIntIdentityMap/iterator ()Ljava/util/Iterator; MD: cu/k ()Lafn; net/minecraft/dispenser/ILocation/func_82618_k ()Lnet/minecraft/world/World; -MD: cv/a ()Ljava/util/Map; net/minecraft/init/RegistryNamespaced/func_148740_a ()Ljava/util/Map; -MD: cv/a (I)Ljava/lang/Object; net/minecraft/init/RegistryNamespaced/func_148754_a (I)Ljava/lang/Object; -MD: cv/a (ILjava/lang/String;Ljava/lang/Object;)V net/minecraft/init/RegistryNamespaced/func_148756_a (ILjava/lang/String;Ljava/lang/Object;)V -MD: cv/a (Ljava/lang/Object;)Ljava/lang/Object; net/minecraft/init/RegistryNamespaced/func_82594_a (Ljava/lang/Object;)Ljava/lang/Object; -MD: cv/a (Ljava/lang/String;)Ljava/lang/Object; net/minecraft/init/RegistryNamespaced/func_82594_a (Ljava/lang/String;)Ljava/lang/Object; -MD: cv/b (I)Z net/minecraft/init/RegistryNamespaced/func_148753_b (I)Z -MD: cv/b (Ljava/lang/Object;)I net/minecraft/init/RegistryNamespaced/func_148757_b (Ljava/lang/Object;)I -MD: cv/b (Ljava/lang/String;)Z net/minecraft/init/RegistryNamespaced/func_148741_d (Ljava/lang/String;)Z -MD: cv/c (Ljava/lang/Object;)Ljava/lang/String; net/minecraft/init/RegistryNamespaced/func_148750_c (Ljava/lang/Object;)Ljava/lang/String; -MD: cv/c (Ljava/lang/String;)Ljava/lang/String; net/minecraft/init/RegistryNamespaced/func_148755_c (Ljava/lang/String;)Ljava/lang/String; -MD: cv/d (Ljava/lang/Object;)Z net/minecraft/init/RegistryNamespaced/func_148741_d (Ljava/lang/Object;)Z -MD: cv/iterator ()Ljava/util/Iterator; net/minecraft/init/RegistryNamespaced/iterator ()Ljava/util/Iterator; +MD: cv/a ()Ljava/util/Map; net/minecraft/util/RegistryNamespaced/func_148740_a ()Ljava/util/Map; +MD: cv/a (I)Ljava/lang/Object; net/minecraft/util/RegistryNamespaced/func_148754_a (I)Ljava/lang/Object; +MD: cv/a (ILjava/lang/String;Ljava/lang/Object;)V net/minecraft/util/RegistryNamespaced/func_148756_a (ILjava/lang/String;Ljava/lang/Object;)V +MD: cv/a (Ljava/lang/Object;)Ljava/lang/Object; net/minecraft/util/RegistryNamespaced/func_82594_a (Ljava/lang/Object;)Ljava/lang/Object; +MD: cv/a (Ljava/lang/String;)Ljava/lang/Object; net/minecraft/util/RegistryNamespaced/func_82594_a (Ljava/lang/String;)Ljava/lang/Object; +MD: cv/b (I)Z net/minecraft/util/RegistryNamespaced/func_148753_b (I)Z +MD: cv/b (Ljava/lang/Object;)I net/minecraft/util/RegistryNamespaced/func_148757_b (Ljava/lang/Object;)I +MD: cv/b (Ljava/lang/String;)Z net/minecraft/util/RegistryNamespaced/func_148741_d (Ljava/lang/String;)Z +MD: cv/c (Ljava/lang/Object;)Ljava/lang/String; net/minecraft/util/RegistryNamespaced/func_148750_c (Ljava/lang/Object;)Ljava/lang/String; +MD: cv/c (Ljava/lang/String;)Ljava/lang/String; net/minecraft/util/RegistryNamespaced/func_148755_c (Ljava/lang/String;)Ljava/lang/String; +MD: cv/d (Ljava/lang/Object;)Z net/minecraft/util/RegistryNamespaced/func_148741_d (Ljava/lang/Object;)Z +MD: cv/iterator ()Ljava/util/Iterator; net/minecraft/util/RegistryNamespaced/iterator ()Ljava/util/Iterator; MD: cw/a ()D net/minecraft/dispenser/IPosition/func_82615_a ()D MD: cw/b ()D net/minecraft/dispenser/IPosition/func_82617_b ()D MD: cw/c ()D net/minecraft/dispenser/IPosition/func_82616_c ()D MD: cx/a ()D net/minecraft/dispenser/PositionImpl/func_82615_a ()D MD: cx/b ()D net/minecraft/dispenser/PositionImpl/func_82617_b ()D MD: cx/c ()D net/minecraft/dispenser/PositionImpl/func_82616_c ()D -MD: cy/a (Ljava/lang/Object;)Ljava/lang/Object; net/minecraft/dispenser/IRegistry/func_82594_a (Ljava/lang/Object;)Ljava/lang/Object; -MD: cy/a (Ljava/lang/Object;Ljava/lang/Object;)V net/minecraft/dispenser/IRegistry/func_82595_a (Ljava/lang/Object;Ljava/lang/Object;)V -MD: cz/a ()Ljava/util/Map; net/minecraft/dispenser/RegistrySimple/func_148740_a ()Ljava/util/Map; -MD: cz/a (Ljava/lang/Object;)Ljava/lang/Object; net/minecraft/dispenser/RegistrySimple/func_82594_a (Ljava/lang/Object;)Ljava/lang/Object; -MD: cz/a (Ljava/lang/Object;Ljava/lang/Object;)V net/minecraft/dispenser/RegistrySimple/func_82595_a (Ljava/lang/Object;Ljava/lang/Object;)V -MD: cz/b ()Ljava/util/Set; net/minecraft/dispenser/RegistrySimple/func_148742_b ()Ljava/util/Set; -MD: cz/d (Ljava/lang/Object;)Z net/minecraft/dispenser/RegistrySimple/func_148741_d (Ljava/lang/Object;)Z +MD: cy/a (Ljava/lang/Object;)Ljava/lang/Object; net/minecraft/util/IRegistry/func_82594_a (Ljava/lang/Object;)Ljava/lang/Object; +MD: cy/a (Ljava/lang/Object;Ljava/lang/Object;)V net/minecraft/util/IRegistry/func_82595_a (Ljava/lang/Object;Ljava/lang/Object;)V +MD: cz/a ()Ljava/util/Map; net/minecraft/util/RegistrySimple/func_148740_a ()Ljava/util/Map; +MD: cz/a (Ljava/lang/Object;)Ljava/lang/Object; net/minecraft/util/RegistrySimple/func_82594_a (Ljava/lang/Object;)Ljava/lang/Object; +MD: cz/a (Ljava/lang/Object;Ljava/lang/Object;)V net/minecraft/util/RegistrySimple/func_82595_a (Ljava/lang/Object;Ljava/lang/Object;)V +MD: cz/b ()Ljava/util/Set; net/minecraft/util/RegistrySimple/func_148742_b ()Ljava/util/Set; +MD: cz/d (Ljava/lang/Object;)Z net/minecraft/util/RegistrySimple/func_148741_d (Ljava/lang/Object;)Z MD: d/a ()Ljava/lang/String; net/minecraft/crash/CrashReport$2/call ()Ljava/lang/String; MD: d/call ()Ljava/lang/Object; net/minecraft/crash/CrashReport$2/call ()Ljava/lang/Object; MD: dc/a ()J net/minecraft/util/StatCollector/func_150827_a ()J diff --git a/patches/minecraft/net/minecraft/block/Block.java.patch b/patches/minecraft/net/minecraft/block/Block.java.patch new file mode 100644 index 0000000000..5f824bc2dd --- /dev/null +++ b/patches/minecraft/net/minecraft/block/Block.java.patch @@ -0,0 +1,18 @@ +--- ../src-base/minecraft/net/minecraft/block/Block.java ++++ ../src-work/minecraft/net/minecraft/block/Block.java +@@ -1,5 +1,6 @@ + package net.minecraft.block; + ++import cpw.mods.fml.common.registry.GameData; + import cpw.mods.fml.relauncher.Side; + import cpw.mods.fml.relauncher.SideOnly; + import java.util.Iterator; +@@ -32,7 +33,7 @@ + + public class Block + { +- public static final RegistryNamespaced field_149771_c = new RegistryNamespacedDefaultedByKey("air"); ++ public static final RegistryNamespaced field_149771_c = GameData.blockRegistry; + private CreativeTabs field_149772_a; + protected String field_149768_d; + public static final Block.SoundType field_149769_e = new Block.SoundType("stone", 1.0F, 1.0F); diff --git a/patches/minecraft/net/minecraft/client/Minecraft.java.patch b/patches/minecraft/net/minecraft/client/Minecraft.java.patch index 2d13c36f19..dd4c8406dd 100644 --- a/patches/minecraft/net/minecraft/client/Minecraft.java.patch +++ b/patches/minecraft/net/minecraft/client/Minecraft.java.patch @@ -44,7 +44,7 @@ Display.setVSyncEnabled(this.field_71474_y.field_74352_v); } -@@ -915,9 +924,11 @@ +@@ -916,9 +925,11 @@ if (!this.field_71454_w) { @@ -56,7 +56,7 @@ } GL11.glFlush(); -@@ -1490,11 +1501,15 @@ +@@ -1491,11 +1502,15 @@ public void func_71407_l() { @@ -72,7 +72,7 @@ this.field_71424_I.func_76320_a("gui"); if (!this.field_71445_n) -@@ -1977,6 +1992,8 @@ +@@ -1978,6 +1993,8 @@ this.field_71453_ak.func_74428_b(); } diff --git a/patches/minecraft/net/minecraft/item/Item.java.patch b/patches/minecraft/net/minecraft/item/Item.java.patch new file mode 100644 index 0000000000..f2a83cb9f7 --- /dev/null +++ b/patches/minecraft/net/minecraft/item/Item.java.patch @@ -0,0 +1,20 @@ +--- ../src-base/minecraft/net/minecraft/item/Item.java ++++ ../src-work/minecraft/net/minecraft/item/Item.java +@@ -3,6 +3,8 @@ + import com.google.common.collect.HashMultimap; + import com.google.common.collect.Multimap; + import com.google.common.collect.Sets; ++ ++import cpw.mods.fml.common.registry.GameData; + import cpw.mods.fml.relauncher.Side; + import cpw.mods.fml.relauncher.SideOnly; + import java.util.HashSet; +@@ -46,7 +48,7 @@ + + public class Item + { +- public static final RegistryNamespaced field_150901_e = new RegistryNamespaced(); ++ public static final RegistryNamespaced field_150901_e = GameData.itemRegistry; + protected static final UUID field_111210_e = UUID.fromString("CB3F55D3-645C-4F38-A497-9C13A33DB5CF"); + private CreativeTabs field_77701_a; + protected static Random field_77697_d = new Random(); diff --git a/src/main/java/cpw/mods/fml/common/FMLContainer.java b/src/main/java/cpw/mods/fml/common/FMLContainer.java index 366bff4bb8..b5eeb14c2a 100644 --- a/src/main/java/cpw/mods/fml/common/FMLContainer.java +++ b/src/main/java/cpw/mods/fml/common/FMLContainer.java @@ -16,6 +16,7 @@ import java.io.File; import java.security.cert.Certificate; import java.util.Arrays; import java.util.Map; +import java.util.Map.Entry; import java.util.logging.Level; import net.minecraft.nbt.NBTBase; @@ -25,10 +26,14 @@ import net.minecraft.world.storage.SaveHandler; import net.minecraft.world.storage.WorldInfo; import com.google.common.eventbus.EventBus; +import com.google.common.eventbus.Subscribe; import cpw.mods.fml.client.FMLFileResourcePack; import cpw.mods.fml.client.FMLFolderResourcePack; import cpw.mods.fml.common.asm.FMLSanityChecker; +import cpw.mods.fml.common.event.FMLConstructionEvent; +import cpw.mods.fml.common.network.NetworkCheckHandler; +import cpw.mods.fml.common.network.NetworkModHolder; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameData; import cpw.mods.fml.relauncher.Side; @@ -60,9 +65,21 @@ public class FMLContainer extends DummyModContainer implements WorldAccessContai @Override public boolean registerBus(EventBus bus, LoadController controller) { + bus.register(this); return true; } + @Subscribe + public void modConstruction(FMLConstructionEvent evt) + { + NetworkRegistry.INSTANCE.register(this, this.getClass(), null, evt.getASMHarvestedData()); + } + + @NetworkCheckHandler + public boolean checkModLists(Map modList, Side side) + { + return Loader.instance().checkRemoteModList(modList,side); + } @Override public NBTTagCompound getDataForWriting(SaveHandler handler, WorldInfo info) { @@ -76,8 +93,7 @@ public class FMLContainer extends DummyModContainer implements WorldAccessContai list.func_74742_a(mod); } fmlData.func_74782_a("ModList", list); - NBTTagList itemList = new NBTTagList(); - GameData.writeItemData(itemList); + NBTTagCompound nbt = GameData.buildItemDataList(); fmlData.func_74782_a("ModItemData", itemList); return fmlData; } diff --git a/src/main/java/cpw/mods/fml/common/Loader.java b/src/main/java/cpw/mods/fml/common/Loader.java index 58f93eaf71..8f9e676514 100644 --- a/src/main/java/cpw/mods/fml/common/Loader.java +++ b/src/main/java/cpw/mods/fml/common/Loader.java @@ -17,6 +17,7 @@ import java.io.FileReader; import java.io.IOException; import java.net.MalformedURLException; import java.util.Comparator; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; @@ -40,6 +41,7 @@ import com.google.common.collect.Multisets; import com.google.common.collect.Ordering; import com.google.common.collect.SetMultimap; import com.google.common.collect.Sets; +import com.google.common.collect.Sets.SetView; import com.google.common.collect.TreeMultimap; import cpw.mods.fml.common.LoaderState.ModState; @@ -56,6 +58,7 @@ import cpw.mods.fml.common.toposort.TopologicalSort; import cpw.mods.fml.common.versioning.ArtifactVersion; import cpw.mods.fml.common.versioning.VersionParser; import cpw.mods.fml.relauncher.FMLRelaunchLog; +import cpw.mods.fml.relauncher.Side; /** * The loader class performs the actual loading of the mod code from disk. @@ -817,4 +820,24 @@ public class Loader { return getIndexedModList().get(modId).getCustomModProperties(); } + + boolean checkRemoteModList(Map modList, Side side) + { + Set remoteModIds = modList.keySet(); + Set localModIds = namedMods.keySet(); + + Set difference = Sets.newLinkedHashSet(Sets.difference(localModIds, remoteModIds)); + for (Iterator iterator = difference.iterator(); iterator.hasNext();) + { + String missingRemotely = iterator.next(); + ModState modState = modController.getModState(namedMods.get(missingRemotely)); + if (modState == ModState.DISABLED) + { + iterator.remove(); + } + } + + FMLLog.info("Attempting connection with missing mods %s at %s", difference, side); + return true; + } } diff --git a/src/main/java/cpw/mods/fml/common/network/NetworkCheckHandler.java b/src/main/java/cpw/mods/fml/common/network/NetworkCheckHandler.java index 9d6a28a437..4ea3629691 100644 --- a/src/main/java/cpw/mods/fml/common/network/NetworkCheckHandler.java +++ b/src/main/java/cpw/mods/fml/common/network/NetworkCheckHandler.java @@ -1,5 +1,12 @@ package cpw.mods.fml.common.network; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) public @interface NetworkCheckHandler { diff --git a/src/main/java/cpw/mods/fml/common/network/NetworkModHolder.java b/src/main/java/cpw/mods/fml/common/network/NetworkModHolder.java index 3ba59c18eb..2a52889955 100644 --- a/src/main/java/cpw/mods/fml/common/network/NetworkModHolder.java +++ b/src/main/java/cpw/mods/fml/common/network/NetworkModHolder.java @@ -18,6 +18,8 @@ import java.util.Set; import java.util.logging.Level; import com.google.common.base.Strings; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.SetMultimap; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.ModContainer; @@ -34,11 +36,18 @@ public class NetworkModHolder public abstract boolean check(Map remoteVersions, Side side); } + private class IgnoredChecker extends NetworkChecker { + @Override + public boolean check(Map remoteVersions, Side side) + { + return true; + } + } private class DefaultNetworkChecker extends NetworkChecker { @Override public boolean check(Map remoteVersions, Side side) { - return acceptVersion(remoteVersions.get(container.getModId())); + return remoteVersions.containsKey(container.getModId()) ? acceptVersion(remoteVersions.get(container.getModId())) : false; } } @@ -78,7 +87,16 @@ public class NetworkModHolder public NetworkModHolder(ModContainer container, Class modClass, String acceptableVersionRange, ASMDataTable table) { this(container); - Set versionCheckHandlers = table.getAnnotationsFor(container).get(NetworkCheckHandler.class.getName()); + SetMultimap annotationTable = table.getAnnotationsFor(container); + Set versionCheckHandlers; + if (annotationTable != null) + { + versionCheckHandlers = annotationTable.get(NetworkCheckHandler.class.getName()); + } + else + { + versionCheckHandlers = ImmutableSet.of(); + } String networkCheckHandlerMethod = null; for (ASMData vch : versionCheckHandlers) { @@ -89,6 +107,24 @@ public class NetworkModHolder break; } } + if (versionCheckHandlers.isEmpty()) + { + for (Method m : modClass.getMethods()) + { + if (m.isAnnotationPresent(NetworkCheckHandler.class)) + { + if (m.getParameterTypes().length == 2 && m.getParameterTypes()[0].equals(Map.class) && m.getParameterTypes()[1].equals(Side.class)) + { + this.checkHandler = m; + break; + } + else + { + FMLLog.severe("Found unexpected method signature for annotation NetworkCheckHandler"); + } + } + } + } if (networkCheckHandlerMethod != null) { try @@ -104,22 +140,23 @@ public class NetworkModHolder FMLLog.log(Level.WARNING, e, "The declared version check handler method %s on network mod id %s is not accessible", networkCheckHandlerMethod, container.getModId()); } } - if (this.checkHandler == null) + if (this.checkHandler != null) { - String versionBounds = acceptableVersionRange; - if (!Strings.isNullOrEmpty(versionBounds)) + this.checker = new MethodNetworkChecker(); + } else if (!Strings.isNullOrEmpty(acceptableVersionRange) && !acceptableVersionRange.equals('*')) + { + try { - try - { - this.acceptableRange = VersionRange.createFromVersionSpec(versionBounds); - } - catch (InvalidVersionSpecificationException e) - { - FMLLog.log(Level.WARNING, e, "Invalid bounded range %s specified for network mod id %s", versionBounds, container.getModId()); - } + this.acceptableRange = VersionRange.createFromVersionSpec(acceptableVersionRange); } + catch (InvalidVersionSpecificationException e) + { + FMLLog.log(Level.WARNING, e, "Invalid bounded range %s specified for network mod id %s", acceptableVersionRange, container.getModId()); + } + this.checker = new DefaultNetworkChecker(); + } else { + this.checker = new IgnoredChecker(); } - FMLLog.finest("Testing mod %s to verify it accepts its own version in a remote connection", container.getModId()); boolean acceptsSelf = acceptVersion(container.getVersion()); if (!acceptsSelf) @@ -130,8 +167,6 @@ public class NetworkModHolder { FMLLog.finest("The mod %s accepts its own version (%s)", container.getModId(), container.getVersion()); } - - this.checker = checkHandler == null ? new DefaultNetworkChecker() : new MethodNetworkChecker(); } public boolean acceptVersion(String version) diff --git a/src/main/java/cpw/mods/fml/common/network/NetworkRegistry.java b/src/main/java/cpw/mods/fml/common/network/NetworkRegistry.java index 1feb7d7b60..c8f5a649d4 100644 --- a/src/main/java/cpw/mods/fml/common/network/NetworkRegistry.java +++ b/src/main/java/cpw/mods/fml/common/network/NetworkRegistry.java @@ -35,6 +35,7 @@ import com.google.common.collect.Maps; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLLog; +import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.ModContainer; import cpw.mods.fml.common.discovery.ASMDataTable; import cpw.mods.fml.common.network.handshake.NetworkDispatcher; @@ -59,6 +60,7 @@ public enum NetworkRegistry public static final AttributeKey CHANNEL_SOURCE = new AttributeKey("fml:channelSource"); public static final AttributeKey FML_MESSAGETARGET = new AttributeKey("fml:outboundTarget"); public static final AttributeKey FML_MESSAGETARGETARGS = new AttributeKey("fml:outboundTargetArgs"); + public static final AttributeKey MOD_CONTAINER = new AttributeKey("fml:modContainer"); public static final byte FML_PROTOCOL = 1; @@ -204,10 +206,15 @@ public enum NetworkRegistry static class FMLEmbeddedChannel extends EmbeddedChannel { public FMLEmbeddedChannel(String channelName, Side source, ChannelHandler... handlers) + { + this(Loader.instance().activeModContainer(), channelName, source, handlers); + } + public FMLEmbeddedChannel(ModContainer container, String channelName, Side source, ChannelHandler... handlers) { super(handlers); this.attr(FML_CHANNEL).set(channelName); this.attr(CHANNEL_SOURCE).set(source); + this.attr(MOD_CONTAINER).setIfAbsent(container); this.pipeline().addFirst(new FMLOutboundHandler()); } } @@ -255,6 +262,23 @@ public enum NetworkRegistry return result; } + public EnumMap newChannel(ModContainer container, String name, ChannelHandler... handlers) + { + if (channels.containsKey(name) || name.startsWith("MC|") || name.startsWith("\u0001") || (name.startsWith("FML") && !("FML".equals(container.getModId())))) + { + throw new RuntimeException("That channel is already registered"); + } + EnumMap result = Maps.newEnumMap(Side.class); + + for (Side side : Side.values()) + { + FMLEmbeddedChannel channel = new FMLEmbeddedChannel(container, name, side, handlers); + channels.get(side).put(name,channel); + result.put(side, channel); + } + return result; + } + public EmbeddedChannel getChannel(String name, Side source) { return channels.get(source).get(name); diff --git a/src/main/java/cpw/mods/fml/common/network/handshake/NetworkDispatcher.java b/src/main/java/cpw/mods/fml/common/network/handshake/NetworkDispatcher.java index 162a8abd1b..cafc7e34b6 100644 --- a/src/main/java/cpw/mods/fml/common/network/handshake/NetworkDispatcher.java +++ b/src/main/java/cpw/mods/fml/common/network/handshake/NetworkDispatcher.java @@ -276,14 +276,6 @@ public class NetworkDispatcher extends SimpleChannelInboundHandler { } } - /** - * Callback from the networkmanager - * @param fmlProxyPacket - */ - public void dispatch(FMLProxyPacket fmlProxyPacket) - { - } - public void sendProxy(FMLProxyPacket msg) { if (side == Side.CLIENT) diff --git a/src/main/java/cpw/mods/fml/common/registry/FMLControlledNamespacedRegistry.java b/src/main/java/cpw/mods/fml/common/registry/FMLControlledNamespacedRegistry.java new file mode 100644 index 0000000000..1a29ecc8ef --- /dev/null +++ b/src/main/java/cpw/mods/fml/common/registry/FMLControlledNamespacedRegistry.java @@ -0,0 +1,184 @@ +package cpw.mods.fml.common.registry; + +import gnu.trove.map.hash.TIntIntHashMap; + +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Map; +import java.util.Map.Entry; + +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; +import com.google.common.collect.MapDifference; +import com.google.common.collect.Maps; + +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.ModContainer; + +import net.minecraft.util.ObjectIntIdentityMap; +import net.minecraft.util.RegistryNamespaced; + +public class FMLControlledNamespacedRegistry extends RegistryNamespaced { + public class FMLObjectIntIdentityMap extends ObjectIntIdentityMap { + private TIntIntHashMap oldMap; + private TIntIntHashMap newMap; + private ArrayList oldIndex; + private ArrayList newIndex; + + public FMLObjectIntIdentityMap() + { + } + + boolean containsID(int id) + { + return func_148744_b(id); + } + + Object get(int id) + { + return func_148745_a(id); + } + + int get(Object obj) + { + return func_148747_b(obj); + } + + @SuppressWarnings("unchecked") + void beginSwap() + { + oldMap = field_148749_a; + newMap = new TIntIntHashMap(256, 0.5F, -1, -1); + oldIndex = (ArrayList) field_148748_b; + newIndex = new ArrayList(oldIndex.size()); + } + + void completeSwap() + { + field_148749_a = newMap; + field_148748_b = newIndex; + oldIndex = newIndex = null; + oldMap = newMap = null; + } + + void putNew(int id, Object item) + { + field_148749_a = newMap; + field_148748_b = newIndex; + super.func_148746_a(item, id); + field_148749_a = oldMap; + field_148748_b = oldIndex; + } + } + + private final Class superType; + private String optionalDefaultName; + private I optionalDefaultObject; + + private BiMap namedIds = HashBiMap.create(); + private BitSet availabilityMap; + private int maxId; + private int minId; + + public FMLControlledNamespacedRegistry(String optionalDefault, int maxIdValue, int minIdValue, Class type) + { + this.superType = type; + this.optionalDefaultName = optionalDefault; + this.availabilityMap = new BitSet(maxIdValue); + this.maxId = maxIdValue; + this.minId = minIdValue; + this.field_148759_a = new FMLObjectIntIdentityMap(); + } + + @Override + public void func_148756_a(int id, String name, Object thing) + { + add(id, name, superType.cast(thing)); + } + + public void add(int id, String name, I thing) + { + if (name.equals(optionalDefaultName)) + { + this.optionalDefaultObject = thing; + } + + int idToUse = id; + if (availabilityMap.get(id)) + { + idToUse = availabilityMap.nextClearBit(minId); + } + if (idToUse >= maxId) + { + throw new RuntimeException(String.format("Invalid id %s - not accepted",id)); + } + namedIds.put(name,idToUse); + + ModContainer mc = Loader.instance().activeModContainer(); + String prefix = mc.getModId(); + name = prefix + ":"+ name; + super.func_148756_a(idToUse, name, thing); + } + + @Override + public I func_82594_a(String name) + { + I object = superType.cast(super.func_82594_a(name)); + return object == null ? this.optionalDefaultObject : object; + } + + @Override + public I func_148754_a(int id) + { + I object = superType.cast(super.func_148754_a(id)); + return object == null ? this.optionalDefaultObject : object; + } + + + void injectIdMapping(BiMap values) + { + MapDifference difference = Maps.difference(values, namedIds); + for (Entry missing : difference.entriesOnlyOnLeft().entrySet()) + { + String name = missing.getKey(); + Integer id = missing.getValue(); + String[] parts = name.split(":"); + ModContainer modContainer = GameData.findModOwner(parts[0]); + } + @SuppressWarnings("unchecked") + BiMap nameMap = (BiMap) field_82596_a; + FMLObjectIntIdentityMap idMap = (FMLObjectIntIdentityMap) field_148759_a; + idMap.beginSwap(); + for (Entry entry : values.entrySet()) + { + String name = entry.getKey(); + Integer id = entry.getValue(); + Object item = nameMap.get(name); + idMap.putNew(id, item); + } + + idMap.completeSwap(); + } + + public I get(int id) + { + return func_148754_a(id); + } + + public I get(String name) + { + return func_82594_a(name); + } + + public int getId(I thing) + { + return func_148757_b(thing); + } + public void serializeInto(Map idMapping) + { + for (Entry id: namedIds.entrySet()) + { + idMapping.put(id.getKey(), id.getValue()); + } + } +} diff --git a/src/main/java/cpw/mods/fml/common/registry/GameData.java b/src/main/java/cpw/mods/fml/common/registry/GameData.java index 894210f246..4d8200fd50 100644 --- a/src/main/java/cpw/mods/fml/common/registry/GameData.java +++ b/src/main/java/cpw/mods/fml/common/registry/GameData.java @@ -53,48 +53,10 @@ import cpw.mods.fml.common.ModContainer; import cpw.mods.fml.common.registry.GameRegistry.UniqueIdentifier; public class GameData { - private static Map idMap = Maps.newHashMap(); - private static CountDownLatch serverValidationLatch; - private static CountDownLatch clientValidationLatch; - private static MapDifference difference; - private static boolean shouldContinue = true; - private static boolean isSaveValid = true; - private static ImmutableTable modObjectTable; private static Table customItemStacks = HashBasedTable.create(); - private static Map ignoredMods; private static boolean validated; - - private static boolean isModIgnoredForIdValidation(String modId) - { - if (ignoredMods == null) - { - File f = new File(Loader.instance().getConfigDir(),"fmlIDChecking.properties"); - if (f.exists()) - { - Properties p = new Properties(); - try - { - p.load(new FileInputStream(f)); - ignoredMods = Maps.fromProperties(p); - if (ignoredMods.size()>0) - { - FMLLog.log("fml.ItemTracker", Level.WARNING, "Using non-empty ignored mods configuration file %s", ignoredMods.keySet()); - } - } - catch (Exception e) - { - Throwables.propagateIfPossible(e); - FMLLog.log("fml.ItemTracker", Level.SEVERE, e, "Failed to read ignored ID checker mods properties file"); - ignoredMods = ImmutableMap.of(); - } - } - else - { - ignoredMods = ImmutableMap.of(); - } - } - return ignoredMods.containsKey(modId); - } + public static final FMLControlledNamespacedRegistry blockRegistry = new FMLControlledNamespacedRegistry("air", 4095, 0, Block.class); + public static final FMLControlledNamespacedRegistry itemRegistry = new FMLControlledNamespacedRegistry(null, 32000, 4096, Item.class); public static void newItemAdded(Item item) { @@ -193,47 +155,12 @@ public class GameData { } } - public static void writeItemData(NBTTagList itemList) + public static Map buildItemDataList() { - for (ItemData dat : idMap.values()) - { - itemList.func_74742_a(dat.toNBT()); - } - } - - /** - * Initialize the server gate - * @param gateCount the countdown amount. If it's 2 we're on the client and the client and server - * will wait at the latch. 1 is a server and the server will proceed - */ - public static void initializeServerGate(int gateCount) - { - serverValidationLatch = new CountDownLatch(gateCount - 1); - clientValidationLatch = new CountDownLatch(gateCount - 1); - } - - public static MapDifference gateWorldLoadingForValidation() - { - try - { - serverValidationLatch.await(); - if (!isSaveValid) - { - return difference; - } - } - catch (InterruptedException e) - { - } - difference = null; - return null; - } - - - public static void releaseGate(boolean carryOn) - { - shouldContinue = carryOn; - clientValidationLatch.countDown(); + Map idMapping = Maps.newHashMap(); + blockRegistry.serializeInto(idMapping); + itemRegistry.serializeInto(idMapping); + return idMapping; } public static Set buildWorldItemData(NBTTagList modList) @@ -241,71 +168,21 @@ public class GameData { Set worldSaveItems = Sets.newHashSet(); for (int i = 0; i < modList.func_74745_c(); i++) { - NBTTagCompound mod = (NBTTagCompound) modList.func_74743_b(i); + NBTTagCompound mod = modList.func_150305_b(i); ItemData dat = new ItemData(mod); worldSaveItems.add(dat); } return worldSaveItems; } - static void setName(Item item, String name, String modId) - { - int id = item.field_77779_bT; - ItemData itemData = idMap.get(id); - itemData.setName(name,modId); - } - - public static void buildModObjectTable() - { - if (modObjectTable != null) - { - throw new IllegalStateException("Illegal call to buildModObjectTable!"); - } - - Map> map = Maps.transformValues(idMap, new Function>() { - public Cell apply(ItemData data) - { - if ("Minecraft".equals(data.getModId()) || !data.isOveridden()) - { - return null; - } - return Tables.immutableCell(data.getModId(), data.getItemType(), data.getItemId()); - } - }); - - Builder tBuilder = ImmutableTable.builder(); - for (Cell c : map.values()) - { - if (c!=null) - { - tBuilder.put(c); - } - } - modObjectTable = tBuilder.build(); - } static Item findItem(String modId, String name) { - if (modObjectTable == null || !modObjectTable.contains(modId, name)) - { - return null; - } - - return Item.field_77698_e[modObjectTable.get(modId, name)]; + return (Item) itemRegistry.func_82594_a(modId + ":" + name); } static Block findBlock(String modId, String name) { - if (modObjectTable == null) - { - return null; - } - - Integer blockId = modObjectTable.get(modId, name); - if (blockId == null || blockId >= Block.field_71973_m.length) - { - return null; - } - return Block.field_71973_m[blockId]; + return (Block) blockRegistry.func_82594_a(modId+":"+name); } static ItemStack findItemStack(String modId, String name) @@ -366,25 +243,27 @@ public class GameData { static UniqueIdentifier getUniqueName(Block block) { if (block == null) return null; - ItemData itemData = idMap.get(block.field_71990_ca); - if (itemData == null || !itemData.isOveridden() || customItemStacks.contains(itemData.getModId(), itemData.getItemType())) + String name = blockRegistry.func_148750_c(block); + UniqueIdentifier ui = new UniqueIdentifier(name); + if (customItemStacks.contains(ui.modId, ui.name)) { return null; } - return new UniqueIdentifier(itemData.getModId(), itemData.getItemType()); + return ui; } static UniqueIdentifier getUniqueName(Item item) { if (item == null) return null; - ItemData itemData = idMap.get(item.field_77779_bT); - if (itemData == null || !itemData.isOveridden() || customItemStacks.contains(itemData.getModId(), itemData.getItemType())) + String name = itemRegistry.func_148750_c(item); + UniqueIdentifier ui = new UniqueIdentifier(name); + if (customItemStacks.contains(ui.modId, ui.name)) { return null; } - return new UniqueIdentifier(itemData.getModId(), itemData.getItemType()); + return ui; } public static void validateRegistry() @@ -406,4 +285,40 @@ public class GameData { } */ validated = true; } + private static Map customOwners = Maps.newHashMap(); + static Block registerBlockAndItem(Item item, Block block, String name, String modId) + { + + } + static Item registerItem(Item item, String name, String modId) + { + ModContainer mc = Loader.instance().activeModContainer(); + if (modId != null) + { + customOwners.put(new UniqueIdentifier(modId, name), mc); + } + itemRegistry.add(0, name, item); + int itemId = itemRegistry.getId(item); + blockRegistry.clearItem(itemId); + return item; + } + static Block registerBlock(Block block, String name, String modId) + { + ModContainer mc = Loader.instance().activeModContainer(); + if (modId != null) + { + customOwners.put(new UniqueIdentifier(modId, name), mc); + } + blockRegistry.func_148756_a(0, name, block); + return block; + } + public static ModContainer findModOwner(String string) + { + UniqueIdentifier ui = new UniqueIdentifier(string); + if (customOwners.containsKey(ui)) + { + return customOwners.get(ui); + } + return Loader.instance().getIndexedModList().get(ui.modId); + } } diff --git a/src/main/java/cpw/mods/fml/common/registry/GameRegistry.java b/src/main/java/cpw/mods/fml/common/registry/GameRegistry.java index 5bbb6e1629..78e3cfae32 100644 --- a/src/main/java/cpw/mods/fml/common/registry/GameRegistry.java +++ b/src/main/java/cpw/mods/fml/common/registry/GameRegistry.java @@ -35,6 +35,7 @@ import net.minecraft.world.WorldType; import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.chunk.IChunkProvider; +import com.google.common.base.Objects; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; @@ -54,12 +55,10 @@ import cpw.mods.fml.common.ObfuscationReflectionHelper; public class GameRegistry { - private static Multimap blockRegistry = ArrayListMultimap.create(); private static Set worldGenerators = Sets.newHashSet(); private static List fuelHandlers = Lists.newArrayList(); private static List craftingHandlers = Lists.newArrayList(); private static List pickupHandlers = Lists.newArrayList(); - private static List playerTrackers = Lists.newArrayList(); /** * Register a world generator - something that inserts new block types into the world @@ -114,19 +113,19 @@ public class GameRegistry * @param modId An optional modId that will "own" this block - generally used by multi-mod systems * where one mod should "own" all the blocks of all the mods, null defaults to the active mod */ - public static void registerItem(net.minecraft.item.Item item, String name, String modId) + public static Item registerItem(Item item, String name, String modId) { - GameData.setName(item, name, modId); + return GameData.registerItem(item, name, modId); } /** - * Register a block with the specified mod specific name : overrides the standard type based name + * Register a block with the specified mod specific name * @param block The block to register * @param name The mod-unique name to register it as */ - public static void registerBlock(net.minecraft.block.Block block, String name) + public static Block registerBlock(Block block, String name) { - registerBlock(block, ItemBlock.class, name); + return registerBlock(block, ItemBlock.class, name); } /** * Register a block with the world, with the specified item class and block name @@ -134,9 +133,9 @@ public class GameRegistry * @param itemclass The item type to register with it * @param name The mod-unique name to register it with */ - public static void registerBlock(net.minecraft.block.Block block, Class itemclass, String name) + public static Block registerBlock(Block block, Class itemclass, String name) { - registerBlock(block, itemclass, name, null); + return registerBlock(block, itemclass, name, null); } /** * Register a block with the world, with the specified item class, block name and owning modId @@ -145,7 +144,7 @@ public class GameRegistry * @param name The mod-unique name to register it with * @param modId The modId that will own the block name. null defaults to the active modId */ - public static void registerBlock(net.minecraft.block.Block block, Class itemclass, String name, String modId) + public static Block registerBlock(Block block, Class itemclass, String name, String modId) { if (Loader.instance().isInState(LoaderState.CONSTRUCTING)) { @@ -155,16 +154,17 @@ public class GameRegistry { assert block != null : "registerBlock: block cannot be null"; assert itemclass != null : "registerBlock: itemclass cannot be null"; - Constructor itemCtor = itemclass.getConstructor(net.minecraft.block.Block.class); + Constructor itemCtor = itemclass.getConstructor(Block.class); Item i = itemCtor.newInstance(block); + GameData.registerBlock(block, name, modId); GameRegistry.registerItem(i, name, modId); + return block; } catch (Exception e) { FMLLog.log(Level.SEVERE, e, "Caught an exception during block registration"); throw new LoaderException(e); } - blockRegistry.put(Loader.instance().activeModContainer(), (BlockProxy) block); } public static void addRecipe(ItemStack output, Object... params) @@ -347,7 +347,7 @@ public class GameRegistry * @param name The name of the block itself * @return The block or null if not found */ - public static net.minecraft.block.Block findBlock(String modId, String name) + public static Block findBlock(String modId, String name) { return GameData.findBlock(modId, name); } @@ -358,7 +358,7 @@ public class GameRegistry * @param name The name of the item itself * @return The item or null if not found */ - public static net.minecraft.item.Item findItem(String modId, String name) + public static Item findItem(String modId, String name) { return GameData.findItem(modId, name); } @@ -408,6 +408,22 @@ public class GameRegistry this.modId = modId; this.name = name; } + + public UniqueIdentifier(String string) + { + String[] parts = string.split(":"); + this.modId = parts[0]; + this.name = parts[1]; + } + + @Override + public boolean equals(Object obj) + { + if (obj == null) return false; + if (obj.getClass() != this.getClass()) return false; + final UniqueIdentifier other = (UniqueIdentifier) obj; + return Objects.equal(modId, other.modId) && Objects.equal(name, other.name); + } } /** @@ -421,7 +437,7 @@ public class GameRegistry * @param block to lookup * @return a {@link UniqueIdentifier} for the block or null */ - public static UniqueIdentifier findUniqueIdentifierFor(net.minecraft.block.Block block) + public static UniqueIdentifier findUniqueIdentifierFor(Block block) { return GameData.getUniqueName(block); } @@ -436,7 +452,7 @@ public class GameRegistry * @param item to lookup * @return a {@link UniqueIdentifier} for the item or null */ - public static UniqueIdentifier findUniqueIdentifierFor(net.minecraft.item.Item item) + public static UniqueIdentifier findUniqueIdentifierFor(Item item) { return GameData.getUniqueName(item); } diff --git a/src/main/resources/fml_at.cfg b/src/main/resources/fml_at.cfg index 422f59b45e..ebe5189c6d 100644 --- a/src/main/resources/fml_at.cfg +++ b/src/main/resources/fml_at.cfg @@ -74,3 +74,7 @@ public net.minecraft.entity.passive.EntityVillager.field_70960_bC # Minecraft #public atv.D #FD:Minecraft/field_71425_J #running public net.minecraft.client.Minecraft.field_71446_o # textureManager + +protected net.minecraft.util.ObjectIntIdentityMap.field_148749_a # internal map +protected net.minecraft.util.ObjectIntIdentityMap.field_148748_b # internal index list +protected-f net.minecraft.util.RegistryNamespaced.field_148759_a # identitymap