add sawmill factories

This commit is contained in:
maggi373 committed 2026-09-19 15:16:54 +02:00
1 parent ac1b9210ae
commit c0da7b1bd3
63 files changed
+328 -6

No files matched your search

+2 -2
View File
@@ -97,7 +97,7 @@ task coreJar(type: Jar) {
}
from zipTree(jar.outputs.getFiles().getSingleFile()).matching {
exclude 'mekanism/tools/**', 'mekanism/generators/**', 'mekanism/defense/**', 'defense/**', 'assets/defense/**', 'mcmod.info', 'mekanism/ultimate/**', 'assets/mekanism/gui/factory/GuiUltimateFactory.png', 'assets/mekanism/textures/blocks/factory/ultimate/**'
exclude 'mekanism/tools/**', 'mekanism/generators/**', 'mekanism/defense/**', 'defense/**', 'assets/defense/**', 'mcmod.info', 'mekanism/ultimate/**'
}
}
@@ -166,7 +166,7 @@ task ultimateJar(type: Jar) {
}
from zipTree(jar.outputs.getFiles().getSingleFile()).matching {
include 'mekanism/ultimate/**', 'assets/mekanism/gui/factory/GuiUltimateFactory.png', 'assets/mekanism/textures/blocks/factory/ultimate/**'
include 'mekanism/ultimate/**'
exclude 'mcmod.info'
}
}
@@ -206,6 +206,7 @@ public class MekanismConfig
public static double factoryUsageMultiplier = 1D;
public static int factoryEnergyStorageTicks = 400;
public static boolean enableFactoryRecipes = true;
public static boolean sawmillFactoriesEnabled = true;
}
public static class recipes
@@ -817,6 +817,10 @@ public class Mekanism
//Factory recipes
if (MekanismConfig.recipes.enableFactories) {
for (RecipeType type : RecipeType.values()) {
if (type == RecipeType.SAWING) {
continue;
}
MachineType.BASIC_FACTORY.addRecipe(new ShapedMekanismRecipe(MekanismUtils.getFactory(FactoryTier.BASIC, type), new Object[]{
"RCR", "iOi", "RCR", Character.valueOf('R'), "alloyBasic", Character.valueOf('C'), MekanismUtils.getControlCircuit(BaseTier.BASIC), Character.valueOf('i'), "ingotIron", Character.valueOf('O'), type.getStack()
}));
@@ -3,6 +3,7 @@ package mekanism.common.base;
import mekanism.api.gas.Gas;
import mekanism.api.gas.GasStack;
import mekanism.api.util.StackUtils;
import mekanism.api.MekanismConfig.ultimate;
import mekanism.common.InfuseStorage;
import mekanism.common.block.BlockMachine.MachineType;
import mekanism.common.recipe.RecipeHandler;
@@ -12,6 +13,7 @@ import mekanism.common.recipe.inputs.InfusionInput;
import mekanism.common.recipe.inputs.ItemStackInput;
import mekanism.common.recipe.machines.AdvancedMachineRecipe;
import mekanism.common.recipe.machines.BasicMachineRecipe;
import mekanism.common.recipe.machines.ChanceMachineRecipe;
import mekanism.common.recipe.machines.MachineRecipe;
import mekanism.common.recipe.machines.MetallurgicInfuserRecipe;
import mekanism.common.tile.TileEntityAdvancedElectricMachine;
@@ -20,6 +22,7 @@ import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.util.ForgeDirection;
import cpw.mods.fml.common.Loader;
import java.util.Map;
@@ -53,7 +56,8 @@ public interface IFactory
COMBINING("Combining", "combiner", MachineType.COMBINER.getStack(), true, false, Recipe.COMBINER),
PURIFYING("Purifying", "purifier", MachineType.PURIFICATION_CHAMBER.getStack(), true, true, Recipe.PURIFICATION_CHAMBER),
INJECTING("Injecting", "injection", MachineType.CHEMICAL_INJECTION_CHAMBER.getStack(), true, true, Recipe.CHEMICAL_INJECTION_CHAMBER),
INFUSING("Infusing", "metalinfuser", MachineType.METALLURGIC_INFUSER.getStack(), false, false, Recipe.METALLURGIC_INFUSER);
INFUSING("Infusing", "metalinfuser", MachineType.METALLURGIC_INFUSER.getStack(), false, false, Recipe.METALLURGIC_INFUSER),
SAWING("Sawing", "sawmill", MachineType.PRECISION_SAWMILL.getStack(), false, false, Recipe.PRECISION_SAWMILL);
private String name;
private ResourceLocation sound;
@@ -82,6 +86,16 @@ public interface IFactory
{
return getRecipe(new AdvancedMachineInput(input, gas));
}
public ChanceMachineRecipe getChanceRecipe(ItemStackInput input)
{
return RecipeHandler.getChanceRecipe(input, recipe.get());
}
public ChanceMachineRecipe getChanceRecipe(ItemStack input)
{
return getChanceRecipe(new ItemStackInput(input));
}
public MetallurgicInfuserRecipe getRecipe(InfusionInput input)
{
@@ -99,6 +113,10 @@ public interface IFactory
{
return getRecipe(slotStack, gasType);
}
else if(this == SAWING)
{
return getChanceRecipe(slotStack);
}
else if(this == INFUSING)
{
if(infuse.type != null)
@@ -242,6 +260,16 @@ public interface IFactory
{
return fuelSpeed;
}
public boolean isChance()
{
return this == SAWING;
}
public boolean isEnabled()
{
return this != SAWING || Loader.isModLoaded("MekanismUltimate") && ultimate.sawmillFactoriesEnabled;
}
public static RecipeType getFromMachine(Block block, int meta)
{
@@ -521,6 +521,11 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IBlo
case ELITE_FACTORY:
for(RecipeType recipe : RecipeType.values())
{
if(recipe == RecipeType.SAWING && !recipe.isEnabled())
{
continue;
}
ItemStack stack = new ItemStack(item, 1, type.meta);
((IFactory)stack.getItem()).setRecipeType(recipe.ordinal(), stack);
list.add(stack);
@@ -355,6 +355,7 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, ISpec
factory.recipeType = recipeType;
factory.upgradeComponent.setSupported(Upgrade.GAS, recipeType.fuelEnergyUpgrades());
factory.secondaryEnergyPerTick = factory.getSecondaryEnergyPerTick(recipeType);
factory.updateOutputSlots();
world.notifyBlocksOfNeighborChange(x, y, z, tileEntity.getBlockType());
}
@@ -51,6 +51,7 @@ import mekanism.common.recipe.RecipeHandler;
import mekanism.common.recipe.inputs.InfusionInput;
import mekanism.common.recipe.machines.AdvancedMachineRecipe;
import mekanism.common.recipe.machines.BasicMachineRecipe;
import mekanism.common.recipe.machines.ChanceMachineRecipe;
import mekanism.common.recipe.machines.MetallurgicInfuserRecipe;
import mekanism.common.security.ISecurityTile;
import mekanism.common.tile.component.TileComponentConfig;
@@ -226,6 +227,7 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I
factory.ejectorComponent.setOutputData(TransmissionType.ITEM, factory.configComponent.getOutputs(TransmissionType.ITEM).get(2));
factory.recipeType = recipeType;
factory.upgradeComponent.setSupported(Upgrade.GAS, recipeType.fuelEnergyUpgrades());
factory.updateOutputSlots();
factory.securityComponent.readFrom(securityComponent);
for (int i = 0; i < tier.processes + 5; i++) {
@@ -282,7 +284,7 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I
if (inventory[2] != null && inventory[3] == null) {
RecipeType toSet = null;
for (RecipeType type : RecipeType.values()) {
if (inventory[2].isItemEqual(type.getStack())) {
if ((type != RecipeType.SAWING || type.isEnabled()) && inventory[2].isItemEqual(type.getStack())) {
toSet = type;
break;
}
@@ -304,6 +306,7 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I
recipeType = toSet;
gasTank.setGas(null);
secondaryEnergyPerTick = getSecondaryEnergyPerTick(recipeType);
updateOutputSlots();
worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, getBlockType());
MekanismUtils.saveChunk(this);
@@ -428,6 +431,19 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I
return MekanismUtils.getSecondaryEnergyPerTickMean(this, type.getSecondaryEnergyPerTick());
}
public void updateOutputSlots() {
if (configComponent != null) {
int[] outputSlots = new int[tier.processes + (recipeType.isChance() ? 1 : 0)];
for (int process = 0; process < tier.processes; process++) {
outputSlots[process] = getOutputSlot(process);
}
if (recipeType.isChance()) {
outputSlots[outputSlots.length - 1] = 4;
}
configComponent.getOutputs(TransmissionType.ITEM).get(2).availableSlots = outputSlots;
}
}
public void handleSecondaryFuel() {
if (inventory[4] != null) {
if (recipeType.usesFuel() && gasTank.getNeeded() > 0) {
@@ -482,6 +498,8 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I
return ChargeUtils.canBeOutputted(itemstack, false);
} else if (slotID >= getOutputSlot(0) && slotID < getOutputSlot(0) + tier.processes) {
return true;
} else if (recipeType.isChance() && slotID == 4) {
return true;
}
return false;
}
@@ -534,6 +552,11 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I
return recipe == null ? false : recipe.canOperate(inventory, inputSlot, outputSlot, gasTank, secondaryEnergyThisTick);
}
if (recipeType.isChance()) {
ChanceMachineRecipe<?> recipe = recipeType.getChanceRecipe(inventory[inputSlot]);
return recipe != null && recipe.canOperate(inventory, inputSlot, outputSlot, 4);
}
if (recipeType == RecipeType.INFUSING) {
MetallurgicInfuserRecipe recipe = RecipeHandler.getMetallurgicInfuserRecipe(new InfusionInput(infuseStored, inventory[inputSlot]));
return recipe == null ? false : recipe.canOperate(inventory, inputSlot, outputSlot, infuseStored);
@@ -548,6 +571,12 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I
AdvancedMachineRecipe<?> recipe = recipeType.getRecipe(inventory[inputSlot], gasTank.getGasType());
recipe.operate(inventory, inputSlot, outputSlot, gasTank, secondaryEnergyThisTick);
} else if (recipeType.isChance()) {
ChanceMachineRecipe<?> recipe = recipeType.getChanceRecipe(inventory[inputSlot]);
if (recipe.getInput().useItemStackFromInventory(inventory, inputSlot, true)) {
recipe.getOutput().applyOutputs(inventory, outputSlot, 4, true);
}
} else if (recipeType == RecipeType.INFUSING) {
MetallurgicInfuserRecipe recipe = RecipeHandler.getMetallurgicInfuserRecipe(new InfusionInput(infuseStored, inventory[inputSlot]));
recipe.output(inventory, inputSlot, outputSlot, infuseStored);
@@ -586,6 +615,7 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I
if (recipeType != oldRecipe) {
secondaryEnergyPerTick = getSecondaryEnergyPerTick(recipeType);
}
updateOutputSlots();
recipeTicks = dataStream.readInt();
controlType = RedstoneControl.values()[dataStream.readInt()];
@@ -631,6 +661,7 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I
if (recipeType != oldRecipe) {
secondaryEnergyPerTick = getSecondaryEnergyPerTick(recipeType);
}
updateOutputSlots();
recipeTicks = nbtTags.getInteger("recipeTicks");
controlType = RedstoneControl.values()[nbtTags.getInteger("controlType")];
@@ -3,6 +3,12 @@ package mekanism.common.tile;
import java.util.Map;
import mekanism.api.MekanismConfig.usage;
import mekanism.api.transmitters.TransmissionType;
import mekanism.common.MekanismBlocks;
import mekanism.common.Tier.BaseTier;
import mekanism.common.Upgrade;
import mekanism.common.base.IFactory.RecipeType;
import mekanism.common.base.ITierUpgradeable;
import mekanism.common.block.BlockMachine.MachineType;
import mekanism.common.recipe.RecipeHandler.Recipe;
import mekanism.common.recipe.inputs.ItemStackInput;
@@ -12,7 +18,7 @@ import mekanism.common.util.MekanismUtils.ResourceType;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class TileEntityPrecisionSawmill extends TileEntityChanceMachine<SawmillRecipe>
public class TileEntityPrecisionSawmill extends TileEntityChanceMachine<SawmillRecipe> implements ITierUpgradeable
{
public TileEntityPrecisionSawmill()
{
@@ -25,6 +31,64 @@ public class TileEntityPrecisionSawmill extends TileEntityChanceMachine<SawmillR
return Recipe.PRECISION_SAWMILL.get();
}
@Override
public boolean upgrade(BaseTier upgradeTier)
{
if(upgradeTier != BaseTier.BASIC || !RecipeType.SAWING.isEnabled())
{
return false;
}
worldObj.setBlockToAir(xCoord, yCoord, zCoord);
worldObj.setBlock(xCoord, yCoord, zCoord, MekanismBlocks.MachineBlock, 5, 3);
TileEntityFactory factory = (TileEntityFactory)worldObj.getTileEntity(xCoord, yCoord, zCoord);
factory.facing = facing;
factory.clientFacing = clientFacing;
factory.ticker = ticker;
factory.redstone = redstone;
factory.redstoneLastTick = redstoneLastTick;
factory.doAutoSync = doAutoSync;
factory.electricityStored = electricityStored;
factory.soundURL = soundURL;
factory.progress[0] = operatingTicks;
factory.clientActive = clientActive;
factory.isActive = isActive;
factory.updateDelay = updateDelay;
factory.controlType = controlType;
factory.prevEnergy = prevEnergy;
factory.upgradeComponent.readFrom(upgradeComponent);
factory.upgradeComponent.setUpgradeSlot(0);
factory.ejectorComponent.readFrom(ejectorComponent);
factory.recipeType = RecipeType.SAWING;
factory.upgradeComponent.setSupported(Upgrade.GAS, false);
factory.secondaryEnergyPerTick = factory.getSecondaryEnergyPerTick(RecipeType.SAWING);
factory.updateOutputSlots();
factory.ejectorComponent.setOutputData(TransmissionType.ITEM, factory.configComponent.getOutputs(TransmissionType.ITEM).get(2));
factory.securityComponent.readFrom(securityComponent);
for(TransmissionType transmission : configComponent.transmissions)
{
factory.configComponent.setConfig(transmission, configComponent.getConfig(transmission));
factory.configComponent.setEjecting(transmission, configComponent.isEjecting(transmission));
}
factory.inventory[5] = inventory[0];
factory.inventory[1] = inventory[1];
factory.inventory[8] = inventory[2];
factory.inventory[0] = inventory[3];
factory.inventory[4] = inventory[4];
for(Upgrade upgrade : factory.upgradeComponent.getSupportedTypes())
{
factory.recalculateUpgradables(upgrade);
}
factory.upgraded = true;
factory.markDirty();
return true;
}
@Override
@SideOnly(Side.CLIENT)
public float getVolume()
@@ -8,11 +8,13 @@ import java.io.IOException;
import mekanism.api.MekanismConfig;
import mekanism.api.MekanismConfig.ultimate;
import mekanism.common.Mekanism;
import mekanism.common.Resource;
import mekanism.common.Tier.BaseTier;
import mekanism.common.Tier.FactoryTier;
import mekanism.common.Version;
import mekanism.common.base.IFactory.RecipeType;
import mekanism.common.base.IModule;
import mekanism.common.block.BlockMachine.MachineType;
import mekanism.common.recipe.ShapedMekanismRecipe;
import mekanism.common.util.MekanismUtils;
import mekanism.ultimate.common.item.ItemBlockUltimateFactory;
@@ -64,13 +66,49 @@ public class MekanismUltimate implements IModule
private void addRecipes()
{
if (!MekanismConfig.recipes.enableFactories || !ultimate.factoryEnabled || !ultimate.enableFactoryRecipes)
if (!MekanismConfig.recipes.enableFactories)
{
return;
}
if (RecipeType.SAWING.isEnabled() && UltimateConfig.enableSawmillFactoryRecipes)
{
RecipeType type = RecipeType.SAWING;
MachineType.BASIC_FACTORY.addRecipe(new ShapedMekanismRecipe(MekanismUtils.getFactory(FactoryTier.BASIC, type), new Object[] {
"RCR", "iOi", "RCR",
Character.valueOf('R'), "alloyBasic",
Character.valueOf('C'), MekanismUtils.getControlCircuit(BaseTier.BASIC),
Character.valueOf('i'), "ingotIron",
Character.valueOf('O'), type.getStack()
}));
MachineType.ADVANCED_FACTORY.addRecipe(new ShapedMekanismRecipe(MekanismUtils.getFactory(FactoryTier.ADVANCED, type), new Object[] {
"ECE", "oOo", "ECE",
Character.valueOf('E'), "alloyAdvanced",
Character.valueOf('C'), MekanismUtils.getControlCircuit(BaseTier.ADVANCED),
Character.valueOf('o'), "ingot" + Resource.OSMIUM.getOredictName(),
Character.valueOf('O'), MekanismUtils.getFactory(FactoryTier.BASIC, type)
}));
MachineType.ELITE_FACTORY.addRecipe(new ShapedMekanismRecipe(MekanismUtils.getFactory(FactoryTier.ELITE, type), new Object[] {
"RCR", "gOg", "RCR",
Character.valueOf('R'), "alloyElite",
Character.valueOf('C'), MekanismUtils.getControlCircuit(BaseTier.ELITE),
Character.valueOf('g'), "ingotGold",
Character.valueOf('O'), MekanismUtils.getFactory(FactoryTier.ADVANCED, type)
}));
}
if (!ultimate.factoryEnabled || !ultimate.enableFactoryRecipes)
{
return;
}
for (RecipeType type : RecipeType.values())
{
if (type == RecipeType.SAWING && (!type.isEnabled() || !UltimateConfig.enableSawmillFactoryRecipes))
{
continue;
}
ItemStack result = MekanismUtils.getFactory(FactoryTier.ULTIMATE, type);
ItemStack eliteFactory = MekanismUtils.getFactory(FactoryTier.ELITE, type);
CraftingManager.getInstance().getRecipeList().add(new ShapedMekanismRecipe(result, new Object[] {
@@ -103,6 +141,8 @@ public class MekanismUltimate implements IModule
dataStream.writeDouble(ultimate.factoryUsageMultiplier);
dataStream.writeInt(ultimate.factoryEnergyStorageTicks);
dataStream.writeBoolean(ultimate.enableFactoryRecipes);
dataStream.writeBoolean(ultimate.sawmillFactoriesEnabled);
dataStream.writeBoolean(UltimateConfig.enableSawmillFactoryRecipes);
}
@Override
@@ -113,6 +153,8 @@ public class MekanismUltimate implements IModule
ultimate.factoryUsageMultiplier = dataStream.readDouble();
ultimate.factoryEnergyStorageTicks = dataStream.readInt();
ultimate.enableFactoryRecipes = dataStream.readBoolean();
ultimate.sawmillFactoriesEnabled = dataStream.readBoolean();
UltimateConfig.enableSawmillFactoryRecipes = dataStream.readBoolean();
}
@Override
@@ -23,6 +23,10 @@ public class UltimateCommonProxy implements IGuiHandler
"Number of ticks of full nine-process base usage that an Ultimate Factory can store.", 1, Integer.MAX_VALUE).getInt();
ultimate.enableFactoryRecipes = MekanismUltimate.configuration.get("recipes", "EnableUltimateFactoryRecipes", true,
"Enable crafting recipes for all Ultimate Factory variants.").getBoolean();
ultimate.sawmillFactoriesEnabled = MekanismUltimate.configuration.get("machines", "SawingFactoriesEnabled", true,
"Enable the backported Basic, Advanced, Elite, and Ultimate Sawing Factories. Existing placed factories remain usable when disabled.").setRequiresMcRestart(true).getBoolean();
UltimateConfig.enableSawmillFactoryRecipes = MekanismUltimate.configuration.get("recipes", "EnableSawingFactoryRecipes", true,
"Enable crafting recipes for all Sawing Factory tiers.").setRequiresMcRestart(true).getBoolean();
if (MekanismUltimate.configuration.hasChanged())
{
@@ -6,6 +6,8 @@ import mekanism.common.Tier.FactoryTier;
public final class UltimateConfig
{
public static boolean enableSawmillFactoryRecipes = true;
private UltimateConfig()
{
}
@@ -100,6 +100,11 @@ public class BlockUltimateFactory extends BlockMachine
for (RecipeType type : RecipeType.values())
{
if (type == RecipeType.SAWING && !type.isEnabled())
{
continue;
}
ItemStack stack = new ItemStack(item);
((IFactory)stack.getItem()).setRecipeType(type.ordinal(), stack);
list.add(stack);
@@ -633,6 +633,7 @@ gui.factory.Combining=Combining
gui.factory.Purifying=Purifying
gui.factory.Injecting=Injecting
gui.factory.Infusing=Infusing
gui.factory.Sawing=Sawing
gui.seismicReader.short=S. Reader
gui.seismicReader.solids=Solids
Binary file not shown.

After

Width:  |  Height:  |  Size: 884 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -0,0 +1,10 @@
{
"animation": {
"frametime": 1,
"frames": [
0,
1,
2
]
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 761 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 978 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 832 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,10 @@
{
"animation": {
"frametime": 1,
"frames": [
0,
1,
2
]
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 832 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,10 @@
{
"animation": {
"frametime": 1,
"frames": [
0,
1,
2
]
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 615 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

@@ -0,0 +1,11 @@
{
"animation": {
"frametime": 1,
"frames": [
0,
1,
2,
3
]
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 891 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -0,0 +1,10 @@
{
"animation": {
"frametime": 1,
"frames": [
0,
1,
2
]
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 762 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 974 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 845 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -0,0 +1,5 @@
{
"animation": {
"frametime": 1
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 845 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -0,0 +1,5 @@
{
"animation": {
"frametime": 1
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 629 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

@@ -0,0 +1,11 @@
{
"animation": {
"frametime": 1,
"frames": [
0,
1,
2,
3
]
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 870 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,10 @@
{
"animation": {
"frametime": 1,
"frames": [
0,
1,
2
]
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 766 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 989 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 834 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,10 @@
{
"animation": {
"frametime": 1,
"frames": [
0,
1,
2
]
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 834 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,10 @@
{
"animation": {
"frametime": 1,
"frames": [
0,
1,
2
]
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 615 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

@@ -0,0 +1,11 @@
{
"animation": {
"frametime": 1,
"frames": [
0,
1,
2,
3
]
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1015 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,10 @@
{
"animation": {
"frametime": 1,
"frames": [
0,
1,
2
]
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 934 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 694 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

@@ -0,0 +1,11 @@
{
"animation": {
"frametime": 1,
"frames": [
0,
1,
2,
3
]
}
}