diff --git a/build.gradle.kts b/build.gradle.kts index cf7fb40..4e068cf 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -30,6 +30,8 @@ val reiVersion: String by project val jeiVersion: String by project val jeiMcVersion: String by project +val withTop = true + version = modVersion group = modGroupId @@ -145,7 +147,9 @@ runs { dependencies { implementation ("net.neoforged:neoforge:${neoVersion}") - implementation("mcjty.theoneprobe:theoneprobe:${topVersion}") + compileOnly("mcjty.theoneprobe:theoneprobe:${topVersion}") + if (withTop) + runtimeOnly("mcjty.theoneprobe:theoneprobe:${topVersion}") // runtimeOnly("me.shedaniel:RoughlyEnoughItems-neoforge:${reiVersion}") // compileOnly("me.shedaniel:RoughlyEnoughItems-api-neoforge:${reiVersion}") // compileOnly("me.shedaniel:RoughlyEnoughItems-default-plugin-neoforge:${reiVersion}") diff --git a/src/main/java/robaertschi/environmenttech/EnvironmentTech.java b/src/main/java/robaertschi/environmenttech/EnvironmentTech.java index 2e4abab..7019b8b 100644 --- a/src/main/java/robaertschi/environmenttech/EnvironmentTech.java +++ b/src/main/java/robaertschi/environmenttech/EnvironmentTech.java @@ -9,9 +9,9 @@ import net.neoforged.fml.common.Mod; import net.neoforged.fml.config.ModConfig; import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.event.RegisterCommandsEvent; -import net.neoforged.neoforge.event.tick.PlayerTickEvent; import org.slf4j.Logger; import robaertschi.environmenttech.command.EnvironmenttechCommand; +import robaertschi.environmenttech.compat.ETCompat; import robaertschi.environmenttech.data.attachments.ETAttachments; import robaertschi.environmenttech.data.capabilities.ETCapabilities; import robaertschi.environmenttech.data.components.ETComponents; @@ -49,6 +49,7 @@ public class EnvironmentTech ETMenus.init(modEventBus); ETParticles.init(modEventBus); ETComponents.init(modEventBus); + ETCompat.init(modEventBus); NeoForge.EVENT_BUS.register(this); @@ -60,14 +61,14 @@ public class EnvironmentTech } - @SubscribeEvent() - public void onPlayerTick(PlayerTickEvent.Post event) { - var level = event.getEntity().level(); - if (level.isClientSide()) { - return; - } - var env = level.getChunk(event.getEntity().blockPosition()).getData(ETAttachments.ENV); -// event.getEntity().sendSystemMessage(Component.literal("ENV in chunk: " + env)); - - } +// @SubscribeEvent() +// public void onPlayerTick(PlayerTickEvent.Post event) { +// var level = event.getEntity().level(); +// if (level.isClientSide()) { +// return; +// } +// var env = level.getChunk(event.getEntity().blockPosition()).getData(ETAttachments.ENV); +//// event.getEntity().sendSystemMessage(Component.literal("ENV in chunk: " + env)); +// +// } } diff --git a/src/main/java/robaertschi/environmenttech/client/ETClient.java b/src/main/java/robaertschi/environmenttech/client/ETClient.java index 54c3913..9b2f53d 100644 --- a/src/main/java/robaertschi/environmenttech/client/ETClient.java +++ b/src/main/java/robaertschi/environmenttech/client/ETClient.java @@ -1,14 +1,10 @@ package robaertschi.environmenttech.client; -import com.mojang.blaze3d.platform.InputConstants; -import net.minecraft.client.KeyMapping; import net.minecraft.client.renderer.item.ItemProperties; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; -import net.neoforged.jarjar.nio.util.Lazy; import net.neoforged.neoforge.client.event.*; -import org.lwjgl.glfw.GLFW; import robaertschi.environmenttech.EnvironmentTech; import robaertschi.environmenttech.client.particle.EnvParticleProvider; import robaertschi.environmenttech.client.screen.EnvCollectorScreen; @@ -50,4 +46,10 @@ public class ETClient { @SubscribeEvent public static void registerBindings(RegisterKeyMappingsEvent event) { } + +// @EventBusSubscriber(bus = EventBusSubscriber.Bus.GAME) +// public static class Events { +// +// } + } diff --git a/src/main/java/robaertschi/environmenttech/client/renderer/EnvStorageRenderer.java b/src/main/java/robaertschi/environmenttech/client/renderer/EnvStorageRenderer.java index 596ece9..62ac95d 100644 --- a/src/main/java/robaertschi/environmenttech/client/renderer/EnvStorageRenderer.java +++ b/src/main/java/robaertschi/environmenttech/client/renderer/EnvStorageRenderer.java @@ -26,6 +26,10 @@ import java.util.Optional; * @since 0.1.0 */ public class EnvStorageRenderer { + public static final int from = FastColor.ARGB32.color(0, 103, 29); + public static final int to = FastColor.ARGB32.color(0,191, 38); + + private final int x; private final int y; private final int width; @@ -56,8 +60,6 @@ public class EnvStorageRenderer { boxRenderer.render(guiGraphics); - int from = FastColor.ARGB32.color(0, 103, 29); - int to = FastColor.ARGB32.color(0,191, 38); guiGraphics.fillGradient(x, y + (height - stored), x + width, y + height, from, to); diff --git a/src/main/java/robaertschi/environmenttech/client/screen/EnvCollectorScreen.java b/src/main/java/robaertschi/environmenttech/client/screen/EnvCollectorScreen.java index b4c0072..689444f 100644 --- a/src/main/java/robaertschi/environmenttech/client/screen/EnvCollectorScreen.java +++ b/src/main/java/robaertschi/environmenttech/client/screen/EnvCollectorScreen.java @@ -50,8 +50,8 @@ public class EnvCollectorScreen extends AbstractContainerScreen { + public static ITheOneProbe probe; + + @Override + public Void apply(ITheOneProbe theOneProbe) { + probe = theOneProbe; + EnvironmentTech.LOGGER.info("Enabled TheOneProbe support"); + theOneProbe.registerProvider(new IProbeInfoProvider() { + private BlockCapabilityCache capCache = null; + + @Override + public ResourceLocation getID() { + return EnvironmentTech.id("default"); + } + + @Override + public void addProbeInfo(ProbeMode probeMode, IProbeInfo iProbeInfo, Player player, Level level, BlockState blockState, IProbeHitData iProbeHitData) { + var blockEntity = level.getBlockEntity(iProbeHitData.getPos()); + if (blockEntity instanceof TOPInfoProvider topInfoProvider) { + topInfoProvider.addProbeInfo(probeMode, iProbeInfo, player, level, blockState, iProbeHitData); + } + + if (!(level instanceof ServerLevel)) return; + + if (capCache == null || !capCache.pos().equals(iProbeHitData.getPos())) { + capCache = BlockCapabilityCache.create(ETCapabilities.ENV_STORAGE_BLOCK, (ServerLevel) level, iProbeHitData.getPos(), EnvType.Normal); + // Try other env types + if (capCache.getCapability() == null) { + capCache = BlockCapabilityCache.create(ETCapabilities.ENV_STORAGE_BLOCK, (ServerLevel) level, iProbeHitData.getPos(), EnvType.Bundled); + } + if (capCache.getCapability() == null) { + capCache = BlockCapabilityCache.create(ETCapabilities.ENV_STORAGE_BLOCK, (ServerLevel) level, iProbeHitData.getPos(), EnvType.Chunk); + } + } + + IEnvStorage cap = capCache.getCapability(); + if (cap != null) { + var style = iProbeInfo.defaultProgressStyle() + .filledColor(EnvStorageRenderer.from) + .alternateFilledColor(EnvStorageRenderer.to) + .suffix(" ENV"); + iProbeInfo.horizontal().progress(cap.getEnvStored(),cap.getMaxEnv(), style); + } + } + }); + + return null; + } + } +} diff --git a/src/main/java/robaertschi/environmenttech/data/capabilities/ETCapabilities.java b/src/main/java/robaertschi/environmenttech/data/capabilities/ETCapabilities.java index 48393e5..e9702be 100644 --- a/src/main/java/robaertschi/environmenttech/data/capabilities/ETCapabilities.java +++ b/src/main/java/robaertschi/environmenttech/data/capabilities/ETCapabilities.java @@ -42,6 +42,15 @@ public class ETCapabilities { return null; } ); + + event.registerBlockEntity( + ENV_STORAGE_BLOCK, + ETBlockEntities.ENV_DISTRIBUTOR_BLOCK_ENTITY.get(), + (object, context) -> { + if (context == EnvType.Chunk) return object.getEnvStorage(); + return null; + } + ); } } diff --git a/src/main/java/robaertschi/environmenttech/level/block/entity/EnvCollectorBlockEntity.java b/src/main/java/robaertschi/environmenttech/level/block/entity/EnvCollectorBlockEntity.java index 2917288..60c5eb8 100644 --- a/src/main/java/robaertschi/environmenttech/level/block/entity/EnvCollectorBlockEntity.java +++ b/src/main/java/robaertschi/environmenttech/level/block/entity/EnvCollectorBlockEntity.java @@ -1,6 +1,9 @@ package robaertschi.environmenttech.level.block.entity; import lombok.Getter; +import mcjty.theoneprobe.api.IProbeHitData; +import mcjty.theoneprobe.api.IProbeInfo; +import mcjty.theoneprobe.api.ProbeMode; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; @@ -28,6 +31,7 @@ import net.neoforged.neoforge.items.ItemStackHandler; import net.neoforged.neoforge.items.wrapper.CombinedInvWrapper; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import robaertschi.environmenttech.compat.top.TOPInfoProvider; import robaertschi.environmenttech.data.attachments.ETAttachments; import robaertschi.environmenttech.data.capabilities.AdaptedItemHandler; import robaertschi.environmenttech.data.capabilities.EnvStorage; @@ -38,7 +42,7 @@ import robaertschi.environmenttech.menu.EnvCollectorMenu; import static robaertschi.environmenttech.EnvironmentTech.MODID; -public class EnvCollectorBlockEntity extends BlockEntity implements MenuProvider, ITickableBlockEntity { +public class EnvCollectorBlockEntity extends BlockEntity implements MenuProvider, ITickableBlockEntity, TOPInfoProvider { public static final int SLOT_INPUT = 0; public static final int SLOT_INPUT_COUNT = 1; @@ -291,4 +295,13 @@ public class EnvCollectorBlockEntity extends BlockEntity implements MenuProvider public AbstractContainerMenu createMenu(int pContainerId, @NotNull Inventory pPlayerInventory, @NotNull Player pPlayer) { return new EnvCollectorMenu(pContainerId, pPlayer, this, data); } + + @Override + public void addProbeInfo(ProbeMode mode, IProbeInfo probeInfo, Player player, Level level, BlockState blockState, IProbeHitData data) { + if (hasRecipe(level)) { + probeInfo.horizontal().progress(getProgress(), getMaxProgress(), + probeInfo.defaultProgressStyle().suffix("%") + ); + } + } }