Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ public void initStartup() {
new ItemToolTierEventJS().post(KubeJSEvents.ITEM_REGISTRY_TOOL_TIERS);
new ItemArmorTierEventJS().post(KubeJSEvents.ITEM_REGISTRY_ARMOR_TIERS);

for (val registryInfo : RegistryInfos.WITH_TYPE.values()) {
for (val registryInfo : RegistryInfos.MAP.values()) {
registryInfo.fireRegistryEvent();
}
// new BlockRegistryEventJS().post(KubeJSEvents.BLOCK_REGISTRY);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package dev.latvian.kubejs;

import dev.latvian.kubejs.script.prop.ScriptProperty;
import dev.latvian.kubejs.util.KubeJSPlugins;
import lombok.val;

Expand Down Expand Up @@ -58,7 +59,9 @@ private CommonProperties() {
hideServerScriptErrors = get("hideServerScriptErrors", false);
serverOnly = get("serverOnly", false);
announceReload = get("announceReload", true);
packMode = get("packmode", "");
invertClassLoader = "true".equals(properties.getProperty("invertClassLoader")); // Advanced option, not recommended to be set to true
packMode = get("packmode", ScriptProperty.PACKMODE.defaultValue);
debugInfo = get("debugInfo", false);
saveDevPropertiesInConfig = get("saveDevPropertiesInConfig", false);
allowAsyncStreams = get("allowAsyncStreams", true);
matchJsonRecipes = get("matchJsonRecipes", true);
Expand Down
2 changes: 1 addition & 1 deletion common/src/main/java/dev/latvian/kubejs/KubeJS.java
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public static ResourceLocation id(String path) {
public static KubeJSCommon PROXY;
public static boolean nextClientHasClientMod = false;
/**
* KubeJS's own tab will be registered at {@code <init>}
* KubeJS's own tab will be registered at {@link KubeJS#KubeJS()}
*/
public static CreativeModeTab tab = CreativeModeTab.TAB_MISC;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import dev.latvian.kubejs.script.ScriptType;
import dev.latvian.kubejs.util.ConsoleJS;
import dev.latvian.mods.rhino.annotations.typing.JSInfo;
import dev.latvian.mods.rhino.annotations.typing.ReturnsSelf;
import dev.latvian.mods.rhino.util.HideFromJS;
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
import lombok.val;
Expand Down Expand Up @@ -47,6 +48,7 @@
/**
* @author LatvianModder
*/
@ReturnsSelf
public class BlockBuilder extends BuilderBase<Block> {

@Deprecated
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
import dev.latvian.kubejs.client.ModelGenerator;
import dev.latvian.kubejs.client.VariantBlockStateGenerator;
import dev.latvian.kubejs.generator.AssetJsonGenerator;
import dev.latvian.mods.rhino.annotations.typing.ReturnsSelf;
import lombok.val;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BlockTags;
import net.minecraft.world.level.block.Block;

@ReturnsSelf
public class ButtonBlockBuilder extends ShapedBlockBuilder {
public boolean sensitive;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import dev.latvian.kubejs.item.custom.SeedItemBuilder;
import dev.latvian.kubejs.world.BlockContainerJS;
import dev.latvian.mods.rhino.annotations.typing.JSInfo;
import dev.latvian.mods.rhino.annotations.typing.ReturnsSelf;
import lombok.val;
import me.shedaniel.architectury.platform.Platform;
import net.minecraft.core.BlockPos;
Expand All @@ -38,6 +39,7 @@
import java.util.function.ToDoubleFunction;
import java.util.function.ToIntFunction;

@ReturnsSelf
public class CropBlockBuilder extends BlockBuilder {
@FunctionalInterface
public interface SurviveCallback {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dev.latvian.kubejs.block.custom.builder;

import dev.latvian.kubejs.block.BlockBuilder;
import dev.latvian.mods.rhino.annotations.typing.ReturnsSelf;
import dev.latvian.mods.rhino.mod.util.color.Color;
import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceLocation;
Expand All @@ -9,6 +10,7 @@
import net.minecraft.world.level.block.FallingBlock;
import net.minecraft.world.level.block.state.BlockState;

@ReturnsSelf
public class FallingBlockBuilder extends BlockBuilder {
/**
* @see net.minecraft.world.level.block.GravelBlock#getDustColor(BlockState, BlockGetter, BlockPos)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@
import dev.latvian.kubejs.client.ModelGenerator;
import dev.latvian.kubejs.client.MultipartBlockStateGenerator;
import dev.latvian.kubejs.generator.AssetJsonGenerator;
import dev.latvian.mods.rhino.annotations.typing.ReturnsSelf;
import lombok.val;
import me.shedaniel.architectury.platform.Platform;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BlockTags;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.FenceBlock;

@ReturnsSelf
public class FenceBlockBuilder extends MultipartShapedBlockBuilder {
public FenceBlockBuilder(ResourceLocation i) {
super(i, "_fence");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import dev.latvian.kubejs.client.ModelGenerator;
import dev.latvian.kubejs.client.VariantBlockStateGenerator;
import dev.latvian.kubejs.generator.AssetJsonGenerator;
import dev.latvian.mods.rhino.annotations.typing.ReturnsSelf;
import lombok.val;
import me.shedaniel.architectury.platform.Platform;
import net.minecraft.resources.ResourceLocation;
Expand All @@ -13,6 +14,7 @@

import java.util.stream.Collectors;

@ReturnsSelf
public class FenceGateBlockBuilder extends ShapedBlockBuilder {
public transient WoodType behaviour;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import dev.latvian.kubejs.client.ModelGenerator;
import dev.latvian.kubejs.client.VariantBlockStateGenerator;
import dev.latvian.kubejs.generator.AssetJsonGenerator;
import dev.latvian.mods.rhino.annotations.typing.ReturnsSelf;
import lombok.val;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
Expand All @@ -28,6 +29,7 @@
import java.util.List;
import java.util.Map;

@ReturnsSelf
public class HorizontalDirectionalBlockBuilder extends BlockBuilder {

// Cardinal blocks that can face any horizontal direction (NSEW).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
import dev.latvian.kubejs.client.ModelGenerator;
import dev.latvian.kubejs.client.VariantBlockStateGenerator;
import dev.latvian.kubejs.generator.AssetJsonGenerator;
import dev.latvian.mods.rhino.annotations.typing.ReturnsSelf;
import lombok.val;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BlockTags;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.PressurePlateBlock;

@ReturnsSelf
public class PressurePlateBlockBuilder extends ShapedBlockBuilder {
public transient PressurePlateBlock.Sensitivity sensitivity;

Expand Down
2 changes: 1 addition & 1 deletion common/src/main/java/dev/latvian/kubejs/event/EventJS.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ protected void afterPosted(boolean result) {
* @return true if the event itself can be cancelled and there's any handler that called `event.cancel()`, otherwise false
*/
public final boolean post(@NotNull ScriptType type, @NotNull List<String> ids) {
if (type != ScriptType.STARTUP && post(ScriptType.STARTUP, ids) && canCancel()) {
if (type != ScriptType.STARTUP && post(ScriptType.STARTUP, ids)) {
return true;
}
val e = type.manager.get().events;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import dev.latvian.kubejs.registry.RegistryInfo;
import dev.latvian.kubejs.registry.BuilderBase;
import dev.latvian.kubejs.registry.RegistryInfos;
import dev.latvian.mods.rhino.annotations.typing.ReturnsSelf;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.BucketItem;
import net.minecraft.world.level.block.Block;
Expand All @@ -19,6 +20,7 @@
/**
* @author LatvianModder
*/
@ReturnsSelf
public class FluidBuilder extends BuilderBase<Fluid> {
public String stillTexture;
public String flowingTexture;
Expand Down
2 changes: 2 additions & 0 deletions common/src/main/java/dev/latvian/kubejs/item/ItemBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import dev.latvian.kubejs.registry.types.tab.KjsTabs;
import dev.latvian.kubejs.util.ConsoleJS;
import dev.latvian.mods.rhino.annotations.typing.JSInfo;
import dev.latvian.mods.rhino.annotations.typing.ReturnsSelf;
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
import lombok.val;
import me.shedaniel.architectury.registry.ToolType;
Expand Down Expand Up @@ -48,6 +49,7 @@
import java.util.function.Function;
import java.util.function.ToIntFunction;

@ReturnsSelf
public class ItemBuilder extends BuilderBase<Item> {
public static final Map<String, Tier> TOOL_TIERS = new HashMap<>();
public static final Map<String, ArmorMaterial> ARMOR_TIERS = new HashMap<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

import dev.latvian.kubejs.core.BlockKJS;
import dev.latvian.mods.rhino.BaseFunction;
import dev.latvian.mods.rhino.Context;
import dev.latvian.mods.rhino.NativeJavaObject;
import dev.latvian.mods.rhino.Undefined;
import dev.latvian.mods.rhino.mod.util.color.Color;
import dev.latvian.mods.rhino.mod.util.color.SimpleColor;
import dev.latvian.mods.rhino.mod.wrapper.ColorWrapper;
import dev.latvian.mods.rhino.native_java.type.info.TypeInfo;
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import lombok.val;
Expand Down Expand Up @@ -70,7 +72,7 @@ public Color getColor(ItemStack stack, int index) {
};

@Nullable
static ItemTintFunction of(Object o) {
static ItemTintFunction of(Context cx, Object o, TypeInfo target) {
if (o == null || Undefined.isUndefined(o)) {
return null;
} else if (o instanceof ItemTintFunction f) {
Expand All @@ -79,7 +81,7 @@ static ItemTintFunction of(Object o) {
val map = new Mapped();

for (int i = 0; i < list.size(); i++) {
val f = of(list.get(i));
val f = of(cx, list.get(i), target);

if (f != null) {
map.map.put(i, f);
Expand All @@ -99,7 +101,11 @@ static ItemTintFunction of(Object o) {
return fn;
}
} else if (o instanceof BaseFunction function) {
return (ItemTintFunction) NativeJavaObject.createInterfaceAdapter(ItemTintFunction.class, function);
return (ItemTintFunction) NativeJavaObject.createInterfaceAdapter(
cx,
ItemTintFunction.class,
function
);
}

return new Fixed(ColorWrapper.of(o));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import dev.latvian.kubejs.util.ConsoleJS;
import dev.latvian.kubejs.util.UtilsJS;
import dev.latvian.mods.rhino.annotations.typing.JSInfo;
import dev.latvian.mods.rhino.annotations.typing.ReturnsSelf;
import lombok.val;
import net.minecraft.Util;
import net.minecraft.network.chat.Component;
Expand All @@ -15,6 +16,7 @@
import java.util.Set;
import java.util.function.Supplier;

@ReturnsSelf
public abstract class BuilderBase<T> implements Supplier<T> {
public final ResourceLocation id;
protected String translationKey;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public RegistryEventJS(RegistryInfo<T> r) {
}

public BuilderBase<? extends T> create(String id, String type) {
val builderType = registry.types.get(type);
val builderType = registry.builderTypes.get(type);
if (builderType == null) {
throw new IllegalArgumentException("Unknown type '" + type + "' for object '" + id + "'!");
}
Expand Down
33 changes: 13 additions & 20 deletions common/src/main/java/dev/latvian/kubejs/registry/RegistryInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,9 @@ static <T> RegistryInfo<T> of(Registry<?> registry, Class<T> type) {
return of(registry.key(), type);
}

public static RegistryInfo<?> of(ResourceKey<? extends Registry<?>> key) {
return of(key, Object.class);
}

public final ResourceKey<? extends Registry<T>> key;
public final Class<T> objectBaseClass;
public final Map<String, BuilderType<T>> types;
public final Class<T> type;
public final Map<String, BuilderType<T>> builderTypes;
public final Map<ResourceLocation, BuilderBase<? extends T>> objects;
public boolean hasDefaultTags = false;
private BuilderType<T> defaultType;
Expand All @@ -57,18 +53,17 @@ public static RegistryInfo<?> of(ResourceKey<? extends Registry<?>> key) {
private me.shedaniel.architectury.registry.Registry<T> archRegistry;
public String languageKeyPrefix;
//used for backward compatibility
public Supplier<RegistryEventJS<T>> customRegEvent;
public Supplier<RegistryEventJS<T>> registryEventProvider = () -> new RegistryEventJS<>(this);
public final List<String> eventIds;

private RegistryInfo(ResourceKey<? extends Registry<T>> key, Class<T> objectBaseClass) {
private RegistryInfo(ResourceKey<? extends Registry<T>> key, Class<T> type) {
this.key = key;
this.objectBaseClass = objectBaseClass;
this.types = new LinkedHashMap<>();
this.type = type;
this.builderTypes = new LinkedHashMap<>();
this.objects = new LinkedHashMap<>();
this.bypassServerOnly = false;
this.autoWrap = objectBaseClass != Codec.class && objectBaseClass != ResourceLocation.class && objectBaseClass != String.class;
this.autoWrap = type != Codec.class && type != ResourceLocation.class && type != String.class;
this.languageKeyPrefix = key.location().getPath().replace('/', '.');
this.customRegEvent = null;
eventIds = new ArrayList<>(Collections.singletonList(key.location().getPath() + KubeJSEvents.REGISTRY_SUFFIX));
}

Expand All @@ -78,7 +73,7 @@ public RegistryInfo<T> bypassServerOnly() {
}

public RegistryInfo<T> customRegistryEvent(Supplier<RegistryEventJS<T>> supplier) {
this.customRegEvent = supplier;
this.registryEventProvider = supplier;
return this;
}

Expand All @@ -94,7 +89,7 @@ public RegistryInfo<T> languageKeyPrefix(String prefix) {

public void addType(String type, Class<? extends BuilderBase<? extends T>> builderType, BuilderFactory factory, boolean isDefault) {
val b = new BuilderType<>(type, builderType, factory);
types.put(type, b);
builderTypes.put(type, b);

if (isDefault) {
if (defaultType != null) {
Expand Down Expand Up @@ -127,10 +122,10 @@ public void addBuilder(BuilderBase<? extends T> builder) {

@Nullable
public BuilderType<T> getDefaultType() {
if (types.isEmpty()) {
if (builderTypes.isEmpty()) {
return null;
} else if (defaultType == null) {
defaultType = types.values().iterator().next();
defaultType = builderTypes.values().iterator().next();
}

return defaultType;
Expand Down Expand Up @@ -230,7 +225,7 @@ public boolean hasValue(ResourceLocation id) {
public T wrap(Object o) {
if (o == null) {
return null;
} else if (objectBaseClass.isInstance(o)) {
} else if (type.isInstance(o)) {
return (T) o;
}

Expand All @@ -247,9 +242,7 @@ public T wrap(Object o) {
}

public void fireRegistryEvent() {
val event = customRegEvent == null
? new RegistryEventJS<>(this)
: customRegEvent.get();
val event = registryEventProvider.get();
event.post(ScriptType.STARTUP, eventIds);
event.created.forEach(BuilderBase::createAdditionalObjects);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import dev.latvian.kubejs.registry.RegistryInfo;
import dev.latvian.kubejs.registry.BuilderBase;
import dev.latvian.kubejs.registry.RegistryInfos;
import dev.latvian.mods.rhino.annotations.typing.ReturnsSelf;
import it.unimi.dsi.fastutil.ints.Int2IntFunction;
import it.unimi.dsi.fastutil.objects.Object2BooleanFunction;
import net.minecraft.resources.ResourceLocation;
Expand All @@ -14,6 +15,7 @@
import net.minecraft.world.item.enchantment.Enchantment;
import net.minecraft.world.item.enchantment.EnchantmentCategory;

@ReturnsSelf
public class EnchantmentBuilder extends BuilderBase<Enchantment> {
@FunctionalInterface
public interface DamageProtectionFunction {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import dev.latvian.kubejs.registry.BuilderBase;
import dev.latvian.kubejs.registry.RegistryInfo;
import dev.latvian.kubejs.registry.RegistryInfos;
import dev.latvian.mods.rhino.annotations.typing.ReturnsSelf;
import dev.latvian.mods.rhino.mod.util.color.Color;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.effect.MobEffect;
Expand All @@ -14,6 +15,7 @@
import java.util.Map;
import java.util.UUID;

@ReturnsSelf
public abstract class MobEffectBuilder extends BuilderBase<MobEffect> {

@FunctionalInterface
Expand Down
Loading
Loading