Re-add the Crafter
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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"));
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}*/
|
||||
}
|
||||
175
src/main/resources/assets/refinedstorage/blockstates/crafter.json
Executable file → Normal file
175
src/main/resources/assets/refinedstorage/blockstates/crafter.json
Executable file → Normal 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"
|
||||
},
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"false": {
|
||||
"textures": {
|
||||
}
|
||||
}
|
||||
"connected=false,direction=north": {
|
||||
"model": "refinedstorage:block/crafter/disconnected/north",
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"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=false,direction=east": {
|
||||
"model": "refinedstorage:block/crafter/disconnected/east",
|
||||
"uvlock": true
|
||||
},
|
||||
"connected=false,direction=south": {
|
||||
"model": "refinedstorage:block/crafter/disconnected/south",
|
||||
"uvlock": true
|
||||
},
|
||||
"connected=false,direction=west": {
|
||||
"model": "refinedstorage:block/crafter/disconnected/west",
|
||||
"uvlock": true
|
||||
},
|
||||
"connected=false,direction=up": {
|
||||
"model": "refinedstorage:block/crafter/disconnected/up",
|
||||
"uvlock": true
|
||||
},
|
||||
"connected=false,direction=down": {
|
||||
"model": "refinedstorage:block/crafter/disconnected/down",
|
||||
"uvlock": true
|
||||
},
|
||||
"connected=true,direction=north": {
|
||||
"model": "refinedstorage:block/crafter/connected/north",
|
||||
"uvlock": true
|
||||
},
|
||||
"connected=true,direction=east": {
|
||||
"model": "refinedstorage:block/crafter/connected/east",
|
||||
"uvlock": true
|
||||
},
|
||||
"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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"parent": "refinedstorage:block/crafter/disconnected/north"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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": {
|
||||
Reference in New Issue
Block a user