Skip to content

Commit 1daeed5

Browse files
committed
Rewrite platform bridges in Java
1 parent 67d7d51 commit 1daeed5

Some content is hidden

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

42 files changed

+205
-243
lines changed

common/src/main/java/juuxel/adorn/block/AdornBlockEntities.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ public final class AdornBlockEntities {
2727
public static final Registered<BlockEntityType<KitchenCupboardBlockEntity>> KITCHEN_CUPBOARD =
2828
register("kitchen_cupboard", KitchenCupboardBlockEntity::new, KitchenCupboardBlock.class);
2929
public static final Registered<BlockEntityType<KitchenSinkBlockEntity>> KITCHEN_SINK =
30-
register("kitchen_sink", PlatformBridges.Companion.getBlockEntities()::createKitchenSink, KitchenSinkBlock.class);
30+
register("kitchen_sink", PlatformBridges.get().getBlockEntities()::createKitchenSink, KitchenSinkBlock.class);
3131
public static final Registered<BlockEntityType<TradingStationBlockEntity>> TRADING_STATION =
3232
register("trading_station", TradingStationBlockEntity::new, AdornBlocks.TRADING_STATION);
3333
public static final Registered<BlockEntityType<BrewerBlockEntity>> BREWER =
34-
register("brewer", PlatformBridges.Companion.getBlockEntities()::createBrewer, AdornBlocks.BREWER);
34+
register("brewer", PlatformBridges.get().getBlockEntities()::createBrewer, AdornBlocks.BREWER);
3535

3636
private static <E extends BlockEntity> Registered<BlockEntityType<E>> register(String name, BlockEntityFactory<E> factory, Supplier<? extends Block> block) {
3737
return BLOCK_ENTITIES.register(name, () -> BlockEntityType.Builder.create(factory, block.get()).build(null));

common/src/main/java/juuxel/adorn/block/AdornBlocks.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public final class AdornBlocks {
3333
DyeColor.values(),
3434
color -> HELPER.registerBlock(
3535
color.asString() + "_sofa",
36-
() -> PlatformBridges.Companion.getBlockFactory().createSofa(BlockVariant.wool(color))
36+
() -> PlatformBridges.get().getBlockFactory().createSofa(BlockVariant.wool(color))
3737
)
3838
);
3939

common/src/main/java/juuxel/adorn/block/DrawerBlock.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEnt
7474
if (world.isClient) return ActionResult.SUCCESS;
7575

7676
if (world.getBlockEntity(pos) instanceof DrawerBlockEntity drawer) {
77-
PlatformBridges.Companion.getMenus().open(player, drawer, pos);;
77+
PlatformBridges.get().getMenus().open(player, drawer, pos);;
7878
player.incrementStat(AdornStats.OPEN_DRAWER);
7979
}
8080

common/src/main/java/juuxel/adorn/block/KitchenCupboardBlock.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEnt
4040
if (world.isClient) return ActionResult.SUCCESS;
4141

4242
if (world.getBlockEntity(pos) instanceof KitchenCupboardBlockEntity cupboard) {
43-
PlatformBridges.Companion.getMenus().open(player, cupboard, pos);
43+
PlatformBridges.get().getMenus().open(player, cupboard, pos);
4444
player.incrementStat(AdornStats.OPEN_KITCHEN_CUPBOARD);
4545
}
4646

common/src/main/java/juuxel/adorn/block/ShelfBlock.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEnt
119119
inventory.setStack(slot, stack);
120120
be.markDirty();
121121
if (!world.isClient) {
122-
PlatformBridges.Companion.getNetwork().syncBlockEntity(be);
122+
PlatformBridges.get().getNetwork().syncBlockEntity(be);
123123
player.incrementStat(AdornStats.INTERACT_WITH_SHELF);
124124
}
125125

@@ -138,7 +138,7 @@ public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEnt
138138
inventory.setStack(slot, ItemStack.EMPTY);
139139
be.markDirty();
140140
if (!world.isClient) {
141-
PlatformBridges.Companion.getNetwork().syncBlockEntity(be);
141+
PlatformBridges.get().getNetwork().syncBlockEntity(be);
142142
player.incrementStat(AdornStats.INTERACT_WITH_SHELF);
143143
}
144144
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package juuxel.adorn.client;
2+
3+
import juuxel.adorn.util.InlineServices;
4+
import juuxel.adorn.util.Services;
5+
import net.minecraft.item.ItemStack;
6+
7+
@InlineServices
8+
public interface ClientNetworkBridge {
9+
void sendSetTradeStack(int syncId, int slotId, ItemStack stack);
10+
11+
@InlineServices.Getter
12+
static ClientNetworkBridge get() {
13+
return Services.load(ClientNetworkBridge.class);
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package juuxel.adorn.client;
2+
3+
import juuxel.adorn.fluid.FluidReference;
4+
import juuxel.adorn.util.InlineServices;
5+
import juuxel.adorn.util.Services;
6+
import net.minecraft.client.item.TooltipContext;
7+
import net.minecraft.client.texture.Sprite;
8+
import net.minecraft.text.Text;
9+
import net.minecraft.util.math.BlockPos;
10+
import net.minecraft.world.BlockRenderView;
11+
import org.jetbrains.annotations.Nullable;
12+
13+
import java.util.List;
14+
15+
@InlineServices
16+
public interface FluidRenderingBridge {
17+
@Nullable Sprite getStillSprite(FluidReference volume);
18+
19+
int getColor(FluidReference volume, @Nullable BlockRenderView world, @Nullable BlockPos pos);
20+
21+
default int getColor(FluidReference volume) {
22+
return getColor(volume, null, null);
23+
}
24+
25+
boolean fillsFromTop(FluidReference volume);
26+
27+
List<Text> getTooltip(FluidReference volume, TooltipContext context, @Nullable Integer maxAmountInLitres);
28+
29+
@InlineServices.Getter
30+
static FluidRenderingBridge get() {
31+
return Services.load(FluidRenderingBridge.class);
32+
}
33+
}

common/src/main/java/juuxel/adorn/client/gui/screen/PalettedMenuScreen.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public PalettedMenuScreen(M menu, PlayerInventory playerInventory, Text title) {
2525
protected abstract Identifier getPaletteId();
2626

2727
private ColorManager.ColorPair getPalette() {
28-
return PlatformBridges.Companion.getResources().getColorManager().getColors(getPaletteId()).get(blockId);
28+
return PlatformBridges.get().getResources().getColorManager().getColors(getPaletteId()).get(blockId);
2929
}
3030

3131
@Override

common/src/main/java/juuxel/adorn/entity/AdornEntities.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public final class AdornEntities {
1111
public static final Registrar<EntityType<?>> ENTITIES = RegistrarFactory.get().create(RegistryKeys.ENTITY_TYPE);
1212

1313
public static final Registered<EntityType<SeatEntity>> SEAT =
14-
ENTITIES.register("seat", PlatformBridges.Companion.getEntities()::createSeatType);
14+
ENTITIES.register("seat", PlatformBridges.get().getEntities()::createSeatType);
1515

1616
public static void init() {
1717
}

common/src/main/java/juuxel/adorn/entity/SeatEntity.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ protected void removePassenger(Entity passenger) {
5959
public void kill() {
6060
removeAllPassengers();
6161
if (!getWorld().isClient) {
62-
PlatformBridges.Companion.getNetwork().sendToTracking(this, new EntityPassengersSetS2CPacket(this));
62+
PlatformBridges.get().getNetwork().sendToTracking(this, new EntityPassengersSetS2CPacket(this));
6363
}
6464
super.kill();
6565
var state = getWorld().getBlockState(seatPos);

common/src/main/java/juuxel/adorn/item/AdornBookItem.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public AdornBookItem(Identifier bookId, Settings settings) {
2727
@Override
2828
public TypedActionResult<ItemStack> use(World world, PlayerEntity user, Hand hand) {
2929
if (!world.isClient) {
30-
PlatformBridges.Companion.getNetwork().sendOpenBookPacket(user, bookId);
30+
PlatformBridges.get().getNetwork().sendOpenBookPacket(user, bookId);
3131
}
3232
user.incrementStat(Stats.USED.getOrCreateStat(this));
3333

@@ -37,7 +37,7 @@ public TypedActionResult<ItemStack> use(World world, PlayerEntity user, Hand han
3737
@Override
3838
public void appendTooltip(ItemStack stack, @Nullable World world, List<Text> tooltip, TooltipContext context) {
3939
super.appendTooltip(stack, world, tooltip, context);
40-
var bookManager = PlatformBridges.Companion.getResources().getBookManager();
40+
var bookManager = PlatformBridges.get().getResources().getBookManager();
4141
if (bookManager.contains(bookId)) {
4242
tooltip.add(Text.translatable("book.byAuthor", bookManager.get(bookId).author()).formatted(Formatting.GRAY));
4343
}

common/src/main/java/juuxel/adorn/menu/AdornMenus.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@
33
import juuxel.adorn.lib.registry.Registered;
44
import juuxel.adorn.lib.registry.Registrar;
55
import juuxel.adorn.lib.registry.RegistrarFactory;
6+
import juuxel.adorn.platform.MenuBridge;
67
import juuxel.adorn.platform.PlatformBridges;
7-
import kotlin.jvm.functions.Function3;
8-
import net.minecraft.entity.player.PlayerInventory;
98
import net.minecraft.menu.Menu;
109
import net.minecraft.menu.MenuType;
11-
import net.minecraft.network.PacketByteBuf;
1210
import net.minecraft.registry.RegistryKeys;
1311
import net.minecraft.resource.featuretoggle.FeatureFlags;
1412

@@ -26,7 +24,7 @@ public final class AdornMenus {
2624
public static void init() {
2725
}
2826

29-
private static <M extends Menu> MenuType<M> createType(Function3<Integer, PlayerInventory, PacketByteBuf, M> factory) {
30-
return PlatformBridges.Companion.getMenus().createType(factory);
27+
private static <M extends Menu> MenuType<M> createType(MenuBridge.Factory<M> factory) {
28+
return PlatformBridges.get().getMenus().createType(factory);
3129
}
3230
}

common/src/main/java/juuxel/adorn/menu/BrewerMenu.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public void sendContentUpdates() {
117117
var last = lastFluid;
118118
if (last == null || !FluidReference.areFluidsAndAmountsEqual(fluid, last)) {
119119
lastFluid = fluid.createSnapshot();
120-
PlatformBridges.Companion.getNetwork().sendBrewerFluidSync(player, syncId, fluid);
120+
PlatformBridges.get().getNetwork().sendBrewerFluidSync(player, syncId, fluid);
121121
}
122122
}
123123

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package juuxel.adorn.platform;
2+
3+
import juuxel.adorn.block.entity.BrewerBlockEntity;
4+
import juuxel.adorn.block.entity.KitchenSinkBlockEntity;
5+
import net.minecraft.block.BlockState;
6+
import net.minecraft.util.math.BlockPos;
7+
8+
public interface BlockEntityBridge {
9+
BrewerBlockEntity createBrewer(BlockPos pos, BlockState state);
10+
KitchenSinkBlockEntity createKitchenSink(BlockPos pos, BlockState state);
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package juuxel.adorn.platform;
2+
3+
import juuxel.adorn.block.SofaBlock;
4+
import juuxel.adorn.block.variant.BlockVariant;
5+
6+
public interface BlockFactory {
7+
BlockFactory DEFAULT = new BlockFactory() {};
8+
9+
default SofaBlock createSofa(BlockVariant variant) {
10+
return new SofaBlock(variant);
11+
}
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package juuxel.adorn.platform;
2+
3+
import juuxel.adorn.entity.SeatEntity;
4+
import net.minecraft.entity.EntityType;
5+
6+
public interface EntityBridge {
7+
EntityType<SeatEntity> createSeatType();
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package juuxel.adorn.platform;
2+
3+
import juuxel.adorn.fluid.FluidAmountPredicate;
4+
import juuxel.adorn.fluid.FluidUnit;
5+
import juuxel.adorn.fluid.FluidVolume;
6+
import juuxel.adorn.util.InlineServices;
7+
import juuxel.adorn.util.Services;
8+
import net.minecraft.block.BlockState;
9+
import net.minecraft.fluid.Fluid;
10+
import net.minecraft.util.math.BlockPos;
11+
import net.minecraft.util.math.Direction;
12+
import net.minecraft.world.World;
13+
import org.jetbrains.annotations.Nullable;
14+
15+
@InlineServices
16+
public interface FluidBridge {
17+
FluidUnit getFluidUnit();
18+
19+
@Nullable FluidVolume drain(World world, BlockPos pos, @Nullable BlockState state, Direction side, Fluid fluid, FluidAmountPredicate amountPredicate);
20+
21+
@InlineServices.Getter
22+
static FluidBridge get() {
23+
return Services.load(FluidBridge.class);
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package juuxel.adorn.platform;
2+
3+
import net.minecraft.entity.player.PlayerEntity;
4+
import net.minecraft.entity.player.PlayerInventory;
5+
import net.minecraft.menu.Menu;
6+
import net.minecraft.menu.MenuType;
7+
import net.minecraft.menu.NamedMenuFactory;
8+
import net.minecraft.network.PacketByteBuf;
9+
import net.minecraft.util.math.BlockPos;
10+
import org.jetbrains.annotations.Nullable;
11+
12+
public interface MenuBridge {
13+
/**
14+
* Opens a menu with a pos with the opening NBT sent to the client.
15+
* Does nothing on the client.
16+
*/
17+
void open(PlayerEntity player, @Nullable NamedMenuFactory factory, BlockPos pos);
18+
19+
<M extends Menu> MenuType<M> createType(Factory<M> factory);
20+
21+
@FunctionalInterface
22+
interface Factory<M extends Menu> {
23+
M create(int syncId, PlayerInventory inventory, PacketByteBuf buf);
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package juuxel.adorn.platform;
2+
3+
import juuxel.adorn.fluid.FluidReference;
4+
import net.minecraft.block.entity.BlockEntity;
5+
import net.minecraft.entity.Entity;
6+
import net.minecraft.entity.player.PlayerEntity;
7+
import net.minecraft.network.packet.Packet;
8+
import net.minecraft.server.world.ServerWorld;
9+
import net.minecraft.util.Identifier;
10+
11+
public interface NetworkBridge {
12+
void sendToTracking(Entity entity, Packet<?> packet);
13+
void sendOpenBookPacket(PlayerEntity player, Identifier bookId);
14+
void sendBrewerFluidSync(PlayerEntity player, int syncId, FluidReference fluid);
15+
16+
default void syncBlockEntity(BlockEntity be) {
17+
if (!(be.getWorld() instanceof ServerWorld world)) {
18+
throw new IllegalStateException("[Adorn] Block entities cannot be synced client->server");
19+
}
20+
world.getChunkManager().markForUpdate(be.getPos());
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package juuxel.adorn.platform;
2+
3+
import juuxel.adorn.util.InlineServices;
4+
import juuxel.adorn.util.Services;
5+
6+
@InlineServices
7+
public interface PlatformBridges {
8+
BlockEntityBridge getBlockEntities();
9+
BlockFactory getBlockFactory();
10+
EntityBridge getEntities();
11+
MenuBridge getMenus();
12+
NetworkBridge getNetwork();
13+
ResourceBridge getResources();
14+
15+
@InlineServices.Getter
16+
static PlatformBridges get() {
17+
return Services.load(PlatformBridges.class);
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package juuxel.adorn.platform;
2+
3+
import juuxel.adorn.client.book.BookManager;
4+
import juuxel.adorn.client.resources.ColorManager;
5+
6+
public interface ResourceBridge {
7+
BookManager getBookManager();
8+
ColorManager getColorManager();
9+
}

common/src/main/kotlin/juuxel/adorn/client/ClientNetworkBridge.kt

-17
This file was deleted.

common/src/main/kotlin/juuxel/adorn/client/ClientPlatformBridges.kt

-14
This file was deleted.

common/src/main/kotlin/juuxel/adorn/client/FluidRenderingBridge.kt

-26
This file was deleted.

common/src/main/kotlin/juuxel/adorn/platform/BlockEntityBridge.kt

-11
This file was deleted.

0 commit comments

Comments
 (0)