Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create RS2 Conduits #750

Merged
merged 8 commits into from
Aug 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions buildSrc/shared.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,14 @@ repositories {
}
}

maven {
url = uri("https://maven.pkg.github.com/refinedmods/refinedstorage2")
credentials {
username = "anything"
password = "\u0067hp_oGjcDFCn8jeTzIj4Ke9pLoEVtpnZMP4VQgaX"
}
}

mavenLocal() {
content {
includeGroup("com.enderio")
Expand Down
7 changes: 7 additions & 0 deletions enderio-conduits-modded/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,11 @@ sourceSets {

val regiliteVersion: String by project
val jeiVersion: String by project
val graphlibVersion: String by project
val ae2Version: String by project
val mekanismVersion: String by project
val refinedstorageVersion: String by project


dependencies {
implementation("com.enderio:Regilite:$regiliteVersion")
Expand All @@ -54,6 +57,10 @@ dependencies {
compileOnly("mekanism:Mekanism:${minecraftVersion}-${mekanismVersion}:api")
runtimeOnly("mekanism:Mekanism:${minecraftVersion}-${mekanismVersion}")

// Refined Storage
api("com.refinedmods.refinedstorage:refinedstorage-neoforge:${refinedstorageVersion}")
runtimeOnly("com.refinedmods.refinedstorage:refinedstorage-neoforge:${refinedstorageVersion}")

//Laserio
compileOnly("curse.maven:laserio-${curseforge_laserio_id}:${curseforge_laserio_file}")
runtimeOnly("curse.maven:laserio-${curseforge_laserio_id}:${curseforge_laserio_file}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@
"item.enderio.conduit.ender_chemical": "Ender Chemical Conduit",
"item.enderio.conduit.heat": "Heat Conduit",
"item.enderio.conduit.me": "ME Conduit",
"item.enderio.conduit.pressurized_chemical": "Pressurized Chemical Conduit"
"item.enderio.conduit.pressurized_chemical": "Pressurized Chemical Conduit",
"item.enderio.rs": "Refined Storage Conduit"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"neoforge:conditions": [
{
"type": "neoforge:mod_loaded",
"modid": "refinedstorage"
}
],
"parent": "minecraft:recipes/root",
"criteria": {
"has_ingredient": {
"conditions": {
"items": [
{
"items": "enderio:conduit_binder"
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "enderio:rs_conduit"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_the_recipe",
"has_ingredient"
]
],
"rewards": {
"recipes": [
"enderio:rs_conduit"
]
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"neoforge:conditions": [
{
"type": "neoforge:mod_loaded",
"modid": "refinedstorage"
}
],
"type": "enderio:rs",
"description": {
"translate": "item.enderio.rs"
},
"texture": "enderio:block/conduit/rs"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"neoforge:conditions": [
{
"type": "neoforge:mod_loaded",
"modid": "refinedstorage"
}
],
"type": "minecraft:crafting_shaped",
"category": "building",
"key": {
"B": {
"item": "enderio:conduit_binder"
},
"I": {
"tag": "refinedstorage:cables"
}
},
"pattern": [
"BBB",
"III",
"BBB"
],
"result": {
"components": {
"enderio:conduit": "enderio:rs"
},
"count": 3,
"id": "enderio:conduit"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.enderio.modconduits.mods.appeng.AE2ConduitsModule;
import com.enderio.modconduits.data.ModConduitRecipeProvider;
import com.enderio.modconduits.mods.mekanism.MekanismModule;
import com.enderio.modconduits.mods.refinedstorage.RefinedStorageModule;
import com.enderio.regilite.Regilite;
import net.minecraft.core.RegistrySetBuilder;
import net.minecraft.data.PackOutput;
Expand Down Expand Up @@ -37,7 +38,8 @@ public class ModdedConduits {

private static final Map<String, Supplier<ConduitModule>> CONDUIT_MODULES = Map.ofEntries(
entry("ae2", () -> AE2ConduitsModule.INSTANCE),
entry("mekanism", () -> MekanismModule.INSTANCE)
entry("mekanism", () -> MekanismModule.INSTANCE),
entry("refinedstorage", () -> RefinedStorageModule.INSTANCE)
);

public static IEventBus modEventBus;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
package com.enderio.modconduits.mods.refinedstorage;

import com.enderio.conduits.api.ColoredRedstoneProvider;
import com.enderio.conduits.api.Conduit;
import com.enderio.conduits.api.ConduitMenuData;
import com.enderio.conduits.api.ConduitNetwork;
import com.enderio.conduits.api.ConduitNode;
import com.enderio.conduits.api.ConduitType;
import com.enderio.conduits.api.ticker.ConduitTicker;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.refinedmods.refinedstorage.neoforge.RefinedStorageNeoForgeApiImpl;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.ComponentSerialization;
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.Block;
import net.neoforged.neoforge.capabilities.BlockCapability;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.Set;

public record RSConduit(ResourceLocation texture, Component description) implements Conduit<RSConduit> {
public static final ConduitMenuData.Simple MENU_DATA = new ConduitMenuData.Simple(false, false, false, false, false, false);
public static MapCodec<RSConduit> CODEC = RecordCodecBuilder.mapCodec(
builder -> builder.group(
ResourceLocation.CODEC.fieldOf("texture").forGetter(RSConduit::texture),
ComponentSerialization.CODEC.fieldOf("description").forGetter(RSConduit::description)
).apply(builder, RSConduit::new)
);

@Override
public ResourceLocation texture() {
return texture;
}

@Override
public Component description() {
return description;
}

@Override
public ConduitType<RSConduit> type() {
return RefinedStorageModule.RS_CONDUIT.get();
}

@Override
public ConduitTicker<RSConduit> getTicker() {
return Ticker.INSTANCE;
}

@Override
public ConduitMenuData getMenuData() {
return MENU_DATA;
}

@Override
public int compareTo(@NotNull RSConduit o) {
return 0;
}

@Override
public void onCreated(ConduitNode node, Level level, BlockPos pos, @Nullable Player player) {
var data = node.getOrCreateData(RefinedStorageModule.DATA.get());
if (data.mainNode == null) {
data.mainNode = new RSNetworkHost.ConduitRSNode(level, pos);
data.addContainer(data.mainNode);
data.initialize(level, () -> {});
level.blockUpdated(pos, level.getBlockState(pos).getBlock());

// Update pipe shape
var state = level.getBlockState(pos);
state.updateNeighbourShapes(level, pos, Block.UPDATE_ALL);

data.update(level);
}
}

@Override
public void onRemoved(ConduitNode node, Level level, BlockPos pos) {
var data = node.getOrCreateData(RefinedStorageModule.DATA.get());
if (data.mainNode != null) {
data.mainNode.setRemoved(true);
data.remove(level);
}
}

@Override
public void onConnectionsUpdated(ConduitNode node, Level level, BlockPos pos, Set<Direction> connectedSides) {
var data = node.getOrCreateData(RefinedStorageModule.DATA.get());
if (data.mainNode != null) {
data.update(level);
}
}

@Override
public <K> @Nullable K proxyCapability(BlockCapability<K, Direction> capability, ConduitNode node, Level level, BlockPos pos, @Nullable Direction direction,
ConduitNode.@Nullable IOState state) {
if (capability == RefinedStorageNeoForgeApiImpl.INSTANCE.getNetworkNodeContainerProviderCapability()) {
var data = node.getData(RefinedStorageModule.DATA.get());
if (data != null && data.mainNode != null && data.mainNode.isRemoved()) {
return null;
}
//noinspection unchecked
return (K) node.getData(RefinedStorageModule.DATA.get());
}
return null;
}

private static final class Ticker implements ConduitTicker<RSConduit> {

private static final Ticker INSTANCE = new Ticker();

@Override
public void tickGraph(ServerLevel level, RSConduit conduit, ConduitNetwork graph, ColoredRedstoneProvider coloredRedstoneProvider) {

}

@Override
public boolean canConnectTo(Level level, BlockPos conduitPos, Direction direction) {
var cap = level.getCapability(RefinedStorageNeoForgeApiImpl.INSTANCE.getNetworkNodeContainerProviderCapability(), conduitPos.relative(direction), direction.getOpposite());
if (cap != null) {
for (var connection: cap.getContainers()) {
if (connection.canAcceptIncomingConnection(direction.getOpposite(), level.getBlockState(conduitPos))) {
return true;
}
}
}
return false;
}
}
}
Loading