Skip to content

Commit 1ffdf8e

Browse files
committed
支持了component: "minecraft:max_stack_size": 1 这种直接输入数值的形式 同时兼容"minecraft:max_stack_size": {"value": 1},修复这种情况导致的不注册物品
1 parent 65da284 commit 1ffdf8e

3 files changed

Lines changed: 63 additions & 2 deletions

File tree

adapter-mot/src/main/java/net/easecation/bridge/adapter/mot/item/ItemDefinitionBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ private static CustomItemDefinition buildLegacyItem(ItemCustom item,
5757
if (components != null) {
5858
// 基础组件:max_stack_size
5959
if (components.getMaxStackSize() != null && components.getMaxStackSize().value() != null) {
60-
builder.maxStackSize(components.getMaxStackSize().value());
60+
int stackSize = components.getMaxStackSize().value();
61+
builder.maxStackSize(stackSize);
6162
}
6263

6364
// TODO: minecraft:fuel(燃料属性)

addon-bridge-core/src/main/java/net/easecation/bridge/core/dto/item/v1_10/Components.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import com.fasterxml.jackson.annotation.JsonAnyGetter;
44
import com.fasterxml.jackson.annotation.JsonAnySetter;
5+
import com.fasterxml.jackson.annotation.JsonCreator;
56
import com.fasterxml.jackson.annotation.JsonProperty;
7+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
68

79
import java.util.HashMap;
810
import java.util.List;
@@ -237,9 +239,38 @@ public record Effect(
237239
/**
238240
* 最大堆叠数量
239241
*/
242+
@JsonDeserialize(using = MaxStackSize.Deserializer.class)
240243
public record MaxStackSize(
241244
@JsonProperty("value") Integer value
242-
) {}
245+
) {
246+
@JsonCreator
247+
public static MaxStackSize of(Integer value) {
248+
return new MaxStackSize(value);
249+
}
250+
251+
// Custom deserializer to handle both number and object formats
252+
public static class Deserializer extends com.fasterxml.jackson.databind.JsonDeserializer<MaxStackSize> {
253+
@Override
254+
public MaxStackSize deserialize(com.fasterxml.jackson.core.JsonParser p,
255+
com.fasterxml.jackson.databind.DeserializationContext ctxt)
256+
throws java.io.IOException {
257+
com.fasterxml.jackson.databind.JsonNode node = p.getCodec().readTree(p);
258+
259+
// Handle direct number format: "minecraft:max_stack_size": 1
260+
if (node.isNumber()) {
261+
return MaxStackSize.of(node.asInt());
262+
}
263+
264+
// Handle object format: "minecraft:max_stack_size": {"value": 1}
265+
if (node.isObject() && node.has("value")) {
266+
return MaxStackSize.of(node.get("value").asInt());
267+
}
268+
269+
throw new com.fasterxml.jackson.databind.JsonMappingException(p,
270+
"Cannot deserialize MaxStackSize: expected number or object with 'value' field");
271+
}
272+
}
273+
}
243274

244275
/**
245276
* 种子属性
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,40 @@
11
package net.easecation.bridge.core.dto.item.v1_20_81;
22

33
import com.fasterxml.jackson.annotation.*;
4+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
45

56
/* The max stack size component determines how many of the item can be stacked together. */
67
@JsonIgnoreProperties(ignoreUnknown = true)
8+
@JsonDeserialize(using = MaxStackSize.Deserializer.class)
79
public record MaxStackSize(
810
/* How many of the item that can be stacked. */
911
@JsonProperty("value") Double value
1012
) {
13+
@JsonCreator
14+
public static MaxStackSize of(Double value) {
15+
return new MaxStackSize(value);
16+
}
17+
18+
// Custom deserializer to handle both number and object formats
19+
public static class Deserializer extends com.fasterxml.jackson.databind.JsonDeserializer<MaxStackSize> {
20+
@Override
21+
public MaxStackSize deserialize(com.fasterxml.jackson.core.JsonParser p,
22+
com.fasterxml.jackson.databind.DeserializationContext ctxt)
23+
throws java.io.IOException {
24+
com.fasterxml.jackson.databind.JsonNode node = p.getCodec().readTree(p);
25+
26+
// Handle direct number format: "minecraft:max_stack_size": 1
27+
if (node.isNumber()) {
28+
return MaxStackSize.of(node.asDouble());
29+
}
30+
31+
// Handle object format: "minecraft:max_stack_size": {"value": 1}
32+
if (node.isObject() && node.has("value")) {
33+
return MaxStackSize.of(node.get("value").asDouble());
34+
}
35+
36+
throw new com.fasterxml.jackson.databind.JsonMappingException(p,
37+
"Cannot deserialize MaxStackSize: expected number or object with 'value' field");
38+
}
39+
}
1140
}

0 commit comments

Comments
 (0)