Skip to content

Commit 84b072d

Browse files
fix lazy component init
1 parent 9b852dc commit 84b072d

3 files changed

Lines changed: 59 additions & 17 deletions

File tree

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ modrinth_id=umyGl7zF
1313
minecraft_version=26.1.2
1414
supported_versions=26.1.2
1515

16-
neoforgeVersion=26.1.2.71
17-
neoforgeVersions=[26.1.2.71,)
16+
neoforgeVersion=26.1.2.78
17+
neoforgeVersions=[26.1.2.78,)
1818
rhinoVersion=2101.2.7-build.85
1919
tinyServerVersion=1.0.0-build.45
2020
gifLibVersion=1.7

src/main/java/dev/latvian/mods/kubejs/core/component/ItemComponentFunctions.java

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
package dev.latvian.mods.kubejs.core.component;
22

3+
import dev.latvian.mods.kubejs.KubeJS;
34
import dev.latvian.mods.kubejs.color.KubeColor;
5+
import dev.latvian.mods.kubejs.util.RegistryAccessContainer;
6+
import dev.latvian.mods.rhino.Context;
47
import dev.latvian.mods.rhino.util.RemapPrefixForJS;
58
import net.minecraft.core.Holder;
69
import net.minecraft.core.HolderSet;
710
import net.minecraft.core.component.DataComponents;
811
import net.minecraft.nbt.CompoundTag;
912
import net.minecraft.network.chat.Component;
1013
import net.minecraft.resources.Identifier;
14+
import net.minecraft.tags.DamageTypeTags;
1115
import net.minecraft.world.damagesource.DamageType;
1216
import net.minecraft.world.food.FoodProperties;
1317
import net.minecraft.world.item.Instrument;
@@ -25,6 +29,7 @@
2529
import net.minecraft.world.item.component.TooltipDisplay;
2630
import net.minecraft.world.item.component.TypedEntityData;
2731
import net.minecraft.world.level.block.entity.BlockEntityType;
32+
import net.neoforged.neoforge.registries.holdersets.OrHolderSet;
2833

2934
import java.util.List;
3035

@@ -70,12 +75,33 @@ public interface ItemComponentFunctions extends DataComponentAccessor, Attribute
7075
kjs$setFood(new FoodProperties.Builder().nutrition(nutrition).saturationModifier(saturation).build());
7176
}
7277

73-
default void kjs$addDamageResistance(HolderSet<DamageType> types) {
78+
default void kjs$clearDamageResistance() {
79+
kjs$remove(DataComponents.DAMAGE_RESISTANT);
80+
}
81+
82+
default void kjs$setDamageResistance(HolderSet<DamageType> types) {
7483
kjs$override(DataComponents.DAMAGE_RESISTANT, new DamageResistant(types));
7584
}
7685

77-
default void kjs$setFireResistant(HolderSet<DamageType> fireTypes) {
78-
kjs$addDamageResistance(fireTypes);
86+
default void kjs$addDamageResistance(HolderSet<DamageType> types) {
87+
var existing = get(DataComponents.DAMAGE_RESISTANT);
88+
if (existing != null) {
89+
kjs$setDamageResistance(new OrHolderSet<>(existing.types(), types));
90+
} else {
91+
kjs$setDamageResistance(types);
92+
}
93+
}
94+
95+
default void kjs$setFireResistant(Context cx) {
96+
kjs$addDamageResistance(RegistryAccessContainer.of(cx).getOrThrow(DamageTypeTags.IS_FIRE));
97+
}
98+
99+
@Deprecated
100+
default void kjs$setFireResistant(Context cx, boolean fireResistant) {
101+
KubeJS.LOGGER.warn("kjs$setFireResistant(boolean) is deprecated due to changes in damage resistance, use the no-arg version instead");
102+
if (fireResistant) {
103+
kjs$setFireResistant(cx);
104+
}
79105
}
80106

81107
default void kjs$setTool(Tool tool) {

src/main/java/dev/latvian/mods/kubejs/item/ItemModificationKubeEvent.java

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package dev.latvian.mods.kubejs.item;
22

3+
import dev.latvian.mods.kubejs.KubeJS;
34
import dev.latvian.mods.kubejs.core.component.ItemComponentFunctions;
45
import dev.latvian.mods.kubejs.event.KubeEvent;
56
import dev.latvian.mods.kubejs.typings.Info;
67
import dev.latvian.mods.kubejs.util.TickDuration;
78
import dev.latvian.mods.kubejs.util.registrypredicate.RegistryPredicate;
9+
import dev.latvian.mods.rhino.Context;
810
import dev.latvian.mods.rhino.util.HideFromJS;
911
import dev.latvian.mods.rhino.util.RemapPrefixForJS;
1012
import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap;
13+
import net.minecraft.core.HolderLookup;
1114
import net.minecraft.core.HolderSet;
1215
import net.minecraft.core.component.DataComponentMap;
1316
import net.minecraft.core.component.DataComponentPatch;
@@ -16,6 +19,7 @@
1619
import net.minecraft.core.registries.BuiltInRegistries;
1720
import net.minecraft.core.registries.Registries;
1821
import net.minecraft.tags.BlockTags;
22+
import net.minecraft.tags.DamageTypeTags;
1923
import net.minecraft.tags.TagKey;
2024
import net.minecraft.util.Util;
2125
import net.minecraft.world.entity.EquipmentSlotGroup;
@@ -36,10 +40,6 @@
3640

3741
import java.util.List;
3842
import java.util.function.Consumer;
39-
import java.util.function.Function;
40-
import java.util.function.Predicate;
41-
import java.util.function.ToIntBiFunction;
42-
import java.util.function.ToIntFunction;
4343

4444
import static net.minecraft.world.item.Item.BASE_ATTACK_DAMAGE_ID;
4545

@@ -55,32 +55,32 @@ public ItemModificationKubeEvent(ModifyDefaultComponentsEvent event) {
5555

5656
@Info("""
5757
Modifies items matching the given ingredient.
58-
58+
5959
**NOTE**: tag ingredients are not supported at this time.
6060
""")
6161
// TODO: item with component filter support?
6262
public void modify(RegistryPredicate<Item> in, Consumer<ItemModifications> c) {
6363
for (Item item : BuiltInRegistries.ITEM) {
6464
if (in.test(item.kjs$asHolder())) {
65-
event.modify(item, builder -> c.accept(new ItemModifications(item, builder)));
65+
event.modify(item, (builder, context, key) -> c.accept(new ItemModifications(item, builder, context)));
6666
}
6767
}
6868
}
6969

7070
@RemapPrefixForJS("kjs$")
71-
public record ItemModifications(Item item, DataComponentMap.Builder patch) implements ItemComponentFunctions, ItemBehaviorFunctions {
71+
public record ItemModifications(Item item, DataComponentMap.Builder components, HolderLookup.Provider registries) implements ItemComponentFunctions, ItemBehaviorFunctions {
7272
@HideFromJS
7373
public static final Reference2IntOpenHashMap<Item> BURN_TIME_OVERRIDES = new Reference2IntOpenHashMap<>();
7474

7575
@Override
7676
public <T> @Nullable T get(DataComponentType<? extends T> type) {
77-
return patch.get(type);
77+
return components.get(type);
7878
}
7979

8080
@Override
8181
@HideFromJS
8282
public <T> void kjs$override(DataComponentType<T> type, @Nullable T value) {
83-
patch.set(type, value);
83+
components.set(type, value);
8484
}
8585

8686
@Override
@@ -89,8 +89,24 @@ public record ItemModifications(Item item, DataComponentMap.Builder patch) imple
8989
kjs$override(DataComponents.ATTRIBUTE_MODIFIERS, modifiers);
9090
}
9191

92+
@Override
93+
@HideFromJS
94+
public void kjs$setFireResistant(Context cx) {
95+
kjs$addDamageResistance(registries.lookupOrThrow(Registries.DAMAGE_TYPE).get(DamageTypeTags.IS_FIRE).orElseThrow());
96+
}
97+
98+
@Override
99+
@Deprecated
100+
@HideFromJS
101+
public void kjs$setFireResistant(Context cx, boolean fireResistant) {
102+
KubeJS.LOGGER.warn("kjs$setFireResistant(boolean) is deprecated due to changes in damage resistance, use the no-arg version instead");
103+
if (fireResistant) {
104+
kjs$setFireResistant(cx);
105+
}
106+
}
107+
92108
public void removeComponent(DataComponentType<?> type) {
93-
patch.set(type, null);
109+
components.set(type, null);
94110
}
95111

96112
public void setBurnTime(TickDuration i) {
@@ -103,8 +119,8 @@ public void setCraftingRemainder(Item item) {
103119
}
104120

105121
public void setTier(Consumer<MutableToolMaterial> builder) {
106-
var items = BuiltInRegistries.acquireBootstrapRegistrationLookup(BuiltInRegistries.ITEM);
107-
var blocks = BuiltInRegistries.acquireBootstrapRegistrationLookup(BuiltInRegistries.BLOCK);
122+
var items = registries.lookupOrThrow(Registries.ITEM);
123+
var blocks = registries.lookupOrThrow(Registries.BLOCK);
108124

109125
var material = Util.make(new MutableToolMaterial(ToolMaterial.IRON), builder).toToolMaterial();
110126

0 commit comments

Comments
 (0)