added TOP compat

This commit is contained in:
Robin Bärtschi 2024-06-26 15:19:01 +02:00
parent 13455380c1
commit 73befa1e00
10 changed files with 157 additions and 20 deletions

View File

@ -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}")

View File

@ -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));
//
// }
}

View File

@ -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 {
//
// }
}

View File

@ -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);

View File

@ -50,8 +50,8 @@ public class EnvCollectorScreen extends AbstractContainerScreen<EnvCollectorMenu
@Override
public void render(@NotNull GuiGraphics pGuiGraphics, int pMouseX, int pMouseY, float pPartialTick) {
renderBackground(pGuiGraphics, pMouseX, pMouseY, pPartialTick);
super.render(pGuiGraphics, pMouseX, pMouseY, pPartialTick);
this.renderTooltip(pGuiGraphics, pMouseX, pMouseY);
}

View File

@ -0,0 +1,15 @@
package robaertschi.environmenttech.compat;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.ModList;
import robaertschi.environmenttech.compat.top.TopCompat;
public class ETCompat {
public static void init(IEventBus modEventBus) {
var mods = ModList.get();
if (mods.isLoaded("theoneprobe")) {
TopCompat.init(modEventBus);
}
}
}

View File

@ -0,0 +1,12 @@
package robaertschi.environmenttech.compat.top;
import mcjty.theoneprobe.api.IProbeHitData;
import mcjty.theoneprobe.api.IProbeInfo;
import mcjty.theoneprobe.api.ProbeMode;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
public interface TOPInfoProvider {
void addProbeInfo(ProbeMode mode, IProbeInfo probeInfo, Player player, Level level, BlockState blockState, IProbeHitData data);
}

View File

@ -0,0 +1,79 @@
package robaertschi.environmenttech.compat.top;
import mcjty.theoneprobe.api.*;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.InterModComms;
import net.neoforged.fml.event.lifecycle.InterModEnqueueEvent;
import net.neoforged.neoforge.capabilities.BlockCapabilityCache;
import robaertschi.environmenttech.EnvironmentTech;
import robaertschi.environmenttech.client.renderer.EnvStorageRenderer;
import robaertschi.environmenttech.data.capabilities.ETCapabilities;
import robaertschi.environmenttech.data.capabilities.EnvType;
import robaertschi.environmenttech.data.capabilities.IEnvStorage;
import java.util.function.Function;
public class TopCompat {
public static void init(IEventBus modEventBus) {
modEventBus.addListener(TopCompat::sendIMC);
}
public static void sendIMC(InterModEnqueueEvent event) {
InterModComms.sendTo("theoneprobe", "getTheOneProbe", GetTheOneProbe::new);
}
public static class GetTheOneProbe implements Function<ITheOneProbe, Void> {
public static ITheOneProbe probe;
@Override
public Void apply(ITheOneProbe theOneProbe) {
probe = theOneProbe;
EnvironmentTech.LOGGER.info("Enabled TheOneProbe support");
theOneProbe.registerProvider(new IProbeInfoProvider() {
private BlockCapabilityCache<IEnvStorage, EnvType> 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;
}
}
}

View File

@ -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;
}
);
}
}

View File

@ -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("%")
);
}
}
}