Skip to content

Commit

Permalink
Port to Fabric
Browse files Browse the repository at this point in the history
  • Loading branch information
rubensworks committed Sep 4, 2024
1 parent e7076ca commit 9da4dde
Show file tree
Hide file tree
Showing 8 changed files with 311 additions and 1 deletion.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,4 @@ org.gradle.daemon=false
org.gradle.caching=true

# Common dependencies
cyclopscore_version=1.21.0-585
cyclopscore_version=1.21.1-593
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package org.cyclops.structuredcrafting;

import net.fabricmc.api.ModInitializer;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
import org.cyclops.cyclopscore.config.ConfigHandlerCommon;
import org.cyclops.cyclopscore.init.ModBaseFabric;
import org.cyclops.cyclopscore.proxy.IClientProxyCommon;
import org.cyclops.cyclopscore.proxy.ICommonProxyCommon;
import org.cyclops.structuredcrafting.block.BlockStructuredCrafterConfig;
import org.cyclops.structuredcrafting.blockentity.BlockEntityStructuredCrafterConfig;
import org.cyclops.structuredcrafting.craft.provider.IItemStackProviderRegistry;
import org.cyclops.structuredcrafting.craft.provider.InventoryItemStackProviderFabric;
import org.cyclops.structuredcrafting.craft.provider.ItemStackProviderRegistry;
import org.cyclops.structuredcrafting.craft.provider.WorldItemStackProviderFabric;
import org.cyclops.structuredcrafting.proxy.ClientProxyFabric;
import org.cyclops.structuredcrafting.proxy.CommonProxyFabric;

/**
* The main mod class of this mod.
* @author rubensworks
*/
public class StructuredCraftingFabric extends ModBaseFabric<StructuredCraftingFabric> implements ModInitializer, IStructuredCraftingMod {

/**
* The unique instance of this mod.
*/
public static StructuredCraftingFabric _instance;

public StructuredCraftingFabric() {
super(Reference.MOD_ID, (instance) -> {
_instance = instance;
IStructuredCraftingMod.MOD.set(instance);
});
}

@Override
protected IClientProxyCommon constructClientProxy() {
return new ClientProxyFabric();
}

@Override
protected ICommonProxyCommon constructCommonProxy() {
return new CommonProxyFabric();
}

@Override
protected boolean hasDefaultCreativeModeTab() {
return true;
}

@Override
protected CreativeModeTab.Builder constructDefaultCreativeModeTab(CreativeModeTab.Builder builder) {
return super.constructDefaultCreativeModeTab(builder)
.icon(() -> new ItemStack(RegistryEntries.ITEM_STRUCTURED_CRAFTER));
}

@Override
public void onInitialize() {
getRegistryManager().addRegistry(IItemStackProviderRegistry.class, new ItemStackProviderRegistry());

super.onInitialize();

IItemStackProviderRegistry registry = getRegistryManager().getRegistry(IItemStackProviderRegistry.class);
registry.registerProvider(new InventoryItemStackProviderFabric());
registry.registerProvider(new WorldItemStackProviderFabric());
}

@Override
protected void onConfigsRegister(ConfigHandlerCommon configHandler) {
super.onConfigsRegister(configHandler);

configHandler.addConfigurable(new GeneralConfig(this));

configHandler.addConfigurable(new BlockStructuredCrafterConfig<>(this));
configHandler.addConfigurable(new BlockEntityStructuredCrafterConfig<>(this));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package org.cyclops.structuredcrafting.craft.provider;

import net.fabricmc.fabric.api.transfer.v1.item.ItemStorage;
import net.fabricmc.fabric.api.transfer.v1.item.ItemVariant;
import net.fabricmc.fabric.api.transfer.v1.storage.Storage;
import net.fabricmc.fabric.api.transfer.v1.storage.StorageView;
import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import org.cyclops.structuredcrafting.block.BlockStructuredCrafterConfig;

import java.util.Iterator;

/**
* Inventory that can provide itemstacks.
* @author rubensworks
*/
public class InventoryItemStackProviderFabric implements IItemStackProvider {

@Override
public boolean canProvideInput() {
return BlockStructuredCrafterConfig.canTakeInputsFromInventory;
}

@Override
public boolean canHandleOutput() {
return BlockStructuredCrafterConfig.canPlaceOutputsIntoInventory;
}

@Override
public boolean isValidForResults(Level world, BlockPos pos, Direction side) {
return ItemStorage.SIDED.find(world, pos, side) != null;
}

@Override
public boolean hasItemStack(Level world, BlockPos pos, Direction side) {
return ItemStorage.SIDED.find(world, pos, side) != null;
}

@Override
public ItemStack getItemStack(Level world, BlockPos pos, Direction side) {
Storage<ItemVariant> storage = ItemStorage.SIDED.find(world, pos, side);
if (storage != null) {
Iterator<StorageView<ItemVariant>> it = storage.nonEmptyIterator();
if (it.hasNext()) {
return it.next().getResource().toStack();
}
}
return ItemStack.EMPTY;
}

@Override
public boolean reduceItemStack(Level world, BlockPos pos, Direction side, boolean simulate) {
Storage<ItemVariant> storage = ItemStorage.SIDED.find(world, pos, side);
if (storage != null) {
Iterator<StorageView<ItemVariant>> it = storage.nonEmptyIterator();
if (it.hasNext()) {
ItemStack firstStack = it.next().getResource().toStack();
try (Transaction tx = Transaction.openOuter()) {
long extracted = storage.extract(ItemVariant.of(firstStack), 1, tx);
if (simulate) {
tx.abort();
} else {
tx.commit();
}
return extracted > 0;
}
}
}
return false;
}

@Override
public boolean addItemStack(Level world, BlockPos pos, Direction side, ItemStack itemStack, boolean simulate) {
Storage<ItemVariant> storage = ItemStorage.SIDED.find(world, pos, side);
if (storage != null) {
try (Transaction tx = Transaction.openOuter()) {
long inserted = storage.insert(ItemVariant.of(itemStack), 1, tx);
if (simulate) {
tx.abort();
} else {
tx.commit();
}
return inserted > 0;
}
}
return false;
}

@Override
public boolean setItemStack(Level world, BlockPos pos, Direction side, ItemStack itemStack, boolean simulate) {
return addItemStack(world, pos, side, itemStack, simulate);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package org.cyclops.structuredcrafting.craft.provider;

import net.fabricmc.fabric.api.transfer.v1.item.ItemStorage;
import net.fabricmc.fabric.api.transfer.v1.item.ItemVariant;
import net.fabricmc.fabric.api.transfer.v1.storage.Storage;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;

/**
* World that can provide an itemstack.
* @author rubensworks
*/
public class WorldItemStackProviderFabric extends WorldItemStackProviderBase {

@Override
protected boolean hasEmptyItemHandler(Level world, BlockPos pos, Direction side) {
Storage<ItemVariant> itemHandler = ItemStorage.SIDED.find(world, pos, side);
if (itemHandler != null) {
return !itemHandler.nonEmptyIterator().hasNext();
}
return true;
}

@Override
public ItemStack getItemStack(Level world, BlockPos pos, Direction side) {
BlockState blockState = world.getBlockState(pos);
if(blockState != null && hasEmptyItemHandler(world, pos, side)) {
return blockState.getBlock().getCloneItemStack(world, pos, blockState);
}
return ItemStack.EMPTY;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.cyclops.structuredcrafting.proxy;

import org.cyclops.cyclopscore.init.ModBaseFabric;
import org.cyclops.cyclopscore.proxy.ClientProxyComponentFabric;
import org.cyclops.structuredcrafting.StructuredCraftingFabric;

/**
* Proxy for the client side.
*
* @author rubensworks
*
*/
public class ClientProxyFabric extends ClientProxyComponentFabric {

public ClientProxyFabric() {
super(new CommonProxyFabric());
}

@Override
public ModBaseFabric<?> getMod() {
return StructuredCraftingFabric._instance;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package org.cyclops.structuredcrafting.proxy;

import org.cyclops.cyclopscore.init.ModBaseFabric;
import org.cyclops.cyclopscore.proxy.CommonProxyComponentFabric;
import org.cyclops.structuredcrafting.StructuredCraftingFabric;

/**
* Proxy for server and client side.
* @author rubensworks
*
*/
public class CommonProxyFabric extends CommonProxyComponentFabric {

@Override
public ModBaseFabric<?> getMod() {
return StructuredCraftingFabric._instance;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"type": "minecraft:crafting_shaped",
"category": "redstone",
"pattern": [
"SCS",
"IRI",
"SCS"
],
"key": {
"S": {
"item": "minecraft:stick"
},
"C": {
"tag": "forge:cobblestone"
},
"I": {
"tag": "forge:ingots/iron"
},
"R": {
"item": "minecraft:crafting_table"
}
},
"result": {
"id": "structuredcrafting:structured_crafter"
}
}
32 changes: 32 additions & 0 deletions loader-fabric/src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"schemaVersion": 1,
"id": "${mod_id}",
"version": "${mod_version}",

"name": "${mod_name}",
"description": "${description}",
"authors": [
"${mod_author}"
],
"contact": {
"homepage": "${display_url}",
"sources": "${issue_tracker_url}"
},

"license": "${license}",
"icon": "logo.png",

"environment": "*",
"entrypoints": {
"main": [
"org.cyclops.structuredcrafting.StructuredCraftingFabric"
]
},

"depends": {
"cyclopscore": ">=${cyclopscore_version_semver}",
"fabricloader": ">=${fabric_loader_version}",
"fabric-api": ">=${fabric_version}",
"java": ">=${java_version}"
}
}

0 comments on commit 9da4dde

Please sign in to comment.