2424
2525import java .util .ArrayList ;
2626import java .util .List ;
27+ import java .util .Map .Entry ;
2728
2829public class AddOreCommand extends CommandBase {
2930 private static final String ALL = "all" ;
@@ -35,7 +36,7 @@ public String getName() {
3536
3637 @ Override
3738 public String getUsage (ICommandSender sender ) {
38- return "/addore <file> <dimension|all>" ;
39+ return "/addore <file> <dimension|all> <options> " ;
3940 }
4041
4142 @ Override
@@ -46,13 +47,16 @@ public void execute(MinecraftServer server, ICommandSender sender, String[] args
4647
4748 EntityPlayer player = (EntityPlayer ) sender ;
4849 ItemStack stack = player .getHeldItem (EnumHand .MAIN_HAND );
49-
50+ String jsonArgs = null ;
51+
5052 if (stack == null ) {
5153 throw new CommandException ("You have no item in your main hand" );
5254 } else if (!(stack .getItem () instanceof ItemBlock )) {
5355 throw new CommandException ("The item in your main hand isn't a block" );
54- } else if (args .length ! = 2 ) {
56+ } else if (args .length < = 2 ) {
5557 throw new CommandException (this .getUsage (sender ));
58+ } else {
59+ jsonArgs = getChatComponentFromNthArg (sender , args , 2 ).getUnformattedText ();
5660 }
5761
5862 String file = args [0 ];
@@ -69,21 +73,50 @@ public void execute(MinecraftServer server, ICommandSender sender, String[] args
6973 throw new CommandException (args [1 ] + " isn't a valid dimension" );
7074 }
7175
76+
7277 JsonObject ore = new JsonObject ();
73- ore .addProperty (ConfigNames .BLOCK , state .getBlock ().getRegistryName ().toString ());
74- ore .addProperty (ConfigNames .STATE , StateUtil .serializeState (state ));
75- ore .addProperty (ConfigNames .DefaultFeatureProperties .SIZE , 25 );
76- ore .addProperty (ConfigNames .DefaultFeatureProperties .VARIATION , 12 );
77- ore .addProperty (ConfigNames .DefaultFeatureProperties .FREQUENCY , 20 );
78- ore .addProperty (ConfigNames .DefaultFeatureProperties .MINHEIGHT , 0 );
79- ore .addProperty (ConfigNames .DefaultFeatureProperties .MAXHEIGHT , 128 );
78+ JsonObject oreArgs = null ;
79+ int size = 25 ;
80+ int variation = 12 ;
81+ int frequency = 20 ;
82+ int minHeight = 0 ;
83+ int maxHeight = 128 ;
8084
85+ oreArgs = new JsonObject ();
86+ oreArgs .addProperty (ConfigNames .DefaultFeatureProperties .SIZE , size );
87+ oreArgs .addProperty (ConfigNames .DefaultFeatureProperties .VARIATION , variation );
88+ oreArgs .addProperty (ConfigNames .DefaultFeatureProperties .FREQUENCY , frequency );
89+ oreArgs .addProperty (ConfigNames .DefaultFeatureProperties .MINHEIGHT , minHeight );
90+ oreArgs .addProperty (ConfigNames .DefaultFeatureProperties .MAXHEIGHT , maxHeight );
91+ ore .addProperty (ConfigNames .BLOCK , state .getBlock ().getRegistryName ().toString ());
92+ ore .addProperty (ConfigNames .STATE , StateUtil .serializeState (state ));
93+
94+ if ( jsonArgs != null ) {
95+ JsonObject newOreArgs = (new JsonParser ()).parse (jsonArgs ).getAsJsonObject ();
96+ setProperties (oreArgs ,newOreArgs );
97+ }
98+
99+ setOre (ore ,oreArgs );
100+
81101 this .putFile (file , ore , dimension );
82102
83103 player .sendStatusMessage (new TextComponentString ("Added " + state .getBlock ().getRegistryName ().toString () + " to the json" ), true );
84104 }
85105
86- private void putFile (String file , JsonObject ore , int id ) {
106+ private void setProperties (JsonObject oreArgs , JsonObject newOreArgs ) {
107+ for ( Entry <String , JsonElement > ent : newOreArgs .entrySet () ) {
108+ oreArgs .remove (ent .getKey ());
109+ oreArgs .add (ent .getKey (), ent .getValue ());
110+ }
111+ }
112+
113+ private void setOre (JsonObject ore , JsonObject oreArgs ) {
114+ for ( Entry <String , JsonElement > ent : oreArgs .entrySet () ) {
115+ ore .add (ent .getKey (), ent .getValue ());
116+ }
117+ }
118+
119+ private void putFile (String file , JsonObject ore , int id ) {
87120 DimensionBuilder db = OreSpawn .API .getLogic (file ).newDimensionBuilder (id );
88121 SpawnBuilder sb = db .newSpawnBuilder (null );
89122 OreBuilder ob = sb .newOreBuilder ();
0 commit comments