Skip to content

Commit a2e17a5

Browse files
committed
Rewrite remaining Fabric platform code in Java
1 parent cbed28a commit a2e17a5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+791
-724
lines changed

build.gradle.kts

+4-4
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ subprojects {
6969

7070
// Set Java version.
7171
extensions.configure<JavaPluginExtension> {
72-
sourceCompatibility = JavaVersion.VERSION_17
73-
targetCompatibility = JavaVersion.VERSION_17
72+
sourceCompatibility = JavaVersion.VERSION_21
73+
targetCompatibility = JavaVersion.VERSION_21
7474
}
7575

7676
architectury {
@@ -166,13 +166,13 @@ subprojects {
166166
tasks {
167167
withType<JavaCompile> {
168168
options.encoding = "UTF-8"
169-
options.release.set(17)
169+
options.release.set(21)
170170
}
171171

172172
withType<KotlinCompile> {
173173
// Set the Kotlin JVM target to match the Java version
174174
// for all Kotlin compilation tasks.
175-
kotlinOptions.jvmTarget = "17"
175+
kotlinOptions.jvmTarget = "21"
176176

177177
kotlinOptions.freeCompilerArgs = listOf(
178178
// Compile lambdas to invokedynamic.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package juuxel.adorn.item;
2+
3+
import juuxel.adorn.block.AdornBlocks;
4+
import juuxel.adorn.lib.AdornTags;
5+
import net.minecraft.item.Item;
6+
import net.minecraft.item.ItemConvertible;
7+
import net.minecraft.item.ItemStack;
8+
import net.minecraft.registry.tag.TagKey;
9+
10+
import java.util.Set;
11+
12+
public sealed interface FuelData {
13+
Set<FuelData> FUEL_DATA = Set.of(
14+
// Wooden (300)
15+
new ForTag(AdornTags.CHAIRS.item(), 300),
16+
new ForTag(AdornTags.DRAWERS.item(), 300),
17+
new ForTag(AdornTags.TABLES.item(), 300),
18+
new ForTag(AdornTags.BENCHES.item(), 300),
19+
new ForTag(AdornTags.WOODEN_POSTS.item(), 300),
20+
new ForTag(AdornTags.WOODEN_PLATFORMS.item(), 300),
21+
new ForTag(AdornTags.WOODEN_STEPS.item(), 300),
22+
new ForTag(AdornTags.WOODEN_SHELVES.item(), 300),
23+
new ForItem(AdornBlocks.INSTANCE.getCRATE(), 300),
24+
// Woollen (150)
25+
new ForTag(AdornTags.SOFAS.item(), 150)
26+
);
27+
28+
int burnTime();
29+
boolean matches(ItemStack stack);
30+
31+
record ForItem(ItemConvertible item, int burnTime) implements FuelData {
32+
@Override
33+
public boolean matches(ItemStack stack) {
34+
return stack.isOf(item.asItem());
35+
}
36+
}
37+
38+
record ForTag(TagKey<Item> tag, int burnTime) implements FuelData {
39+
@Override
40+
public boolean matches(ItemStack stack) {
41+
return stack.isIn(tag);
42+
}
43+
}
44+
}

common/src/main/kotlin/juuxel/adorn/block/AdornBlocks.kt

+1
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ object AdornBlocks : RegistryHelper() {
191191
CopperPipeBlock(AbstractBlock.Settings.copy(OXIDIZED_COPPER_PIPE))
192192
}
193193

194+
@JvmStatic
194195
fun init() {
195196
}
196197

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

+2
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,14 @@ object BlockVariantSets : RegistryHelper() {
5050
variantSets += variantSet
5151
}
5252

53+
@JvmStatic
5354
fun get(kind: BlockKind): List<Registered<Block>> =
5455
blocksByKind[kind]
5556

5657
fun get(kind: BlockKind, variant: BlockVariant): Registered<Block>? =
5758
blocksByKindVariant[kind to variant]
5859

60+
@JvmStatic
5961
fun register() {
6062
val woodVariants = variantSets.flatMap(BlockVariantSet::woodVariants)
6163
val stoneVariants = variantSets.flatMap(BlockVariantSet::stoneVariants)

common/src/main/kotlin/juuxel/adorn/client/gui/screen/AdornMenuScreens.kt

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import juuxel.adorn.menu.AdornMenus
44
import net.minecraft.client.gui.screen.ingame.MenuScreens
55

66
object AdornMenuScreens {
7+
@JvmStatic
78
fun register() {
89
MenuScreens.register(AdornMenus.DRAWER, ::DrawerScreen)
910
MenuScreens.register(AdornMenus.KITCHEN_CUPBOARD, ::KitchenCupboardScreen)

common/src/main/kotlin/juuxel/adorn/client/gui/screen/BrewerScreen.kt

+1
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ class BrewerScreen(menu: BrewerMenu, playerInventory: PlayerInventory, title: Te
6161
val TEXTURE = AdornCommon.id("textures/gui/brewer.png")
6262
const val FLUID_AREA_HEIGHT: Int = 59
6363

64+
@JvmStatic
6465
fun setFluidFromPacket(client: MinecraftClient, syncId: Int, fluid: FluidVolume) {
6566
val screen = client.currentScreen
6667
if (screen is MenuProvider<*>) {

common/src/main/kotlin/juuxel/adorn/config/ConfigManager.kt

+2
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ abstract class ConfigManager {
8181
}
8282

8383
companion object {
84+
@JvmStatic
85+
@get:JvmName("get")
8486
val INSTANCE: ConfigManager by lazy { loadService() }
8587
private val JANKSON = Jankson.builder()
8688
.registerSerializer(FluidUnit::class.java) { unit, _ -> JsonPrimitive(unit.id) }

common/src/main/kotlin/juuxel/adorn/item/AdornItems.kt

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ object AdornItems {
5858
val COPPER_NUGGET by ITEMS.register("copper_nugget") { ItemWithDescription(Item.Settings()) }
5959
val WATERING_CAN by ITEMS.register("watering_can") { WateringCanItem(Item.Settings()) }
6060

61+
@JvmStatic
6162
fun init() {
6263
}
6364
}

common/src/main/kotlin/juuxel/adorn/item/FuelData.kt

-43
This file was deleted.

common/src/main/kotlin/juuxel/adorn/item/group/AdornItemGroups.kt

+1
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ object AdornItemGroups {
7676
.build()
7777
}
7878

79+
@JvmStatic
7980
fun init() {
8081
if (ConfigManager.config().client.showItemsInStandardGroups) {
8182
addToVanillaItemGroups()

common/src/main/kotlin/juuxel/adorn/menu/AdornMenus.kt

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ object AdornMenus {
1616
val TRADING_STATION: MenuType<TradingStationMenu> by MENUS.register("trading_station") { MenuType(::TradingStationMenu, FeatureFlags.VANILLA_FEATURES) }
1717
val BREWER: MenuType<BrewerMenu> by MENUS.register("brewer") { MenuType(::BrewerMenu, FeatureFlags.VANILLA_FEATURES) }
1818

19+
@JvmStatic
1920
fun init() {
2021
}
2122

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package juuxel.adorn;
2+
3+
import juuxel.adorn.block.AdornBlockEntities;
4+
import juuxel.adorn.block.AdornBlocks;
5+
import juuxel.adorn.block.variant.BlockVariantSets;
6+
import juuxel.adorn.client.ClientEvents;
7+
import juuxel.adorn.client.gui.screen.AdornMenuScreens;
8+
import juuxel.adorn.compat.Compat;
9+
import juuxel.adorn.config.ConfigManager;
10+
import juuxel.adorn.criterion.AdornCriteria;
11+
import juuxel.adorn.entity.AdornEntities;
12+
import juuxel.adorn.item.AdornItems;
13+
import juuxel.adorn.item.group.AdornItemGroups;
14+
import juuxel.adorn.lib.AdornBlocksFabric;
15+
import juuxel.adorn.lib.AdornEntitiesFabric;
16+
import juuxel.adorn.lib.AdornGameRules;
17+
import juuxel.adorn.lib.AdornItemsFabric;
18+
import juuxel.adorn.lib.AdornNetworking;
19+
import juuxel.adorn.lib.AdornSounds;
20+
import juuxel.adorn.lib.AdornStats;
21+
import juuxel.adorn.lib.AdornTags;
22+
import juuxel.adorn.lib.SofaSleeping;
23+
import juuxel.adorn.loot.AdornLootConditionTypes;
24+
import juuxel.adorn.loot.AdornLootFunctionTypes;
25+
import juuxel.adorn.menu.AdornMenus;
26+
import juuxel.adorn.recipe.AdornRecipes;
27+
import juuxel.adorn.resources.AdornResources;
28+
import net.fabricmc.api.EnvType;
29+
import net.fabricmc.api.Environment;
30+
31+
public final class Adorn {
32+
public static void init() {
33+
ConfigManager.get().init();
34+
AdornSounds.init();
35+
AdornBlocks.init();
36+
AdornBlocksFabric.init();
37+
AdornBlockEntities.init();
38+
AdornItems.init();
39+
AdornItemsFabric.init();
40+
AdornItemGroups.init();
41+
AdornEntities.init();
42+
AdornMenus.init();
43+
AdornNetworking.init();
44+
AdornTags.init();
45+
AdornGameRules.init();
46+
AdornStats.init();
47+
SofaSleeping.init();
48+
AdornCriteria.init();
49+
AdornRecipes.init();
50+
AdornLootConditionTypes.init();
51+
AdornLootFunctionTypes.init();
52+
Compat.init();
53+
BlockVariantSets.register();
54+
AdornBlocksFabric.afterRegister();
55+
ConfigManager.get().finalize();
56+
}
57+
58+
@Environment(EnvType.CLIENT)
59+
public static void initClient() {
60+
AdornBlocksFabric.initClient();
61+
AdornEntitiesFabric.initClient();
62+
AdornMenuScreens.register();
63+
AdornNetworking.initClient();
64+
AdornResources.initClient();
65+
ClientEvents.init();
66+
}
67+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package juuxel.adorn.block.entity;
2+
3+
import com.google.common.base.Predicates;
4+
import juuxel.adorn.fluid.FluidReference;
5+
import juuxel.adorn.util.FluidStorageReference;
6+
import net.fabricmc.fabric.api.transfer.v1.context.ContainerItemContext;
7+
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidConstants;
8+
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidStorage;
9+
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
10+
import net.fabricmc.fabric.api.transfer.v1.item.InventoryStorage;
11+
import net.fabricmc.fabric.api.transfer.v1.storage.StorageUtil;
12+
import net.fabricmc.fabric.api.transfer.v1.storage.base.SingleVariantStorage;
13+
import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction;
14+
import net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext;
15+
import net.minecraft.block.BlockState;
16+
import net.minecraft.nbt.NbtCompound;
17+
import net.minecraft.util.math.BlockPos;
18+
import org.jetbrains.annotations.Nullable;
19+
20+
public final class BrewerBlockEntityFabric extends BrewerBlockEntity {
21+
private static final String NBT_FLUID = "Fluid";
22+
private static final String NBT_VOLUME = "Volume";
23+
24+
private final SingleVariantStorage<FluidVariant> fluidStorage = new SingleVariantStorage<FluidVariant>() {
25+
@Override
26+
protected long getCapacity(FluidVariant variant) {
27+
return FLUID_CAPACITY_IN_BUCKETS * FluidConstants.BUCKET;
28+
}
29+
30+
@Override
31+
protected FluidVariant getBlankVariant() {
32+
return FluidVariant.blank();
33+
}
34+
35+
@Override
36+
protected void onFinalCommit() {
37+
markDirty();
38+
}
39+
};
40+
41+
private final FluidReference fluidReference = new FluidStorageReference(fluidStorage);
42+
43+
public BrewerBlockEntityFabric(BlockPos pos, BlockState state) {
44+
super(pos, state);
45+
}
46+
47+
public SingleVariantStorage<FluidVariant> getFluidStorage() {
48+
return fluidStorage;
49+
}
50+
51+
@Override
52+
public FluidReference getFluidReference() {
53+
return fluidReference;
54+
}
55+
56+
@Override
57+
protected boolean canExtractFluidContainer() {
58+
try (var transaction = Transaction.openOuter()) {
59+
return extractFluidContainer(transaction) == 0L;
60+
}
61+
}
62+
63+
@Override
64+
protected void tryExtractFluidContainer() {
65+
extractFluidContainer(null);
66+
}
67+
68+
private long extractFluidContainer(@Nullable TransactionContext transaction) {
69+
var fluidContainerSlot = InventoryStorage.of(this, null).getSlot(FLUID_CONTAINER_SLOT);
70+
var itemStorage = FluidStorage.ITEM.find(getStack(FLUID_CONTAINER_SLOT), ContainerItemContext.ofSingleSlot(fluidContainerSlot));
71+
return StorageUtil.move(itemStorage, fluidStorage, Predicates.alwaysTrue(), Long.MAX_VALUE, transaction);
72+
}
73+
74+
@Override
75+
protected void writeNbt(NbtCompound nbt) {
76+
super.writeNbt(nbt);
77+
nbt.put(NBT_FLUID, fluidStorage.variant.toNbt());
78+
nbt.putLong(NBT_VOLUME, fluidStorage.amount);
79+
}
80+
81+
@Override
82+
public void readNbt(NbtCompound nbt) {
83+
super.readNbt(nbt);
84+
fluidStorage.variant = FluidVariant.fromNbt(nbt.getCompound(NBT_FLUID));
85+
fluidStorage.amount = nbt.getLong(NBT_VOLUME);
86+
}
87+
}

0 commit comments

Comments
 (0)