Re-add the Crafter

This commit is contained in:
raoulvdberge
2019-10-27 18:57:23 +01:00
parent 7da0a53385
commit f60f09a262
37 changed files with 567 additions and 326 deletions

View File

@@ -99,6 +99,15 @@ public class ClientSetup {
).disableCache());
}
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "crafter"), (base, registry) -> new FullbrightBakedModel(
base,
new ResourceLocation(RS.ID, "block/crafter/cutouts/side_connected"),
new ResourceLocation(RS.ID, "block/crafter/cutouts/side_connected_90"),
new ResourceLocation(RS.ID, "block/crafter/cutouts/side_connected_180"),
new ResourceLocation(RS.ID, "block/crafter/cutouts/side_connected_270"),
new ResourceLocation(RS.ID, "block/crafter/cutouts/front_connected")
));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "pattern"), (base, registry) -> new PatternBakedModel(base));
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/disk"));
@@ -172,6 +181,7 @@ public class ClientSetup {
ScreenManager.registerFactory(RSContainers.CONSTRUCTOR, ConstructorScreen::new);
ScreenManager.registerFactory(RSContainers.DESTRUCTOR, DestructorScreen::new);
ScreenManager.registerFactory(RSContainers.DISK_MANIPULATOR, DiskManipulatorScreen::new);
ScreenManager.registerFactory(RSContainers.CRAFTER, CrafterScreen::new);
ClientRegistry.registerKeyBinding(RSKeyBindings.OPEN_WIRELESS_GRID);
ClientRegistry.registerKeyBinding(RSKeyBindings.OPEN_WIRELESS_FLUID_GRID);

View File

@@ -29,6 +29,7 @@ import com.raoulvdberge.refinedstorage.container.factory.PositionalTileContainer
import com.raoulvdberge.refinedstorage.item.*;
import com.raoulvdberge.refinedstorage.item.blockitem.*;
import com.raoulvdberge.refinedstorage.item.group.MainItemGroup;
import com.raoulvdberge.refinedstorage.loottable.CrafterLootFunctionSerializer;
import com.raoulvdberge.refinedstorage.loottable.PortableGridBlockLootFunctionSerializer;
import com.raoulvdberge.refinedstorage.loottable.StorageBlockLootFunctionSerializer;
import com.raoulvdberge.refinedstorage.network.NetworkHandler;
@@ -131,6 +132,7 @@ public final class RS {
API.instance().getNetworkNodeRegistry().add(ConstructorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new ConstructorNetworkNode(world, pos)));
API.instance().getNetworkNodeRegistry().add(DestructorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new DestructorNetworkNode(world, pos)));
API.instance().getNetworkNodeRegistry().add(DiskManipulatorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new DiskManipulatorNetworkNode(world, pos)));
API.instance().getNetworkNodeRegistry().add(CrafterNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new CrafterNetworkNode(world, pos)));
API.instance().getGridManager().add(GridBlockGridFactory.ID, new GridBlockGridFactory());
API.instance().getGridManager().add(WirelessGridGridFactory.ID, new WirelessGridGridFactory());
@@ -143,6 +145,7 @@ public final class RS {
LootFunctionManager.registerFunction(new StorageBlockLootFunctionSerializer());
LootFunctionManager.registerFunction(new PortableGridBlockLootFunctionSerializer());
LootFunctionManager.registerFunction(new CrafterLootFunctionSerializer());
}
private INetworkNode readAndReturn(CompoundNBT tag, NetworkNode node) {
@@ -194,6 +197,7 @@ public final class RS {
e.getRegistry().register(new DiskManipulatorBlock());
e.getRegistry().register(new PortableGridBlock(PortableGridBlockItem.Type.NORMAL));
e.getRegistry().register(new PortableGridBlock(PortableGridBlockItem.Type.CREATIVE));
e.getRegistry().register(new CrafterBlock());
}
@SubscribeEvent
@@ -234,6 +238,7 @@ public final class RS {
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(ConstructorTile::new, RSBlocks.CONSTRUCTOR).build(null).setRegistryName(RS.ID, "constructor")));
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(DestructorTile::new, RSBlocks.DESTRUCTOR).build(null).setRegistryName(RS.ID, "destructor")));
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(DiskManipulatorTile::new, RSBlocks.DISK_MANIPULATOR).build(null).setRegistryName(RS.ID, "disk_manipulator")));
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(CrafterTile::new, RSBlocks.CRAFTER).build(null).setRegistryName(RS.ID, "crafter")));
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(() -> new PortableGridTile(PortableGridBlockItem.Type.CREATIVE), RSBlocks.CREATIVE_PORTABLE_GRID).build(null).setRegistryName(RS.ID, "creative_portable_grid")));
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(() -> new PortableGridTile(PortableGridBlockItem.Type.NORMAL), RSBlocks.PORTABLE_GRID).build(null).setRegistryName(RS.ID, "portable_grid")));
@@ -269,6 +274,7 @@ public final class RS {
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<ConstructorContainer, ConstructorTile>((windowId, inv, tile) -> new ConstructorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "constructor"));
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<DestructorContainer, DestructorTile>((windowId, inv, tile) -> new DestructorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "destructor"));
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<DiskManipulatorContainer, DiskManipulatorTile>((windowId, inv, tile) -> new DiskManipulatorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "disk_manipulator"));
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<CrafterContainer, CrafterTile>((windowId, inv, tile) -> new CrafterContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "crafter"));
}
@SubscribeEvent
@@ -353,6 +359,7 @@ public final class RS {
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.CONSTRUCTOR));
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.DESTRUCTOR));
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.DISK_MANIPULATOR));
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.CRAFTER));
e.getRegistry().register(new WirelessGridItem(WirelessGridItem.Type.NORMAL));
e.getRegistry().register(new WirelessGridItem(WirelessGridItem.Type.CREATIVE));

View File

@@ -78,8 +78,9 @@ public final class RSBlocks {
public static final PortableGridBlock PORTABLE_GRID = null;
@ObjectHolder(RS.ID + ":creative_portable_grid")
public static final PortableGridBlock CREATIVE_PORTABLE_GRID = null;
@ObjectHolder(RS.ID + ":crafter")
public static final CrafterBlock CRAFTER = null;
public static final BlockCraftingMonitor CRAFTING_MONITOR = null;
public static final BlockCrafter CRAFTER = null;
public static final BlockCrafterManager CRAFTER_MANAGER = null;
}

View File

@@ -45,9 +45,9 @@ public final class RSContainers {
public static final ContainerType<DestructorContainer> DESTRUCTOR = null;
@ObjectHolder(RS.ID + ":disk_manipulator")
public static final ContainerType<DiskManipulatorContainer> DISK_MANIPULATOR = null;
//@ObjectHolder(RS.ID + ":crafter")
@ObjectHolder(RS.ID + ":crafter")
public static final ContainerType<CrafterContainer> CRAFTER = null;
//@ObjectHolder(RS.ID + ":crafter_manager")
public static final ContainerType<CrafterContainer> CRAFTER_MANAGER = null;
//@ObjectHolder(RS.ID + ":crafting_monitor")

View File

@@ -2,8 +2,6 @@ package com.raoulvdberge.refinedstorage;
public class RSOldConfig {
//region Energy
public int crafterUsage;
public int crafterPerPatternUsage;
public int craftingMonitorUsage;
public int crafterManagerUsage;
//endregion
@@ -28,8 +26,6 @@ public class RSOldConfig {
/*private void loadConfig() {
//region Energy
crafterUsage = config.getInt("crafter", ENERGY, 2, 0, Integer.MAX_VALUE, "The base energy used by Crafters");
crafterPerPatternUsage = config.getInt("crafterPerPattern", ENERGY, 1, 0, Integer.MAX_VALUE, "The additional energy used per Pattern in a Crafter");
craftingMonitorUsage = config.getInt("craftingMonitor", ENERGY, 2, 0, Integer.MAX_VALUE, "The energy used by Crafting Monitors");
crafterManagerUsage = config.getInt("crafterManager", ENERGY, 4, 0, Integer.MAX_VALUE, "The energy used by Crafter Managers");
//endregion

View File

@@ -78,11 +78,11 @@ public class RSTiles {
public static final TileEntityType<PortableGridTile> PORTABLE_GRID = null;
@ObjectHolder(RS.ID + ":creative_portable_grid")
public static final TileEntityType<PortableGridTile> CREATIVE_PORTABLE_GRID = null;
@ObjectHolder(RS.ID + ":crafter")
public static final TileEntityType<CrafterTile> CRAFTER = null;
//@ObjectHolder(RS.ID + ":crafter")
public static final TileEntityType<TileCrafter> CRAFTER = null;
//@ObjectHolder(RS.ID + ":crafter_manager")
public static final TileEntityType<TileCrafter> CRAFTER_MANAGER = null;
public static final TileEntityType<CrafterTile> CRAFTER_MANAGER = null;
//@ObjectHolder(RS.ID + ":crafting_monitor")
public static final TileEntityType<TileCraftingMonitor> CRAFTING_MONITOR = null;
}

View File

@@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.api.autocrafting;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.IItemHandlerModifiable;
@@ -15,15 +16,6 @@ import java.util.UUID;
* Represents a network node that contains crafting patterns.
*/
public interface ICraftingPatternContainer {
/**
* @deprecated Use {@link #getUpdateInterval()} and/or {@link #getMaximumSuccessfulCraftingUpdates()}
* @return the amount of speed upgrades in the container
*/
@Deprecated
default int getSpeedUpgradeCount() {
return 0;
}
/**
* Returns the interval of when a crafting step with a pattern in this container can update.
* Minimum value is 0 (each tick).
@@ -89,12 +81,10 @@ public interface ICraftingPatternContainer {
/**
* The name of this container for categorizing in the Crafting Manager GUI.
* Can be a localized or unlocalized name.
* If it's unlocalized, it will automatically localize the name.
*
* @return the name of this container
*/
String getName();
ITextComponent getName();
/**
* @return the position of this container

View File

@@ -374,7 +374,8 @@ public class CraftingManager implements ICraftingManager {
IItemHandlerModifiable handler = container.getPatternInventory();
if (handler != null) {
this.containerInventories.computeIfAbsent(container.getName(), k -> new ArrayList<>()).add(handler);
// TODO: Maybe use ITextComponent instead of string...
this.containerInventories.computeIfAbsent(container.getName().getFormattedText(), k -> new ArrayList<>()).add(handler);
}
}
}

View File

@@ -17,9 +17,12 @@ import com.raoulvdberge.refinedstorage.util.WorldUtils;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction;
import net.minecraft.util.INameable;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.fluids.capability.IFluidHandler;
@@ -33,7 +36,7 @@ import java.util.List;
import java.util.Optional;
import java.util.UUID;
public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternContainer {
public class CrafterNetworkNode extends NetworkNode implements ICraftingPatternContainer {
public enum CrafterMode {
IGNORE,
SIGNAL_UNLOCKS_AUTOCRAFTING,
@@ -51,7 +54,7 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "crafter");
public static final String DEFAULT_NAME = "gui.refinedstorage:crafter";
private static final ITextComponent DEFAULT_NAME = new TranslationTextComponent("gui.refinedstorage.crafter");
private static final String NBT_DISPLAY_NAME = "DisplayName";
private static final String NBT_UUID = "CrafterUuid";
@@ -81,7 +84,8 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
private List<ICraftingPattern> patterns = new ArrayList<>();
private UpgradeItemHandler upgrades = (UpgradeItemHandler) new UpgradeItemHandler(4 /* TODO, ItemUpgrade.TYPE_SPEED*/).addListener(new NetworkNodeInventoryListener(this));
private UpgradeItemHandler upgrades = (UpgradeItemHandler) new UpgradeItemHandler(4, UpgradeItem.Type.SPEED)
.addListener(new NetworkNodeInventoryListener(this));
// Used to prevent infinite recursion on getRootContainer() when there's e.g. two crafters facing each other.
private boolean visited = false;
@@ -90,15 +94,13 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
private boolean locked = false;
private boolean wasPowered;
private boolean reading;
@Nullable
private String displayName;
private ITextComponent displayName;
@Nullable
private UUID uuid = null;
public NetworkNodeCrafter(World world, BlockPos pos) {
public CrafterNetworkNode(World world, BlockPos pos) {
super(world, pos);
}
@@ -120,7 +122,7 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
@Override
public int getEnergyUsage() {
return RS.INSTANCE.config.crafterUsage + upgrades.getEnergyUsage() + (RS.INSTANCE.config.crafterPerPatternUsage * patterns.size());
return RS.SERVER_CONFIG.getCrafter().getUsage() + upgrades.getEnergyUsage() + (RS.SERVER_CONFIG.getCrafter().getPatternUsage() * patterns.size());
}
@Override
@@ -161,8 +163,10 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
.forEach(task -> network.getCraftingManager().cancel(task.getId()));
}
// @TODO @Override
protected void onDirectionChanged() {
@Override
public void onDirectionChanged(Direction direction) {
super.onDirectionChanged(direction);
if (network != null) {
network.getCraftingManager().rebuild();
}
@@ -172,19 +176,14 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
public void read(CompoundNBT tag) {
super.read(tag);
// Fix cascading crafter invalidates while reading patterns
this.reading = true;
StackUtils.readItems(patternsInventory, 0, tag);
this.invalidate();
this.reading = false;
invalidate();
StackUtils.readItems(upgrades, 1, tag);
if (tag.contains(NBT_DISPLAY_NAME)) {
displayName = tag.getString(NBT_DISPLAY_NAME);
displayName = ITextComponent.Serializer.fromJson(tag.getString(NBT_DISPLAY_NAME));
}
if (tag.hasUniqueId(NBT_UUID)) {
@@ -217,7 +216,7 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
StackUtils.writeItems(upgrades, 1, tag);
if (displayName != null) {
tag.putString(NBT_DISPLAY_NAME, displayName);
tag.putString(NBT_DISPLAY_NAME, ITextComponent.Serializer.toJson(displayName));
}
if (uuid != null) {
@@ -312,7 +311,7 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
}
@Override
public String getName() {
public ITextComponent getName() {
if (displayName != null) {
return displayName;
}
@@ -320,22 +319,22 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
TileEntity facing = getConnectedTile();
if (facing instanceof INameable && ((INameable) facing).getName() != null) {
return ((INameable) facing).getName().getString(); // TODO: DOes this even work
return ((INameable) facing).getName();
}
if (facing != null) {
return world.getBlockState(facing.getPos()).getBlock().getTranslationKey() + ".name";
return new TranslationTextComponent(world.getBlockState(facing.getPos()).getBlock().getTranslationKey());
}
return DEFAULT_NAME;
}
public void setDisplayName(String displayName) {
public void setDisplayName(ITextComponent displayName) {
this.displayName = displayName;
}
@Nullable
public String getDisplayName() {
public ITextComponent getDisplayName() {
return displayName;
}

View File

@@ -1,88 +0,0 @@
package com.raoulvdberge.refinedstorage.block;
import net.minecraft.util.BlockRenderLayer;
import javax.annotation.Nullable;
public class BlockCrafter extends NetworkNodeBlock {
public BlockCrafter(Properties props) {
super(props);
}
/*
@Override
@OnlyIn(Dist.CLIENT)
public void registerModels(IModelRegistration modelRegistration) {
modelRegistration.setModel(this, 0, new ModelResourceLocation(info.getId(), "connected=false,direction=north"));
modelRegistration.addBakedModelOverride(info.getId(), base -> new FullbrightBakedModel(
base,
new ResourceLocation(RS.ID, "blocks/crafter/cutouts/side_connected"),
new ResourceLocation(RS.ID, "blocks/crafter/cutouts/side_connected_90"),
new ResourceLocation(RS.ID, "blocks/crafter/cutouts/side_connected_180"),
new ResourceLocation(RS.ID, "blocks/crafter/cutouts/side_connected_270"),
new ResourceLocation(RS.ID, "blocks/crafter/cutouts/front_connected")
));
}*/
@Override
public BlockRenderLayer getRenderLayer() {
return BlockRenderLayer.CUTOUT;
}
//@Override
@Nullable
public BlockDirection getDirection() {
return BlockDirection.ANY_FACE_PLAYER;
}
/* TODO
@Override
public void onBlockPlacedBy(World world, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack stack) {
super.onBlockPlacedBy(world, pos, state, placer, stack);
if (!world.isRemote) {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileCrafter && stack.hasDisplayName()) {
((TileCrafter) tile).getNode().setDisplayName(stack.getDisplayName().getFormattedText()); // TODO getFormattedText
((TileCrafter) tile).getNode().markDirty();
}
}
}
@Override
public boolean onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) {
return super.onBlockActivated(state, worldIn, pos, player, handIn, hit);
}
@Override
public boolean onBlockActivated(World world, BlockPos pos, BlockState state, PlayerEntity player, EnumHand hand, Direction side, float hitX, float hitY, float hitZ) {
return openNetworkGui(RSGui.CRAFTER, player, world, pos, side);
}
@Override
public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) {
return super.getDrops(state, builder);
}
@Override
public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, BlockState state, int fortune) {
super.getDrops(drops, world, pos, state, fortune);
String displayName = ((TileCrafter) world.getTileEntity(pos)).getNode().getDisplayName();
if (displayName != null) {
for (ItemStack drop : drops) {
if (drop.getItem() == Item.getItemFromBlock(this)) {
drop.setStackDisplayName(displayName);
}
}
}
}*/
@Override
public boolean hasConnectedState() {
return true;
}
}

View File

@@ -0,0 +1,84 @@
package com.raoulvdberge.refinedstorage.block;
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.container.CrafterContainer;
import com.raoulvdberge.refinedstorage.container.factory.PositionalTileContainerProvider;
import com.raoulvdberge.refinedstorage.tile.CrafterTile;
import com.raoulvdberge.refinedstorage.util.BlockUtils;
import com.raoulvdberge.refinedstorage.util.NetworkUtils;
import net.minecraft.block.BlockState;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World;
import net.minecraftforge.fml.network.NetworkHooks;
import javax.annotation.Nullable;
public class CrafterBlock extends NetworkNodeBlock {
public CrafterBlock() {
super(BlockUtils.DEFAULT_ROCK_PROPERTIES);
this.setRegistryName(RS.ID, "crafter");
}
@Override
public BlockRenderLayer getRenderLayer() {
return BlockRenderLayer.CUTOUT;
}
@Override
public BlockDirection getDirection() {
return BlockDirection.ANY_FACE_PLAYER;
}
@Nullable
@Override
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
return new CrafterTile();
}
@Override
public void onBlockPlacedBy(World world, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack stack) {
super.onBlockPlacedBy(world, pos, state, placer, stack);
if (!world.isRemote) {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof CrafterTile && stack.hasDisplayName()) {
((CrafterTile) tile).getNode().setDisplayName(stack.getDisplayName());
((CrafterTile) tile).getNode().markDirty();
}
}
}
@Override
@SuppressWarnings("deprecation")
public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) {
if (!world.isRemote) {
return NetworkUtils.attemptModify(world, pos, hit.getFace(), player, () -> NetworkHooks.openGui(
(ServerPlayerEntity) player,
new PositionalTileContainerProvider<CrafterTile>(
((CrafterTile) world.getTileEntity(pos)).getNode().getName(),
(tile, windowId, inventory, p) -> new CrafterContainer(tile, player, windowId),
pos
),
pos
));
}
return true;
}
@Override
public boolean hasConnectedState() {
return true;
}
}

View File

@@ -31,6 +31,7 @@ public class ServerConfig {
private Destructor destructor;
private DiskManipulator diskManipulator;
private PortableGrid portableGrid;
private Crafter crafter;
public ServerConfig() {
upgrades = new Upgrades();
@@ -58,6 +59,7 @@ public class ServerConfig {
destructor = new Destructor();
diskManipulator = new DiskManipulator();
portableGrid = new PortableGrid();
crafter = new Crafter();
spec = builder.build();
}
@@ -162,6 +164,10 @@ public class ServerConfig {
return portableGrid;
}
public Crafter getCrafter() {
return crafter;
}
public ForgeConfigSpec getSpec() {
return spec;
}
@@ -787,4 +793,26 @@ public class ServerConfig {
return usage.get();
}
}
public class Crafter {
private final ForgeConfigSpec.IntValue usage;
private final ForgeConfigSpec.IntValue patternUsage;
public Crafter() {
builder.push("crafter");
usage = builder.comment("The energy used by the Crafter").defineInRange("usage", 4, 0, Integer.MAX_VALUE);
patternUsage = builder.comment("The energy used for every Pattern in the Crafter").defineInRange("patternUsage", 1, 0, Integer.MAX_VALUE);
builder.pop();
}
public int getUsage() {
return usage.get();
}
public int getPatternUsage() {
return patternUsage.get();
}
}
}

View File

@@ -1,12 +1,12 @@
package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.RSContainers;
import com.raoulvdberge.refinedstorage.tile.TileCrafter;
import com.raoulvdberge.refinedstorage.tile.CrafterTile;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraftforge.items.SlotItemHandler;
public class CrafterContainer extends BaseContainer {
public CrafterContainer(TileCrafter crafter, PlayerEntity player, int windowId) {
public CrafterContainer(CrafterTile crafter, PlayerEntity player, int windowId) {
super(RSContainers.CRAFTER, crafter, player, windowId);
for (int i = 0; i < 9; ++i) {

View File

@@ -0,0 +1,27 @@
package com.raoulvdberge.refinedstorage.loottable;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.CrafterNetworkNode;
import com.raoulvdberge.refinedstorage.tile.CrafterTile;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.storage.loot.LootContext;
import net.minecraft.world.storage.loot.LootParameters;
import net.minecraft.world.storage.loot.functions.ILootFunction;
public class CrafterLootFunction implements ILootFunction {
@Override
public ItemStack apply(ItemStack stack, LootContext lootContext) {
TileEntity tile = lootContext.get(LootParameters.BLOCK_ENTITY);
CrafterNetworkNode removedNode = ((CrafterTile) tile).getRemovedNode();
if (removedNode == null) {
removedNode = ((CrafterTile) tile).getNode();
}
if (removedNode.getDisplayName() != null) {
stack.setDisplayName(removedNode.getDisplayName());
}
return stack;
}
}

View File

@@ -0,0 +1,24 @@
package com.raoulvdberge.refinedstorage.loottable;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.raoulvdberge.refinedstorage.RS;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.storage.loot.functions.ILootFunction;
public class CrafterLootFunctionSerializer extends ILootFunction.Serializer<CrafterLootFunction> {
public CrafterLootFunctionSerializer() {
super(new ResourceLocation(RS.ID, "crafter"), CrafterLootFunction.class);
}
@Override
public void serialize(JsonObject jsonObject, CrafterLootFunction crafterLootFunction, JsonSerializationContext jsonSerializationContext) {
}
@Override
public CrafterLootFunction deserialize(JsonObject jsonObject, JsonDeserializationContext jsonDeserializationContext) {
return new CrafterLootFunction();
}
}

View File

@@ -2,14 +2,14 @@ package com.raoulvdberge.refinedstorage.screen;
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.container.CrafterContainer;
import com.raoulvdberge.refinedstorage.tile.TileCrafter;
import com.raoulvdberge.refinedstorage.util.RenderUtils;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.util.text.ITextComponent;
public class GuiCrafter extends BaseScreen<CrafterContainer> {
public GuiCrafter(CrafterContainer container, PlayerInventory inventory) {
super(container, 211, 137, inventory, null);
public class CrafterScreen extends BaseScreen<CrafterContainer> {
public CrafterScreen(CrafterContainer container, PlayerInventory inventory, ITextComponent title) {
super(container, 211, 137, inventory, title);
}
@Override
@@ -29,7 +29,7 @@ public class GuiCrafter extends BaseScreen<CrafterContainer> {
@Override
public void renderForeground(int mouseX, int mouseY) {
renderString(7, 7, RenderUtils.shorten(I18n.format(TileCrafter.NAME.getValue()), 26));
renderString(7, 7, RenderUtils.shorten(title.getFormattedText(), 26));
renderString(7, 43, I18n.format("container.inventory"));
}
}

View File

@@ -7,7 +7,7 @@ public class TileDataParameterClientListenerCrafter implements TileDataParameter
@Override
public void onChanged(boolean initial, Boolean hasRoot) {
if (!hasRoot) {
BaseScreen.executeLater(GuiCrafter.class, gui -> {
BaseScreen.executeLater(CrafterScreen.class, gui -> {
gui.addSideButton(new CrafterModeSideButton(gui));
});
}

View File

@@ -1,7 +1,7 @@
package com.raoulvdberge.refinedstorage.screen.widget.sidebutton;
import com.raoulvdberge.refinedstorage.screen.BaseScreen;
import com.raoulvdberge.refinedstorage.tile.TileCrafter;
import com.raoulvdberge.refinedstorage.tile.CrafterTile;
import com.raoulvdberge.refinedstorage.tile.data.TileDataManager;
import net.minecraft.client.resources.I18n;
import net.minecraft.util.text.TextFormatting;
@@ -13,16 +13,16 @@ public class CrafterModeSideButton extends SideButton {
@Override
public String getTooltip() {
return I18n.format("sidebutton.refinedstorage.crafter_mode") + "\n" + TextFormatting.GRAY + I18n.format("sidebutton.refinedstorage.crafter_mode." + TileCrafter.MODE.getValue());
return I18n.format("sidebutton.refinedstorage.crafter_mode") + "\n" + TextFormatting.GRAY + I18n.format("sidebutton.refinedstorage.crafter_mode." + CrafterTile.MODE.getValue());
}
@Override
protected void renderButtonIcon(int x, int y) {
screen.blit(x, y, TileCrafter.MODE.getValue() * 16, 0, 16, 16);
screen.blit(x, y, CrafterTile.MODE.getValue() * 16, 0, 16, 16);
}
@Override
public void onPress() {
TileDataManager.setParameter(TileCrafter.MODE, TileCrafter.MODE.getValue() + 1);
TileDataManager.setParameter(CrafterTile.MODE, CrafterTile.MODE.getValue() + 1);
}
}

View File

@@ -0,0 +1,47 @@
package com.raoulvdberge.refinedstorage.tile;
import com.raoulvdberge.refinedstorage.RSTiles;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.CrafterNetworkNode;
import com.raoulvdberge.refinedstorage.screen.TileDataParameterClientListenerCrafter;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class CrafterTile extends NetworkNodeTile<CrafterNetworkNode> {
public static final TileDataParameter<Integer, CrafterTile> MODE = new TileDataParameter<>(DataSerializers.VARINT, CrafterNetworkNode.CrafterMode.IGNORE.ordinal(), t -> t.getNode().getMode().ordinal(), (t, v) -> t.getNode().setMode(CrafterNetworkNode.CrafterMode.getById(v)));
private static final TileDataParameter<Boolean, CrafterTile> HAS_ROOT = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().getRootContainerNotSelf().isPresent(), null, (t, v) -> new TileDataParameterClientListenerCrafter().onChanged(t, v));
private LazyOptional<IItemHandler> patternsCapability = LazyOptional.of(() -> getNode().getPatternItems());
public CrafterTile() {
super(RSTiles.CRAFTER);
dataManager.addWatchedParameter(MODE);
dataManager.addParameter(HAS_ROOT);
}
@Override
@Nonnull
public CrafterNetworkNode createNode(World world, BlockPos pos) {
return new CrafterNetworkNode(world, pos);
}
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction direction) {
if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
return patternsCapability.cast();
}
return super.getCapability(cap, direction);
}
}

View File

@@ -1,45 +0,0 @@
package com.raoulvdberge.refinedstorage.tile;
import com.raoulvdberge.refinedstorage.RSTiles;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCrafter;
import com.raoulvdberge.refinedstorage.screen.TileDataParameterClientListenerCrafter;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import javax.annotation.Nonnull;
public class TileCrafter extends NetworkNodeTile<NetworkNodeCrafter> {
public static final TileDataParameter<String, TileCrafter> NAME = new TileDataParameter<>(DataSerializers.STRING, NetworkNodeCrafter.DEFAULT_NAME, t -> t.getNode().getName());
public static final TileDataParameter<Integer, TileCrafter> MODE = new TileDataParameter<>(DataSerializers.VARINT, NetworkNodeCrafter.CrafterMode.IGNORE.ordinal(), t -> t.getNode().getMode().ordinal(), (t, v) -> t.getNode().setMode(NetworkNodeCrafter.CrafterMode.getById(v)));
private static final TileDataParameter<Boolean, TileCrafter> HAS_ROOT = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().getRootContainerNotSelf().isPresent(), null, (t, v) -> new TileDataParameterClientListenerCrafter().onChanged(t, v));
public TileCrafter() {
super(RSTiles.CRAFTER);
dataManager.addWatchedParameter(NAME);
dataManager.addWatchedParameter(MODE);
dataManager.addParameter(HAS_ROOT);
}
@Override
@Nonnull
public NetworkNodeCrafter createNode(World world, BlockPos pos) {
return new NetworkNodeCrafter(world, pos);
}
/* TODO @Override
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable Direction facing) {
return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}
@Override
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable Direction facing) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(getNode().getPatternItems());
}
return super.getCapability(capability, facing);
}*/
}

View File

@@ -1,135 +1,52 @@
{
"forge_marker": 1,
"defaults": {
"model": "refinedstorage:cube_cutout",
"textures": {
"particle": "refinedstorage:blocks/crafter/side",
"side": "refinedstorage:blocks/crafter/side",
"side_90": "refinedstorage:blocks/crafter/side_90",
"side_180": "refinedstorage:blocks/crafter/side_180",
"side_270": "refinedstorage:blocks/crafter/side_270",
"cutout_side": "refinedstorage:blocks/crafter/cutouts/side_disconnected",
"cutout_side_90": "refinedstorage:blocks/crafter/cutouts/side_disconnected_90",
"cutout_side_180": "refinedstorage:blocks/crafter/cutouts/side_disconnected_180",
"cutout_side_270": "refinedstorage:blocks/crafter/cutouts/side_disconnected_270",
"front": "refinedstorage:blocks/crafter/front",
"cutout_front": "refinedstorage:blocks/crafter/cutouts/front_disconnected"
},
"variants": {
"connected=false,direction=north": {
"model": "refinedstorage:block/crafter/disconnected/north",
"uvlock": true
},
"variants": {
"connected": {
"true": {
"textures": {
"cutout_side": "refinedstorage:blocks/crafter/cutouts/side_connected",
"cutout_side_90": "refinedstorage:blocks/crafter/cutouts/side_connected_90",
"cutout_side_180": "refinedstorage:blocks/crafter/cutouts/side_connected_180",
"cutout_side_270": "refinedstorage:blocks/crafter/cutouts/side_connected_270",
"cutout_front": "refinedstorage:blocks/crafter/cutouts/front_connected"
}
"connected=false,direction=east": {
"model": "refinedstorage:block/crafter/disconnected/east",
"uvlock": true
},
"false": {
"textures": {
}
}
"connected=false,direction=south": {
"model": "refinedstorage:block/crafter/disconnected/south",
"uvlock": true
},
"direction": {
"north": {
"textures": {
"down": "#side_180",
"up": "#side",
"north": "#front",
"east": "#side_90",
"south": "refinedstorage:blocks/crafter/bottom",
"west": "#side_270",
"cutout_down": "#cutout_side_180",
"cutout_up": "#cutout_side",
"cutout_north": "#cutout_front",
"cutout_east": "#cutout_side_90",
"cutout_south": "refinedstorage:blocks/crafter/bottom",
"cutout_west": "#cutout_side_270"
}
"connected=false,direction=west": {
"model": "refinedstorage:block/crafter/disconnected/west",
"uvlock": true
},
"east": {
"textures": {
"down": "#side_90",
"up": "#side_90",
"north": "#side_270",
"east": "#front",
"south": "#side_90",
"west": "refinedstorage:blocks/crafter/bottom",
"cutout_down": "#cutout_side_90",
"cutout_up": "#cutout_side_90",
"cutout_north": "#cutout_side_270",
"cutout_east": "#cutout_front",
"cutout_south": "#cutout_side_90",
"cutout_west": "refinedstorage:blocks/crafter/bottom"
}
"connected=false,direction=up": {
"model": "refinedstorage:block/crafter/disconnected/up",
"uvlock": true
},
"south": {
"textures": {
"down": "#side",
"up": "#side_180",
"north": "refinedstorage:blocks/crafter/bottom",
"east": "#side_270",
"south": "#front",
"west": "#side_90",
"cutout_down": "#cutout_side",
"cutout_up": "#cutout_side_180",
"cutout_north": "refinedstorage:blocks/crafter/bottom",
"cutout_east": "#cutout_side_270",
"cutout_south": "#cutout_front",
"cutout_west": "#cutout_side_90"
}
"connected=false,direction=down": {
"model": "refinedstorage:block/crafter/disconnected/down",
"uvlock": true
},
"west": {
"textures": {
"down": "#side_270",
"up": "#side_270",
"north": "#side_90",
"east": "refinedstorage:blocks/crafter/bottom",
"south": "#side_270",
"west": "#front",
"cutout_down": "#cutout_side_270",
"cutout_up": "#cutout_side_270",
"cutout_north": "#cutout_side_90",
"cutout_east": "refinedstorage:blocks/crafter/bottom",
"cutout_south": "#cutout_side_270",
"cutout_west": "#cutout_front"
}
"connected=true,direction=north": {
"model": "refinedstorage:block/crafter/connected/north",
"uvlock": true
},
"up": {
"textures": {
"down": "refinedstorage:blocks/crafter/bottom",
"up": "#front",
"north": "#side",
"east": "#side",
"south": "#side",
"west": "#side",
"cutout_down": "refinedstorage:blocks/crafter/bottom",
"cutout_up": "#cutout_front",
"cutout_north": "#cutout_side",
"cutout_east": "#cutout_side",
"cutout_south": "#cutout_side",
"cutout_west": "#cutout_side"
}
"connected=true,direction=east": {
"model": "refinedstorage:block/crafter/connected/east",
"uvlock": true
},
"down": {
"textures": {
"down": "#front",
"up": "refinedstorage:blocks/crafter/bottom",
"north": "#side_180",
"east": "#side_180",
"south": "#side_180",
"west": "#side_180",
"cutout_down": "#cutout_front",
"cutout_up": "refinedstorage:blocks/crafter/bottom",
"cutout_north": "#cutout_side_180",
"cutout_east": "#cutout_side_180",
"cutout_south": "#cutout_side_180",
"cutout_west": "#cutout_side_180"
}
}
"connected=true,direction=south": {
"model": "refinedstorage:block/crafter/connected/south",
"uvlock": true
},
"connected=true,direction=west": {
"model": "refinedstorage:block/crafter/connected/west",
"uvlock": true
},
"connected=true,direction=up": {
"model": "refinedstorage:block/crafter/connected/up",
"uvlock": true
},
"connected=true,direction=down": {
"model": "refinedstorage:block/crafter/connected/down",
"uvlock": true
}
}
}

View File

@@ -46,7 +46,7 @@
"gui.refinedstorage:crafting_monitor.crafter_is_locked": "Crafter is locked",
"gui.refinedstorage.wireless_transmitter": "Wireless Transmitter",
"gui.refinedstorage.wireless_transmitter.distance": "%d block(s)",
"gui.refinedstorage:crafter": "Crafter",
"gui.refinedstorage.crafter": "Crafter",
"gui.refinedstorage.filter": "Filter",
"gui.refinedstorage.filter.compare_nbt": "NBT",
"gui.refinedstorage.filter.mod_filter": "Mod filter",
@@ -205,7 +205,7 @@
"block.refinedstorage:crafting_monitor": "Crafting Monitor",
"block.refinedstorage.wireless_transmitter": "Wireless Transmitter",
"block.refinedstorage.wireless_transmitter.tooltip": "Must be placed on %s.",
"block.refinedstorage:crafter": "Crafter",
"block.refinedstorage.crafter": "Crafter",
"block.refinedstorage.network_receiver": "Network Receiver",
"block.refinedstorage.network_transmitter": "Network Transmitter",
"block.refinedstorage.fluid_interface": "Fluid Interface",

View File

@@ -0,0 +1,18 @@
{
"parent": "refinedstorage:block/cube_cutout",
"textures": {
"particle": "refinedstorage:block/crafter/side",
"down": "refinedstorage:block/crafter/front",
"up": "refinedstorage:block/crafter/bottom",
"north": "refinedstorage:block/crafter/side_180",
"east": "refinedstorage:block/crafter/side_180",
"south": "refinedstorage:block/crafter/side_180",
"west": "refinedstorage:block/crafter/side_180",
"cutout_down": "refinedstorage:block/crafter/cutouts/front_connected",
"cutout_up": "refinedstorage:block/crafter/bottom",
"cutout_north": "refinedstorage:block/crafter/cutouts/side_connected_180",
"cutout_east": "refinedstorage:block/crafter/cutouts/side_connected_180",
"cutout_south": "refinedstorage:block/crafter/cutouts/side_connected_180",
"cutout_west": "refinedstorage:block/crafter/cutouts/side_connected_180"
}
}

View File

@@ -0,0 +1,18 @@
{
"parent": "refinedstorage:block/cube_cutout",
"textures": {
"particle": "refinedstorage:block/crafter/side",
"down": "refinedstorage:block/crafter/side_90",
"up": "refinedstorage:block/crafter/side_90",
"north": "refinedstorage:block/crafter/side_270",
"east": "refinedstorage:block/crafter/front",
"south": "refinedstorage:block/crafter/side_90",
"west": "refinedstorage:block/crafter/bottom",
"cutout_down": "refinedstorage:block/crafter/cutouts/side_connected_90",
"cutout_up": "refinedstorage:block/crafter/cutouts/side_connected_90",
"cutout_north": "refinedstorage:block/crafter/cutouts/side_connected_270",
"cutout_east": "refinedstorage:block/crafter/cutouts/front_connected",
"cutout_south": "refinedstorage:block/crafter/cutouts/side_connected_90",
"cutout_west": "refinedstorage:block/crafter/bottom"
}
}

View File

@@ -0,0 +1,18 @@
{
"parent": "refinedstorage:block/cube_cutout",
"textures": {
"particle": "refinedstorage:block/crafter/side",
"down": "refinedstorage:block/crafter/side_180",
"up": "refinedstorage:block/crafter/side",
"north": "refinedstorage:block/crafter/front",
"east": "refinedstorage:block/crafter/side_90",
"south": "refinedstorage:block/crafter/bottom",
"west": "refinedstorage:block/crafter/side_270",
"cutout_down": "refinedstorage:block/crafter/cutouts/side_connected_180",
"cutout_up": "refinedstorage:block/crafter/cutouts/side_connected",
"cutout_north": "refinedstorage:block/crafter/cutouts/front_connected",
"cutout_east": "refinedstorage:block/crafter/cutouts/side_connected_90",
"cutout_south": "refinedstorage:block/crafter/bottom",
"cutout_west": "refinedstorage:block/crafter/cutouts/side_connected_270"
}
}

View File

@@ -0,0 +1,18 @@
{
"parent": "refinedstorage:block/cube_cutout",
"textures": {
"particle": "refinedstorage:block/crafter/side",
"down": "refinedstorage:block/crafter/side",
"up": "refinedstorage:block/crafter/side_180",
"north": "refinedstorage:block/crafter/bottom",
"east": "refinedstorage:block/crafter/side_270",
"south": "refinedstorage:block/crafter/front",
"west": "refinedstorage:block/crafter/side_90",
"cutout_down": "refinedstorage:block/crafter/cutouts/side_connected",
"cutout_up": "refinedstorage:block/crafter/cutouts/side_connected_180",
"cutout_north": "refinedstorage:block/crafter/bottom",
"cutout_east": "refinedstorage:block/crafter/cutouts/side_connected_270",
"cutout_south": "refinedstorage:block/crafter/cutouts/front_connected",
"cutout_west": "refinedstorage:block/crafter/cutouts/side_connected_90"
}
}

View File

@@ -0,0 +1,18 @@
{
"parent": "refinedstorage:block/cube_cutout",
"textures": {
"particle": "refinedstorage:block/crafter/side",
"down": "refinedstorage:block/crafter/bottom",
"up": "refinedstorage:block/crafter/front",
"north": "refinedstorage:block/crafter/side",
"east": "refinedstorage:block/crafter/side",
"south": "refinedstorage:block/crafter/side",
"west": "refinedstorage:block/crafter/side",
"cutout_down": "refinedstorage:block/crafter/bottom",
"cutout_up": "refinedstorage:block/crafter/cutouts/front_connected",
"cutout_north": "refinedstorage:block/crafter/cutouts/side_connected",
"cutout_east": "refinedstorage:block/crafter/cutouts/side_connected",
"cutout_south": "refinedstorage:block/crafter/cutouts/side_connected",
"cutout_west": "refinedstorage:block/crafter/cutouts/side_connected"
}
}

View File

@@ -0,0 +1,18 @@
{
"parent": "refinedstorage:block/cube_cutout",
"textures": {
"particle": "refinedstorage:block/crafter/side",
"down": "refinedstorage:block/crafter/side_270",
"up": "refinedstorage:block/crafter/side_270",
"north": "refinedstorage:block/crafter/side_90",
"east": "refinedstorage:block/crafter/bottom",
"south": "refinedstorage:block/crafter/side_270",
"west": "refinedstorage:block/crafter/front",
"cutout_down": "refinedstorage:block/crafter/cutouts/side_connected_270",
"cutout_up": "refinedstorage:block/crafter/cutouts/side_connected_270",
"cutout_north": "refinedstorage:block/crafter/cutouts/side_connected_90",
"cutout_east": "refinedstorage:block/crafter/bottom",
"cutout_south": "refinedstorage:block/crafter/cutouts/side_connected_270",
"cutout_west": "refinedstorage:block/crafter/cutouts/front_connected"
}
}

View File

@@ -0,0 +1,18 @@
{
"parent": "refinedstorage:block/cube_cutout",
"textures": {
"particle": "refinedstorage:block/crafter/side",
"down": "refinedstorage:block/crafter/front",
"up": "refinedstorage:block/crafter/bottom",
"north": "refinedstorage:block/crafter/side_180",
"east": "refinedstorage:block/crafter/side_180",
"south": "refinedstorage:block/crafter/side_180",
"west": "refinedstorage:block/crafter/side_180",
"cutout_down": "refinedstorage:block/crafter/cutouts/front_disconnected",
"cutout_up": "refinedstorage:block/crafter/bottom",
"cutout_north": "refinedstorage:block/crafter/cutouts/side_disconnected_180",
"cutout_east": "refinedstorage:block/crafter/cutouts/side_disconnected_180",
"cutout_south": "refinedstorage:block/crafter/cutouts/side_disconnected_180",
"cutout_west": "refinedstorage:block/crafter/cutouts/side_disconnected_180"
}
}

View File

@@ -0,0 +1,18 @@
{
"parent": "refinedstorage:block/cube_cutout",
"textures": {
"particle": "refinedstorage:block/crafter/side",
"down": "refinedstorage:block/crafter/side_90",
"up": "refinedstorage:block/crafter/side_90",
"north": "refinedstorage:block/crafter/side_270",
"east": "refinedstorage:block/crafter/front",
"south": "refinedstorage:block/crafter/side_90",
"west": "refinedstorage:block/crafter/bottom",
"cutout_down": "refinedstorage:block/crafter/cutouts/side_disconnected_90",
"cutout_up": "refinedstorage:block/crafter/cutouts/side_disconnected_90",
"cutout_north": "refinedstorage:block/crafter/cutouts/side_disconnected_270",
"cutout_east": "refinedstorage:block/crafter/cutouts/front_disconnected",
"cutout_south": "refinedstorage:block/crafter/cutouts/side_disconnected_90",
"cutout_west": "refinedstorage:block/crafter/bottom"
}
}

View File

@@ -0,0 +1,18 @@
{
"parent": "refinedstorage:block/cube_cutout",
"textures": {
"particle": "refinedstorage:block/crafter/side",
"down": "refinedstorage:block/crafter/side_180",
"up": "refinedstorage:block/crafter/side",
"north": "refinedstorage:block/crafter/front",
"east": "refinedstorage:block/crafter/side_90",
"south": "refinedstorage:block/crafter/bottom",
"west": "refinedstorage:block/crafter/side_270",
"cutout_down": "refinedstorage:block/crafter/cutouts/side_disconnected_180",
"cutout_up": "refinedstorage:block/crafter/cutouts/side_disconnected",
"cutout_north": "refinedstorage:block/crafter/cutouts/front_disconnected",
"cutout_east": "refinedstorage:block/crafter/cutouts/side_disconnected_90",
"cutout_south": "refinedstorage:block/crafter/bottom",
"cutout_west": "refinedstorage:block/crafter/cutouts/side_disconnected_270"
}
}

View File

@@ -0,0 +1,18 @@
{
"parent": "refinedstorage:block/cube_cutout",
"textures": {
"particle": "refinedstorage:block/crafter/side",
"down": "refinedstorage:block/crafter/side",
"up": "refinedstorage:block/crafter/side_180",
"north": "refinedstorage:block/crafter/bottom",
"east": "refinedstorage:block/crafter/side_270",
"south": "refinedstorage:block/crafter/front",
"west": "refinedstorage:block/crafter/side_90",
"cutout_down": "refinedstorage:block/crafter/cutouts/side_disconnected",
"cutout_up": "refinedstorage:block/crafter/cutouts/side_disconnected_180",
"cutout_north": "refinedstorage:block/crafter/bottom",
"cutout_east": "refinedstorage:block/crafter/cutouts/side_disconnected_270",
"cutout_south": "refinedstorage:block/crafter/cutouts/front_disconnected",
"cutout_west": "refinedstorage:block/crafter/cutouts/side_disconnected_90"
}
}

View File

@@ -0,0 +1,18 @@
{
"parent": "refinedstorage:block/cube_cutout",
"textures": {
"particle": "refinedstorage:block/crafter/side",
"down": "refinedstorage:block/crafter/bottom",
"up": "refinedstorage:block/crafter/front",
"north": "refinedstorage:block/crafter/side",
"east": "refinedstorage:block/crafter/side",
"south": "refinedstorage:block/crafter/side",
"west": "refinedstorage:block/crafter/side",
"cutout_down": "refinedstorage:block/crafter/bottom",
"cutout_up": "refinedstorage:block/crafter/cutouts/front_disconnected",
"cutout_north": "refinedstorage:block/crafter/cutouts/side_disconnected",
"cutout_east": "refinedstorage:block/crafter/cutouts/side_disconnected",
"cutout_south": "refinedstorage:block/crafter/cutouts/side_disconnected",
"cutout_west": "refinedstorage:block/crafter/cutouts/side_disconnected"
}
}

View File

@@ -0,0 +1,18 @@
{
"parent": "refinedstorage:block/cube_cutout",
"textures": {
"particle": "refinedstorage:block/crafter/side",
"down": "refinedstorage:block/crafter/side_270",
"up": "refinedstorage:block/crafter/side_270",
"north": "refinedstorage:block/crafter/side_90",
"east": "refinedstorage:block/crafter/bottom",
"south": "refinedstorage:block/crafter/side_270",
"west": "refinedstorage:block/crafter/front",
"cutout_down": "refinedstorage:block/crafter/cutouts/side_disconnected_270",
"cutout_up": "refinedstorage:block/crafter/cutouts/side_disconnected_270",
"cutout_north": "refinedstorage:block/crafter/cutouts/side_disconnected_90",
"cutout_east": "refinedstorage:block/crafter/bottom",
"cutout_south": "refinedstorage:block/crafter/cutouts/side_disconnected_270",
"cutout_west": "refinedstorage:block/crafter/cutouts/front_disconnected"
}
}

View File

@@ -0,0 +1,3 @@
{
"parent": "refinedstorage:block/crafter/disconnected/north"
}

View File

@@ -0,0 +1,24 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "refinedstorage:crafter",
"functions": [
{
"function": "refinedstorage:crafter"
}
]
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View File

@@ -10,16 +10,16 @@
"item": "refinedstorage:quartz_enriched_iron"
},
"C": {
"item": "#construction_core"
"item": "refinedstorage:construction_core"
},
"A": {
"item": "#advanced_processor"
"item": "refinedstorage:advanced_processor"
},
"M": {
"item": "refinedstorage:machine_casing"
},
"D": {
"item": "#destruction_core"
"item": "refinedstorage:destruction_core"
}
},
"result": {