mirror of
https://github.com/Ellpeck/PrettyPipes.git
synced 2024-11-22 19:58:35 +01:00
Compare commits
4 commits
a8d1a99e28
...
2597923ec8
Author | SHA1 | Date | |
---|---|---|---|
2597923ec8 | |||
f5894f4528 | |||
4a43c32342 | |||
9f55e87972 |
56 changed files with 168 additions and 132 deletions
|
@ -34,7 +34,7 @@ mod_name=PrettyPipes
|
|||
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
||||
mod_license=MIT
|
||||
# The mod version. See https://semver.org/
|
||||
mod_version=1.16.3
|
||||
mod_version=1.17.0
|
||||
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
|
||||
# This should match the base package used for the mod sources.
|
||||
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||
|
|
|
@ -42,7 +42,7 @@ public final class Utility {
|
|||
|
||||
public static final Codec<ItemStackHandler> ITEM_STACK_HANDLER_CODEC = RecordCodecBuilder.create(builder -> builder.group(
|
||||
Codec.INT.fieldOf("size").forGetter(h -> h.getSlots()),
|
||||
Codec.list(ItemStack.CODEC).fieldOf("items").forGetter(h -> IntStream.range(0, h.getSlots()).mapToObj(h::getStackInSlot).toList())
|
||||
Codec.list(ItemStack.OPTIONAL_CODEC).fieldOf("items").forGetter(h -> IntStream.range(0, h.getSlots()).mapToObj(h::getStackInSlot).toList())
|
||||
).apply(builder, (size, items) -> {
|
||||
var ret = new ItemStackHandler(size);
|
||||
for (var i = 0; i < items.size(); i++)
|
||||
|
|
|
@ -103,7 +103,7 @@ public class JEIPrettyPipesPlugin implements IModPlugin {
|
|||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onClientTick(ClientTickEvent event) {
|
||||
public void onClientTick(ClientTickEvent.Pre event) {
|
||||
if (!PlayerPrefs.get().syncJei)
|
||||
return;
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import com.mojang.serialization.codecs.RecordCodecBuilder;
|
|||
import de.ellpeck.prettypipes.PrettyPipes;
|
||||
import de.ellpeck.prettypipes.packets.PacketButton;
|
||||
import de.ellpeck.prettypipes.pipe.PipeBlockEntity;
|
||||
import joptsimple.internal.Strings;
|
||||
import net.minecraft.client.gui.components.AbstractWidget;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.component.DataComponentType;
|
||||
|
@ -68,13 +69,13 @@ public class DirectionSelector {
|
|||
if (!this.modified)
|
||||
return;
|
||||
this.modified = false;
|
||||
this.stack.set(Data.TYPE, new Data(this.direction.getName()));
|
||||
this.stack.set(Data.TYPE, new Data(this.direction != null ? this.direction.getName() : ""));
|
||||
}
|
||||
|
||||
public void load() {
|
||||
var data = this.stack.get(Data.TYPE);
|
||||
if (data != null)
|
||||
this.direction = Direction.byName(data.direction);
|
||||
this.direction = !Strings.isNullOrEmpty(data.direction) ? Direction.byName(data.direction) : null;
|
||||
}
|
||||
|
||||
public Direction[] directions() {
|
||||
|
|
|
@ -45,8 +45,7 @@ public class NetworkEdge extends DefaultWeightedEdge implements INBTSerializable
|
|||
@Override
|
||||
public void deserializeNBT(HolderLookup.Provider provider, CompoundTag nbt) {
|
||||
this.pipes.clear();
|
||||
var list = nbt.getList("pipes", Tag.TAG_COMPOUND);
|
||||
for (var tag : list)
|
||||
for (var tag : nbt.getList("pipes", Tag.TAG_INT_ARRAY))
|
||||
this.pipes.add(Utility.readBlockPos(tag));
|
||||
}
|
||||
|
||||
|
|
|
@ -274,8 +274,7 @@ public class PipeItem implements IPipeItem {
|
|||
this.y = nbt.getFloat("y");
|
||||
this.z = nbt.getFloat("z");
|
||||
this.path.clear();
|
||||
var list = nbt.getList("path", Tag.TAG_COMPOUND);
|
||||
for (var tag : list)
|
||||
for (var tag : nbt.getList("path", Tag.TAG_INT_ARRAY))
|
||||
this.path.add(Utility.readBlockPos(tag));
|
||||
}
|
||||
|
||||
|
|
|
@ -64,8 +64,7 @@ public class PipeNetwork extends SavedData implements GraphListener<BlockPos, Ne
|
|||
|
||||
public PipeNetwork(CompoundTag nbt, HolderLookup.Provider provider) {
|
||||
this();
|
||||
var nodes = nbt.getList("nodes", Tag.TAG_COMPOUND);
|
||||
for (var node : nodes)
|
||||
for (var node : nbt.getList("nodes", Tag.TAG_INT_ARRAY))
|
||||
this.graph.addVertex(Utility.readBlockPos(node));
|
||||
var edges = nbt.getList("edges", Tag.TAG_COMPOUND);
|
||||
for (var i = 0; i < edges.size(); i++)
|
||||
|
|
|
@ -19,8 +19,8 @@ public record PacketCraftingModuleTransfer(List<ItemStack> inputs, List<ItemStac
|
|||
|
||||
public static final Type<PacketCraftingModuleTransfer> TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(PrettyPipes.ID, "crafting_module_transfer"));
|
||||
public static final StreamCodec<RegistryFriendlyByteBuf, PacketCraftingModuleTransfer> CODEC = StreamCodec.composite(
|
||||
ByteBufCodecs.collection(ArrayList::new, ItemStack.STREAM_CODEC), PacketCraftingModuleTransfer::inputs,
|
||||
ByteBufCodecs.collection(ArrayList::new, ItemStack.STREAM_CODEC), PacketCraftingModuleTransfer::outputs,
|
||||
ItemStack.LIST_STREAM_CODEC, PacketCraftingModuleTransfer::inputs,
|
||||
ItemStack.LIST_STREAM_CODEC, PacketCraftingModuleTransfer::outputs,
|
||||
PacketCraftingModuleTransfer::new);
|
||||
|
||||
@Override
|
||||
|
|
|
@ -21,6 +21,7 @@ import net.neoforged.neoforge.network.handling.IPayloadContext;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public record PacketGhostSlot(BlockPos pos, List<Entry> stacks) implements CustomPacketPayload {
|
||||
|
@ -43,28 +44,27 @@ public record PacketGhostSlot(BlockPos pos, List<Entry> stacks) implements Custo
|
|||
tile.setGhostItems(message.stacks);
|
||||
}
|
||||
|
||||
public record Entry(List<ItemStack> stacks, TagKey<Item> tag) {
|
||||
public record Entry(Optional<List<ItemStack>> stacks, Optional<TagKey<Item>> tag) {
|
||||
|
||||
public static final StreamCodec<RegistryFriendlyByteBuf, Entry> CODEC = StreamCodec.composite(
|
||||
ByteBufCodecs.collection(ArrayList::new, ItemStack.STREAM_CODEC), Entry::stacks,
|
||||
ByteBufCodecs.fromCodec(TagKey.codec(Registries.ITEM)), Entry::tag,
|
||||
ByteBufCodecs.optional(ItemStack.OPTIONAL_LIST_STREAM_CODEC), Entry::stacks,
|
||||
ByteBufCodecs.optional(ByteBufCodecs.fromCodec(TagKey.codec(Registries.ITEM))), Entry::tag,
|
||||
Entry::new);
|
||||
|
||||
public static Entry fromStacks(Level level, List<ItemStack> stacks) {
|
||||
var tag = Entry.getTagForStacks(level, stacks);
|
||||
if (tag != null) {
|
||||
return new Entry(null, tag);
|
||||
return new Entry(Optional.empty(), Optional.of(tag));
|
||||
} else {
|
||||
return new Entry(stacks, null);
|
||||
return new Entry(Optional.of(stacks), Optional.empty());
|
||||
}
|
||||
}
|
||||
|
||||
public List<ItemStack> getStacks(Level level) {
|
||||
if (this.stacks != null)
|
||||
return this.stacks;
|
||||
return Streams.stream(level.registryAccess().registry(Registries.ITEM).orElseThrow().getTagOrEmpty(this.tag).iterator())
|
||||
return this.stacks.orElseGet(() ->
|
||||
Streams.stream(level.registryAccess().registry(Registries.ITEM).orElseThrow().getTagOrEmpty(this.tag.orElseThrow()).iterator())
|
||||
.filter(h -> h.value() != null & h.value() != Items.AIR)
|
||||
.map(h -> new ItemStack(h.value())).collect(Collectors.toList());
|
||||
.map(h -> new ItemStack(h.value())).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
private static TagKey<Item> getTagForStacks(Level level, List<ItemStack> stacks) {
|
||||
|
|
|
@ -18,9 +18,9 @@ public record PacketNetworkItems(List<ItemStack> items, List<ItemStack> craftabl
|
|||
|
||||
public static final Type<PacketNetworkItems> TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(PrettyPipes.ID, "network_items"));
|
||||
public static final StreamCodec<RegistryFriendlyByteBuf, PacketNetworkItems> CODEC = StreamCodec.composite(
|
||||
ByteBufCodecs.collection(ArrayList::new, ItemStack.STREAM_CODEC), PacketNetworkItems::items,
|
||||
ByteBufCodecs.collection(ArrayList::new, ItemStack.STREAM_CODEC), PacketNetworkItems::craftables,
|
||||
ByteBufCodecs.collection(ArrayList::new, ItemStack.STREAM_CODEC), PacketNetworkItems::currentlyCrafting,
|
||||
ItemStack.LIST_STREAM_CODEC, PacketNetworkItems::items,
|
||||
ItemStack.LIST_STREAM_CODEC, PacketNetworkItems::craftables,
|
||||
ItemStack.LIST_STREAM_CODEC, PacketNetworkItems::currentlyCrafting,
|
||||
PacketNetworkItems::new);
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,7 +9,10 @@ import net.minecraft.world.Container;
|
|||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.inventory.*;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.crafting.CraftingRecipe;
|
||||
import net.minecraft.world.item.crafting.RecipeHolder;
|
||||
import net.minecraft.world.item.crafting.RecipeType;
|
||||
import net.minecraft.world.level.Level;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
@ -28,7 +31,7 @@ public class CraftingTerminalContainer extends ItemTerminalContainer {
|
|||
|
||||
@Override
|
||||
protected void addOwnSlots(Player player) {
|
||||
this.craftInventory = new WrappedCraftingInventory(this.getTile().craftItems, this, 3, 3);
|
||||
this.craftInventory = new WrappedCraftingInventory(this.getTile().craftItems, this);
|
||||
this.craftResult = new ResultContainer() {
|
||||
@Override
|
||||
public void setChanged() {
|
||||
|
@ -46,14 +49,7 @@ public class CraftingTerminalContainer extends ItemTerminalContainer {
|
|||
@Override
|
||||
public void slotsChanged(Container inventoryIn) {
|
||||
super.slotsChanged(inventoryIn);
|
||||
if (!this.player.level().isClientSide) {
|
||||
var ret = ItemStack.EMPTY;
|
||||
var optional = this.player.level().getServer().getRecipeManager().getRecipeFor(RecipeType.CRAFTING, this.craftInventory.asCraftInput(), this.player.level());
|
||||
if (optional.isPresent())
|
||||
ret = optional.get().value().assemble(this.craftInventory.asCraftInput(), this.player.level().registryAccess());
|
||||
this.craftResult.setItem(0, ret);
|
||||
((ServerPlayer) this.player).connection.send(new ClientboundContainerSetSlotPacket(this.containerId, 0, 0, ret));
|
||||
}
|
||||
CraftingTerminalContainer.slotChangedCraftingGrid(this, this.player.level(), this.player, this.craftInventory, this.craftResult, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -80,4 +76,28 @@ public class CraftingTerminalContainer extends ItemTerminalContainer {
|
|||
return (CraftingTerminalBlockEntity) this.tile;
|
||||
}
|
||||
|
||||
// copied from CraftingMenu
|
||||
protected static void slotChangedCraftingGrid(AbstractContainerMenu menu, Level level, Player player, CraftingContainer craftSlots, ResultContainer resultSlots, @Nullable RecipeHolder<CraftingRecipe> recipe) {
|
||||
if (!level.isClientSide) {
|
||||
var craftinginput = craftSlots.asCraftInput();
|
||||
var serverplayer = (ServerPlayer) player;
|
||||
var itemstack = ItemStack.EMPTY;
|
||||
var optional = level.getServer().getRecipeManager().getRecipeFor(RecipeType.CRAFTING, craftinginput, level, recipe);
|
||||
if (optional.isPresent()) {
|
||||
var recipeholder = optional.get();
|
||||
var craftingrecipe = recipeholder.value();
|
||||
if (resultSlots.setRecipeUsed(level, serverplayer, recipeholder)) {
|
||||
var itemstack1 = craftingrecipe.assemble(craftinginput, level.registryAccess());
|
||||
if (itemstack1.isItemEnabled(level.enabledFeatures())) {
|
||||
itemstack = itemstack1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
resultSlots.setItem(0, itemstack);
|
||||
menu.setRemoteSlot(0, itemstack);
|
||||
serverplayer.connection.send(new ClientboundContainerSetSlotPacket(menu.containerId, menu.incrementStateId(), 0, itemstack));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,17 +1,20 @@
|
|||
package de.ellpeck.prettypipes.terminal.containers;
|
||||
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.entity.player.StackedContents;
|
||||
import net.minecraft.world.inventory.TransientCraftingContainer;
|
||||
import net.minecraft.world.inventory.CraftingContainer;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.neoforged.neoforge.items.ItemStackHandler;
|
||||
|
||||
public class WrappedCraftingInventory extends TransientCraftingContainer {
|
||||
import java.util.List;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
public class WrappedCraftingInventory implements CraftingContainer {
|
||||
|
||||
private final ItemStackHandler items;
|
||||
private final CraftingTerminalContainer eventHandler;
|
||||
|
||||
public WrappedCraftingInventory(ItemStackHandler items, CraftingTerminalContainer eventHandlerIn, int width, int height) {
|
||||
super(eventHandlerIn, width, height);
|
||||
public WrappedCraftingInventory(ItemStackHandler items, CraftingTerminalContainer eventHandlerIn) {
|
||||
this.eventHandler = eventHandlerIn;
|
||||
this.items = items;
|
||||
}
|
||||
|
@ -47,8 +50,7 @@ public class WrappedCraftingInventory extends TransientCraftingContainer {
|
|||
var slotStack = this.items.getStackInSlot(index);
|
||||
var ret = !slotStack.isEmpty() && count > 0 ? slotStack.split(count) : ItemStack.EMPTY;
|
||||
if (!ret.isEmpty()) {
|
||||
for (var player : this.eventHandler.getTile().getLookingPlayers())
|
||||
player.containerMenu.slotsChanged(this);
|
||||
this.eventHandler.slotsChanged(this);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -56,8 +58,17 @@ public class WrappedCraftingInventory extends TransientCraftingContainer {
|
|||
@Override
|
||||
public void setItem(int index, ItemStack stack) {
|
||||
this.items.setStackInSlot(index, stack);
|
||||
for (var player : this.eventHandler.getTile().getLookingPlayers())
|
||||
player.containerMenu.slotsChanged(this);
|
||||
this.eventHandler.slotsChanged(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChanged() {
|
||||
this.eventHandler.slotsChanged(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean stillValid(Player player) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -71,4 +82,20 @@ public class WrappedCraftingInventory extends TransientCraftingContainer {
|
|||
for (var i = 0; i < this.items.getSlots(); i++)
|
||||
helper.accountStack(this.items.getStackInSlot(i));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWidth() {
|
||||
return 3;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getHeight() {
|
||||
return 3;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ItemStack> getItems() {
|
||||
return IntStream.range(0, this.getContainerSize()).mapToObj(this::getItem).toList();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -20,6 +20,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:blank_module"
|
||||
"id": "prettypipes:blank_module"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:crafting_terminal"
|
||||
"id": "prettypipes:crafting_terminal"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:damage_filter_modifier"
|
||||
"id": "prettypipes:damage_filter_modifier"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:filter_increase_modifier"
|
||||
"id": "prettypipes:filter_increase_modifier"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:high_crafting_module"
|
||||
"id": "prettypipes:high_crafting_module"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:high_extraction_module"
|
||||
"id": "prettypipes:high_extraction_module"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:high_filter_module"
|
||||
"id": "prettypipes:high_filter_module"
|
||||
}
|
||||
}
|
|
@ -14,6 +14,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:high_high_priority_module"
|
||||
"id": "prettypipes:high_high_priority_module"
|
||||
}
|
||||
}
|
|
@ -7,13 +7,13 @@
|
|||
],
|
||||
"key": {
|
||||
"C": {
|
||||
"tag": "forge:cobblestone"
|
||||
"tag": "c:cobblestones"
|
||||
},
|
||||
"M": {
|
||||
"item": "prettypipes:medium_low_priority_module"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:high_low_priority_module"
|
||||
"id": "prettypipes:high_low_priority_module"
|
||||
}
|
||||
}
|
|
@ -20,6 +20,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:high_retrieval_module"
|
||||
"id": "prettypipes:high_retrieval_module"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:high_speed_module"
|
||||
"id": "prettypipes:high_speed_module"
|
||||
}
|
||||
}
|
|
@ -19,13 +19,13 @@
|
|||
"item": "minecraft:iron_block"
|
||||
},
|
||||
"C": {
|
||||
"tag": "forge:chests"
|
||||
"tag": "c:chests"
|
||||
},
|
||||
"D": {
|
||||
"item": "minecraft:diamond"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:item_terminal"
|
||||
"id": "prettypipes:item_terminal"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:low_crafting_module"
|
||||
"id": "prettypipes:low_crafting_module"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:low_extraction_module"
|
||||
"id": "prettypipes:low_extraction_module"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:low_filter_module"
|
||||
"id": "prettypipes:low_filter_module"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:low_high_priority_module"
|
||||
"id": "prettypipes:low_high_priority_module"
|
||||
}
|
||||
}
|
|
@ -10,13 +10,13 @@
|
|||
"item": "minecraft:redstone"
|
||||
},
|
||||
"C": {
|
||||
"tag": "forge:cobblestone"
|
||||
"tag": "c:cobblestones"
|
||||
},
|
||||
"M": {
|
||||
"item": "prettypipes:blank_module"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:low_low_priority_module"
|
||||
"id": "prettypipes:low_low_priority_module"
|
||||
}
|
||||
}
|
|
@ -20,6 +20,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:low_retrieval_module"
|
||||
"id": "prettypipes:low_retrieval_module"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:low_speed_module"
|
||||
"id": "prettypipes:low_speed_module"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:medium_crafting_module"
|
||||
"id": "prettypipes:medium_crafting_module"
|
||||
}
|
||||
}
|
|
@ -14,6 +14,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:medium_extraction_module"
|
||||
"id": "prettypipes:medium_extraction_module"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:medium_filter_module"
|
||||
"id": "prettypipes:medium_filter_module"
|
||||
}
|
||||
}
|
|
@ -14,6 +14,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:medium_high_priority_module"
|
||||
"id": "prettypipes:medium_high_priority_module"
|
||||
}
|
||||
}
|
|
@ -7,13 +7,13 @@
|
|||
],
|
||||
"key": {
|
||||
"C": {
|
||||
"tag": "forge:cobblestone"
|
||||
"tag": "c:cobblestones"
|
||||
},
|
||||
"M": {
|
||||
"item": "prettypipes:low_low_priority_module"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:medium_low_priority_module"
|
||||
"id": "prettypipes:medium_low_priority_module"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:medium_retrieval_module"
|
||||
"id": "prettypipes:medium_retrieval_module"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:medium_speed_module"
|
||||
"id": "prettypipes:medium_speed_module"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:mod_filter_modifier"
|
||||
"id": "prettypipes:mod_filter_modifier"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:nbt_filter_modifier"
|
||||
"id": "prettypipes:nbt_filter_modifier"
|
||||
}
|
||||
}
|
|
@ -13,14 +13,14 @@
|
|||
"item": "minecraft:iron_bars"
|
||||
},
|
||||
"G": {
|
||||
"tag": "forge:glass"
|
||||
"tag": "c:glass_blocks"
|
||||
},
|
||||
"C": {
|
||||
"item": "minecraft:copper_ingot"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:pipe",
|
||||
"id": "prettypipes:pipe",
|
||||
"count": 4
|
||||
}
|
||||
}
|
|
@ -12,6 +12,6 @@
|
|||
}
|
||||
],
|
||||
"result": {
|
||||
"item": "prettypipes:pipe_frame"
|
||||
"id": "prettypipes:pipe_frame"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:pressurizer"
|
||||
"id": "prettypipes:pressurizer"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:random_sorting_modifier"
|
||||
"id": "prettypipes:random_sorting_modifier"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:redstone_module"
|
||||
"id": "prettypipes:redstone_module"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:round_robin_sorting_modifier"
|
||||
"id": "prettypipes:round_robin_sorting_modifier"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:stack_size_module"
|
||||
"id": "prettypipes:stack_size_module"
|
||||
}
|
||||
}
|
|
@ -17,6 +17,6 @@
|
|||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:tag_filter_modifier"
|
||||
"id": "prettypipes:tag_filter_modifier"
|
||||
}
|
||||
}
|
|
@ -13,10 +13,10 @@
|
|||
"item": "minecraft:iron_ingot"
|
||||
},
|
||||
"R": {
|
||||
"tag": "forge:dyes/red"
|
||||
"tag": "c:dyes/red"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "prettypipes:wrench"
|
||||
"id": "prettypipes:wrench"
|
||||
}
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
"schemaVersion": 1,
|
||||
"id": "prettypipes",
|
||||
"version": "0.0.0",
|
||||
"contributors": ["SoniEx2"],
|
||||
"depends": {
|
||||
"forge": "*"
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue