Skip to content

Commit 515c41e

Browse files
committed
fix itemstack decoder, make Deserializer action a sorted list instead of a set
1 parent 7c4c133 commit 515c41e

File tree

6 files changed

+40
-18
lines changed

6 files changed

+40
-18
lines changed

src/main/java/rml/deserializer/DeserializerBuilder.java

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010

1111
import java.lang.reflect.Constructor;
1212
import java.lang.reflect.InvocationTargetException;
13+
import java.util.ArrayList;
1314
import java.util.HashMap;
14-
import java.util.HashSet;
1515
import java.util.function.Function;
1616

1717
/**
@@ -22,11 +22,11 @@
2222

2323
@EarlyClass
2424
@PublicAPI
25-
public class DeserializerBuilder<T> {
26-
private DeserializerManager manager;
27-
private Class<T> clazz;
28-
private ResourceLocation resourceLocation;
29-
private HashSet<IAction> actions = new HashSet<>();
25+
public final class DeserializerBuilder<T> {
26+
private final DeserializerManager manager;
27+
private final Class<T> clazz;
28+
private final ResourceLocation resourceLocation;
29+
private final ArrayList<IAction> actions = new ArrayList<>();
3030
private IJsonObjectFunction<T> function = (context) -> null;
3131
private boolean isDefault = false;
3232
public DeserializerBuilder(DeserializerManager manager, Class<T> clazz, ResourceLocation resourceLocation){
@@ -181,7 +181,7 @@ public DeserializerBuilder<T> markDefault(){
181181
public AbstractDeserializer<T> build(){
182182
final DeserializerManager managerIn = this.manager;
183183
final IJsonObjectFunction<T> function = this.function;
184-
final HashSet<IAction> actions = this.actions;
184+
final ArrayList<IAction> actions = this.actions;
185185
AbstractDeserializer<T> deserializer = new AbstractDeserializer<>(resourceLocation, clazz,
186186
(jsonElement)->{
187187
if (!jsonElement.isJsonObject()) throw new JsonDeserializeException(jsonElement, "Only Support JsonObject.");
@@ -200,6 +200,28 @@ public AbstractDeserializer<T> build(){
200200
return deserializer;
201201
}
202202

203+
public <K> AbstractDeserializer<T> remappingBuild(final Class<K> cls, final Function<K, T> mapper, boolean isDefault){
204+
final DeserializerManager managerIn = this.manager;
205+
AbstractDeserializer<T> deserializer = new AbstractDeserializer<>(resourceLocation, clazz,
206+
(jsonElement) -> {
207+
if (jsonElement.isJsonObject()) {
208+
JsonObject jsonObject = jsonElement.getAsJsonObject();
209+
if (jsonObject.has("value")) {
210+
return mapper.apply(managerIn.decode(cls, jsonObject.get("value")));
211+
} else {
212+
throw new JsonDeserializeException(jsonElement, "Missing field `value`");
213+
}
214+
} else {
215+
return mapper.apply(managerIn.decode(cls, jsonElement));
216+
}
217+
}
218+
);
219+
if (isDefault) managerIn.addDefaultEntry(deserializer);
220+
else managerIn.addEntry(deserializer);
221+
return deserializer;
222+
}
223+
224+
203225
public static class Context{
204226
public JsonObject jsonObject;
205227
public HashMap<String, Object> environments;

src/main/java/rml/loader/api/event/CraftingHelperInitEvent.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import net.minecraftforge.common.crafting.IIngredientFactory;
1010
import net.minecraftforge.common.crafting.IRecipeFactory;
1111
import net.minecraftforge.fml.common.eventhandler.Event;
12+
import rml.loader.core.RMLFMLLoadingPlugin;
1213

1314
/**
1415
* @Project ResourceModLoader

src/main/java/rml/loader/core/RMLModDiscover.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ public static void inject(List<ModContainer> modContainers){
6464
URL url = moduleFiles.nextElement();
6565
try (InputStream inputStream = url.openStream()) {
6666
JsonElement element = JsonHelper.parse(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
67-
RMLFMLLoadingPlugin.LOGGER.info("json rml : {}", element);
6867
if (element.isJsonArray()) {
6968
for (JsonElement jsonElement : element.getAsJsonArray()) {
7069
ModuleType.decodeAndRegister(jsonElement);

src/main/java/rml/loader/deserialize/RMLForgeEventHandler.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@ public static void registerLootTable(LootTableRegistryEvent event){
7373

7474
@SubscribeEvent
7575
public static void registerRecipeFactory(CraftingHelperInitEvent event){
76-
event.register(new ResourceLocation("rml","smelt"),new SmeltRecipe.Factory());
77-
event.register(new ResourceLocation("rml","brew"),new SimpleBrewRecipe.Factory());
78-
event.register(new ResourceLocation("rml","anvil"),new SimpleAnvilRecipe.Factory());
76+
event.register(new ResourceLocation("rml","smelt"), new SmeltRecipe.Factory());
77+
event.register(new ResourceLocation("rml","brew"), new SimpleBrewRecipe.Factory());
78+
event.register(new ResourceLocation("rml","anvil"), new SimpleAnvilRecipe.Factory());
7979
}
8080

8181
@SubscribeEvent(priority = EventPriority.LOWEST)

src/main/java/rml/loader/deserialize/craft/recipe/NamedEmptyRecipeImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
**/
1717
@PrivateAPI
1818
public class NamedEmptyRecipeImpl extends IForgeRegistryEntry.Impl<IRecipe> implements IRecipe {
19-
public static HashSet<NamedEmptyRecipeImpl> removeCaches=new HashSet<>();
19+
public static HashSet<NamedEmptyRecipeImpl> removeCaches = new HashSet<>();
2020
public NamedEmptyRecipeImpl(){
2121
removeCaches.add(this);
2222
}

src/main/java/rml/loader/deserialize/world/item/ItemDeserializer.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import net.minecraft.util.ResourceLocation;
1111
import net.minecraftforge.common.util.EnumHelper;
1212
import rml.deserializer.AbstractDeserializer;
13+
import rml.deserializer.DeserializerBuilder;
1314
import rml.deserializer.JsonDeserializeException;
1415
import rml.loader.api.utils.RandomHolder;
1516
import rml.loader.api.utils.values.RandomIntSupplier;
@@ -30,16 +31,15 @@ public static class EnchantmentDataDeserializer {
3031
public static class ItemStackDeserializer {
3132
public static final AbstractDeserializer<ItemStack> ITEM_STACK_DEFAULT = Deserializer.named(ItemStack.class, new ResourceLocation("minecraft", "item"))
3233
.require(Item.class, "item")
33-
.optionalWhen(Integer.class, "data", context -> context.get(Item.class, "item").getHasSubtypes())
34+
.optionalWhen(Integer.class, "data",
35+
context -> {
36+
Item item = context.get(Item.class, "item");
37+
return item == null || !item.getHasSubtypes();
38+
})
3439
.check((context -> {if (!context.ifPresent("data")) context.put("data", 0); return null;}))
3540
.optional(NBTTagCompound.class, "nbt")
3641
.optionalDefault(Integer.class, "count", 1)
3742
.decode((context -> {
38-
RMLFMLLoadingPlugin.LOGGER.info("Decodeing ItemStack");
39-
for (Map.Entry<String, ?> entry : context.environments.entrySet()) {
40-
RMLFMLLoadingPlugin.LOGGER.info("Data : {} : {}", entry.getKey(), entry.getValue());
41-
}
42-
RMLFMLLoadingPlugin.LOGGER.info("End Item Stack");
4343
Item item = context.get(Item.class, "item");
4444
int data = context.get(Integer.class, "data");
4545
int count = context.get(Integer.class, "count");

0 commit comments

Comments
 (0)