This commit is contained in:
deirn 2020-05-29 11:31:51 +07:00
parent c6bae6453f
commit b018b1d0fe
No known key found for this signature in database
GPG key ID: 13925278A3EBA7B7
82 changed files with 204 additions and 1957 deletions

16
.gitignore vendored
View file

@ -1,29 +1,21 @@
# gradle
#Gradle
.gradle/
build/
out/
classes/
# eclipse
*.launch
# idea
#IDEA
.idea/
*.iml
*.ipr
*.iws
# vscode
#vscode
.settings/
.vscode/
bin/
.classpath
.project
# fabric
#fabric
run/

10
LICENSE
View file

@ -1,4 +1,4 @@
MIT License
The MIT License (MIT)
Copyright (c) 2020 deirn
@ -9,13 +9,13 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View file

@ -6,37 +6,44 @@ plugins {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
version = "${minecraft}-${mod}"
archivesBaseName = project.archives_base_name
version = "${project.mod_version}+minecraft-${project.minecraft_version}"
group = project.maven_group
repositories {
maven {
name = "CottonMC"
url = "http://server.bbkr.space:8081/artifactory/libs-release"
name = "Spinnery"
url "https://dl.bintray.com/spinnery/Spinnery"
}
maven {
url = "https://jitpack.io"
}
maven {
name = "NerdHubMC"
url = "https://maven.abusedmaster.xyz/"
}
jcenter()
}
dependencies {
//to change the versions see the gradle.properties file
minecraft "com.mojang:minecraft:${minecraft}"
mappings "net.fabricmc:yarn:${minecraft}+build.${yarn}:v2"
modImplementation "net.fabricmc:fabric-loader:${loader}"
minecraft "com.mojang:minecraft:${project.minecraft_version}"
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
// Fabric API. This is technically optional, but you probably want it anyway.
modImplementation "net.fabricmc.fabric-api:fabric-api:${fabric}"
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}"
modCompile "io.github.cottonmc:LibGui:${libgui}+${minecraft}"
include "io.github.cottonmc:LibGui:${libgui}+${minecraft}"
modApi "me.shedaniel.cloth:config-2:${project.cloth_config}"
include "me.shedaniel.cloth:config-2:${project.cloth_config}"
modApi "me.shedaniel.cloth:config-2:${cloth_config}"
include "me.shedaniel.cloth:config-2:${cloth_config}"
modCompile "me.sargunvohra.mcmods:autoconfig1u:${project.autoconfig}"
include "me.sargunvohra.mcmods:autoconfig1u:${project.autoconfig}"
modCompile "me.sargunvohra.mcmods:autoconfig1u:${autoconfig}"
include "me.sargunvohra.mcmods:autoconfig1u:${autoconfig}"
modCompile "com.github.vini2003:spinnery:${project.spinnery}"
include "com.github.vini2003:spinnery:${project.spinnery}"
modImplementation "io.github.prospector:modmenu:1.10.2+build.32"
// PSA: Some older mods, compiled on Loom 0.2.1, might have outdated Maven POMs.
// You may need to force-disable transitiveness on them.
modImplementation "com.github.emilyploszaj:trinkets:${project.trinkets}"
modImplementation "io.github.prospector:modmenu:${project.modmenu}"
}
processResources {
@ -76,7 +83,10 @@ publishing {
publications {
mavenJava(MavenPublication) {
// add all the jars that should be included when publishing to maven
artifact(remapJar) {
artifact(jar) {
builtBy remapJar
}
artifact("${project.buildDir.absolutePath}/libs/${archivesBaseName}-${project.version}.jar"){
builtBy remapJar
}
artifact(sourcesJar) {

View file

@ -1,14 +1,19 @@
# Done to increase the memory available to gradle.
org.gradle.jvmargs=-Xmx1G
org.gradle.jvmargs = -Xmx1G
mod = 1.0.0
#Fabric properties
minecraft_version = 1.15.2
yarn_mappings = 1.15.2+build.15
loader_version = 0.8.4+build.198
minecraft = 1.15.2
yarn = 15
loader = 0.8.2+build.194
#Mod properties
mod_version = 0.0.0
maven_group = io.gitlab.intended.storagenetworks
archives_base_name = storagenetworks
# Dependencies
fabric = 0.5.1+build.294-1.15
libgui = 1.8.1
#Dependencies
fabric_api_version = 0.10.8+build.310-1.15
cloth_config = 2.13.3
autoconfig = 2.0.1
spinnery = 2.0.28+fabric-1.15.2
trinkets = 2.4.2
modmenu = 1.10.2+build.32

Binary file not shown.

View file

@ -1,5 +1,5 @@
#Sat Apr 18 15:42:54 ICT 2020
distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip
#Thu May 28 11:20:34 ICT 2020
distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-all.zip
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStorePath=wrapper/dists

33
gradlew vendored
View file

@ -125,8 +125,8 @@ if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
@ -154,19 +154,19 @@ if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
i=$((i+1))
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
@ -175,9 +175,14 @@ save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=`save "$@"`
APP_ARGS=$(save "$@")
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"

3
gradlew.bat vendored
View file

@ -29,9 +29,6 @@ if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"

View file

@ -1,21 +0,0 @@
package bai.deirn.fsn;
import bai.deirn.fsn.config.ModConfig;
import bai.deirn.fsn.registry.BlockEntityTypeRegistry;
import bai.deirn.fsn.registry.BlockRegistry;
import bai.deirn.fsn.registry.ItemRegistry;
import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
import me.sargunvohra.mcmods.autoconfig1u.serializer.JanksonConfigSerializer;
import net.fabricmc.api.ModInitializer;
public class FSN implements ModInitializer {
@Override
public void onInitialize() {
AutoConfig.register(ModConfig.class, JanksonConfigSerializer::new);
BlockRegistry.init();
BlockEntityTypeRegistry.init();
ItemRegistry.init();
}
}

View file

@ -1,99 +0,0 @@
package bai.deirn.fsn;
import bai.deirn.fsn.config.ModConfig;
import bai.deirn.fsn.registry.BlockRegistry;
import com.google.common.collect.ImmutableList;
import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder;
import net.minecraft.block.Block;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraft.text.TranslatableText;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.registry.Registry;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.util.shape.VoxelShapes;
import java.util.List;
import java.util.function.Supplier;
import java.util.logging.Logger;
public abstract class Utils {
public static final String MOD_ID = "fsn";
public static final Logger LOGGER = Logger.getLogger(MOD_ID);
private static final ItemGroup ITEM_GROUP = FabricItemGroupBuilder.build(
id("item_group"), () -> new ItemStack(BlockRegistry.MASTER)
);
// Just so i could make shape with the values blockbench shows.
public static VoxelShape cuboid(double xPos, double yPos, double zPos, double xSize, double ySize, double zSize) {
double xMin = xPos / 16d;
double yMin = yPos / 16d;
double zMin = zPos / 16d;
double xMax = (xPos + xSize) / 16d;
double yMax = (yPos + ySize) / 16d;
double zMax = (zPos + zSize) / 16d;
return VoxelShapes.cuboid(xMin, yMin, zMin, xMax, yMax, zMax);
}
public static Item.Settings getItemSettings() {
return new Item.Settings().group(ITEM_GROUP);
}
// Block registry
public static void register(String id, Block block) {
Registry.register(Registry.BLOCK, id(id), block);
register(id, new BlockItem(block, getItemSettings()));
}
// BlockEntityType registry
public static void register(String id, BlockEntityType<? extends BlockEntity> blockEntityType) {
Registry.register(Registry.BLOCK_ENTITY_TYPE, id(id), blockEntityType);
}
// Item registry
public static void register(String id, Item item) {
Registry.register(Registry.ITEM, id(id), item);
}
public static List<BlockPos> getPosAround(BlockPos pos){
return ImmutableList.of(
pos.north(),
pos.south(),
pos.east(),
pos.west(),
pos.up(),
pos.down()
);
}
public static BlockEntityType<?> createBlockEntity(Supplier<? extends BlockEntity> supplier, Block block) {
return BlockEntityType.Builder.create(supplier, block).build(null);
}
public static Identifier id(String path) {
return new Identifier(MOD_ID, path);
}
public static ModConfig config() {
return AutoConfig.getConfigHolder(ModConfig.class).getConfig();
}
public static TranslatableText text(String key) {
return new TranslatableText("text."+MOD_ID+"."+key);
}
public static void selfText(PlayerEntity player, String key) {
player.addChatMessage(text(key), false);
}
}

View file

@ -1,123 +0,0 @@
package bai.deirn.fsn.block;
import bai.deirn.fsn.Utils;
import bai.deirn.fsn.block.entity.CableBlockEntity;
import com.google.common.collect.ImmutableMap;
import net.fabricmc.fabric.api.block.FabricBlockSettings;
import net.fabricmc.fabric.api.tools.FabricToolTags;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Material;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.entity.EntityContext;
import net.minecraft.item.ItemPlacementContext;
import net.minecraft.state.StateManager;
import net.minecraft.state.property.BooleanProperty;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.util.shape.VoxelShapes;
import net.minecraft.world.BlockView;
import net.minecraft.world.IWorld;
import net.minecraft.world.World;
import java.util.Map;
public class CableBlock extends ChildBlock {
public static final Settings SETTINGS = FabricBlockSettings
.of(Material.GLASS)
.breakByHand(true)
.breakByTool(FabricToolTags.PICKAXES)
.hardness(3F)
.build();
public static final BooleanProperty NORTH = BooleanProperty.of("north");
public static final BooleanProperty SOUTH = BooleanProperty.of("south");
public static final BooleanProperty EAST = BooleanProperty.of("east");
public static final BooleanProperty WEST = BooleanProperty.of("west");
public static final BooleanProperty UP = BooleanProperty.of("up");
public static final BooleanProperty DOWN = BooleanProperty.of("down");
public CableBlock(Settings settings) {
super(settings);
}
@Override
public BlockEntity createBlockEntity(BlockView view) {
return new CableBlockEntity();
}
private boolean canConnect(World world, BlockPos pos) {
BlockState state = world.getBlockState(pos);
return canConnect(world, pos, state);
}
protected boolean canConnect(World world, BlockPos pos, BlockState state) {
Block block = state.getBlock();
return block instanceof ModBlock;
}
@Override
protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
builder.add(NORTH, SOUTH, EAST, WEST, UP, DOWN);
}
@Override
public BlockState getPlacementState(ItemPlacementContext ctx) {
World world = ctx.getWorld();
BlockPos pos = ctx.getBlockPos();
return this.getDefaultState()
.with(NORTH, this.canConnect(world, pos.north()))
.with(SOUTH, this.canConnect(world, pos.south()))
.with(EAST, this.canConnect(world, pos.east()))
.with(WEST, this.canConnect(world, pos.west()))
.with(UP, this.canConnect(world, pos.up()))
.with(DOWN, this.canConnect(world, pos.down()));
}
@Override
public BlockState getStateForNeighborUpdate(BlockState state, Direction facing, BlockState neighborState, IWorld world, BlockPos pos, BlockPos neighborPos) {
super.getStateForNeighborUpdate(state, facing, neighborState, world, pos, neighborPos);
Map<Direction, BooleanProperty> propertyMap = ImmutableMap.<Direction, BooleanProperty>builder()
.put(Direction.NORTH, NORTH)
.put(Direction.SOUTH, SOUTH)
.put(Direction.EAST, EAST)
.put(Direction.WEST, WEST)
.put(Direction.UP, UP)
.put(Direction.DOWN, DOWN)
.build();
return state.with(propertyMap.get(facing), this.canConnect(world.getWorld(), neighborPos, neighborState));
}
@Override
public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, EntityContext context) {
VoxelShape north = Utils.cuboid(6, 6, 0, 4, 4, 10);
VoxelShape south = Utils.cuboid(6, 6, 6, 4, 4, 10);
VoxelShape east = Utils.cuboid(6, 6, 6, 10, 4, 4);
VoxelShape west = Utils.cuboid(0, 6, 6, 10, 4, 4);
VoxelShape up = Utils.cuboid(6, 6, 6, 4, 10, 4);
VoxelShape down = Utils.cuboid(6, 0, 6, 4, 10, 4);
boolean n = state.get(NORTH);
boolean s = state.get(SOUTH);
boolean e = state.get(EAST);
boolean w = state.get(WEST);
boolean u = state.get(UP);
boolean d = state.get(DOWN);
VoxelShape result = Utils.cuboid(6, 6, 6, 4, 4, 4);
if (n) result = VoxelShapes.union(result, north);
if (s) result = VoxelShapes.union(result, south);
if (e) result = VoxelShapes.union(result, east);
if (w) result = VoxelShapes.union(result, west);
if (u) result = VoxelShapes.union(result, up);
if (d) result = VoxelShapes.union(result, down);
return result;
}
}

View file

@ -1,167 +0,0 @@
package bai.deirn.fsn.block;
import bai.deirn.fsn.Utils;
import net.minecraft.block.Block;
import net.minecraft.block.BlockEntityProvider;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.BlockView;
import net.minecraft.world.World;
public abstract class ChildBlock extends ModBlock implements BlockEntityProvider {
public ChildBlock(Settings settings) {
super(settings);
}
@Override
public BlockEntity createBlockEntity(BlockView view) {
return null;
}
private void validateMaster(World world, BlockPos pos) {
BlockEntity blockEntity = world.getBlockEntity(pos);
CompoundTag nbt = blockEntity.toTag(new CompoundTag());
if (nbt.getBoolean("hasMaster")) {
CompoundTag master = nbt.getCompound("masterPos");
BlockPos masterPos = new BlockPos(master.getInt("x"), master.getInt("y"), master.getInt("z"));
if (!(world.getBlockState(masterPos).getBlock() instanceof MasterBlock)) {
nbt.putBoolean("hasMaster", false);
blockEntity.fromTag(nbt);
blockEntity.markDirty();
world.updateNeighbors(pos, world.getBlockState(pos).getBlock());
}
}
}
/*
@Override
public BlockState getStateForNeighborUpdate(BlockState state, Direction facing, BlockState neighborState, IWorld world, BlockPos pos, BlockPos neighborPos) {
BlockEntity blockEntity = world.getBlockEntity(pos);
CompoundTag currentNbt = blockEntity.toTag(new CompoundTag());
Block neighborBlock = neighborState.getBlock();
boolean currentlyHasMaster = currentNbt.getBoolean("hasMaster");
if (currentlyHasMaster) {
CompoundTag currentMasterPos = currentNbt.getCompound("masterPos");
if (neighborBlock instanceof ChildBlock) {
BlockEntity neighborBlockEntity = world.getBlockEntity(neighborPos);
CompoundTag neighborNbt = neighborBlockEntity.toTag(new CompoundTag());
boolean neighborHasMaster = neighborNbt.getBoolean("hasMaster");
if (!neighborHasMaster) {
CompoundTag neighborMasterPos = neighborNbt.getCompound("masterPos");
Utils.LOGGER.warning(currentMasterPos.toString()+" "+neighborMasterPos.toString());
if (currentMasterPos.toString().equals(neighborMasterPos.toString())) {
currentNbt.putBoolean("hasMaster", false);
blockEntity.fromTag(currentNbt);
blockEntity.markDirty();
world.updateNeighbors(pos, state.getBlock());
} else {
neighborNbt.put("masterPos", currentMasterPos);
neighborNbt.putBoolean("hasMaster", true);
neighborBlockEntity.fromTag(neighborNbt);
neighborBlockEntity.markDirty();
world.updateNeighbors(neighborPos, neighborState.getBlock());
}
}
} else if (!(neighborBlock instanceof MasterBlock)) {
BlockPos masterPos = new BlockPos(currentMasterPos.getInt("x"), currentMasterPos.getInt("y"), currentMasterPos.getInt("z"));
Block masterBlock = world.getBlockState(masterPos).getBlock();
if (!(masterBlock instanceof MasterBlock)) {
currentNbt.putBoolean("hasMaster", false);
blockEntity.fromTag(currentNbt);
blockEntity.markDirty();
world.updateNeighbors(pos, state.getBlock());
}
}
}
if (!currentlyHasMaster) {
if (neighborBlock instanceof ChildBlock) {
BlockEntity neighborBlockEntity = world.getBlockEntity(neighborPos);
CompoundTag neighborNbt = neighborBlockEntity.toTag(new CompoundTag());
blockEntity.fromTag(neighborNbt);
blockEntity.markDirty();
world.updateNeighbors(pos, state.getBlock());
} else if (neighborBlock instanceof MasterBlock) {
CompoundTag masterPos = new CompoundTag();
masterPos.putInt("x", neighborPos.getX());
masterPos.putInt("y", neighborPos.getY());
masterPos.putInt("z", neighborPos.getZ());
currentNbt.put("masterPos", masterPos);
currentNbt.putBoolean("hasMaster", true);
blockEntity.fromTag(currentNbt);
blockEntity.markDirty();
world.updateNeighbors(pos, state.getBlock());
}
}
return state;
}
*/
private int updateCount = 0;
@Override
public void neighborUpdate(BlockState state, World world, BlockPos pos, Block block, BlockPos neighborPos, boolean moved) {
BlockEntity blockEntity = world.getBlockEntity(pos);
BlockState neighborState = world.getBlockState(neighborPos);
Block neighborBlock = neighborState.getBlock();
CompoundTag currentNbt = blockEntity.toTag(new CompoundTag());
boolean currentlyHasMaster = currentNbt.getBoolean("hasMaster");
if (neighborBlock instanceof ChildBlock) {
BlockEntity neighborBlockEntity = world.getBlockEntity(neighborPos);
CompoundTag neighborNbt = neighborBlockEntity.toTag(new CompoundTag());
boolean neighborHasMaster = neighborNbt.getBoolean("hasMaster");
if (currentlyHasMaster && !neighborHasMaster) {
CompoundTag masterPos = currentNbt.getCompound("masterPos");
CompoundTag neighborMasterPos = neighborNbt.getCompound("masterPos");
if (masterPos.equals(neighborMasterPos)) {
currentNbt.putBoolean("hasMaster", false);
blockEntity.fromTag(currentNbt);
blockEntity.markDirty();
world.updateNeighbors(pos, block);
} else {
neighborBlockEntity.fromTag(currentNbt);
neighborBlockEntity.markDirty();
world.updateNeighbors(neighborPos, neighborBlock);
}
}
if (!currentlyHasMaster && neighborHasMaster) {
blockEntity.fromTag(neighborNbt);
blockEntity.markDirty();
world.updateNeighbors(pos, block);
}
} else if (neighborBlock instanceof MasterBlock) {
if (!currentlyHasMaster) {
CompoundTag masterPos = new CompoundTag();
masterPos.putInt("x", neighborPos.getX());
masterPos.putInt("y", neighborPos.getY());
masterPos.putInt("z", neighborPos.getZ());
currentNbt.put("masterPos", masterPos);
currentNbt.putBoolean("hasMaster", true);
blockEntity.fromTag(currentNbt);
blockEntity.markDirty();
world.updateNeighbors(pos, block);
}
} else if (currentlyHasMaster) {
CompoundTag master = currentNbt.getCompound("masterPos");
BlockPos masterPos = new BlockPos(master.getInt("x"), master.getInt("y"), master.getInt("z"));
currentNbt.putBoolean("hasMaster", false);
blockEntity.fromTag(currentNbt);
blockEntity.markDirty();
world.updateNeighbors(pos, block);
world.updateNeighbors(masterPos, world.getBlockState(masterPos).getBlock());
} else {
updateCount = 0;
}
updateCount++;
Utils.LOGGER.warning("updateCount: " + updateCount);
}
}

View file

@ -1,37 +0,0 @@
package bai.deirn.fsn.block;
import bai.deirn.fsn.Utils;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.entity.EntityContext;
import net.minecraft.inventory.Inventory;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.util.shape.VoxelShapes;
import net.minecraft.world.BlockView;
import net.minecraft.world.World;
public abstract class ConnectorCableBlock extends CableBlock {
public ConnectorCableBlock(Settings settings) {
super(settings);
}
@Override
protected boolean canConnect(World world, BlockPos pos, BlockState state) {
Block block = state.getBlock();
boolean result = block instanceof ModBlock;
if (!result && block.hasBlockEntity()) {
result = Inventory.class.isAssignableFrom(world.getBlockEntity(pos).getClass());
}
return result;
}
@Override
public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, EntityContext context) {
VoxelShape end = Utils.cuboid(5, 5, 5, 6, 6, 6);
VoxelShape result = super.getOutlineShape(state, view, pos, context);
return VoxelShapes.union(result, end);
}
}

View file

@ -1,32 +0,0 @@
package bai.deirn.fsn.block;
import bai.deirn.fsn.Utils;
import bai.deirn.fsn.block.entity.CraftingTerminalBlockEntity;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.BlockView;
import net.minecraft.world.World;
public class CraftingTerminalBlock extends ChildBlock {
public CraftingTerminalBlock(Settings settings) {
super(settings);
}
@Override
public BlockEntity createBlockEntity(BlockView view) {
return new CraftingTerminalBlockEntity();
}
@Override
public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) {
Utils.selfText(player, "useCraftingTerminal");
return super.onUse(state, world, pos, player, hand, hit);
}
}

View file

@ -1,9 +0,0 @@
package bai.deirn.fsn.block;
public class ExportCableBlock extends ConnectorCableBlock {
public ExportCableBlock(Settings settings) {
super(settings);
}
}

View file

@ -1,9 +0,0 @@
package bai.deirn.fsn.block;
public class ImportCableBlock extends ConnectorCableBlock {
public ImportCableBlock(Settings settings) {
super(settings);
}
}

View file

@ -1,88 +0,0 @@
package bai.deirn.fsn.block;
import bai.deirn.fsn.block.entity.MasterBlockEntity;
import net.minecraft.block.Block;
import net.minecraft.block.BlockEntityProvider;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.client.item.TooltipContext;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.text.Text;
import net.minecraft.text.TranslatableText;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.BlockView;
import net.minecraft.world.World;
import java.util.List;
public class MasterBlock extends ModBlock implements BlockEntityProvider {
public MasterBlock(Settings settings) {
super(settings);
}
@Override
public BlockEntity createBlockEntity(BlockView view) {
return new MasterBlockEntity();
}
@Override
public void buildTooltip(ItemStack stack, BlockView view, List<Text> tooltip, TooltipContext options) {
super.buildTooltip(stack, view, tooltip, options);
tooltip.add(new TranslatableText(stack.getTranslationKey()+".tooltip2"));
}
/*
@Override
public BlockState getStateForNeighborUpdate(BlockState state, Direction facing, BlockState neighborState, IWorld world, BlockPos pos, BlockPos neighborPos) {
Block neighborBlock = neighborState.getBlock();
if (neighborBlock instanceof ChildBlock) {
BlockEntity neighborBlockEntity = world.getBlockEntity(neighborPos);
CompoundTag neighborNbt = neighborBlockEntity.toTag(new CompoundTag());
boolean neighborHasMaster = neighborNbt.getBoolean("hasMaster");
if (!neighborHasMaster) {
CompoundTag masterPos = new CompoundTag();
masterPos.putInt("x", pos.getX());
masterPos.putInt("y", pos.getY());
masterPos.putInt("z", pos.getZ());
neighborNbt.put("masterPos", masterPos);
neighborNbt.putBoolean("hasMaster", true);
neighborBlockEntity.fromTag(neighborNbt);
neighborBlockEntity.markDirty();
}
}
return state;
}
*/
@Override
public void neighborUpdate(BlockState state, World world, BlockPos pos, Block block, BlockPos neighborPos, boolean moved) {
super.neighborUpdate(state, world, pos, block, neighborPos, moved);
BlockState neighborState = world.getBlockState(neighborPos);
Block neighborBlock = neighborState.getBlock();
if (neighborBlock instanceof ChildBlock) {
BlockEntity neighborBlockEntity = world.getBlockEntity(neighborPos);
CompoundTag neighborNbt = neighborBlockEntity.toTag(new CompoundTag());
boolean neighborHasMaster = neighborNbt.getBoolean("hasMaster");
if (!neighborHasMaster) {
CompoundTag masterPos = new CompoundTag();
masterPos.putInt("x", pos.getX());
masterPos.putInt("y", pos.getY());
masterPos.putInt("z", pos.getZ());
neighborNbt.put("masterPos", masterPos);
neighborNbt.putBoolean("hasMaster", true);
neighborBlockEntity.fromTag(neighborNbt);
neighborBlockEntity.markDirty();
world.updateNeighbors(neighborPos, neighborBlock);
}
}
}
}

View file

@ -1,32 +0,0 @@
package bai.deirn.fsn.block;
import net.fabricmc.fabric.api.block.FabricBlockSettings;
import net.fabricmc.fabric.api.tools.FabricToolTags;
import net.minecraft.block.Block;
import net.minecraft.block.Material;
import net.minecraft.client.item.TooltipContext;
import net.minecraft.item.ItemStack;
import net.minecraft.text.Text;
import net.minecraft.text.TranslatableText;
import net.minecraft.world.BlockView;
import java.util.List;
public class ModBlock extends Block {
public static final Settings SETTINGS = FabricBlockSettings
.of(Material.STONE)
.breakByHand(true)
.breakByTool(FabricToolTags.PICKAXES)
.hardness(5F)
.build();
public ModBlock(Settings settings) {
super(settings);
}
@Override
public void buildTooltip(ItemStack stack, BlockView view, List<Text> tooltip, TooltipContext options) {
tooltip.add(new TranslatableText(stack.getTranslationKey()+".tooltip"));
}
}

View file

@ -1,9 +0,0 @@
package bai.deirn.fsn.block;
public class ProcessingCableBlock extends ConnectorCableBlock {
public ProcessingCableBlock(Settings settings) {
super(settings);
}
}

View file

@ -1,18 +0,0 @@
package bai.deirn.fsn.block;
import bai.deirn.fsn.block.entity.ProcessingTerminalBlockEntity;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.world.BlockView;
public class ProcessingTerminalBlock extends ChildBlock {
public ProcessingTerminalBlock(Settings settings) {
super(settings);
}
@Override
public BlockEntity createBlockEntity(BlockView view) {
return new ProcessingTerminalBlockEntity();
}
}

View file

@ -1,33 +0,0 @@
package bai.deirn.fsn.block;
import bai.deirn.fsn.block.entity.StorageCableBlockEntity;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtHelper;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.BlockView;
import net.minecraft.world.World;
public class StorageCableBlock extends ConnectorCableBlock {
public StorageCableBlock(Settings settings) {
super(settings);
}
@Override
public BlockEntity createBlockEntity(BlockView view) {
return new StorageCableBlockEntity();
}
@Override
public void onPlaced(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack itemStack) {
super.onPlaced(world, pos, state, placer, itemStack);
CompoundTag masterPos = world.getBlockEntity(pos).toTag(new CompoundTag()).getCompound("masterPos");
BlockEntity master = world.getBlockEntity(NbtHelper.toBlockPos(masterPos));
}
}

View file

@ -1,11 +0,0 @@
package bai.deirn.fsn.block.entity;
import bai.deirn.fsn.registry.BlockEntityTypeRegistry;
public class CableBlockEntity extends ChildBlockEntity {
public CableBlockEntity() {
super(BlockEntityTypeRegistry.CABLE);
}
}

View file

@ -1,42 +0,0 @@
package bai.deirn.fsn.block.entity;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.nbt.CompoundTag;
public abstract class ChildBlockEntity extends BlockEntity {
protected boolean hasMaster = false;
protected CompoundTag masterPos = new CompoundTag();
protected int[] masterPosArray = new int[3];
public ChildBlockEntity(BlockEntityType<?> type) {
super(type);
}
@Override
public CompoundTag toTag(CompoundTag tag) {
super.toTag(tag);
tag.putBoolean("hasMaster", hasMaster);
this.masterPos.putInt("x", masterPosArray[0]);
this.masterPos.putInt("y", masterPosArray[1]);
this.masterPos.putInt("z", masterPosArray[2]);
tag.put("masterPos", this.masterPos);
return tag;
}
@Override
public void fromTag(CompoundTag tag) {
super.fromTag(tag);
this.hasMaster = tag.getBoolean("hasMaster");
this.masterPos = tag.getCompound("masterPos");
this.masterPosArray[0] = this.masterPos.getInt("x");
this.masterPosArray[1] = this.masterPos.getInt("y");
this.masterPosArray[2] = this.masterPos.getInt("z");
}
}

View file

@ -1,11 +0,0 @@
package bai.deirn.fsn.block.entity;
import bai.deirn.fsn.registry.BlockEntityTypeRegistry;
public class CraftingTerminalBlockEntity extends ChildBlockEntity {
public CraftingTerminalBlockEntity() {
super(BlockEntityTypeRegistry.CRAFTING_TERMINAL);
}
}

View file

@ -1,55 +0,0 @@
package bai.deirn.fsn.block.entity;
import bai.deirn.fsn.registry.BlockEntityTypeRegistry;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.Tag;
import java.util.ArrayList;
import java.util.List;
public class MasterBlockEntity extends BlockEntity {
private ListTag storagePos = new ListTag();
private List<int[]> storagePosArray = new ArrayList<>();
public MasterBlockEntity() {
super(BlockEntityTypeRegistry.MASTER);
}
@Override
public CompoundTag toTag(CompoundTag tag) {
super.toTag(tag);
this.storagePosArray.forEach(storage -> {
CompoundTag compoundTag = new CompoundTag();
compoundTag.putInt("x", storage[0]);
compoundTag.putInt("y", storage[1]);
compoundTag.putInt("z", storage[2]);
this.storagePos.add(compoundTag);
});
tag.put("storagePos", storagePos);
return tag;
}
@Override
public void fromTag(CompoundTag tag) {
super.fromTag(tag);
this.storagePos = (ListTag) tag.get("storagePos");
this.storagePosArray.clear();
for (Tag storage : this.storagePos) {
CompoundTag compoundTag = (CompoundTag) storage;
int[] ints = {
compoundTag.getInt("x"),
compoundTag.getInt("y"),
compoundTag.getInt("z")
};
storagePosArray.add(ints);
}
}
}

View file

@ -1,11 +0,0 @@
package bai.deirn.fsn.block.entity;
import bai.deirn.fsn.registry.BlockEntityTypeRegistry;
public class ProcessingTerminalBlockEntity extends ChildBlockEntity {
public ProcessingTerminalBlockEntity() {
super(BlockEntityTypeRegistry.PROCESSING_TERMINAL);
}
}

View file

@ -1,11 +0,0 @@
package bai.deirn.fsn.block.entity;
import bai.deirn.fsn.registry.BlockEntityTypeRegistry;
public class StorageCableBlockEntity extends ChildBlockEntity {
public StorageCableBlockEntity() {
super(BlockEntityTypeRegistry.STORAGE_CABLE);
}
}

View file

@ -1,21 +0,0 @@
package bai.deirn.fsn.config;
import bai.deirn.fsn.Utils;
import me.sargunvohra.mcmods.autoconfig1u.ConfigData;
import me.sargunvohra.mcmods.autoconfig1u.annotation.Config;
import me.sargunvohra.mcmods.autoconfig1u.annotation.ConfigEntry;
@Config(name = Utils.MOD_ID)
@Config.Gui.Background(Utils.MOD_ID+":textures/gui/config.png")
public class ModConfig implements ConfigData {
@ConfigEntry.Gui.Tooltip
public boolean remote0 = true;
@ConfigEntry.Gui.Tooltip
public boolean remote1 = true;
@ConfigEntry.Gui.Tooltip
public boolean remote2 = true;
@ConfigEntry.Gui.Tooltip
public boolean remote3 = true;
}

View file

@ -1,23 +0,0 @@
package bai.deirn.fsn.config;
import bai.deirn.fsn.Utils;
import io.github.prospector.modmenu.api.ModMenuApi;
import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
import net.minecraft.client.gui.screen.Screen;
import java.util.Optional;
import java.util.function.Supplier;
public class ModMenuIntegration implements ModMenuApi {
@Override
public String getModId() {
return Utils.MOD_ID;
}
@Override
public Optional<Supplier<Screen>> getConfigScreen(Screen screen) {
return Optional.of(AutoConfig.getConfigScreen(ModConfig.class, screen));
}
}

View file

@ -1,11 +0,0 @@
package bai.deirn.fsn.gui.controller;
import io.github.cottonmc.cotton.gui.CottonCraftingController;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.recipe.RecipeType;
public class CraftingTerminalController extends CottonCraftingController {
public CraftingTerminalController(RecipeType<?> recipeType, int syncId, PlayerInventory playerInventory) {
super(recipeType, syncId, playerInventory);
}
}

View file

@ -1,23 +0,0 @@
package bai.deirn.fsn.item;
import net.minecraft.client.item.TooltipContext;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.text.Text;
import net.minecraft.text.TranslatableText;
import net.minecraft.world.World;
import java.util.List;
public class ModItem extends Item {
public ModItem(Settings settings) {
super(settings);
}
@Override
public void appendTooltip(ItemStack stack, World world, List<Text> tooltip, TooltipContext context) {
tooltip.add(new TranslatableText(stack.getTranslationKey()+".tooltip"));
}
}

View file

@ -1,8 +0,0 @@
package bai.deirn.fsn.mixin;
import net.minecraft.inventory.Inventory;
import org.spongepowered.asm.mixin.Mixin;
@Mixin(Inventory.class)
public class MixinInventory {
}

View file

@ -1,24 +0,0 @@
package bai.deirn.fsn.registry;
import bai.deirn.fsn.Utils;
import bai.deirn.fsn.block.entity.*;
import net.minecraft.block.entity.BlockEntityType;
public abstract class BlockEntityTypeRegistry {
public static final BlockEntityType<?> MASTER = Utils.createBlockEntity(MasterBlockEntity::new, BlockRegistry.MASTER);
public static final BlockEntityType<?> CRAFTING_TERMINAL = Utils.createBlockEntity(CraftingTerminalBlockEntity::new, BlockRegistry.CRAFTING_TERMINAL);
public static final BlockEntityType<?> PROCESSING_TERMINAL = Utils.createBlockEntity(ProcessingTerminalBlockEntity::new, BlockRegistry.PROCESSING_TERMINAL);
public static final BlockEntityType<?> CABLE = Utils.createBlockEntity(CableBlockEntity::new, BlockRegistry.CABLE);
public static final BlockEntityType<?> STORAGE_CABLE = Utils.createBlockEntity(StorageCableBlockEntity::new, BlockRegistry.STORAGE_CABLE);
public static void init(){
Utils.register("master", MASTER);
Utils.register("crafting_terminal", CRAFTING_TERMINAL);
Utils.register("processing_terminal", PROCESSING_TERMINAL);
Utils.register("cable", CABLE);
Utils.register("storage_cable", STORAGE_CABLE);
}
}

View file

@ -1,30 +0,0 @@
package bai.deirn.fsn.registry;
import bai.deirn.fsn.Utils;
import bai.deirn.fsn.block.*;
import net.minecraft.block.Block;
public abstract class BlockRegistry {
public static final Block MASTER = new MasterBlock(ModBlock.SETTINGS);
public static final Block CRAFTING_TERMINAL = new CraftingTerminalBlock(ModBlock.SETTINGS);
public static final Block PROCESSING_TERMINAL = new ProcessingTerminalBlock(ModBlock.SETTINGS);
public static final Block CABLE = new CableBlock(CableBlock.SETTINGS);
public static final Block STORAGE_CABLE = new StorageCableBlock(CableBlock.SETTINGS);
public static final Block IMPORT_CABLE = new ImportCableBlock(CableBlock.SETTINGS);
public static final Block EXPORT_CABLE = new ExportCableBlock(CableBlock.SETTINGS);
public static final Block PROCESSING_CABLE = new ProcessingCableBlock(CableBlock.SETTINGS);
public static void init() {
Utils.register("master", MASTER);
Utils.register("crafting_terminal", CRAFTING_TERMINAL);
Utils.register("processing_terminal", PROCESSING_TERMINAL);
Utils.register("cable", CABLE);
Utils.register("storage_cable", STORAGE_CABLE);
Utils.register("import_cable", IMPORT_CABLE);
Utils.register("export_cable", EXPORT_CABLE);
Utils.register("processing_cable", PROCESSING_CABLE);
}
}

View file

@ -1,9 +0,0 @@
package bai.deirn.fsn.registry;
public abstract class ItemRegistry {
public static void init() {
}
}

View file

@ -1,11 +0,0 @@
{
"multipart": [
{"apply": {"model": "fsn:block/cable_center"}},
{"when": {"north": true}, "apply": {"model": "fsn:block/cable_side"}},
{"when": {"south": true}, "apply": {"model": "fsn:block/cable_side", "y": 180}},
{"when": {"east" : true}, "apply": {"model": "fsn:block/cable_side", "y": 90}},
{"when": {"west" : true}, "apply": {"model": "fsn:block/cable_side", "y": -90}},
{"when": {"up" : true}, "apply": {"model": "fsn:block/cable_side", "x": -90}},
{"when": {"down" : true}, "apply": {"model": "fsn:block/cable_side", "x": 90}}
]
}

View file

@ -1,5 +0,0 @@
{
"variants": {
"": { "model": "fsn:block/crafting_terminal" }
}
}

View file

@ -1,11 +0,0 @@
{
"multipart": [
{"apply": {"model": "fsn:block/cable_end_export"}},
{"when": {"north": true}, "apply": {"model": "fsn:block/cable_side"}},
{"when": {"south": true}, "apply": {"model": "fsn:block/cable_side", "y": 180}},
{"when": {"east" : true}, "apply": {"model": "fsn:block/cable_side", "y": 90}},
{"when": {"west" : true}, "apply": {"model": "fsn:block/cable_side", "y": -90}},
{"when": {"up" : true}, "apply": {"model": "fsn:block/cable_side", "x": -90}},
{"when": {"down" : true}, "apply": {"model": "fsn:block/cable_side", "x": 90}}
]
}

View file

@ -1,11 +0,0 @@
{
"multipart": [
{"apply": {"model": "fsn:block/cable_end_import"}},
{"when": {"north": true}, "apply": {"model": "fsn:block/cable_side"}},
{"when": {"south": true}, "apply": {"model": "fsn:block/cable_side", "y": 180}},
{"when": {"east" : true}, "apply": {"model": "fsn:block/cable_side", "y": 90}},
{"when": {"west" : true}, "apply": {"model": "fsn:block/cable_side", "y": -90}},
{"when": {"up" : true}, "apply": {"model": "fsn:block/cable_side", "x": -90}},
{"when": {"down" : true}, "apply": {"model": "fsn:block/cable_side", "x": 90}}
]
}

View file

@ -1,5 +0,0 @@
{
"variants": {
"": { "model": "fsn:block/master" }
}
}

View file

@ -1,11 +0,0 @@
{
"multipart": [
{"apply": {"model": "fsn:block/cable_end_processing"}},
{"when": {"north": true}, "apply": {"model": "fsn:block/cable_side"}},
{"when": {"south": true}, "apply": {"model": "fsn:block/cable_side", "y": 180}},
{"when": {"east" : true}, "apply": {"model": "fsn:block/cable_side", "y": 90}},
{"when": {"west" : true}, "apply": {"model": "fsn:block/cable_side", "y": -90}},
{"when": {"up" : true}, "apply": {"model": "fsn:block/cable_side", "x": -90}},
{"when": {"down" : true}, "apply": {"model": "fsn:block/cable_side", "x": 90}}
]
}

View file

@ -1,5 +0,0 @@
{
"variants": {
"": { "model": "fsn:block/processing_terminal" }
}
}

View file

@ -1,11 +0,0 @@
{
"multipart": [
{"apply": {"model": "fsn:block/cable_end_storage"}},
{"when": {"north": true}, "apply": {"model": "fsn:block/cable_side"}},
{"when": {"south": true}, "apply": {"model": "fsn:block/cable_side", "y": 180}},
{"when": {"east" : true}, "apply": {"model": "fsn:block/cable_side", "y": 90}},
{"when": {"west" : true}, "apply": {"model": "fsn:block/cable_side", "y": -90}},
{"when": {"up" : true}, "apply": {"model": "fsn:block/cable_side", "x": -90}},
{"when": {"down" : true}, "apply": {"model": "fsn:block/cable_side", "x": 90}}
]
}

View file

@ -1,29 +0,0 @@
{
"itemGroup.fsn.item_group": "Storage Networks",
"block.fsn.master": "Network Master",
"block.fsn.master.tooltip": "§7Heart of the storage connection. §5One per connection.",
"block.fsn.master.tooltip2": "§7ふらふらふらふら",
"block.fsn.crafting_terminal": "Crafting Terminal",
"block.fsn.crafting_terminal.tooltip": "§7nice",
"block.fsn.processing_terminal": "Processing Terminal",
"block.fsn.processing_terminal.tooltip": "§7Loading tooltip text...",
"block.fsn.cable": "Cable",
"block.fsn.cable.tooltip": "§7regular pipe",
"block.fsn.storage_cable": "Storage Cable",
"block.fsn.storage_cable.tooltip": "§7pipe for connecting inventories",
"block.fsn.import_cable": "Import Cable",
"block.fsn.import_cable.tooltip": "§7from block to network",
"block.fsn.export_cable": "Export Cable",
"block.fsn.export_cable.tooltip": "§7from network to block",
"block.fsn.processing_cable": "Processing Cable",
"block.fsn.processing_cable.tooltip": "§7Ok §kGoogle§r§7, cook me some steak. Well done steak.",
"text.autoconfig.fsn.title": "Fabric Storage Networks",
"text.autoconfig.fsn.option.remote0": "Enable Limited Remote",
"text.autoconfig.fsn.option.remote0.@Tooltip": "§cRestart Required!",
"text.autoconfig.fsn.option.remote1": "Enable Regular Crafting Remote",
"text.autoconfig.fsn.option.remote1.@Tooltip": "§cRestart Required!",
"text.autoconfig.fsn.option.remote2": "Enable Advanced Crafting Remote",
"text.autoconfig.fsn.option.remote2.@Tooltip": "§cRestart Required!",
"text.autoconfig.fsn.option.remote3": "Enable Ultimate Crafting Remote",
"text.autoconfig.fsn.option.remote3.@Tooltip": "§cRestart Required!"
}

View file

@ -1,21 +0,0 @@
{
"textures": {
"0": "fsn:block/cable",
"particle": "fsn:block/cable"
},
"elements": [
{
"from": [6, 6, 6],
"to": [10, 10, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 14, 8]},
"faces": {
"north": {"uv": [10, 0, 14, 4], "texture": "#0"},
"east": {"uv": [6, 0, 10, 4], "texture": "#0"},
"south": {"uv": [10, 0, 14, 4], "texture": "#0"},
"west": {"uv": [6, 0, 10, 4], "texture": "#0"},
"up": {"uv": [10, 4, 6, 0], "rotation": 90, "texture": "#0"},
"down": {"uv": [10, 0, 6, 4], "rotation": 270, "texture": "#0"}
}
}
]
}

View file

@ -1,22 +0,0 @@
{
"parent": "block/cube_all",
"textures": {
"0": "fsn:block/cable",
"particle": "fsn:block/cable"
},
"elements": [
{
"from": [5, 5, 5],
"to": [11, 11, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [13, 13, 13]},
"faces": {
"north": {"uv": [0, 10, 6, 16], "texture": "#0"},
"east": {"uv": [0, 10, 6, 16], "texture": "#0"},
"south": {"uv": [0, 10, 6, 16], "texture": "#0"},
"west": {"uv": [0, 10, 6, 16], "texture": "#0"},
"up": {"uv": [0, 10, 6, 16], "texture": "#0"},
"down": {"uv": [0, 10, 6, 16], "texture": "#0"}
}
}
]
}

View file

@ -1,22 +0,0 @@
{
"parent": "block/cube_all",
"textures": {
"0": "fsn:block/cable",
"particle": "fsn:block/cable"
},
"elements": [
{
"from": [5, 5, 5],
"to": [11, 11, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [13, 13, 13]},
"faces": {
"north": {"uv": [6, 4, 12, 10], "texture": "#0"},
"east": {"uv": [6, 4, 12, 10], "texture": "#0"},
"south": {"uv": [6, 4, 12, 10], "texture": "#0"},
"west": {"uv": [6, 4, 12, 10], "texture": "#0"},
"up": {"uv": [6, 4, 12, 10], "texture": "#0"},
"down": {"uv": [6, 4, 12, 10], "texture": "#0"}
}
}
]
}

View file

@ -1,22 +0,0 @@
{
"parent": "block/cube_all",
"textures": {
"0": "fsn:block/cable",
"particle": "fsn:block/cable"
},
"elements": [
{
"from": [5, 5, 5],
"to": [11, 11, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [13, 13, 13]},
"faces": {
"north": {"uv": [6, 10, 12, 16], "texture": "#0"},
"east": {"uv": [6, 10, 12, 16], "texture": "#0"},
"south": {"uv": [6, 10, 12, 16], "texture": "#0"},
"west": {"uv": [6, 10, 12, 16], "texture": "#0"},
"up": {"uv": [6, 10, 12, 16], "texture": "#0"},
"down": {"uv": [6, 10, 12, 16], "texture": "#0"}
}
}
]
}

View file

@ -1,22 +0,0 @@
{
"parent": "block/cube_all",
"textures": {
"0": "fsn:block/cable",
"particle": "fsn:block/cable"
},
"elements": [
{
"from": [5, 5, 5],
"to": [11, 11, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [13, 13, 13]},
"faces": {
"north": {"uv": [0, 4, 6, 10], "texture": "#0"},
"east": {"uv": [0, 4, 6, 10], "texture": "#0"},
"south": {"uv": [0, 4, 6, 10], "texture": "#0"},
"west": {"uv": [0, 4, 6, 10], "texture": "#0"},
"up": {"uv": [0, 4, 6, 10], "texture": "#0"},
"down": {"uv": [0, 4, 6, 10], "texture": "#0"}
}
}
]
}

View file

@ -1,21 +0,0 @@
{
"textures": {
"0": "fsn:block/cable",
"particle": "fsn:block/cable"
},
"elements": [
{
"from": [6, 6, 0],
"to": [10, 10, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 14, 8]},
"faces": {
"north": {"uv": [10, 0, 14, 4], "texture": "#0"},
"east": {"uv": [0, 0, 10, 4], "texture": "#0"},
"south": {"uv": [10, 0, 14, 4], "texture": "#0"},
"west": {"uv": [0, 0, 10, 4], "texture": "#0"},
"up": {"uv": [10, 4, 0, 0], "rotation": 90, "texture": "#0"},
"down": {"uv": [10, 0, 0, 4], "rotation": 270, "texture": "#0"}
}
}
]
}

View file

@ -1,6 +0,0 @@
{
"parent": "block/cube_all",
"textures": {
"all": "fsn:block/crafting_terminal"
}
}

View file

@ -1,6 +0,0 @@
{
"parent": "block/cube_all",
"textures": {
"all": "fsn:block/master"
}
}

View file

@ -1,6 +0,0 @@
{
"parent": "block/cube_all",
"textures": {
"all": "fsn:block/processing_terminal"
}
}

View file

@ -1,66 +0,0 @@
{
"textures": {
"0": "fsn:block/cable",
"particle": "fsn:block/cable"
},
"elements": [
{
"from": [6, 6, 0],
"to": [10, 10, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 14, 8]},
"faces": {
"north": {"uv": [10, 0, 14, 4], "texture": "#0"},
"east": {"uv": [0, 0, 10, 4], "texture": "#0"},
"south": {"uv": [10, 0, 14, 4], "texture": "#0"},
"west": {"uv": [0, 0, 10, 4], "texture": "#0"},
"up": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"},
"down": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"}
}
},
{
"from": [6, 6, 6],
"to": [10, 10, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 14, 8]},
"faces": {
"north": {"uv": [10, 0, 14, 4], "texture": "#0"},
"east": {"uv": [0, 0, 10, 4], "texture": "#0"},
"south": {"uv": [10, 0, 14, 4], "texture": "#0"},
"west": {"uv": [0, 0, 10, 4], "texture": "#0"},
"up": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"},
"down": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [90, 0, 0],
"translation": [0, 1.75, 0],
"scale": [0.5, 0.5, 0.5]
},
"thirdperson_lefthand": {
"rotation": [90, 0, 0],
"translation": [0, 1.75, 0],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_righthand": {
"rotation": [45, 0, 0],
"translation": [0, 0.25, 2.25],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_lefthand": {
"rotation": [45, 0, 0],
"translation": [0, 0.25, 2.25],
"scale": [0.5, 0.5, 0.5]
},
"ground": {
"translation": [0, -2, 0],
"scale": [0.5, 0.5, 0.5]
},
"gui": {
"rotation": [30, -45, 0]
},
"fixed": {
"rotation": [0, 90, 0]
}
}
}

View file

@ -1,3 +0,0 @@
{
"parent": "fsn:block/crafting_terminal"
}

View file

@ -1,79 +0,0 @@
{
"textures": {
"0": "fsn:block/cable",
"particle": "fsn:block/cable"
},
"elements": [
{
"from": [6, 6, 0],
"to": [10, 10, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 14, 8]},
"faces": {
"north": {"uv": [10, 0, 14, 4], "texture": "#0"},
"east": {"uv": [0, 0, 10, 4], "texture": "#0"},
"south": {"uv": [10, 0, 14, 4], "texture": "#0"},
"west": {"uv": [0, 0, 10, 4], "texture": "#0"},
"up": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"},
"down": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"}
}
},
{
"from": [6, 6, 6],
"to": [10, 10, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 14, 8]},
"faces": {
"north": {"uv": [10, 0, 14, 4], "texture": "#0"},
"east": {"uv": [0, 0, 10, 4], "texture": "#0"},
"south": {"uv": [10, 0, 14, 4], "texture": "#0"},
"west": {"uv": [0, 0, 10, 4], "texture": "#0"},
"up": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"},
"down": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"}
}
},
{
"from": [5, 5, 5],
"to": [11, 11, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [13, 13, 13]},
"faces": {
"north": {"uv": [0, 10, 6, 16], "texture": "#0"},
"east": {"uv": [0, 10, 6, 16], "texture": "#0"},
"south": {"uv": [0, 10, 6, 16], "texture": "#0"},
"west": {"uv": [0, 10, 6, 16], "texture": "#0"},
"up": {"uv": [0, 10, 6, 16], "texture": "#0"},
"down": {"uv": [0, 10, 6, 16], "texture": "#0"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [90, 0, 0],
"translation": [0, 1.75, 0],
"scale": [0.5, 0.5, 0.5]
},
"thirdperson_lefthand": {
"rotation": [90, 0, 0],
"translation": [0, 1.75, 0],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_righthand": {
"rotation": [45, 0, 0],
"translation": [0, 0.25, 2.25],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_lefthand": {
"rotation": [45, 0, 0],
"translation": [0, 0.25, 2.25],
"scale": [0.5, 0.5, 0.5]
},
"ground": {
"translation": [0, -2, 0],
"scale": [0.5, 0.5, 0.5]
},
"gui": {
"rotation": [30, -45, 0]
},
"fixed": {
"rotation": [0, 90, 0]
}
}
}

View file

@ -1,79 +0,0 @@
{
"textures": {
"0": "fsn:block/cable",
"particle": "fsn:block/cable"
},
"elements": [
{
"from": [6, 6, 0],
"to": [10, 10, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 14, 8]},
"faces": {
"north": {"uv": [10, 0, 14, 4], "texture": "#0"},
"east": {"uv": [0, 0, 10, 4], "texture": "#0"},
"south": {"uv": [10, 0, 14, 4], "texture": "#0"},
"west": {"uv": [0, 0, 10, 4], "texture": "#0"},
"up": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"},
"down": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"}
}
},
{
"from": [6, 6, 6],
"to": [10, 10, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 14, 8]},
"faces": {
"north": {"uv": [10, 0, 14, 4], "texture": "#0"},
"east": {"uv": [0, 0, 10, 4], "texture": "#0"},
"south": {"uv": [10, 0, 14, 4], "texture": "#0"},
"west": {"uv": [0, 0, 10, 4], "texture": "#0"},
"up": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"},
"down": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"}
}
},
{
"from": [5, 5, 5],
"to": [11, 11, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [13, 13, 13]},
"faces": {
"north": {"uv": [6, 4, 12, 10], "texture": "#0"},
"east": {"uv": [6, 4, 12, 10], "texture": "#0"},
"south": {"uv": [6, 4, 12, 10], "texture": "#0"},
"west": {"uv": [6, 4, 12, 10], "texture": "#0"},
"up": {"uv": [6, 4, 12, 10], "texture": "#0"},
"down": {"uv": [6, 4, 12, 10], "texture": "#0"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [90, 0, 0],
"translation": [0, 1.75, 0],
"scale": [0.5, 0.5, 0.5]
},
"thirdperson_lefthand": {
"rotation": [90, 0, 0],
"translation": [0, 1.75, 0],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_righthand": {
"rotation": [45, 0, 0],
"translation": [0, 0.25, 2.25],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_lefthand": {
"rotation": [45, 0, 0],
"translation": [0, 0.25, 2.25],
"scale": [0.5, 0.5, 0.5]
},
"ground": {
"translation": [0, -2, 0],
"scale": [0.5, 0.5, 0.5]
},
"gui": {
"rotation": [30, -45, 0]
},
"fixed": {
"rotation": [0, 90, 0]
}
}
}

View file

@ -1,3 +0,0 @@
{
"parent": "fsn:block/master"
}

View file

@ -1,79 +0,0 @@
{
"textures": {
"0": "fsn:block/cable",
"particle": "fsn:block/cable"
},
"elements": [
{
"from": [6, 6, 0],
"to": [10, 10, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 14, 8]},
"faces": {
"north": {"uv": [10, 0, 14, 4], "texture": "#0"},
"east": {"uv": [0, 0, 10, 4], "texture": "#0"},
"south": {"uv": [10, 0, 14, 4], "texture": "#0"},
"west": {"uv": [0, 0, 10, 4], "texture": "#0"},
"up": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"},
"down": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"}
}
},
{
"from": [6, 6, 6],
"to": [10, 10, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 14, 8]},
"faces": {
"north": {"uv": [10, 0, 14, 4], "texture": "#0"},
"east": {"uv": [0, 0, 10, 4], "texture": "#0"},
"south": {"uv": [10, 0, 14, 4], "texture": "#0"},
"west": {"uv": [0, 0, 10, 4], "texture": "#0"},
"up": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"},
"down": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"}
}
},
{
"from": [5, 5, 5],
"to": [11, 11, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [13, 13, 13]},
"faces": {
"north": {"uv": [6, 10, 12, 16], "texture": "#0"},
"east": {"uv": [6, 10, 12, 16], "texture": "#0"},
"south": {"uv": [6, 10, 12, 16], "texture": "#0"},
"west": {"uv": [6, 10, 12, 16], "texture": "#0"},
"up": {"uv": [6, 10, 12, 16], "texture": "#0"},
"down": {"uv": [6, 10, 12, 16], "texture": "#0"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [90, 0, 0],
"translation": [0, 1.75, 0],
"scale": [0.5, 0.5, 0.5]
},
"thirdperson_lefthand": {
"rotation": [90, 0, 0],
"translation": [0, 1.75, 0],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_righthand": {
"rotation": [45, 0, 0],
"translation": [0, 0.25, 2.25],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_lefthand": {
"rotation": [45, 0, 0],
"translation": [0, 0.25, 2.25],
"scale": [0.5, 0.5, 0.5]
},
"ground": {
"translation": [0, -2, 0],
"scale": [0.5, 0.5, 0.5]
},
"gui": {
"rotation": [30, -45, 0]
},
"fixed": {
"rotation": [0, 90, 0]
}
}
}

View file

@ -1,3 +0,0 @@
{
"parent": "fsn:block/processing_terminal"
}

View file

@ -1,79 +0,0 @@
{
"textures": {
"0": "fsn:block/cable",
"particle": "fsn:block/cable"
},
"elements": [
{
"from": [6, 6, 0],
"to": [10, 10, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 14, 8]},
"faces": {
"north": {"uv": [10, 0, 14, 4], "texture": "#0"},
"east": {"uv": [0, 0, 10, 4], "texture": "#0"},
"south": {"uv": [10, 0, 14, 4], "texture": "#0"},
"west": {"uv": [0, 0, 10, 4], "texture": "#0"},
"up": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"},
"down": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"}
}
},
{
"from": [6, 6, 6],
"to": [10, 10, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 14, 8]},
"faces": {
"north": {"uv": [10, 0, 14, 4], "texture": "#0"},
"east": {"uv": [0, 0, 10, 4], "texture": "#0"},
"south": {"uv": [10, 0, 14, 4], "texture": "#0"},
"west": {"uv": [0, 0, 10, 4], "texture": "#0"},
"up": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"},
"down": {"uv": [0, 0, 10, 4], "rotation": 90, "texture": "#0"}
}
},
{
"from": [5, 5, 5],
"to": [11, 11, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [13, 13, 13]},
"faces": {
"north": {"uv": [0, 4, 6, 10], "texture": "#0"},
"east": {"uv": [0, 4, 6, 10], "texture": "#0"},
"south": {"uv": [0, 4, 6, 10], "texture": "#0"},
"west": {"uv": [0, 4, 6, 10], "texture": "#0"},
"up": {"uv": [0, 4, 6, 10], "texture": "#0"},
"down": {"uv": [0, 4, 6, 10], "texture": "#0"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [90, 0, 0],
"translation": [0, 1.75, 0],
"scale": [0.5, 0.5, 0.5]
},
"thirdperson_lefthand": {
"rotation": [90, 0, 0],
"translation": [0, 1.75, 0],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_righthand": {
"rotation": [45, 0, 0],
"translation": [0, 0.25, 2.25],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_lefthand": {
"rotation": [45, 0, 0],
"translation": [0, 0.25, 2.25],
"scale": [0.5, 0.5, 0.5]
},
"ground": {
"translation": [0, -2, 0],
"scale": [0.5, 0.5, 0.5]
},
"gui": {
"rotation": [30, -45, 0]
},
"fixed": {
"rotation": [0, 90, 0]
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 277 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 211 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 B

View file

Before

Width:  |  Height:  |  Size: 196 B

After

Width:  |  Height:  |  Size: 196 B

Before After
Before After

View file

@ -1,19 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "fsn:cable"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -1,19 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "fsn:crafting_terminal"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -1,19 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "fsn:export_cable"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -1,19 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "fsn:import_cable"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -1,19 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "fsn:master"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -1,19 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "fsn:processing_cable"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -1,19 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "fsn:processing_terminal"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -1,19 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "fsn:storage_cable"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -1,38 +1,36 @@
{
"schemaVersion": 1,
"id": "fsn",
"id": "storagenetworks",
"version": "${version}",
"name": "Fabric Storage Networks",
"description": "Storage Networks for Fabric, 100% original idea.",
"description": "Clone of Storage Networks for Fabric Loader",
"authors": [
"deirn"
],
"contributors": [],
"contact": {
"sources": "https://github.com/badasintended/fsn"
"homepage": "https://gitlab.com/intended/fabric/fsn",
"sources": "https://gitlab.com/intended/fabric/fsn"
},
"license": "MIT",
"icon": "assets/fsn/icon.png",
"icon": "assets/storagenetworks/icon.png",
"environment": "*",
"entrypoints": {
"main": [
"bai.deirn.fsn.FSN"
"io.gitlab.intended.storagenetworks.StorageNetworks"
],
"client": [
"io.gitlab.intended.storagenetworks.client.StorageNetworksClient"
],
"modmenu": [
"bai.deirn.fsn.config.ModMenuIntegration"
"io.gitlab.intended.storagenetworks.client.modmenu.ModMenuIntegration"
]
},
"mixins": [
"storagenetworks.mixins.json"
],
"depends": {
"fabricloader": ">=0.7.4",
"fabric": "*",
"minecraft": "1.15.x"
},
"suggests": {
"flamingo": "*"
"fabricloader": ">=0.4.0",
"fabric": "*"
}
}

View file

@ -1,14 +0,0 @@
{
"required": true,
"minVersion": "0.8",
"package": "bai.deirn.fsn.mixin",
"compatibilityLevel": "JAVA_8",
"mixins": [
],
"client": [
"MixinInventory"
],
"injectors": {
"defaultRequire": 1
}
}

View file

@ -0,0 +1,11 @@
{
"required": true,
"package": "io.gitlab.intended.storagenetworks.mixin",
"compatibilityLevel": "JAVA_8",
"mixins": [],
"client": [],
"server": [],
"injectors": {
"defaultRequire": 1
}
}