Skip to content

Commit

Permalink
Everything is broken, but hey, it sometimes even opens world without …
Browse files Browse the repository at this point in the history
…crashing
  • Loading branch information
LatvianModder committed May 24, 2024
1 parent f8b5978 commit 7486b4e
Show file tree
Hide file tree
Showing 28 changed files with 117 additions and 188 deletions.
4 changes: 3 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,10 @@ processResources {
"architectury_version": rootProject.architectury_version
]

println("[Process Resources] Replacing properties in resources: " + toReplace)

inputs.properties toReplace
filesMatching("META-INF/mods.toml") {
filesMatching("META-INF/neoforge.mods.toml") {
expand toReplace
}
}
Expand Down
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ curseforge_id=238086
modrinth_id=umyGl7zF
minecraft_version=1.20.6
neoforge_version=20.6.75-beta
rhino_version=2006.2.4-build.11
min_rhino_version=2006.2.4-build.11
rhino_version=2006.2.4-build.12
min_rhino_version=2006.2.4-build.12
architectury_version=12.1.2
rei_version=15.0.728
#rei_comp_version=9.0.16
Expand Down
42 changes: 22 additions & 20 deletions src/main/java/dev/latvian/mods/kubejs/BuiltinKubeJSPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import dev.latvian.mods.kubejs.bindings.AABBWrapper;
import dev.latvian.mods.kubejs.bindings.BlockWrapper;
import dev.latvian.mods.kubejs.bindings.ColorWrapper;
import dev.latvian.mods.kubejs.bindings.DamageSourceWrapper;
import dev.latvian.mods.kubejs.bindings.DirectionWrapper;
import dev.latvian.mods.kubejs.bindings.IngredientWrapper;
import dev.latvian.mods.kubejs.bindings.ItemWrapper;
Expand Down Expand Up @@ -103,9 +104,11 @@
import dev.latvian.mods.kubejs.recipe.schema.minecraft.StonecuttingRecipeSchema;
import dev.latvian.mods.kubejs.registry.RegistryInfo;
import dev.latvian.mods.kubejs.script.BindingsEvent;
import dev.latvian.mods.kubejs.script.KubeJSContext;
import dev.latvian.mods.kubejs.script.PlatformWrapper;
import dev.latvian.mods.kubejs.script.ScriptType;
import dev.latvian.mods.kubejs.script.WrapperRegistry;
import dev.latvian.mods.kubejs.server.ScheduledServerEvent;
import dev.latvian.mods.kubejs.server.ServerScriptManager;
import dev.latvian.mods.kubejs.util.ClassFilter;
import dev.latvian.mods.kubejs.util.FluidAmounts;
Expand Down Expand Up @@ -344,8 +347,8 @@ public void registerBindings(BindingsEvent event) {

// event.add("onEvent", new LegacyCodeHandler("onEvent()"));

if (event.type().isServer() && event.context().kjsFactory.manager instanceof ServerScriptManager sm && sm.server != null) {
var se = sm.server.kjs$getScheduledEvents();
if (event.type().isServer() && event.context().kjsFactory.manager instanceof ServerScriptManager) {
var se = ScheduledServerEvent.EVENTS;

event.add("setTimeout", new ScheduledEvents.TimeoutJSFunction(se, false, false));
event.add("clearTimeout", new ScheduledEvents.TimeoutJSFunction(se, true, false));
Expand Down Expand Up @@ -418,23 +421,23 @@ public void registerTypeWrappers(WrapperRegistry registry) {
registry.registerSimple(JsonPrimitive.class, JsonIO::primitiveOf);
registry.registerSimple(Path.class, UtilsJS::getPath);
registry.registerSimple(File.class, UtilsJS::getFileFromPath);
registry.register(Unit.class, (cx, o, target) -> Painter.INSTANCE.unitOf(cx, o));
registry.register(Unit.class, (cx, from, target) -> Painter.INSTANCE.unitOf(cx, from));
registry.registerSimple(TemporalAmount.class, UtilsJS::getTemporalAmount);
registry.registerSimple(Duration.class, UtilsJS::getDuration);

registry.register(ResourceLocation.class, (cx, o, target) -> UtilsJS.getMCID(cx, o));
registry.register(CompoundTag.class, (o, target) -> NBTUtils.isTagCompound(o), (cx, o, target) -> NBTUtils.toTagCompound(cx, o));
registry.register(CollectionTag.class, (o, target) -> NBTUtils.isTagCollection(o), (cx, o, target) -> NBTUtils.toTagCollection(cx, o));
registry.register(ListTag.class, (o, target) -> NBTUtils.isTagCollection(o), (cx, o, target) -> NBTUtils.toTagList(cx, o));
registry.register(Tag.class, (cx, o, target) -> NBTUtils.toTag(cx, o));
registry.register(DataComponentMap.class, (cx, o, target) -> KubeJSComponents.mapOf(cx, o));
registry.register(DataComponentPatch.class, (cx, o, target) -> KubeJSComponents.patchOf(cx, o));
registry.register(ResourceLocation.class, (cx, from, target) -> UtilsJS.getMCID(cx, from));
registry.register(CompoundTag.class, (from, target) -> NBTUtils.isTagCompound(from), (cx, o, target) -> NBTUtils.toTagCompound(cx, o));
registry.register(CollectionTag.class, (from, target) -> NBTUtils.isTagCollection(from), (cx, o, target) -> NBTUtils.toTagCollection(cx, o));
registry.register(ListTag.class, (from, target) -> NBTUtils.isTagCollection(from), (cx, o, target) -> NBTUtils.toTagList(cx, o));
registry.register(Tag.class, (cx, from, target) -> NBTUtils.toTag(cx, from));
registry.register(DataComponentMap.class, (cx, from, target) -> KubeJSComponents.mapOf(cx, from));
registry.register(DataComponentPatch.class, (cx, from, target) -> KubeJSComponents.patchOf(cx, from));

registry.registerSimple(BlockPos.class, UtilsJS::blockPosOf);
registry.registerSimple(Vec3.class, UtilsJS::vec3Of);

registry.register(Item.class, (cx, o, target) -> ItemStackJS.getRawItem(cx, o));
registry.register(ItemLike.class, (cx, o, target) -> ItemStackJS.getRawItem(cx, o));
registry.register(Item.class, (cx, from, target) -> ItemStackJS.getRawItem(cx, from));
registry.register(ItemLike.class, (cx, from, target) -> ItemStackJS.getRawItem(cx, from));
registry.registerEnumFromStringCodec(MobCategory.class, MobCategory.CODEC);

registry.registerSimple(AABB.class, AABBWrapper::wrap);
Expand All @@ -458,29 +461,28 @@ public void registerTypeWrappers(WrapperRegistry registry) {
registry.registerSimple(InputItem.class, InputItem::of);
registry.registerSimple(OutputItem.class, OutputItem::of);
registry.registerSimple(BlockStatePredicate.class, BlockStatePredicate::of);
registry.register(RuleTest.class, (cx, o, target) -> BlockStatePredicate.ruleTestOf(cx, o));
registry.register(RuleTest.class, (cx, from, target) -> BlockStatePredicate.ruleTestOf(cx, from));
registry.registerSimple(FluidStack.class, FluidWrapper::wrap);
registry.registerSimple(dev.architectury.fluid.FluidStack.class, FluidWrapper::wrapArch);
registry.register(RecipeFilter.class, (cx, o, target) -> RecipeFilter.of(cx, o));
registry.register(RecipeFilter.class, (cx, from, target) -> RecipeFilter.of(cx, from));
registry.registerSimple(IngredientActionFilter.class, IngredientActionFilter::filterOf);
registry.registerSimple(Tier.class, ItemBuilder::toToolTier);
registry.registerSimple(PlayerSelector.class, PlayerSelector::of);
// FIXME (high): Damage sources are dynamic registries now!!
//typeWrappers.registerSimple(DamageSource.class, DamageSourceWrapper::of);
registry.register(DamageSource.class, (cx, from, target) -> DamageSourceWrapper.of(cx, from));
registry.registerSimple(EntitySelector.class, UtilsJS::entitySelector);
registry.registerSimple(ReplacementMatch.class, ReplacementMatch::of);
registry.registerSimple(Stat.class, PlayerStatsJS::statOf);
registry.registerSimple(MapColor.class, MapColorHelper::of);
registry.register(SoundType.class, SoundTypeWrapper.INSTANCE);
registry.register(ParticleOptions.class, (cx, o, target) -> UtilsWrapper.particleOptions(cx, o));
registry.register(ItemTintFunction.class, (cx, o, target) -> ItemTintFunction.of(cx, o));
registry.register(BlockTintFunction.class, (cx, o, target) -> BlockTintFunction.of(cx, o));
registry.register(ParticleOptions.class, (cx, from, target) -> UtilsWrapper.particleOptions(new WithContext<>((KubeJSContext) cx, from)));
registry.register(ItemTintFunction.class, (cx, from, target) -> ItemTintFunction.of(cx, from));
registry.register(BlockTintFunction.class, (cx, from, target) -> BlockTintFunction.of(cx, from));

// components //
registry.registerSimple(Component.class, TextWrapper::of);
registry.registerSimple(MutableComponent.class, TextWrapper::of);
registry.registerSimple(Color.class, ColorWrapper::of);
registry.registerSimple(TextColor.class, o -> ColorWrapper.of(o).createTextColorJS());
registry.registerSimple(TextColor.class, from -> ColorWrapper.of(from).createTextColorJS());
registry.registerSimple(ClickEvent.class, TextWrapper::clickEventOf);

// codecs
Expand Down
Original file line number Diff line number Diff line change
@@ -1,33 +1,21 @@
package dev.latvian.mods.kubejs.bindings;

public class DamageSourceWrapper {
/*private static Map<String, DamageSource> damageSourceMap;
public static DamageSource of(Object name) {
if (name instanceof DamageSource damageSource) {
return damageSource;
}
if (name instanceof Player player) {
return DamageSource.playerAttack(player);
}
if (damageSourceMap == null) {
damageSourceMap = new HashMap<>();
import dev.latvian.mods.kubejs.util.UtilsJS;
import dev.latvian.mods.rhino.Context;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.neoforged.neoforge.server.ServerLifecycleHooks;

try {
for (var field : DamageSource.class.getDeclaredFields()) {
field.setAccessible(true);
if (Modifier.isStatic(field.getModifiers()) && field.getType() == DamageSource.class) {
var s = (DamageSource) field.get(null);
damageSourceMap.put(s.getMsgId(), s);
}
}
} catch (Exception ignored) {
}
}
return damageSourceMap.getOrDefault(String.valueOf(name), DamageSource.GENERIC);
}*/
public class DamageSourceWrapper {
public static DamageSource of(Context cx, Object from) {
return switch (from) {
case DamageSource source -> source;
case Player player -> ServerLifecycleHooks.getCurrentServer().kjs$getOverworld().damageSources().playerAttack(player);
case LivingEntity livingEntity -> ServerLifecycleHooks.getCurrentServer().kjs$getOverworld().damageSources().mobAttack(livingEntity);
case null, default -> ServerLifecycleHooks.getCurrentServer().kjs$getOverworld().damageSources().source(ResourceKey.create(Registries.DAMAGE_TYPE, UtilsJS.getMCID(cx, from)));
};
}
}
11 changes: 5 additions & 6 deletions src/main/java/dev/latvian/mods/kubejs/bindings/UtilsWrapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,12 @@
import com.google.gson.JsonElement;
import com.mojang.brigadier.StringReader;
import dev.latvian.mods.kubejs.registry.RegistryInfo;
import dev.latvian.mods.kubejs.script.KubeJSContext;
import dev.latvian.mods.kubejs.typings.Info;
import dev.latvian.mods.kubejs.util.CountingMap;
import dev.latvian.mods.kubejs.util.Lazy;
import dev.latvian.mods.kubejs.util.UtilsJS;
import dev.latvian.mods.kubejs.util.WithContext;
import dev.latvian.mods.kubejs.util.WrappedJS;
import dev.latvian.mods.rhino.Context;
import net.minecraft.Util;
import net.minecraft.commands.arguments.ParticleArgument;
import net.minecraft.core.particles.DustParticleOptions;
Expand Down Expand Up @@ -223,13 +222,13 @@ static String snakeCaseToTitleCase(String string) {
return UtilsJS.snakeCaseToTitleCase(string);
}

static ParticleOptions particleOptions(Context cx, Object o) {
if (o instanceof ParticleOptions po) {
static ParticleOptions particleOptions(WithContext<Object> o) {
if (o.value() instanceof ParticleOptions po) {
return po;
} else if (o != null) {
try {
var reader = new StringReader(o instanceof JsonElement j ? j.getAsString() : o.toString());
return ParticleArgument.readParticle(reader, ((KubeJSContext) cx).getRegistries());
var reader = new StringReader(o.value() instanceof JsonElement j ? j.getAsString() : o.toString());
return ParticleArgument.readParticle(reader, o.cx().getRegistries());
} catch (Exception ignored) {
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,10 +113,10 @@ private void viewOther(Button button) {

@Override
public void render(GuiGraphics guiGraphics, int mx, int my, float delta) {
this.renderBackground(guiGraphics, mx, my, delta);
// this.renderBackground(guiGraphics, mx, my, delta);
super.render(guiGraphics, mx, my, delta);
this.list.render(guiGraphics, mx, my, delta);
guiGraphics.drawCenteredString(this.font, "KubeJS " + scriptType.name + " script " + (viewing == errors ? "errors" : "warnings"), this.width / 2, 12, 0xFFFFFF);
super.render(guiGraphics, mx, my, delta);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@
import net.minecraft.client.Minecraft;

public class ScheduledClientEvent extends ScheduledEvents.ScheduledEvent {
public static ScheduledEvents make(Minecraft client) {
return new ScheduledEvents(() -> new ScheduledClientEvent(client));
}
public static final ScheduledEvents EVENTS = new ScheduledEvents(() -> new ScheduledClientEvent(Minecraft.getInstance()));

public final Minecraft client;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dev.latvian.mods.kubejs.client.painter;

import dev.latvian.mods.kubejs.util.ConsoleJS;
import dev.latvian.mods.rhino.Context;
import dev.latvian.mods.rhino.util.SpecialEquality;
import dev.latvian.mods.unit.FixedBooleanUnit;
import dev.latvian.mods.unit.Unit;
Expand Down Expand Up @@ -50,7 +51,7 @@ public String toString() {
}

@Override
public boolean specialEquals(Object o, boolean shallow) {
public boolean specialEquals(Context cx, Object o, boolean shallow) {
if (this == o || id == o) {
return true;
} else if (o instanceof PainterObject po) {
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/dev/latvian/mods/kubejs/color/Color.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dev.latvian.mods.kubejs.color;

import dev.latvian.mods.kubejs.bindings.ColorWrapper;
import dev.latvian.mods.rhino.Context;
import dev.latvian.mods.rhino.util.SpecialEquality;
import net.minecraft.network.chat.TextColor;

Expand Down Expand Up @@ -28,7 +29,7 @@ default TextColor createTextColorJS() {
}

@Override
default boolean specialEquals(Object o, boolean shallow) {
default boolean specialEquals(Context cx, Object o, boolean shallow) {
Color c = ColorWrapper.of(o);
return shallow ? (getArgbJS() == c.getArgbJS()) : (getRgbJS() == c.getRgbJS());
}
Expand Down
38 changes: 6 additions & 32 deletions src/main/java/dev/latvian/mods/kubejs/core/ItemKJS.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
package dev.latvian.mods.kubejs.core;

import dev.latvian.mods.kubejs.item.FoodBuilder;
import dev.architectury.registry.fuel.FuelRegistry;
import dev.latvian.mods.kubejs.item.ItemBuilder;
import dev.latvian.mods.kubejs.item.ItemStackKey;
import dev.latvian.mods.kubejs.item.MutableToolTier;
import dev.latvian.mods.kubejs.registry.RegistryInfo;
import dev.latvian.mods.kubejs.util.UtilsJS;
import dev.latvian.mods.rhino.util.RemapPrefixForJS;
import net.minecraft.Util;
import net.minecraft.core.component.DataComponentType;
import net.minecraft.core.component.DataComponents;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.food.FoodProperties;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Rarity;
import net.minecraft.world.item.TieredItem;
import org.jetbrains.annotations.Nullable;

Expand Down Expand Up @@ -42,11 +40,6 @@ public interface ItemKJS extends IngredientSupplierKJS {
return kjs$getIdLocation().getNamespace();
}

default String kjs$getCreativeTab() {
var id = RegistryInfo.ITEM.getId(kjs$self());
return id == null ? "unknown" : id.getNamespace();
}

default void kjs$setItemBuilder(ItemBuilder b) {
throw new NoMixinException();
}
Expand All @@ -55,32 +48,20 @@ public interface ItemKJS extends IngredientSupplierKJS {
throw new NoMixinException();
}

default void kjs$setMaxStackSize(int i) {
throw new NoMixinException();
}

default void kjs$setMaxDamage(int i) {
default <T> void kjs$overrideComponent(DataComponentType<T> type, T value) {
throw new NoMixinException();
}

default void kjs$setCraftingRemainder(Item i) {
throw new NoMixinException();
}

default void kjs$setFireResistant(boolean b) {
throw new NoMixinException();
}

default void kjs$setRarity(Rarity r) {
throw new NoMixinException();
default void kjs$setMaxStackSize(int i) {
kjs$overrideComponent(DataComponents.MAX_STACK_SIZE, i);
}

default void kjs$setBurnTime(int i) {
throw new NoMixinException();
}

default void kjs$setFoodProperties(FoodProperties properties) {
throw new NoMixinException();
FuelRegistry.register(i, (Item) this);
}

default void kjs$setTier(Consumer<MutableToolTier> c) {
Expand All @@ -91,13 +72,6 @@ public interface ItemKJS extends IngredientSupplierKJS {
}
}

default void kjs$setFoodProperties(Consumer<FoodBuilder> consumer) {
var fp = kjs$self().components().get(DataComponents.FOOD);
var builder = fp == null ? new FoodBuilder() : new FoodBuilder(fp);
consumer.accept(builder);
kjs$setFoodProperties(builder.build());
}

default void kjs$setNameKey(String key) {
throw new NoMixinException();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public interface ItemStackKJS extends SpecialEquality, NBTSerializable, JsonSeri
}

@Override
default boolean specialEquals(Object o, boolean shallow) {
default boolean specialEquals(Context cx, Object o, boolean shallow) {
if (o instanceof CharSequence) {
return kjs$getId().equals(UtilsJS.getID(o.toString()));
} else if (o instanceof ItemStack s) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,22 @@
import dev.latvian.mods.kubejs.event.EventHandler;
import dev.latvian.mods.kubejs.event.KubeEvent;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;

@SuppressWarnings("ReferenceToMixin")
@Mixin(value = EventHandler.class, remap = false)
public abstract class EventHandlerBridgeMixin {
@Unique
public EventHandler cancelable() {
return ((EventHandlerInvoker) this).callHasResult();
}

@Unique
public boolean post(Object extraId, KubeEvent event) {
return ((EventHandlerInvoker) this).callPost(event, extraId).interruptFalse();
}

@Unique
public boolean post(KubeEvent event) {
return ((EventHandlerInvoker) this).callPost(event, null).interruptFalse();
}
Expand Down
Loading

0 comments on commit 7486b4e

Please sign in to comment.