Skip to content

Commit e3b388d

Browse files
committed
Move operators and formatting to clojure
1 parent 9104805 commit e3b388d

File tree

15 files changed

+163
-133
lines changed

15 files changed

+163
-133
lines changed

buildSrc/src/main/kotlin/caduceus/java.gradle.kts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,20 @@ kotlin {
6565
jvmToolchain(javaVersion)
6666
}
6767

68+
clojure {
69+
builds {
70+
named("main") {
71+
// remove java from clojure classpath to prevent circular dependency
72+
classpath.setFrom(sourceSets.main.map { it.compileClasspath })
73+
}
74+
}
75+
}
76+
6877
tasks {
6978
compileJava {
79+
// allow importing clojure classes from java
80+
classpath += files(sourceSets.main.map { it.clojure.classesDirectory })
81+
7082
options.apply {
7183
encoding = "UTF-8"
7284
release = javaVersion

buildSrc/src/main/kotlin/caduceus/minecraft.gradle.kts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,12 @@ sourceSets {
5757
}
5858
}
5959
}
60+
61+
clojure {
62+
builds {
63+
named("main") {
64+
// we need to precompile everything, otherwise it won't be remapped
65+
aotAll()
66+
}
67+
}
68+
}

common/build.gradle.kts

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import dev.clojurephant.plugin.clojure.tasks.ClojureCheck
2-
31
plugins {
42
id("caduceus.minecraft")
53
}
@@ -28,10 +26,3 @@ dependencies {
2826
annotationProcessor(it)
2927
}
3028
}
31-
32-
tasks {
33-
// FIXME: remove when kotlin is gone
34-
named<ClojureCheck>("checkClojure") {
35-
namespaces.set(listOf())
36-
}
37-
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
(ns gay.object.caduceus.casting.arithmetic
2+
(:require [gay.object.caduceus.casting.continuation :as continuation])
3+
(:import (at.petrak.hexcasting.api.casting.arithmetic Arithmetic)
4+
(at.petrak.hexcasting.api.casting.arithmetic.operator OperatorBasic OperatorBinary OperatorUnary)
5+
(at.petrak.hexcasting.api.casting.arithmetic.predicates IotaMultiPredicate IotaPredicate)
6+
(at.petrak.hexcasting.api.casting.eval.vm SpellContinuation)
7+
(at.petrak.hexcasting.api.casting.iota ContinuationIota DoubleIota)
8+
(at.petrak.hexcasting.common.lib.hex HexIotaTypes)))
9+
10+
(defn- all-of-type [iota-type]
11+
(IotaMultiPredicate/all (IotaPredicate/ofType iota-type)))
12+
13+
(defn- make-op [n op]
14+
(proxy
15+
[OperatorBasic]
16+
[n (all-of-type HexIotaTypes/CONTINUATION)]
17+
(apply [iotas _]
18+
(as-> iotas v
19+
(mapv #(.getContinuation %) v)
20+
(apply op v)
21+
(cond
22+
(sequential? v) v
23+
(instance? SpellContinuation v) [(ContinuationIota/new v)]
24+
:else [v])))))
25+
26+
(defn- make1 [op] (make-op 1 op))
27+
28+
(defn- make2 [op] (make-op 2 op))
29+
30+
(defn continuation-arithmetic []
31+
(reify
32+
Arithmetic
33+
(arithName [_] "continuation_ops")
34+
(opTypes [_] [Arithmetic/ABS
35+
Arithmetic/ADD
36+
Arithmetic/CONS
37+
Arithmetic/UNCONS])
38+
(getOperator [_ pattern]
39+
(condp = pattern
40+
Arithmetic/ABS (make1
41+
(fn [cont]
42+
(-> cont
43+
(continuation/frames)
44+
(count)
45+
(double)
46+
(DoubleIota/new))))
47+
Arithmetic/ADD (make2
48+
(fn [i j]
49+
(->> i
50+
(continuation/frames '()) ; get frames in reverse order
51+
(reduce #(.pushFrame %1 %2) j))))
52+
Arithmetic/CONS (make2
53+
(fn [i j]
54+
(if (continuation/not-done? j)
55+
(.pushFrame i (.getFrame j))
56+
i)))
57+
Arithmetic/UNCONS (make1
58+
(fn [cont]
59+
(mapv
60+
ContinuationIota/new
61+
(if (continuation/not-done? cont)
62+
[(.getNext cont)
63+
(continuation/make (.getFrame cont))]
64+
[cont cont]))))))))
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
(ns gay.object.caduceus.casting.continuation
2+
(:require [clojure.string :as str]
3+
[gay.object.caduceus.component :as component])
4+
(:import (at.petrak.hexcasting.api HexAPI)
5+
(at.petrak.hexcasting.api.casting.eval.vm SpellContinuation SpellContinuation$Done SpellContinuation$NotDone)
6+
(at.petrak.hexcasting.common.lib.hex HexContinuationTypes)
7+
(net.minecraft ChatFormatting)
8+
(net.minecraft.nbt CompoundTag Tag)
9+
(net.minecraft.network.chat Component)
10+
(net.minecraft.resources ResourceLocation)))
11+
12+
(defn done? [cont]
13+
(instance? SpellContinuation$Done cont))
14+
15+
(defn not-done? [cont]
16+
(instance? SpellContinuation$NotDone cont))
17+
18+
(defn make
19+
([frame] (.pushFrame SpellContinuation$Done/INSTANCE frame))
20+
([frame next] (SpellContinuation$NotDone/new frame next)))
21+
22+
(defn frames
23+
([cont] (frames [] cont))
24+
([acc cont]
25+
(if (done? cont)
26+
acc
27+
(recur
28+
(conj acc (.getFrame cont))
29+
(.getNext cont)))))
30+
31+
(defn- frame-type-id [^CompoundTag tag]
32+
(-> tag
33+
(.getString HexContinuationTypes/KEY_TYPE)
34+
(ResourceLocation/tryParse)
35+
(or (HexAPI/modLoc "evaluate"))))
36+
37+
(defn- display-frame [^CompoundTag tag]
38+
(let [type-id (str (frame-type-id tag))]
39+
(Component/translatableWithFallback
40+
(format "caduceus.tooltip.continuation.frame.%s" type-id)
41+
type-id)))
42+
43+
(defn display [^CompoundTag tag]
44+
(let [frames (as-> tag v
45+
(.getList v SpellContinuation/TAG_FRAME Tag/TAG_COMPOUND)
46+
(mapv display-frame v))]
47+
(.withStyle
48+
(if (empty? frames)
49+
(component/translatable "caduceus.tooltip.continuation.done")
50+
(component/translatable "caduceus.tooltip.continuation.not_done" (component/join ", " frames)))
51+
ChatFormatting/RED)))
52+
53+
(gen-class
54+
:name gay.object.caduceus.casting.continuation.ContinuationUtils
55+
:methods [^:static [display [net.minecraft.nbt.Tag] net.minecraft.network.chat.Component]])
56+
57+
(defn -display [tag] (display tag))
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
(ns gay.object.caduceus.component
2+
(:import (net.minecraft.network.chat Component MutableComponent)))
3+
4+
(defn ^MutableComponent translatable [^String key & args]
5+
(Component/translatable key (object-array args)))
6+
7+
(defn ^MutableComponent join [^String separator coll]
8+
(reduce
9+
#(-> %1
10+
(.append separator)
11+
(.append ^Component %2))
12+
(.copy (first coll))
13+
(rest coll)))

common/src/main/clojure/gay/object/caduceus/core.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66

77
(def ^Logger LOGGER (LogManager/getLogger MODID))
88

9-
(defn id ^ResourceLocation [path]
9+
(defn ^ResourceLocation id [path]
1010
(ResourceLocation/new MODID path))

common/src/main/clojure/gay/object/caduceus/registry.clj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
(ns gay.object.caduceus.registry
2-
(:require [gay.object.caduceus.core :as caduceus])
2+
(:require [gay.object.caduceus.core :as caduceus]
3+
[gay.object.caduceus.casting.arithmetic :as arithmetic])
34
(:import (at.petrak.hexcasting.api.casting ActionRegistryEntry)
45
(at.petrak.hexcasting.api.casting.math HexPattern)
56
(at.petrak.hexcasting.common.lib HexRegistries)
6-
(at.petrak.hexcasting.common.lib.hex HexActions HexArithmetics)
7-
(gay.object.caduceus.casting.arithmetic ContinuationArithmetic)))
7+
(at.petrak.hexcasting.common.lib.hex HexActions HexArithmetics)))
88

99
(defrecord Registrar [get-registry-key get-registry entries])
1010

@@ -46,4 +46,4 @@
4646
(->Registrar
4747
(fn [] HexRegistries/ARITHMETIC)
4848
(fn [] HexArithmetics/REGISTRY)
49-
{:continuation (make-entry "continuation" ContinuationArithmetic/INSTANCE)}))
49+
{:continuation (make-lazy-entry "continuation" arithmetic/continuation-arithmetic)}))

common/src/main/java/gay/object/caduceus/mixin/MixinContinuationIotaType.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package gay.object.caduceus.mixin;
22

3-
import gay.object.caduceus.casting.iota.ContinuationUtils;
3+
import gay.object.caduceus.casting.continuation.ContinuationUtils;
44
import net.minecraft.nbt.Tag;
55
import net.minecraft.network.chat.Component;
66
import org.spongepowered.asm.mixin.Mixin;
@@ -12,7 +12,7 @@
1212
public abstract class MixinContinuationIotaType {
1313
@Inject(method = "display", at = @At("HEAD"), cancellable = true)
1414
private void caduceus$betterDisplay(Tag tag, CallbackInfoReturnable<Component> cir) {
15-
var component = ContinuationUtils.displayContinuation(tag);
15+
var component = ContinuationUtils.display(tag);
1616
cir.setReturnValue(component);
1717
}
1818
}

common/src/main/kotlin/gay/object/caduceus/casting/arithmetic/ArithmeticUtils.kt

Lines changed: 0 additions & 14 deletions
This file was deleted.

0 commit comments

Comments
 (0)