Skip to content

Commit 65bf87b

Browse files
Fix kubejs compat
1 parent 86a166c commit 65bf87b

31 files changed

+308
-106
lines changed

build.gradle.kts

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -98,65 +98,74 @@ repositories {
9898
}
9999
mavenLocal()
100100
mavenCentral()
101-
maven {
101+
maven { //Lodestone
102+
name = "BlameJared maven"
103+
url = uri("https://maven.blamejared.com/")
104+
}
105+
maven { //Curios
102106
name = "Curios maven"
103107
url = uri("https://maven.theillusivec4.top/")
104108
}
105-
maven {
109+
maven { //JEI
106110
name = "JEI maven"
107111
url = uri("https://dvs1.progwml6.com/files/maven")
108112
}
109-
maven {
110-
name = "BlameJared maven"
111-
url = uri("https://maven.blamejared.com/")
112-
}
113-
maven {
114-
name = "KosmX's maven"
115-
url = uri("https://maven.kosmx.dev/")
116-
}
117-
maven {
113+
114+
maven { //Curse Maven, Generic
118115
name = "Curse Maven"
119116
url = uri("https://cursemaven.com")
120117
content {
121118
includeGroup("curse.maven")
122119
}
123120
}
124-
maven {
125-
url = uri("https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/")
121+
maven { //ParchmentMC Maven, Generic
122+
name = "ParchmentMC"
123+
url = uri("https://maven.parchmentmc.org")
126124
content {
127-
includeGroup("software.bernie.geckolib")
125+
includeGroup("org.parchmentmc.data")
128126
}
129127
}
130-
maven {
128+
maven { //Mod Maven, Generic
131129
name = "ModMaven"
132130
url = uri("https://modmaven.dev")
133131
}
134-
maven {
132+
133+
maven { //KubeJS
134+
url = uri("https://maven.latvian.dev/releases")
135+
content {
136+
includeGroup("dev.latvian.mods")
137+
includeGroup("dev.latvian.apps")
138+
}
139+
}
140+
maven { //KubeJS Dependencies
135141
name = "jitpack"
136142
url = uri("https://jitpack.io")
137143
content {
138144
includeGroup("io.github")
145+
includeGroup("com.github.rtyley")
139146
}
140147
}
141-
maven {
142-
name = "OctoStudios"
143-
url = uri("https://maven.octo-studios.com/releases")
144-
}
145-
maven {
146-
url = uri("https://maven.latvian.dev/releases")
148+
149+
maven { //GeckoLib, Needed for Iron's Spellbooks
150+
url = uri("https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/")
147151
content {
148-
includeGroup("dev.latvian.mods")
152+
includeGroup("software.bernie.geckolib")
149153
}
150154
}
151-
maven {
155+
maven { //Player Animation Lib, Needed for Iron's Spellbooks
156+
name = "KosmX's maven"
157+
url = uri("https://maven.kosmx.dev/")
158+
}
159+
160+
maven { //Create
152161
url = uri("https://maven.createmod.net")
153-
} //Create
154-
maven {
162+
}
163+
maven { //Registrate
155164
url = uri("https://mvn.devos.one/snapshots")
156-
} //Registrate
157-
maven {
165+
}
166+
maven { // NeoForge config api port, needed by ponder
158167
url = uri("https://raw.githubusercontent.com/Fuzss/modresources/main/maven")
159-
} // NeoForge config api port, needed by ponder
168+
}
160169
}
161170

162171
dependencies {
@@ -178,8 +187,7 @@ dependencies {
178187
runtimeOnly(("team.lodestar.wayward_attributes:wayward_attributes:${property("minecraft_version")}-${property("wayward_attributes_version")}"))
179188

180189
// KubeJS
181-
implementation("curse.maven:rhino-416294:6184623")
182-
implementation("curse.maven:kubejs-238086:5810100")
190+
implementation("dev.latvian.mods:kubejs-neoforge:${property("kubejs_version")}")
183191

184192
// Tetra, Optional
185193
// compileOnly(("curse.maven:tetra-${property("tetra_version")}"))

changelogs/1.8.1.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Bugfixes
2+
- Fixed Rite of Hastening crashing the game in certain situations
3+
- Fixed Spirit Catalyzers not working properly when fed just one item at a time
4+
- Fixed Spirit Catalyzers not properly returning the crafting remainder items with, for example, Lava Buckets

gradle.properties

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ parchment_mappings_version=2024.11.17
1515

1616
mod_name=Malum
1717
mod_id=malum
18-
mod_version=1.8
18+
mod_version=1.8.1
1919
mod_license=All Rights Reserved
2020
mod_group_id=com.sammy.malum
2121
mod_authors=Sammy Semicolon
2222
mod_description=A dark magic mod focused on soul and spirit magic.
2323

2424
# Mandatory
2525
lodestone_version=1.8.0.510
26-
lodestone_version_range=[1.7.2,)
26+
lodestone_version_range=[1.8.0,)
2727
curios_version=9.3.1+1.21.1
2828

2929
# Wayward Attributes
@@ -34,6 +34,10 @@ gecko_lib_version=4.7
3434
player_animator_version=2.0.0-alpha1+1.21
3535
irons_spells_version=1.21-3.8.5
3636

37+
# KubeJS
38+
kubejs_version=2101.7.2-build.277
39+
rhino_version=2001.2.2-build.13
40+
3741
# Create
3842
create_version = 6.0.7-117
3943
flywheel_version = 1.0.4
@@ -42,7 +46,7 @@ ponder_version = 1.0.56
4246
registrate_version = MC1.21-1.3.0+62
4347

4448
# Misc
45-
jei_version=19.21.0.247
49+
jei_version=19.25.0.322
4650
fusion_version=1.1.1
4751

4852
imgui_version=1.86.11

src/main/java/com/sammy/malum/common/block/curiosities/spirit_catalyzer/CatalyzerArtificeModifierSourceInstance.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
import com.sammy.malum.core.systems.spirit.type.SpiritArcanaType;
66
import com.sammy.malum.visual_effects.SpiritCrucibleParticleEffects;
77
import net.minecraft.resources.ResourceLocation;
8+
import net.minecraft.world.entity.item.*;
89
import net.minecraft.world.item.ItemStack;
910
import net.minecraft.world.item.crafting.RecipeType;
11+
import net.minecraft.world.level.*;
1012
import team.lodestar.lodestone.helpers.block.BlockStateHelper;
1113

1214
import java.util.function.Consumer;
@@ -52,10 +54,21 @@ public boolean canModifyFocusing(ArtificeAttributeData attributes) {
5254
return true;
5355
}
5456
ItemStack stack = catalyzer.inventory.getStackInSlot(0);
55-
if (!stack.isEmpty() && stack.getBurnTime(RecipeType.SMELTING) > 0) {
56-
stack.shrink(1);
57-
catalyzer.burnTicks = stack.getBurnTime(RecipeType.SMELTING) / 2f;
58-
BlockStateHelper.updateAndNotifyState(catalyzer.getLevel(), catalyzer.getBlockPos());
57+
int burnTime = stack.getBurnTime(RecipeType.SMELTING);
58+
if (!stack.isEmpty()) {
59+
if (burnTime > 0) {
60+
catalyzer.burnTicks = burnTime / 2f;
61+
var level = catalyzer.getLevel();
62+
if (stack.hasCraftingRemainingItem()) {
63+
var remainder = stack.getCraftingRemainingItem();
64+
var catalyzerPos = catalyzer.getBlockPos();
65+
var spawnPos = SpiritCatalyzerCoreBlockEntity.CATALYZER_ITEM_OFFSET.add(catalyzerPos.getX(), catalyzerPos.getY(), catalyzerPos.getZ());
66+
var entity = new ItemEntity(level, spawnPos.x, spawnPos.y, spawnPos.z, remainder);
67+
level.addFreshEntity(entity);
68+
}
69+
stack.shrink(1);
70+
BlockStateHelper.updateAndNotifyState(level, catalyzer.getBlockPos());
71+
}
5972
}
6073
return catalyzer.burnTicks > 0;
6174
}

src/main/java/com/sammy/malum/common/data/attachment/WindTunnelData.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import com.sammy.malum.common.block.curiosities.gust_igniter.wind_tunnel.*;
77
import com.sammy.malum.core.handlers.*;
88
import com.sammy.malum.registry.common.*;
9+
import com.sammy.malum.visual_effects.networked.*;
10+
import com.sammy.malum.visual_effects.networked.wind_gust.*;
911
import io.netty.buffer.*;
1012
import net.minecraft.core.*;
1113
import net.minecraft.network.codec.*;
@@ -14,7 +16,9 @@
1416
import net.minecraft.world.entity.player.*;
1517
import net.minecraft.world.phys.*;
1618

19+
import java.awt.*;
1720
import java.util.*;
21+
import java.util.List;
1822

1923
public class WindTunnelData {
2024

@@ -101,8 +105,17 @@ public void tickData(Entity entity) {
101105
return;
102106
}
103107
activeTime++;
104-
if (entity instanceof ServerPlayer && activeTime % 4 == 0) {
105-
entity.syncData(MalumAttachmentTypes.WIND_TUNNEL_INFO);
108+
if (level instanceof ServerLevel serverLevel) {
109+
boolean isPlayer = entity instanceof Player;
110+
int interval = isPlayer ? 4 : 20;
111+
if (activeTime % interval == 0) {
112+
MalumParticleEffectTypes.WIND_TRAIL
113+
.createEffect(entity)
114+
.customData(new WindTrailParticleEffect.WindTrailParticleEffectData(entity.getId(), 2, interval*2))
115+
.color(new Color(224, 230, 255))
116+
.spawn(serverLevel);
117+
entity.syncData(MalumAttachmentTypes.WIND_TUNNEL_INFO);
118+
}
106119
}
107120
if (entity instanceof Player player) {
108121
player.resetFallDistance();

src/main/java/com/sammy/malum/common/geas/pact/aerial/CloudSkipperGeas.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ public void addTooltipComponents(LivingEntity entity, Consumer<Component> toolti
113113
tooltipAcceptor.accept(ComponentHelper.positiveGeasEffect("rocket_jumping"));
114114
tooltipAcceptor.accept(ComponentHelper.positiveGeasEffect("wind_gliding"));
115115
tooltipAcceptor.accept(ComponentHelper.negativeGeasEffect("weak_legs"));
116-
super.addTooltipComponents(entity, tooltipAcceptor, tooltipFlag);
117116
}
118117

119118
@Override

src/main/java/com/sammy/malum/common/spiritrite/effect/infernal/FurnaceAccelerationRiteEffect.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.sammy.malum.core.systems.rite.effect.*;
55
import net.minecraft.core.BlockPos;
66
import net.minecraft.server.level.ServerLevel;
7+
import net.minecraft.util.*;
78
import net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity;
89
import net.minecraft.world.level.block.state.BlockState;
910

@@ -20,33 +21,33 @@ public FurnaceAccelerationRiteEffect() {
2021
public void applyEffect(ServerLevel level, BlockRiteEffectActivatorEntity entity, BlockState state, BlockPos pos, float impact) {
2122
if (level.getBlockEntity(pos) instanceof AbstractFurnaceBlockEntity furnace) {
2223
createEffect(level, pos, INFERNAL_SPIRIT, ELDRITCH_SPIRIT);
23-
quickenFurnace(level, furnace, 20, 20);
24+
int progress = Mth.floor(20*impact);
25+
quickenFurnace(level, furnace, progress, progress);
2426
}
2527
}
2628

2729
public void quickenFurnace(ServerLevel level, AbstractFurnaceBlockEntity furnace, int removedLitTime, int addedCookingProgress) {
30+
if (!furnace.isLit()) {
31+
return;
32+
}
2833
int maxCookingTime = furnace.cookingTotalTime - 1;
2934
int excessLitTime = 0;
3035
int excessCookingProgress = 0;
3136

3237
furnace.litTime -= removedLitTime;
3338
furnace.cookingProgress += addedCookingProgress;
34-
if (furnace.litTime < 0) {
39+
if (furnace.litTime < 1) {
3540
int excess = Math.abs(furnace.litTime);
36-
furnace.litTime = 0;
41+
furnace.litTime = 1;
3742
excessLitTime = excess;
3843
}
3944
if (furnace.cookingProgress > maxCookingTime) {
4045
int excess = furnace.cookingProgress - maxCookingTime;
4146
furnace.cookingProgress = maxCookingTime;
4247
excessCookingProgress = excess;
4348
}
44-
if (excessLitTime != 0 || excessCookingProgress != 0) {
45-
int cachedLitTime = furnace.litTime;
46-
int cachedCookingProgress = furnace.cookingProgress;
49+
if (excessLitTime > 0 || excessCookingProgress > 0) {
4750
AbstractFurnaceBlockEntity.serverTick(level, furnace.getBlockPos(), furnace.getBlockState(), furnace);
48-
furnace.litTime = cachedLitTime;
49-
furnace.cookingProgress = cachedCookingProgress;
5051
quickenFurnace(level, furnace, excessLitTime, excessCookingProgress);
5152
//Recursion to update the furnace with the excess values after a successful smelt
5253
}

src/main/java/com/sammy/malum/compat/kubejs/MalumJSPlugin.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,25 @@
22

33
import com.sammy.malum.common.recipe.spirit_repair.*;
44
import com.sammy.malum.compat.kubejs.component.*;
5+
import com.sammy.malum.compat.kubejs.wrapper.*;
56
import com.sammy.malum.core.systems.recipe.*;
6-
import com.sammy.malum.registry.common.*;
77
import dev.latvian.mods.kubejs.plugin.*;
8-
import dev.latvian.mods.kubejs.recipe.schema.*;
8+
import dev.latvian.mods.kubejs.recipe.component.*;
99
import dev.latvian.mods.kubejs.script.*;
10-
import net.minecraft.core.*;
11-
import net.minecraft.sounds.*;
1210

1311
public class MalumJSPlugin implements KubeJSPlugin {
1412

1513
@Override
16-
public void registerRecipeComponents(RecipeComponentFactoryRegistry registry) {
14+
public void registerRecipeComponents(RecipeComponentTypeRegistry registry) {
1715
registry.register(SpiritJSComponent.SPIRIT_INGREDIENT);
18-
registry.register(SpiritRepairRegexDataJSComponent.REGEX_DATA);
16+
registry.register(SpiritRepairRegexDataJSComponent.REPAIR_REGEX);
1917
registry.register(SoundEventHolderJSComponent.SOUND_HOLDER);
2018
}
2119

2220
@Override
2321
public void registerBindings(BindingRegistry bindings) {
2422
bindings.add("SpiritComponent", SpiritJSComponentWrapper.class);
2523
bindings.add("RepairRegex", SpiritRepairRegexDataJSComponentWrapper.class);
26-
bindings.add("RunicWorkbenchSound", SpiritRepairRegexDataJSComponentWrapper.class);
2724
}
2825

2926
@Override

src/main/java/com/sammy/malum/compat/kubejs/component/SoundEventHolderJSComponent.java

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@
44
import com.mojang.brigadier.*;
55
import com.mojang.brigadier.exceptions.*;
66
import com.mojang.serialization.*;
7+
import com.sammy.malum.*;
8+
import com.sammy.malum.core.systems.recipe.*;
79
import com.sammy.malum.registry.common.*;
810
import dev.latvian.mods.kubejs.recipe.*;
911
import dev.latvian.mods.kubejs.recipe.component.*;
12+
import dev.latvian.mods.kubejs.recipe.filter.*;
1013
import dev.latvian.mods.kubejs.recipe.match.*;
1114
import dev.latvian.mods.kubejs.util.*;
1215
import dev.latvian.mods.rhino.*;
@@ -16,33 +19,40 @@
1619
import net.minecraft.resources.*;
1720
import net.minecraft.sounds.*;
1821

19-
public record SoundEventHolderJSComponent(String name, Codec<Holder<SoundEvent>> codec) implements RecipeComponent<Holder<SoundEvent>> {
22+
public record SoundEventHolderJSComponent(RecipeComponentType<?> type) implements RecipeComponent<Holder<SoundEvent>> {
2023

21-
//TODO: This should just be a built-in component in KubeJS, but using the existing one just parses a SoundEvent instead
22-
public static final RecipeComponent<Holder<SoundEvent>> SOUND_HOLDER = new SoundEventHolderJSComponent("malum:runic_workbench_sound", BuiltInRegistries.SOUND_EVENT.holderByNameCodec());
23-
public static final TypeInfo TYPE_INFO = TypeInfo.of(Holder.class).withParams(TypeInfo.of(SoundEvent.class));
24+
//TODO: This should just be a built-in component in KubeJS, but using the existing one just parses a SoundEvent instead not a Holder<SoundEvent>
25+
public static final RecipeComponentType<Holder<SoundEvent>> SOUND_HOLDER = RecipeComponentType.unit(
26+
MalumMod.malumPath("runic_workbench_sound"),
27+
SoundEventHolderJSComponent::new
28+
);
2429

2530
@Override
26-
public boolean matches(Context cx, KubeRecipe recipe, Holder<SoundEvent> value, ReplacementMatchInfo match) {
27-
return false;
31+
public RecipeComponentType<?> type() {
32+
return SOUND_HOLDER;
33+
}
34+
35+
@Override
36+
public Codec<Holder<SoundEvent>> codec() {
37+
return SoundEvent.CODEC;
2838
}
2939

3040
@Override
3141
public TypeInfo typeInfo() {
32-
return TYPE_INFO;
42+
return TypeInfo.of(SoundEvents.NOTE_BLOCK_XYLOPHONE.getClass());
3343
}
3444

3545
@Override
3646
public String toString() {
37-
return this.name;
47+
return type().id().getPath();
3848
}
3949

4050
@Override
41-
public Holder<SoundEvent> wrap(Context cx, KubeRecipe recipe, Object from) {
51+
public Holder<SoundEvent> wrap(RecipeScriptContext cx, Object from) {
4252
if (from instanceof JsonObject json) {
43-
return this.codec.decode(JsonOps.INSTANCE, json).result().orElseThrow().getFirst();
53+
return codec().decode(JsonOps.INSTANCE, json).result().orElseThrow().getFirst();
4454
}
45-
return fromObject(RegistryAccessContainer.of(cx), from);
55+
return fromObject(RegistryAccessContainer.of(cx.cx()), from);
4656
}
4757

4858
public static Holder<SoundEvent> fromObject(RegistryAccessContainer registries, Object from) {

0 commit comments

Comments
 (0)