Skip to content

Commit 935e94c

Browse files
committed
Rewrite Fabric compat in Java
1 parent 73e13f0 commit 935e94c

28 files changed

+329
-249
lines changed

common/src/main/kotlin/juuxel/adorn/block/variant/BlockVariantSets.kt

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ object BlockVariantSets : RegistryHelper() {
4545
return variants.toSet()
4646
}
4747

48+
@JvmStatic
4849
fun add(variantSet: BlockVariantSet) {
4950
variantSets += variantSet
5051
}

common/src/main/kotlin/juuxel/adorn/util/Logging.kt

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
@file:JvmName("Logging")
2+
23
package juuxel.adorn.util
34

45
import org.slf4j.Logger
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package juuxel.adorn.compat;
2+
3+
import juuxel.adorn.block.variant.BlockVariant;
4+
import juuxel.adorn.block.variant.BlockVariantSet;
5+
6+
import java.util.Arrays;
7+
import java.util.List;
8+
9+
public final class BiomeMakeoverCompat implements BlockVariantSet {
10+
private static final String[] WOOD_VARIANTS = {
11+
"ancient_oak",
12+
"blighted_balsa",
13+
"willow",
14+
"swamp_cypress",
15+
};
16+
17+
@Override
18+
public List<BlockVariant> getWoodVariants() {
19+
return Arrays.stream(WOOD_VARIANTS)
20+
.<BlockVariant>map(name -> new BlockVariant.Wood("biomemakeover/" + name))
21+
.toList();
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package juuxel.adorn.compat;
2+
3+
import juuxel.adorn.block.variant.BlockVariant;
4+
import juuxel.adorn.block.variant.BlockVariantSet;
5+
6+
import java.util.List;
7+
8+
public final class BlockusCompat implements BlockVariantSet {
9+
@Override
10+
public List<BlockVariant> getWoodVariants() {
11+
return List.of(new BlockVariant.Wood("blockus/white_oak"));
12+
}
13+
}

fabric/src/main/kotlin/juuxel/adorn/compat/BygCompat.kt fabric/src/main/java/juuxel/adorn/compat/BygCompat.java

+27-10
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
package juuxel.adorn.compat
1+
package juuxel.adorn.compat;
22

3-
import juuxel.adorn.block.variant.BlockVariant
4-
import juuxel.adorn.block.variant.BlockVariantSet
3+
import juuxel.adorn.block.variant.BlockVariant;
4+
import juuxel.adorn.block.variant.BlockVariantSet;
55

6-
object BygCompat : BlockVariantSet {
7-
override val woodVariants = listOf(
6+
import java.util.Arrays;
7+
import java.util.List;
8+
9+
public final class BygCompat implements BlockVariantSet {
10+
private static final String[] WOOD_VARIANTS = {
811
"aspen",
912
"baobab",
1013
"blue_enchanted",
@@ -33,10 +36,10 @@
3336
"white_mangrove",
3437
"willow",
3538
"witch_hazel",
36-
"zelkova"
37-
).map { BlockVariant.Wood("byg/$it") }
39+
"zelkova",
40+
};
3841

39-
override val stoneVariants = listOf(
42+
private static final String[] STONE_VARIANTS = {
4043
"dacite",
4144
"dacite_brick",
4245
"dacite_cobblestone",
@@ -53,6 +56,20 @@
5356
"red_rock_brick",
5457
"mossy_red_rock_brick",
5558
"cracked_red_rock_brick",
56-
"chiseled_red_rock_brick"
57-
).map { BlockVariant.Stone("byg/$it") }
59+
"chiseled_red_rock_brick",
60+
};
61+
62+
@Override
63+
public List<BlockVariant> getWoodVariants() {
64+
return Arrays.stream(WOOD_VARIANTS)
65+
.<BlockVariant>map(name -> new BlockVariant.Wood("byg/" + name))
66+
.toList();
67+
}
68+
69+
@Override
70+
public List<BlockVariant> getStoneVariants() {
71+
return Arrays.stream(STONE_VARIANTS)
72+
.<BlockVariant>map(name -> new BlockVariant.Stone("byg/" + name))
73+
.toList();
74+
}
5875
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package juuxel.adorn.compat;
2+
3+
import juuxel.adorn.block.variant.BlockVariant;
4+
import juuxel.adorn.block.variant.BlockVariantSet;
5+
6+
import java.util.Arrays;
7+
import java.util.List;
8+
9+
public final class CinderscapesCompat implements BlockVariantSet {
10+
private static final String[] WOOD_VARIANTS = {
11+
"scorched",
12+
"umbral",
13+
};
14+
15+
@Override
16+
public List<BlockVariant> getWoodVariants() {
17+
return Arrays.stream(WOOD_VARIANTS)
18+
.<BlockVariant>map(name -> new BlockVariant.Wood("cinderscapes/" + name))
19+
.toList();
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package juuxel.adorn.compat;
2+
3+
import juuxel.adorn.block.variant.BlockVariantSets;
4+
import juuxel.adorn.config.ConfigManager;
5+
import net.fabricmc.loader.api.FabricLoader;
6+
7+
public final class Compat {
8+
public static void init() {
9+
ifModLoaded("byg", () -> BlockVariantSets.add(new BygCompat()));
10+
ifModLoaded("terrestria", () -> BlockVariantSets.add(new TerrestriaCompat()));
11+
ifModLoaded("towelette", ToweletteCompat::init);
12+
ifModLoaded("traverse", () -> BlockVariantSets.add(new TraverseCompat()));
13+
ifModLoaded("woods_and_mires", () -> BlockVariantSets.add(new WamCompat()));
14+
ifModLoaded("biomemakeover", () -> BlockVariantSets.add(new BiomeMakeoverCompat()));
15+
ifModLoaded("cinderscapes", () -> BlockVariantSets.add(new CinderscapesCompat()));
16+
ifModLoaded("promenade", () -> BlockVariantSets.add(new PromenadeCompat()));
17+
ifModLoaded("techreborn", () -> BlockVariantSets.add(new TechRebornCompat()));
18+
ifModLoaded("blockus", () -> BlockVariantSets.add(new BlockusCompat()));
19+
}
20+
21+
public static boolean isCompatEnabled(String mod) {
22+
var compatMap = ConfigManager.Companion.config().compat;
23+
24+
if (!compatMap.containsKey(mod)) {
25+
compatMap.put(mod, true);
26+
ConfigManager.Companion.getINSTANCE().save();
27+
return true;
28+
}
29+
30+
return compatMap.get(mod);
31+
}
32+
33+
private static void ifModLoaded(String mod, Runnable fn) {
34+
if (isCompatEnabled(mod) && FabricLoader.getInstance().isModLoaded(mod)) {
35+
fn.run();
36+
}
37+
}
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package juuxel.adorn.compat;
2+
3+
import juuxel.adorn.block.variant.BlockVariant;
4+
import juuxel.adorn.block.variant.BlockVariantSet;
5+
6+
import java.util.Arrays;
7+
import java.util.List;
8+
9+
public final class PromenadeCompat implements BlockVariantSet {
10+
private static final String[] WOOD_VARIANTS = {
11+
"dark_amaranth",
12+
"palm",
13+
"sakura",
14+
};
15+
16+
@Override
17+
public List<BlockVariant> getWoodVariants() {
18+
return Arrays.stream(WOOD_VARIANTS)
19+
.<BlockVariant>map(name -> new BlockVariant.Wood("promenade/" + name))
20+
.toList();
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package juuxel.adorn.compat;
2+
3+
import juuxel.adorn.block.variant.BlockVariant;
4+
import juuxel.adorn.block.variant.BlockVariantSet;
5+
6+
import java.util.List;
7+
8+
public final class TechRebornCompat implements BlockVariantSet {
9+
@Override
10+
public List<BlockVariant> getWoodVariants() {
11+
return List.of(new BlockVariant.Wood("techreborn/rubber"));
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package juuxel.adorn.compat;
2+
3+
import juuxel.adorn.block.variant.BlockVariant;
4+
import juuxel.adorn.block.variant.BlockVariantSet;
5+
6+
import java.util.Arrays;
7+
import java.util.List;
8+
9+
public final class TerrestriaCompat implements BlockVariantSet {
10+
private static final String[] WOOD_VARIANTS = {
11+
"cypress",
12+
"hemlock",
13+
"japanese_maple",
14+
"rainbow_eucalyptus",
15+
"redwood",
16+
"rubber",
17+
"sakura",
18+
"yucca_palm",
19+
"willow",
20+
};
21+
22+
private static final String[] STONE_VARIANTS = {
23+
"basalt",
24+
"basalt_cobblestone",
25+
"smooth_basalt",
26+
"basalt_brick",
27+
"mossy_basalt_cobblestone",
28+
"mossy_basalt_brick",
29+
};
30+
31+
@Override
32+
public List<BlockVariant> getWoodVariants() {
33+
return Arrays.stream(WOOD_VARIANTS)
34+
.<BlockVariant>map(name -> new BlockVariant.Wood("terrestria/" + name))
35+
.toList();
36+
}
37+
38+
@Override
39+
public List<BlockVariant> getStoneVariants() {
40+
return Arrays.stream(STONE_VARIANTS)
41+
.<BlockVariant>map(name -> new BlockVariant.Stone("terrestria/" + name))
42+
.toList();
43+
}
44+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package juuxel.adorn.compat;
2+
3+
import juuxel.adorn.block.BenchBlock;
4+
import juuxel.adorn.block.ChairBlock;
5+
import juuxel.adorn.block.ChimneyBlock;
6+
import juuxel.adorn.block.CoffeeTableBlock;
7+
import juuxel.adorn.block.CopperPipeBlock;
8+
import juuxel.adorn.block.PicketFenceBlock;
9+
import juuxel.adorn.block.PlatformBlock;
10+
import juuxel.adorn.block.PostBlock;
11+
import juuxel.adorn.block.PrismarineChimneyBlock;
12+
import juuxel.adorn.block.ShelfBlock;
13+
import juuxel.adorn.block.SofaBlock;
14+
import juuxel.adorn.block.StepBlock;
15+
import juuxel.adorn.block.TableBlock;
16+
import juuxel.adorn.block.TableLampBlock;
17+
import juuxel.adorn.block.TradingStationBlock;
18+
import juuxel.adorn.util.RegistryUtil;
19+
import net.minecraft.block.Block;
20+
import net.minecraft.registry.Registries;
21+
import virtuoel.statement.api.StateRefresher;
22+
import virtuoel.towelette.api.FluidProperties;
23+
import virtuoel.towelette.api.ToweletteConfig;
24+
25+
public final class ToweletteCompat {
26+
public static void init() {
27+
boolean flowing = isFlowingFluidloggingEnabled();
28+
29+
RegistryUtil.visit(Registries.BLOCK, block -> {
30+
if (shouldFluidlog(block)) {
31+
StateRefresher.INSTANCE.addBlockProperty(block, FluidProperties.FLUID, Registries.FLUID.getDefaultId());
32+
33+
if (flowing) {
34+
StateRefresher.INSTANCE.addBlockProperty(block, FluidProperties.LEVEL_1_8, 8);
35+
StateRefresher.INSTANCE.addBlockProperty(block, FluidProperties.FALLING, false);
36+
}
37+
}
38+
});
39+
}
40+
41+
private static boolean isFlowingFluidloggingEnabled() {
42+
var data = ToweletteConfig.DATA.get("flowingFluidlogging");
43+
if (data != null && data.isJsonPrimitive()) {
44+
return data.getAsBoolean();
45+
}
46+
47+
return false;
48+
}
49+
50+
private static boolean shouldFluidlog(Block block) {
51+
return block instanceof BenchBlock ||
52+
block instanceof ChairBlock ||
53+
block instanceof ChimneyBlock ||
54+
block instanceof CoffeeTableBlock ||
55+
block instanceof CopperPipeBlock ||
56+
block instanceof PicketFenceBlock ||
57+
block instanceof PlatformBlock ||
58+
block instanceof PostBlock ||
59+
block instanceof PrismarineChimneyBlock ||
60+
block instanceof ShelfBlock ||
61+
block instanceof SofaBlock ||
62+
block instanceof StepBlock ||
63+
block instanceof TableBlock ||
64+
block instanceof TableLampBlock ||
65+
block instanceof TradingStationBlock;
66+
}
67+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package juuxel.adorn.compat;
2+
3+
import juuxel.adorn.block.variant.BlockVariant;
4+
import juuxel.adorn.block.variant.BlockVariantSet;
5+
6+
import java.util.List;
7+
8+
public final class TraverseCompat implements BlockVariantSet {
9+
@Override
10+
public List<BlockVariant> getWoodVariants() {
11+
return List.of(new BlockVariant.Wood("traverse/fir"));
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package juuxel.adorn.compat;
2+
3+
import juuxel.adorn.block.variant.BlockVariant;
4+
import juuxel.adorn.block.variant.BlockVariantSet;
5+
6+
import java.util.List;
7+
8+
public final class WamCompat implements BlockVariantSet {
9+
@Override
10+
public List<BlockVariant> getWoodVariants() {
11+
return List.of(new BlockVariant.Wood("woods_and_mires/pine"));
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package juuxel.adorn.compat.modmenu;
2+
3+
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
4+
import com.terraformersmc.modmenu.api.ModMenuApi;
5+
import juuxel.adorn.client.gui.screen.MainConfigScreen;
6+
import net.fabricmc.api.EnvType;
7+
import net.fabricmc.api.Environment;
8+
9+
@Environment(EnvType.CLIENT)
10+
public final class AdornModMenuPlugin implements ModMenuApi {
11+
@Override
12+
public ConfigScreenFactory<?> getModConfigScreenFactory() {
13+
return MainConfigScreen::new;
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package juuxel.adorn.util;
2+
3+
import net.fabricmc.fabric.api.event.registry.RegistryEntryAddedCallback;
4+
import net.minecraft.registry.Registry;
5+
6+
import java.util.function.Consumer;
7+
8+
public final class RegistryUtil {
9+
/**
10+
* Registers a visitor for this registry that will be called for each
11+
* entry currently in the registry, and all future entries.
12+
*/
13+
public static <A> void visit(Registry<? extends A> registry, Consumer<A> callback) {
14+
registry.forEach(callback);
15+
RegistryEntryAddedCallback.event(registry).register((rawId, id, object) -> callback.accept(object));
16+
}
17+
}

fabric/src/main/kotlin/juuxel/adorn/compat/BiomeMakeoverCompat.kt

-13
This file was deleted.

0 commit comments

Comments
 (0)