Added Funky Locomotion integration, fixes #1336
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
# Refined Storage Changelog
|
# Refined Storage Changelog
|
||||||
|
|
||||||
|
### 1.5.26
|
||||||
|
- Added Funky Locomotion integration (raoulvdberge)
|
||||||
|
|
||||||
### 1.5.25
|
### 1.5.25
|
||||||
- Fixed not being able to autocraft different Storage Drawers' wood drawers (raoulvdberge)
|
- Fixed not being able to autocraft different Storage Drawers' wood drawers (raoulvdberge)
|
||||||
- Fixed not being able to autocraft certain Modular Routers items (raoulvdberge)
|
- Fixed not being able to autocraft certain Modular Routers items (raoulvdberge)
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor,
|
|||||||
|
|
||||||
private EnumFacing direction;
|
private EnumFacing direction;
|
||||||
|
|
||||||
|
private boolean throttlingDisabled;
|
||||||
private boolean couldUpdate;
|
private boolean couldUpdate;
|
||||||
private int ticksSinceUpdateChanged;
|
private int ticksSinceUpdateChanged;
|
||||||
|
|
||||||
@@ -104,6 +105,10 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor,
|
|||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setThrottlingDisabled() {
|
||||||
|
throttlingDisabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
++ticks;
|
++ticks;
|
||||||
@@ -113,9 +118,10 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor,
|
|||||||
if (couldUpdate != canUpdate) {
|
if (couldUpdate != canUpdate) {
|
||||||
++ticksSinceUpdateChanged;
|
++ticksSinceUpdateChanged;
|
||||||
|
|
||||||
if (canUpdate ? (ticksSinceUpdateChanged > getUpdateThrottleInactiveToActive()) : (ticksSinceUpdateChanged > getUpdateThrottleActiveToInactive())) {
|
if ((canUpdate ? (ticksSinceUpdateChanged > getUpdateThrottleInactiveToActive()) : (ticksSinceUpdateChanged > getUpdateThrottleActiveToInactive())) || throttlingDisabled) {
|
||||||
ticksSinceUpdateChanged = 0;
|
ticksSinceUpdateChanged = 0;
|
||||||
couldUpdate = canUpdate;
|
couldUpdate = canUpdate;
|
||||||
|
throttlingDisabled = false;
|
||||||
|
|
||||||
if (hasConnectivityState()) {
|
if (hasConnectivityState()) {
|
||||||
WorldUtils.updateBlock(world, pos);
|
WorldUtils.updateBlock(world, pos);
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import com.google.gson.JsonSyntaxException;
|
|||||||
import com.raoulvdberge.refinedstorage.RS;
|
import com.raoulvdberge.refinedstorage.RS;
|
||||||
import com.raoulvdberge.refinedstorage.RSBlocks;
|
import com.raoulvdberge.refinedstorage.RSBlocks;
|
||||||
import com.raoulvdberge.refinedstorage.RSItems;
|
import com.raoulvdberge.refinedstorage.RSItems;
|
||||||
|
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
|
||||||
|
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeManager;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.*;
|
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.*;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPreviewElementFluidStack;
|
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPreviewElementFluidStack;
|
||||||
@@ -20,6 +22,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriter
|
|||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterHandlerRedstone;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterHandlerRedstone;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.solderer.SoldererRecipeLoader;
|
import com.raoulvdberge.refinedstorage.apiimpl.solderer.SoldererRecipeLoader;
|
||||||
import com.raoulvdberge.refinedstorage.block.BlockBase;
|
import com.raoulvdberge.refinedstorage.block.BlockBase;
|
||||||
|
import com.raoulvdberge.refinedstorage.block.BlockNode;
|
||||||
import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy;
|
import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy;
|
||||||
import com.raoulvdberge.refinedstorage.gui.GuiHandler;
|
import com.raoulvdberge.refinedstorage.gui.GuiHandler;
|
||||||
import com.raoulvdberge.refinedstorage.integration.craftingtweaks.IntegrationCraftingTweaks;
|
import com.raoulvdberge.refinedstorage.integration.craftingtweaks.IntegrationCraftingTweaks;
|
||||||
@@ -37,7 +40,10 @@ import com.raoulvdberge.refinedstorage.tile.grid.WirelessGrid;
|
|||||||
import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGrid;
|
import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGrid;
|
||||||
import com.raoulvdberge.refinedstorage.tile.grid.portable.TilePortableGrid;
|
import com.raoulvdberge.refinedstorage.tile.grid.portable.TilePortableGrid;
|
||||||
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||||
|
import com.rwtema.funkylocomotion.api.FunkyRegistry;
|
||||||
|
import com.rwtema.funkylocomotion.api.IMoveFactory;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.enchantment.Enchantment;
|
import net.minecraft.enchantment.Enchantment;
|
||||||
import net.minecraft.enchantment.EnchantmentData;
|
import net.minecraft.enchantment.EnchantmentData;
|
||||||
import net.minecraft.init.Items;
|
import net.minecraft.init.Items;
|
||||||
@@ -45,8 +51,13 @@ import net.minecraft.item.Item;
|
|||||||
import net.minecraft.item.ItemEnchantedBook;
|
import net.minecraft.item.ItemEnchantedBook;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.item.crafting.Ingredient;
|
import net.minecraft.item.crafting.Ingredient;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.JsonUtils;
|
import net.minecraft.util.JsonUtils;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.common.crafting.CraftingHelper;
|
import net.minecraftforge.common.crafting.CraftingHelper;
|
||||||
import net.minecraftforge.common.crafting.IIngredientFactory;
|
import net.minecraftforge.common.crafting.IIngredientFactory;
|
||||||
@@ -264,7 +275,62 @@ public class ProxyCommon {
|
|||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void registerBlocks(RegistryEvent.Register<Block> e) {
|
public void registerBlocks(RegistryEvent.Register<Block> e) {
|
||||||
blocksToRegister.forEach(e.getRegistry()::register);
|
blocksToRegister.forEach(b -> {
|
||||||
|
if (b instanceof BlockNode && FunkyRegistry.INSTANCE != null) {
|
||||||
|
FunkyRegistry.INSTANCE.registerMoveFactoryBlock(b, new IMoveFactory() {
|
||||||
|
@Override
|
||||||
|
public NBTTagCompound destroyBlock(World world, BlockPos pos) {
|
||||||
|
INetworkNodeManager manager = API.instance().getNetworkNodeManager(world);
|
||||||
|
|
||||||
|
INetworkNode node = manager.getNode(pos);
|
||||||
|
|
||||||
|
TileNode tile = (TileNode) world.getTileEntity(pos);
|
||||||
|
|
||||||
|
NBTTagCompound tag = new NBTTagCompound();
|
||||||
|
|
||||||
|
tag.setInteger("Direction", tile.getDirection().ordinal());
|
||||||
|
tag.setTag("Node", node.write(new NBTTagCompound()));
|
||||||
|
tag.setString("NodeID", node.getId());
|
||||||
|
|
||||||
|
// Funky Locomotion requires this
|
||||||
|
IBlockState state = world.getBlockState(pos);
|
||||||
|
tag.setString("Block", Block.REGISTRY.getNameForObject(state.getBlock()).toString());
|
||||||
|
tag.setInteger("Meta", state.getBlock().getMetaFromState(state));
|
||||||
|
tag.setTag("Tile", tile.writeToNBT(new NBTTagCompound()));
|
||||||
|
|
||||||
|
manager.removeNode(pos); // Avoid inventory dropping
|
||||||
|
manager.markForSaving();
|
||||||
|
|
||||||
|
return tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public boolean recreateBlock(World world, BlockPos pos, NBTTagCompound tag) {
|
||||||
|
NetworkNode node = (NetworkNode) API.instance().getNetworkNodeRegistry().get(tag.getString("NodeID")).create(tag.getCompoundTag("Node"), world, pos);
|
||||||
|
node.setThrottlingDisabled();
|
||||||
|
|
||||||
|
INetworkNodeManager manager = API.instance().getNetworkNodeManager(world);
|
||||||
|
|
||||||
|
manager.setNode(pos, node);
|
||||||
|
manager.markForSaving();
|
||||||
|
|
||||||
|
Block block = Block.REGISTRY.getObject(new ResourceLocation(tag.getString("Block")));
|
||||||
|
world.setBlockState(pos, block.getStateFromMeta(tag.getInteger("Meta")));
|
||||||
|
|
||||||
|
TileEntity tile = world.getTileEntity(pos);
|
||||||
|
if (tile instanceof TileNode) {
|
||||||
|
((TileNode) tile).setDirection(EnumFacing.getFront(tag.getInteger("Direction")));
|
||||||
|
tile.markDirty();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
e.getRegistry().register(b);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
|||||||
@@ -149,6 +149,7 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
|
|||||||
|
|
||||||
private EnergyForge energy = new EnergyForge(RS.INSTANCE.config.controllerCapacity);
|
private EnergyForge energy = new EnergyForge(RS.INSTANCE.config.controllerCapacity);
|
||||||
|
|
||||||
|
private boolean throttlingDisabled = true; // Will be enabled after first update
|
||||||
private boolean couldRun;
|
private boolean couldRun;
|
||||||
private int ticksSinceUpdateChanged;
|
private int ticksSinceUpdateChanged;
|
||||||
|
|
||||||
@@ -236,9 +237,10 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
|
|||||||
if (couldRun != canRun) {
|
if (couldRun != canRun) {
|
||||||
++ticksSinceUpdateChanged;
|
++ticksSinceUpdateChanged;
|
||||||
|
|
||||||
if (canRun ? (ticksSinceUpdateChanged > THROTTLE_INACTIVE_TO_ACTIVE) : (ticksSinceUpdateChanged > THROTTLE_ACTIVE_TO_INACTIVE)) {
|
if ((canRun ? (ticksSinceUpdateChanged > THROTTLE_INACTIVE_TO_ACTIVE) : (ticksSinceUpdateChanged > THROTTLE_ACTIVE_TO_INACTIVE)) || throttlingDisabled) {
|
||||||
ticksSinceUpdateChanged = 0;
|
ticksSinceUpdateChanged = 0;
|
||||||
couldRun = canRun;
|
couldRun = canRun;
|
||||||
|
throttlingDisabled = false;
|
||||||
|
|
||||||
nodeGraph.rebuild();
|
nodeGraph.rebuild();
|
||||||
securityManager.rebuild();
|
securityManager.rebuild();
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.rwtema.funkylocomotion.api;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
public abstract class FunkyRegistry {
|
||||||
|
@Nullable
|
||||||
|
public static FunkyRegistry INSTANCE = null;
|
||||||
|
|
||||||
|
public abstract void registerMoveFactoryBlock(Block b, IMoveFactory factory);
|
||||||
|
|
||||||
|
public abstract void registerMoveFactoryTileEntityClass(Class<?> tile, IMoveFactory factory);
|
||||||
|
|
||||||
|
public abstract void registerMoveFactoryBlockClass(Class<? extends Block> b, IMoveFactory factory);
|
||||||
|
|
||||||
|
public abstract <T> void registerProxy(Object object, Capability<T> capability, T type);
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.rwtema.funkylocomotion.api;
|
||||||
|
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
public interface IMoveFactory {
|
||||||
|
NBTTagCompound destroyBlock(World world, BlockPos pos);
|
||||||
|
|
||||||
|
boolean recreateBlock(World world, BlockPos pos, NBTTagCompound tag);
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
@API(apiVersion = "2.0", owner = "funkylocomotion", provides = "funkylocomotion_api")
|
||||||
|
package com.rwtema.funkylocomotion.api;
|
||||||
|
|
||||||
|
import net.minecraftforge.fml.common.API;
|
||||||
Reference in New Issue
Block a user