-
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
e7076ca
commit 9da4dde
Showing
8 changed files
with
311 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
78 changes: 78 additions & 0 deletions
78
loader-fabric/src/main/java/org/cyclops/structuredcrafting/StructuredCraftingFabric.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)); | ||
} | ||
} |
96 changes: 96 additions & 0 deletions
96
.../java/org/cyclops/structuredcrafting/craft/provider/InventoryItemStackProviderFabric.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} |
36 changes: 36 additions & 0 deletions
36
...main/java/org/cyclops/structuredcrafting/craft/provider/WorldItemStackProviderFabric.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
|
||
} |
23 changes: 23 additions & 0 deletions
23
loader-fabric/src/main/java/org/cyclops/structuredcrafting/proxy/ClientProxyFabric.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
} |
19 changes: 19 additions & 0 deletions
19
loader-fabric/src/main/java/org/cyclops/structuredcrafting/proxy/CommonProxyFabric.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
|
||
} |
26 changes: 26 additions & 0 deletions
26
loader-fabric/src/main/resources/data/structuredcrafting/recipe/structured_crafter.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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}" | ||
} | ||
} |