2022-09-24 21:21:01 +02:00
|
|
|
package me.hypherionmc.craterlib.common;
|
|
|
|
|
2023-03-19 13:01:16 +02:00
|
|
|
import me.hypherionmc.craterlib.api.blockentities.caps.CapabilityHandler;
|
|
|
|
import me.hypherionmc.craterlib.api.blockentities.caps.ICraterCapProvider;
|
2022-09-24 21:21:01 +02:00
|
|
|
import me.hypherionmc.craterlib.network.CraterNetworkHandler;
|
|
|
|
import me.hypherionmc.craterlib.network.CraterPacket;
|
|
|
|
import me.hypherionmc.craterlib.network.FabricNetworkHandler;
|
|
|
|
import me.hypherionmc.craterlib.platform.services.LibCommonHelper;
|
|
|
|
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
|
|
|
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
|
2022-09-25 01:52:45 +02:00
|
|
|
import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory;
|
|
|
|
import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerType;
|
2023-03-19 13:01:16 +02:00
|
|
|
import net.minecraft.core.Direction;
|
2022-09-24 21:21:01 +02:00
|
|
|
import net.minecraft.network.FriendlyByteBuf;
|
2022-09-25 01:52:45 +02:00
|
|
|
import net.minecraft.network.chat.Component;
|
2022-09-24 21:21:01 +02:00
|
|
|
import net.minecraft.resources.ResourceLocation;
|
|
|
|
import net.minecraft.server.MinecraftServer;
|
|
|
|
import net.minecraft.server.level.ServerPlayer;
|
|
|
|
import net.minecraft.server.network.ServerGamePacketListenerImpl;
|
2022-09-25 01:52:45 +02:00
|
|
|
import net.minecraft.world.MenuProvider;
|
|
|
|
import net.minecraft.world.entity.player.Inventory;
|
2022-09-24 21:21:01 +02:00
|
|
|
import net.minecraft.world.entity.player.Player;
|
2022-09-25 01:52:45 +02:00
|
|
|
import net.minecraft.world.inventory.AbstractContainerMenu;
|
|
|
|
import net.minecraft.world.inventory.MenuType;
|
2023-03-19 13:01:16 +02:00
|
|
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
2022-09-25 01:52:45 +02:00
|
|
|
import org.apache.commons.lang3.function.TriFunction;
|
|
|
|
import org.jetbrains.annotations.Nullable;
|
2022-09-24 21:21:01 +02:00
|
|
|
|
2023-03-19 13:01:16 +02:00
|
|
|
import java.util.Optional;
|
2022-09-25 01:52:45 +02:00
|
|
|
import java.util.function.Consumer;
|
2022-09-24 21:21:01 +02:00
|
|
|
import java.util.function.Function;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author HypherionSA
|
|
|
|
* @date 24/09/2022
|
|
|
|
*/
|
|
|
|
public class FabricCommonHelper implements LibCommonHelper {
|
|
|
|
|
|
|
|
public static MinecraftServer server;
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public CraterNetworkHandler createPacketHandler(String modid) {
|
|
|
|
return FabricNetworkHandler.of(modid);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public MinecraftServer getMCServer() {
|
|
|
|
return server;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void registerServerReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory) {
|
|
|
|
ServerPlayNetworking.registerGlobalReceiver(channelName, (MinecraftServer server, ServerPlayer player, ServerGamePacketListenerImpl handler, FriendlyByteBuf buf, PacketSender responseSender) -> {
|
|
|
|
CraterPacket<?> packet = factory.apply(buf);
|
|
|
|
server.execute(() -> packet.handle(player, server));
|
|
|
|
});
|
|
|
|
}
|
2022-09-25 01:52:45 +02:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public void openMenu(ServerPlayer player, MenuProvider menu, Consumer<FriendlyByteBuf> initialData) {
|
|
|
|
ExtendedScreenHandlerFactory factory = new ExtendedScreenHandlerFactory() {
|
|
|
|
@Override
|
|
|
|
public void writeScreenOpeningData(ServerPlayer player, FriendlyByteBuf buf) {
|
|
|
|
initialData.accept(buf);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Component getDisplayName() {
|
|
|
|
return menu.getDisplayName();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
@Override
|
|
|
|
public AbstractContainerMenu createMenu(int i, Inventory inventory, Player player) {
|
|
|
|
return menu.createMenu(i, inventory, player);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
player.openMenu(factory);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public <T extends AbstractContainerMenu> MenuType<T> createMenuType(TriFunction<Integer, Inventory, FriendlyByteBuf, T> constructor) {
|
|
|
|
return new ExtendedScreenHandlerType<>(constructor::apply);
|
|
|
|
}
|
2022-09-25 13:36:23 +02:00
|
|
|
|
2023-03-19 13:01:16 +02:00
|
|
|
@Override
|
|
|
|
public <T> Optional<T> getCapabilityHandler(BlockEntity entity, Direction side, CapabilityHandler capability) {
|
|
|
|
if (entity instanceof ICraterCapProvider capProvider) {
|
|
|
|
return capProvider.getCapability(capability, side);
|
|
|
|
}
|
|
|
|
return Optional.empty();
|
|
|
|
}
|
2022-09-24 21:21:01 +02:00
|
|
|
}
|