Skip to content

Commit 6e080d6

Browse files
committed
Forge Energy tunnel (color possibly TBD)
1 parent 5d0a2cb commit 6e080d6

File tree

4 files changed

+97
-0
lines changed

4 files changed

+97
-0
lines changed

src/datagen/java/dev/compactmods/machines/datagen/RecipeGenerator.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,14 @@ protected void buildCraftingRecipes(Consumer<FinishedRecipe> consumer) {
6161
.unlockedBy("observer", RecipeProvider.has(Items.OBSERVER))
6262
.save(consumer);
6363

64+
TunnelRecipeBuilder.tunnel(Tunnels.FORGE_ENERGY.get(), 2)
65+
.requires(Items.GLOWSTONE_DUST)
66+
.requires(Items.ENDER_PEARL)
67+
.requires(Items.REDSTONE)
68+
.requires(Items.OBSERVER)
69+
.unlockedBy("observer", RecipeProvider.has(Items.OBSERVER))
70+
.save(consumer);
71+
6472
addMachineRecipes(consumer);
6573
}
6674

src/main/java/dev/compactmods/machines/core/Tunnels.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import dev.compactmods.machines.tunnel.TunnelWallBlock;
66
import dev.compactmods.machines.tunnel.TunnelWallEntity;
77
import dev.compactmods.machines.tunnel.definitions.FluidTunnel;
8+
import dev.compactmods.machines.tunnel.definitions.ForgeEnergyTunnel;
89
import dev.compactmods.machines.tunnel.definitions.UnknownTunnel;
910
import dev.compactmods.machines.tunnel.definitions.ItemTunnel;
1011
import net.minecraft.resources.ResourceLocation;
@@ -66,6 +67,8 @@ public static TunnelDefinition getDefinition(ResourceLocation id) {
6667

6768
public static final RegistryObject<TunnelDefinition> FLUID_TUNNEL_DEF = DEFINITIONS.register("fluid", FluidTunnel::new);
6869

70+
public static final RegistryObject<TunnelDefinition> FORGE_ENERGY = DEFINITIONS.register("energy", ForgeEnergyTunnel::new);
71+
6972
// ================================================================================================================
7073
// TUNNEL BLOCKS / TILES
7174
// ================================================================================================================

src/main/resources/assets/compactmachines/lang/en_us.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
"item.compactmachines.personal_shrinking_device": "Personal Shrinking Device",
5454
"item.compactmachines.tunnels.item": "Item Tunnel",
5555
"item.compactmachines.tunnels.fluid": "Fluid Tunnel",
56+
"item.compactmachines.tunnels.energy": "Energy Tunnel",
5657
"item.compactmachines.tunnels.redstone_in": "Redstone Tunnel (In)",
5758
"item.compactmachines.tunnels.redstone_out": "Redstone Tunnel (Out)",
5859
"itemGroup.compactmachines": "Compact Machines",
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package dev.compactmods.machines.tunnel.definitions;
2+
3+
import com.google.common.collect.ImmutableSet;
4+
import dev.compactmods.machines.api.tunnels.TunnelDefinition;
5+
import dev.compactmods.machines.api.tunnels.capability.CapabilityTunnel;
6+
import dev.compactmods.machines.api.tunnels.lifecycle.TunnelInstance;
7+
import net.minecraft.core.BlockPos;
8+
import net.minecraft.core.Direction;
9+
import net.minecraft.nbt.CompoundTag;
10+
import net.minecraft.util.FastColor;
11+
import net.minecraftforge.common.capabilities.Capability;
12+
import net.minecraftforge.common.util.INBTSerializable;
13+
import net.minecraftforge.common.util.LazyOptional;
14+
import net.minecraftforge.energy.CapabilityEnergy;
15+
import net.minecraftforge.energy.EnergyStorage;
16+
import net.minecraftforge.energy.IEnergyStorage;
17+
import net.minecraftforge.registries.ForgeRegistryEntry;
18+
19+
import javax.annotation.Nonnull;
20+
21+
public class ForgeEnergyTunnel extends ForgeRegistryEntry<TunnelDefinition>
22+
implements TunnelDefinition, CapabilityTunnel<ForgeEnergyTunnel.Instance> {
23+
@Override
24+
public int ringColor() {
25+
return FastColor.ARGB32.color(255, 193, 100, 222);
26+
}
27+
28+
@Override
29+
public ImmutableSet<Capability<?>> getSupportedCapabilities() {
30+
return ImmutableSet.of(CapabilityEnergy.ENERGY);
31+
}
32+
33+
@Override
34+
public <CapType> LazyOptional<CapType> getCapability(Capability<CapType> type, Instance instance) {
35+
if (type == CapabilityEnergy.ENERGY) {
36+
return instance.lazy().cast();
37+
}
38+
39+
return LazyOptional.empty();
40+
}
41+
42+
@Override
43+
public Instance newInstance(BlockPos position, Direction side) {
44+
return new Instance();
45+
}
46+
47+
public static class Instance implements TunnelInstance, INBTSerializable<CompoundTag> {
48+
49+
private final int DEFAULT_STORAGE = 10000;
50+
private EnergyStorage storage;
51+
private final LazyOptional<IEnergyStorage> lazy;
52+
53+
public Instance() {
54+
this.storage = new EnergyStorage(DEFAULT_STORAGE);
55+
this.lazy = LazyOptional.of(this::getStorage);
56+
}
57+
58+
@Nonnull
59+
public EnergyStorage getStorage() {
60+
return this.storage;
61+
}
62+
63+
public LazyOptional<IEnergyStorage> lazy() {
64+
return lazy;
65+
}
66+
67+
@Override
68+
public CompoundTag serializeNBT() {
69+
CompoundTag data = new CompoundTag();
70+
data.put("storage", storage.serializeNBT());
71+
return data;
72+
}
73+
74+
@Override
75+
public void deserializeNBT(CompoundTag nbt) {
76+
if(!nbt.contains("storage")) {
77+
this.storage = new EnergyStorage(DEFAULT_STORAGE);
78+
return;
79+
}
80+
81+
final var stor = nbt.get("storage");
82+
storage.deserializeNBT(stor);
83+
}
84+
}
85+
}

0 commit comments

Comments
 (0)