Some code cleanup and API changes

This commit is contained in:
2023-06-02 23:59:14 +02:00
parent 846191ec95
commit 78bec96ae8
35 changed files with 183 additions and 198 deletions

View File

@@ -10,6 +10,10 @@ import net.minecraft.world.item.ItemStack;
import java.util.function.Supplier; import java.util.function.Supplier;
/**
* @author HypherionSA
* Helper class to create custom creative tabs from modules
*/
public class CraterCreativeModeTab implements Supplier<CreativeModeTab> { public class CraterCreativeModeTab implements Supplier<CreativeModeTab> {
private final ResourceLocation resourceLocation; private final ResourceLocation resourceLocation;
@@ -69,7 +73,6 @@ public class CraterCreativeModeTab implements Supplier<CreativeModeTab> {
public CraterCreativeModeTab build() { public CraterCreativeModeTab build() {
return new CraterCreativeModeTab(this); return new CraterCreativeModeTab(this);
} }
} }
@Override @Override

View File

@@ -3,6 +3,10 @@ package com.hypherionmc.craterlib.api.event.client;
import com.hypherionmc.craterlib.core.event.CraterEvent; import com.hypherionmc.craterlib.core.event.CraterEvent;
import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientLevel;
/**
* @author HypherionSA
* Cross Modloader Client Tick Event.
*/
public class CraterClientTickEvent extends CraterEvent { public class CraterClientTickEvent extends CraterEvent {
private final ClientLevel level; private final ClientLevel level;

View File

@@ -4,12 +4,12 @@ import com.hypherionmc.craterlib.core.event.CraterEvent;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.Options; import net.minecraft.client.Options;
public class EarlyInitEvent extends CraterEvent { public class LateInitEvent extends CraterEvent {
private final Minecraft minecraft; private final Minecraft minecraft;
private final Options options; private final Options options;
public EarlyInitEvent(Minecraft minecraft, Options options) { public LateInitEvent(Minecraft minecraft, Options options) {
this.minecraft = minecraft; this.minecraft = minecraft;
this.options = options; this.options = options;
} }

View File

@@ -54,7 +54,7 @@ public class ClientRegistry {
* @param blockEntityRendererFactory The renderer factory * @param blockEntityRendererFactory The renderer factory
*/ */
public static void registerBlockEntityRenderer(@NotNull BlockEntityType<? extends BlockEntity> blockEntityType, @NotNull BlockEntityRendererProvider blockEntityRendererFactory) { public static void registerBlockEntityRenderer(@NotNull BlockEntityType<? extends BlockEntity> blockEntityType, @NotNull BlockEntityRendererProvider blockEntityRendererFactory) {
ClientPlatform.CLIENT_HELPER.registerBlockEntityRenderer(blockEntityType, blockEntityRendererFactory); ClientPlatform.INSTANCE.registerBlockEntityRenderer(blockEntityType, blockEntityRendererFactory);
} }
} }

View File

@@ -1,7 +1,6 @@
package com.hypherionmc.craterlib.common.blockentity; package com.hypherionmc.craterlib.common.blockentity;
import com.hypherionmc.craterlib.api.blockentity.caps.CraterCapabilityHandler; import com.hypherionmc.craterlib.api.blockentity.caps.CraterCapabilityHandler;
import com.hypherionmc.craterlib.core.platform.Platform;
import com.hypherionmc.craterlib.core.systems.fluid.CraterFluidTank; import com.hypherionmc.craterlib.core.systems.fluid.CraterFluidTank;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;

View File

@@ -3,8 +3,8 @@ package com.hypherionmc.craterlib.common.item;
import com.hypherionmc.craterlib.api.rendering.DyableBlock; import com.hypherionmc.craterlib.api.rendering.DyableBlock;
import com.hypherionmc.craterlib.api.rendering.ItemDyable; import com.hypherionmc.craterlib.api.rendering.ItemDyable;
import com.hypherionmc.craterlib.core.platform.ClientPlatform; import com.hypherionmc.craterlib.core.platform.ClientPlatform;
import com.hypherionmc.craterlib.core.platform.Platform; import com.hypherionmc.craterlib.core.platform.Environment;
import com.hypherionmc.craterlib.core.platform.services.Environment; import com.hypherionmc.craterlib.core.platform.ModloaderEnvironment;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.BlockItem;
@@ -27,8 +27,8 @@ public class BlockItemDyable extends BlockItem implements ItemDyable {
public BlockItemDyable(Block block, Properties properties) { public BlockItemDyable(Block block, Properties properties) {
super(block, properties); super(block, properties);
if (Platform.LOADER.getEnvironment() == Environment.CLIENT) { if (ModloaderEnvironment.INSTANCE.getEnvironment() == Environment.CLIENT) {
ClientPlatform.CLIENT_HELPER.registerItemProperty(this, "color"); ClientPlatform.INSTANCE.registerItemProperty(this, "color");
} }
} }

View File

@@ -62,11 +62,11 @@ public final class CraterEventBus {
for (Method m : c.getMethods()) { for (Method m : c.getMethods()) {
if (isClass && Modifier.isStatic(m.getModifiers())) { if (isClass && Modifier.isStatic(m.getModifiers())) {
EventMethod em = EventMethod.tryCreateFrom(new AnalyzedMethod(m, c)); EventMethod em = EventMethod.tryCreateFrom(new AnalyzedMethod(m, c));
if (em != null) l.add(em); if ((em != null) && this.hasEventAnnotation(em)) l.add(em);
} }
if (!isClass && !Modifier.isStatic(m.getModifiers())) { if (!isClass && !Modifier.isStatic(m.getModifiers())) {
EventMethod em = EventMethod.tryCreateFrom(new AnalyzedMethod(m, objectOrClass)); EventMethod em = EventMethod.tryCreateFrom(new AnalyzedMethod(m, objectOrClass));
if (em != null) l.add(em); if ((em != null) && this.hasEventAnnotation(em)) l.add(em);
} }
} }
} }
@@ -76,6 +76,13 @@ public final class CraterEventBus {
return l; return l;
} }
private boolean hasEventAnnotation(EventMethod m) {
for (Annotation a : m.annotations) {
if (a instanceof CraterEventListener) return true;
}
return false;
}
public void registerListener(Consumer<CraterEvent> listener, Class<? extends CraterEvent> eventType) { public void registerListener(Consumer<CraterEvent> listener, Class<? extends CraterEvent> eventType) {
this.registerListener(listener, eventType, 0); this.registerListener(listener, eventType, 0);
} }

View File

@@ -1,7 +1,7 @@
package com.hypherionmc.craterlib.core.network; package com.hypherionmc.craterlib.core.network;
import com.hypherionmc.craterlib.core.platform.ClientPlatform; import com.hypherionmc.craterlib.core.platform.ClientPlatform;
import com.hypherionmc.craterlib.core.platform.Platform; import com.hypherionmc.craterlib.core.platform.CommonPlatform;
import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.Packet;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
@@ -19,7 +19,7 @@ public interface CraterNetworkHandler {
Packet<?> toClientBound(CraterPacket<?> packet); Packet<?> toClientBound(CraterPacket<?> packet);
default void sendToServer(CraterPacket<?> packet) { default void sendToServer(CraterPacket<?> packet) {
ClientPlatform.CLIENT_HELPER.getClientConnection().send(this.toServerBound(packet)); ClientPlatform.INSTANCE.getClientConnection().send(this.toServerBound(packet));
} }
default void sendTo(CraterPacket<?> packet, ServerPlayer player) { default void sendTo(CraterPacket<?> packet, ServerPlayer player) {
@@ -27,7 +27,7 @@ public interface CraterNetworkHandler {
} }
default void sendToAll(CraterPacket<?> packet) { default void sendToAll(CraterPacket<?> packet) {
Platform.COMMON_HELPER.getMCServer().getPlayerList().broadcastAll(this.toClientBound(packet)); CommonPlatform.INSTANCE.getMCServer().getPlayerList().broadcastAll(this.toClientBound(packet));
} }
} }

View File

@@ -1,23 +1,39 @@
package com.hypherionmc.craterlib.core.platform; package com.hypherionmc.craterlib.core.platform;
import com.hypherionmc.craterlib.CraterConstants; import com.hypherionmc.craterlib.common.item.BlockItemDyable;
import com.hypherionmc.craterlib.core.platform.services.LibClientHelper; import com.hypherionmc.craterlib.core.systems.reg.RegistryObject;
import com.hypherionmc.craterlib.util.ServiceUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.network.Connection;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import org.jetbrains.annotations.NotNull;
import java.util.ServiceLoader; import java.util.Collection;
/** /**
* @author HypherionSA * @author HypherionSA
*/ */
public class ClientPlatform { public interface ClientPlatform {
public static final LibClientHelper CLIENT_HELPER = load(LibClientHelper.class); public final ClientPlatform INSTANCE = ServiceUtil.load(ClientPlatform.class);
public static <T> T load(Class<T> clazz) { void registerItemProperty(@NotNull BlockItemDyable item, @NotNull String property);
void registerCustomRenderTypes(@NotNull Collection<RegistryObject<Block>> blocks);
Minecraft getClientInstance();
Player getClientPlayer();
Level getClientLevel();
Connection getClientConnection();
void registerBlockEntityRenderer(@NotNull BlockEntityType<? extends BlockEntity> blockEntityType, @NotNull BlockEntityRendererProvider blockEntityRendererFactory);
final T loadedService = ServiceLoader.load(clazz)
.findFirst()
.orElseThrow(() -> new NullPointerException("Failed to load service for " + clazz.getName()));
CraterConstants.LOG.debug("Loaded {} for service {}", loadedService, clazz);
return loadedService;
}
} }

View File

@@ -1,7 +1,8 @@
package com.hypherionmc.craterlib.core.platform.services; package com.hypherionmc.craterlib.core.platform;
import com.hypherionmc.craterlib.api.blockentity.caps.CraterCapabilityHandler; import com.hypherionmc.craterlib.api.blockentity.caps.CraterCapabilityHandler;
import com.hypherionmc.craterlib.core.network.CraterNetworkHandler; import com.hypherionmc.craterlib.core.network.CraterNetworkHandler;
import com.hypherionmc.craterlib.util.ServiceUtil;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
@@ -20,12 +21,22 @@ import java.util.function.Consumer;
/** /**
* @author HypherionSA * @author HypherionSA
*/ */
public interface LibCommonHelper { public interface CommonPlatform {
CraterNetworkHandler createPacketHandler(String modid); public CommonPlatform INSTANCE = ServiceUtil.load(CommonPlatform.class);
default CraterNetworkHandler createPacketHandler(String modid) {
return this.createPacketHandler(modid, true, true);
}
CraterNetworkHandler createPacketHandler(String modid, boolean requiredClient, boolean requiredServer);
MinecraftServer getMCServer(); MinecraftServer getMCServer();
default void openMenu(ServerPlayer player, MenuProvider menuProvider) {
this.openMenu(player, menuProvider, null);
}
void openMenu(ServerPlayer player, MenuProvider menu, @Nullable Consumer<FriendlyByteBuf> initialData); void openMenu(ServerPlayer player, MenuProvider menu, @Nullable Consumer<FriendlyByteBuf> initialData);
<T extends AbstractContainerMenu> MenuType<T> createMenuType(TriFunction<Integer, Inventory, FriendlyByteBuf, T> constructor); <T extends AbstractContainerMenu> MenuType<T> createMenuType(TriFunction<Integer, Inventory, FriendlyByteBuf, T> constructor);

View File

@@ -1,8 +1,9 @@
package com.hypherionmc.craterlib.core.platform.services; package com.hypherionmc.craterlib.core.platform;
import com.hypherionmc.craterlib.core.systems.fluid.CraterFluidTank; import com.hypherionmc.craterlib.core.systems.fluid.CraterFluidTank;
import com.hypherionmc.craterlib.core.systems.fluid.FluidHolder; import com.hypherionmc.craterlib.core.systems.fluid.FluidHolder;
import com.hypherionmc.craterlib.core.systems.fluid.ICraterFluidHandler; import com.hypherionmc.craterlib.core.systems.fluid.ICraterFluidHandler;
import com.hypherionmc.craterlib.util.ServiceUtil;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
@@ -16,7 +17,9 @@ import org.jetbrains.annotations.Nullable;
/** /**
* @author HypherionSA * @author HypherionSA
*/ */
public interface LibFluidHelper { public interface CraterFluidHelper {
public CraterFluidHelper INSTANCE = ServiceUtil.load(CraterFluidHelper.class);
CraterFluidTank createFluidTank(int capacity); CraterFluidTank createFluidTank(int capacity);

View File

@@ -0,0 +1,18 @@
package com.hypherionmc.craterlib.core.platform;
/**
* @author HypherionSA
*/
public enum Environment {
CLIENT,
SERVER,
UNKNOWN;
public boolean isClient() {
return this == CLIENT;
}
public boolean isServer() {
return this == SERVER;
}
}

View File

@@ -1,4 +1,6 @@
package com.hypherionmc.craterlib.core.platform.services; package com.hypherionmc.craterlib.core.platform;
import com.hypherionmc.craterlib.util.ServiceUtil;
import java.io.File; import java.io.File;
@@ -6,7 +8,9 @@ import java.io.File;
* @author HypherionSA * @author HypherionSA
* Helper class to provide information about the ModLoader * Helper class to provide information about the ModLoader
*/ */
public interface ILoaderHelper { public interface ModloaderEnvironment {
public final ModloaderEnvironment INSTANCE = ServiceUtil.load(ModloaderEnvironment.class);
boolean isFabric(); boolean isFabric();
String getGameVersion(); String getGameVersion();

View File

@@ -1,29 +0,0 @@
package com.hypherionmc.craterlib.core.platform;
import com.hypherionmc.craterlib.CraterConstants;
import com.hypherionmc.craterlib.core.platform.services.ILoaderHelper;
import com.hypherionmc.craterlib.core.platform.services.LibCommonHelper;
import com.hypherionmc.craterlib.core.platform.services.LibFluidHelper;
import java.util.ServiceLoader;
/**
* @author HypherionSA
*/
public class Platform {
public static final ILoaderHelper LOADER = load(ILoaderHelper.class);
public static final LibCommonHelper COMMON_HELPER = load(LibCommonHelper.class);
public static final LibFluidHelper FLUID_HELPER = load(LibFluidHelper.class);
public static <T> T load(Class<T> clazz) {
final T loadedService = ServiceLoader.load(clazz)
.findFirst()
.orElseThrow(() -> new NullPointerException("Failed to load service for " + clazz.getName()));
CraterConstants.LOG.debug("Loaded {} for service {}", loadedService, clazz);
return loadedService;
}
}

View File

@@ -1,10 +0,0 @@
package com.hypherionmc.craterlib.core.platform.services;
/**
* @author HypherionSA
*/
public enum Environment {
CLIENT,
SERVER,
UNKNOWN
}

View File

@@ -1,40 +0,0 @@
package com.hypherionmc.craterlib.core.platform.services;
import com.hypherionmc.craterlib.common.item.BlockItemDyable;
import com.hypherionmc.craterlib.core.systems.reg.RegistryObject;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.network.Connection;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
/**
* @author HypherionSA
*/
public interface LibClientHelper {
void registerItemProperty(@NotNull BlockItemDyable item, @NotNull String property);
void registerCustomRenderTypes(
@NotNull Collection<RegistryObject<Block>> blocks,
@NotNull Collection<RegistryObject<Item>> items
);
Minecraft getClientInstance();
Player getClientPlayer();
Level getClientLevel();
Connection getClientConnection();
void registerBlockEntityRenderer(@NotNull BlockEntityType<? extends BlockEntity> blockEntityType, @NotNull BlockEntityRendererProvider blockEntityRendererFactory);
}

View File

@@ -1,6 +1,6 @@
package com.hypherionmc.craterlib.mixin.events.client; package com.hypherionmc.craterlib.mixin.events.client;
import com.hypherionmc.craterlib.api.event.client.EarlyInitEvent; import com.hypherionmc.craterlib.api.event.client.LateInitEvent;
import com.hypherionmc.craterlib.core.event.CraterEventBus; import com.hypherionmc.craterlib.core.event.CraterEventBus;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.Options; import net.minecraft.client.Options;
@@ -15,7 +15,7 @@ public class TutorialMixin {
@Inject(method = "<init>", at = @At("RETURN")) @Inject(method = "<init>", at = @At("RETURN"))
private void injectEarlyInitEvent(Minecraft minecraft, Options options, CallbackInfo ci) { private void injectEarlyInitEvent(Minecraft minecraft, Options options, CallbackInfo ci) {
EarlyInitEvent event = new EarlyInitEvent(minecraft, options); LateInitEvent event = new LateInitEvent(minecraft, options);
CraterEventBus.INSTANCE.postEvent(event); CraterEventBus.INSTANCE.postEvent(event);
} }

View File

@@ -25,7 +25,7 @@ public class RenderUtils {
public static Component getFluidAmount(long amount, long capacity) { public static Component getFluidAmount(long amount, long capacity) {
amount = amount / 81; amount = amount / 81;
capacity = capacity / 81; capacity = capacity / 81;
String text = "" + (int) (((float) amount / capacity) * 100); String text = String.valueOf((int) (((float) amount / capacity) * 100));
return amount > 0 ? Component.literal(ChatFormatting.AQUA + text + "%") : Component.literal(text + "%"); return amount > 0 ? Component.literal(ChatFormatting.AQUA + text + "%") : Component.literal(text + "%");
} }

View File

@@ -0,0 +1,27 @@
package com.hypherionmc.craterlib.util;
import com.hypherionmc.craterlib.CraterConstants;
import java.util.ServiceLoader;
/**
* @author HypherionSA
* Utility class to handle SPI loading
*/
public class ServiceUtil {
/**
* Try to load a service
* @param clazz The service class type to load
* @return The loaded class
*/
public static <T> T load(Class<T> clazz) {
final T loadedService = ServiceLoader.load(clazz)
.findFirst()
.orElseThrow(() -> new NullPointerException("Failed to load service for " + clazz.getName()));
CraterConstants.LOG.debug("Loaded {} for service {}", loadedService, clazz);
return loadedService;
}
}

View File

@@ -1,6 +1,6 @@
package com.hypherionmc.craterlib; package com.hypherionmc.craterlib;
import com.hypherionmc.craterlib.common.FabricCommonHelper; import com.hypherionmc.craterlib.common.FabricCommonPlatform;
import net.fabricmc.api.ModInitializer; import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
@@ -8,6 +8,6 @@ public class CraterLibInitializer implements ModInitializer {
@Override @Override
public void onInitialize() { public void onInitialize() {
ServerLifecycleEvents.SERVER_STARTING.register(server -> FabricCommonHelper.server = server); ServerLifecycleEvents.SERVER_STARTING.register(server -> FabricCommonPlatform.server = server);
} }
} }

View File

@@ -1,20 +1,46 @@
package com.hypherionmc.craterlib.client; package com.hypherionmc.craterlib.client;
import com.hypherionmc.craterlib.api.event.client.CraterClientTickEvent; import com.hypherionmc.craterlib.api.event.client.CraterClientTickEvent;
import com.hypherionmc.craterlib.api.event.client.LateInitEvent;
import com.hypherionmc.craterlib.core.event.CraterEventBus; import com.hypherionmc.craterlib.core.event.CraterEventBus;
import com.hypherionmc.craterlib.core.event.annot.CraterEventListener;
import com.hypherionmc.craterlib.core.systems.internal.CreativeTabRegistry;
import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.CreativeModeTab;
import org.apache.commons.lang3.tuple.Pair;
public class CraterLibClientInitializer implements ClientModInitializer { public class CraterLibClientInitializer implements ClientModInitializer {
@Override @Override
public void onInitializeClient() { public void onInitializeClient() {
ItemGroupEvents.MODIFY_ENTRIES_ALL.register(FabricClientHelper::registerCreativeItems);
ClientTickEvents.START_CLIENT_TICK.register((listener) -> { ClientTickEvents.START_CLIENT_TICK.register((listener) -> {
CraterClientTickEvent event = new CraterClientTickEvent(listener.level); CraterClientTickEvent event = new CraterClientTickEvent(listener.level);
CraterEventBus.INSTANCE.postEvent(event); CraterEventBus.INSTANCE.postEvent(event);
}); });
CraterEventBus.INSTANCE.registerEventListener(CraterLibClientInitializer.class);
}
@CraterEventListener
public static void lateInitEvent(LateInitEvent event) {
CreativeTabRegistry.getTabs().forEach(tab -> {
CreativeModeTab finalTab = FabricItemGroup.builder()
.title(Component.translatable("itemGroup." +
tab.getResourceLocation().toString().replace(":", ".")
))
.icon(tab.getIcon())
.build();
tab.setTab(finalTab);
ItemGroupEvents.modifyEntriesEvent(tab.getResourceKey()).register(entries -> CreativeTabRegistry
.getTabItems()
.stream().filter(t -> t.getLeft().get() == finalTab && t.getRight() != null)
.map(Pair::getRight).forEach(itm -> entries.accept(itm.get())));
});
} }
} }

View File

@@ -2,58 +2,47 @@ package com.hypherionmc.craterlib.client;
import com.hypherionmc.craterlib.api.rendering.CustomRenderType; import com.hypherionmc.craterlib.api.rendering.CustomRenderType;
import com.hypherionmc.craterlib.common.item.BlockItemDyable; import com.hypherionmc.craterlib.common.item.BlockItemDyable;
import com.hypherionmc.craterlib.core.platform.services.LibClientHelper; import com.hypherionmc.craterlib.core.platform.ClientPlatform;
import com.hypherionmc.craterlib.core.systems.reg.RegistryObject; import com.hypherionmc.craterlib.core.systems.reg.RegistryObject;
import com.hypherionmc.craterlib.util.ColorPropertyFunction; import com.hypherionmc.craterlib.util.ColorPropertyFunction;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
import net.fabricmc.fabric.api.client.rendering.v1.BlockEntityRendererRegistry;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroupEntries;
import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderers;
import net.minecraft.client.renderer.item.ItemProperties;
import net.minecraft.network.Connection; import net.minecraft.network.Connection;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.entity.BlockEntityType;
import org.jetbrains.annotations.NotNull;
import java.util.Collection; import java.util.Collection;
/** /**
* @author HypherionSA * @author HypherionSA
*/ */
public class FabricClientHelper implements LibClientHelper { public class FabricClientPlatform implements ClientPlatform {
@Override @Override
public void registerItemProperty(BlockItemDyable item, String property) { public void registerItemProperty(@NotNull BlockItemDyable item, @NotNull String property) {
if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) { if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) {
FabricModelPredicateProviderRegistry.register(item, new ResourceLocation(property), new ColorPropertyFunction(item)); ItemProperties.register(item, new ResourceLocation(property), new ColorPropertyFunction(item));
} }
} }
@Override @Override
public void registerCustomRenderTypes(Collection<RegistryObject<Block>> blocks, Collection<RegistryObject<Item>> items) { public void registerCustomRenderTypes(Collection<RegistryObject<Block>> blocks) {
blocks.forEach(blk -> { blocks.forEach(blk -> {
if (blk.get() instanceof CustomRenderType type) { if (blk.get() instanceof CustomRenderType type) {
BlockRenderLayerMap.INSTANCE.putBlock(blk.get(), type.getCustomRenderType()); BlockRenderLayerMap.INSTANCE.putBlock(blk.get(), type.getCustomRenderType());
} }
}); });
items.forEach(itm -> {
if (itm.get() instanceof BlockItemDyable dyable && dyable.getBlock() instanceof CustomRenderType customRenderType) {
BlockRenderLayerMap.INSTANCE.putItem(itm.get(), customRenderType.getCustomRenderType());
}
if (itm.get() instanceof CustomRenderType customRenderType) {
BlockRenderLayerMap.INSTANCE.putItem(itm.get(), customRenderType.getCustomRenderType());
}
});
} }
@Override @Override
@@ -76,12 +65,8 @@ public class FabricClientHelper implements LibClientHelper {
return Minecraft.getInstance().getConnection().getConnection(); return Minecraft.getInstance().getConnection().getConnection();
} }
public static void registerCreativeItems(CreativeModeTab tab, FabricItemGroupEntries entries) {
}
@Override @Override
public void registerBlockEntityRenderer(BlockEntityType<? extends BlockEntity> blockEntityType, BlockEntityRendererProvider blockEntityRendererFactory) { public void registerBlockEntityRenderer(@NotNull BlockEntityType<? extends BlockEntity> blockEntityType, @NotNull BlockEntityRendererProvider blockEntityRendererFactory) {
BlockEntityRendererRegistry.register(blockEntityType, blockEntityRendererFactory); BlockEntityRenderers.register(blockEntityType, blockEntityRendererFactory);
} }
} }

View File

@@ -1,2 +0,0 @@
package com.hypherionmc.craterlib.client;public class FabricNetworkHelper {
}

View File

@@ -3,7 +3,7 @@ package com.hypherionmc.craterlib.common;
import com.hypherionmc.craterlib.api.blockentity.caps.CraterCapabilityHandler; import com.hypherionmc.craterlib.api.blockentity.caps.CraterCapabilityHandler;
import com.hypherionmc.craterlib.api.blockentity.caps.ICraterCapProvider; import com.hypherionmc.craterlib.api.blockentity.caps.ICraterCapProvider;
import com.hypherionmc.craterlib.core.network.CraterNetworkHandler; import com.hypherionmc.craterlib.core.network.CraterNetworkHandler;
import com.hypherionmc.craterlib.core.platform.services.LibCommonHelper; import com.hypherionmc.craterlib.core.platform.CommonPlatform;
import com.hypherionmc.craterlib.network.FabricNetworkHandler; import com.hypherionmc.craterlib.network.FabricNetworkHandler;
import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory; import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory;
import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerType; import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerType;
@@ -19,6 +19,7 @@ import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.MenuType; import net.minecraft.world.inventory.MenuType;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import org.apache.commons.lang3.function.TriFunction; import org.apache.commons.lang3.function.TriFunction;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.Optional; import java.util.Optional;
@@ -27,12 +28,12 @@ import java.util.function.Consumer;
/** /**
* @author HypherionSA * @author HypherionSA
*/ */
public class FabricCommonHelper implements LibCommonHelper { public class FabricCommonPlatform implements CommonPlatform {
public static MinecraftServer server; public static MinecraftServer server;
@Override @Override
public CraterNetworkHandler createPacketHandler(String modid) { public CraterNetworkHandler createPacketHandler(String modid, boolean requireClient, boolean requireServer) {
return FabricNetworkHandler.of(modid); return FabricNetworkHandler.of(modid);
} }
@@ -50,13 +51,13 @@ public class FabricCommonHelper implements LibCommonHelper {
} }
@Override @Override
public Component getDisplayName() { public @NotNull Component getDisplayName() {
return menu.getDisplayName(); return menu.getDisplayName();
} }
@Nullable @Nullable
@Override @Override
public AbstractContainerMenu createMenu(int i, Inventory inventory, Player player) { public AbstractContainerMenu createMenu(int i, @NotNull Inventory inventory, @NotNull Player player) {
return menu.createMenu(i, inventory, player); return menu.createMenu(i, inventory, player);
} }
}; };

View File

@@ -1,6 +1,6 @@
package com.hypherionmc.craterlib.common; package com.hypherionmc.craterlib.common;
import com.hypherionmc.craterlib.core.platform.services.LibFluidHelper; import com.hypherionmc.craterlib.core.platform.CraterFluidHelper;
import com.hypherionmc.craterlib.core.systems.fluid.CraterFluidTank; import com.hypherionmc.craterlib.core.systems.fluid.CraterFluidTank;
import com.hypherionmc.craterlib.core.systems.fluid.FluidHolder; import com.hypherionmc.craterlib.core.systems.fluid.FluidHolder;
import com.hypherionmc.craterlib.core.systems.fluid.ICraterFluidHandler; import com.hypherionmc.craterlib.core.systems.fluid.ICraterFluidHandler;
@@ -26,7 +26,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.Arrays; import java.util.Arrays;
public class FabricFluidHelper implements LibFluidHelper { public class FabricFluidHelper implements CraterFluidHelper {
@Override @Override
public CraterFluidTank createFluidTank(int capacity) { public CraterFluidTank createFluidTank(int capacity) {

View File

@@ -1,7 +1,7 @@
package com.hypherionmc.craterlib.common; package com.hypherionmc.craterlib.common;
import com.hypherionmc.craterlib.core.platform.services.Environment; import com.hypherionmc.craterlib.core.platform.Environment;
import com.hypherionmc.craterlib.core.platform.services.ILoaderHelper; import com.hypherionmc.craterlib.core.platform.ModloaderEnvironment;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.SharedConstants; import net.minecraft.SharedConstants;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@@ -12,7 +12,7 @@ import java.io.File;
* @author HypherionSA * @author HypherionSA
* @date 07/08/2022 * @date 07/08/2022
*/ */
public class FabricLoaderHelper implements ILoaderHelper { public class FabricLoaderHelper implements ModloaderEnvironment {
@Override @Override
public boolean isFabric() { public boolean isFabric() {

View File

@@ -1,38 +0,0 @@
package com.hypherionmc.craterlib.mixin;
import com.hypherionmc.craterlib.core.systems.internal.CreativeTabRegistry;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.minecraft.client.Minecraft;
import net.minecraft.client.main.GameConfig;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.CreativeModeTab;
import org.apache.commons.lang3.tuple.Pair;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(Minecraft.class)
public class FabricMinecraftMixin {
@Inject(method = "<init>", at = @At("RETURN"))
private void injectCraterLateInit(GameConfig gameConfig, CallbackInfo ci) {
CreativeTabRegistry.getTabs().forEach(tab -> {
CreativeModeTab finalTab = FabricItemGroup.builder()
.title(Component.translatable("itemGroup." +
tab.getResourceLocation().toString().replace(":", ".")
))
.icon(tab.getIcon())
.build();
tab.setTab(finalTab);
ItemGroupEvents.modifyEntriesEvent(tab.getResourceKey()).register(entries -> CreativeTabRegistry
.getTabItems()
.stream().filter(t -> t.getLeft().get() == finalTab && t.getRight() != null)
.map(Pair::getRight).forEach(itm -> entries.accept(itm.get())));
});
}
}

View File

@@ -8,13 +8,14 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import org.jetbrains.annotations.NotNull;
import java.util.function.Function; import java.util.function.Function;
public class FabricClientNetworkHelper implements FabricNetworkHelper { public class FabricClientNetworkHelper implements FabricNetworkHelper {
@Override @Override
public void registerClientReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory) { public void registerClientReceiver(@NotNull ResourceLocation channelName, @NotNull Function<FriendlyByteBuf, CraterPacket<?>> factory) {
ClientPlayNetworking.registerGlobalReceiver(channelName, (Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender) -> { ClientPlayNetworking.registerGlobalReceiver(channelName, (Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender) -> {
CraterPacket<?> packet = factory.apply(buf); CraterPacket<?> packet = factory.apply(buf);
client.execute(() -> packet.handle(client.player, client)); client.execute(() -> packet.handle(client.player, client));

View File

@@ -0,0 +1 @@
com.hypherionmc.craterlib.client.FabricClientPlatform

View File

@@ -0,0 +1 @@
com.hypherionmc.craterlib.common.FabricCommonPlatform

View File

@@ -1 +0,0 @@
com.hypherionmc.craterlib.client.FabricClientHelper

View File

@@ -1 +0,0 @@
com.hypherionmc.craterlib.common.FabricCommonHelper

View File

@@ -6,7 +6,6 @@
"mixins": [ "mixins": [
], ],
"client": [ "client": [
"FabricMinecraftMixin"
], ],
"server": [ "server": [
], ],