If a carriage contains the computer, the controller has to wait until the computer is in a safe state (that means not still running move()) to pick it up. If move() were to wait until the move finishes (and the move outcome becomes available) it would cause the game to freeze.
so I am trying to use the Carriage Controller however I can't seem to get it to move with Computer Craft.
I enter lua then do drive = peripheral.wrap("back) then on a new line drive.move(3, false) the wiki says this should move it south and it is not testing and actually doing it and it doesn't move, I've also tried drive(3, false, true) which is the old way of doing it and making the carriage move with the object. The wiki way when I press enter makes a new black line while the old way does nothing at all. What am I doing wrong?
What does "print(drive.status())" say? It'll tell you if there's something in the way of motion.
Override Item.hasCustomEntity(ItemStack) and Item.createEntity(World, Entity, ItemStack) to return a custom entity? The code is in Forge 1558 at least, probably since before that too.
I'm not sure why BlockRecordSet is a TreeSet, the original code didn't exactly come with a comprehensive design explanation. Maybe it was to avoid having the danger of a substandard hashCode implementation? Anyhow, that shouldn't be too hard to do, we can probably use a slightly modified MurmurHash or something.
Sorry, I haven't felt much motivation to work on MC stuff lately.
We might be able to get some more performance by skipping the placeholder stage for large moves. I think it would be worthwhile to skip the animation to halve the block changes, and double performance (in the best case) when it counts the most and the animation would be ruined by massive lag anyway.
I'll try to build something, but I'm traveling and even the Minecraft Forum website is melting my netbook into silicon slag, so I don't think I'll be able to run Minecraft or an IDE.
i got a crash with the new immersive engineering update, and i'm pretty sure this applies to immersive integration as well
---- Minecraft Crash Report ----
// Shall we play a game?
Time: 12/13/15 2:02 AM
Description: Ticking block entity
java.lang.NoSuchMethodError: blusunrize.immersiveengineering.api.energy.ImmersiveNetHandler.getConnections(Lnet/minecraft/world/World;Lnet/minecraft/util/ChunkCoordinates;)Ljava/util/List;
at me.planetguy.remaininmotion.core.interop.mod.ImmersiveEngineering.saveConnections(ImmersiveEngineering.java:27)
at cpw.mods.fml.common.eventhandler.ASMEventHandler_11_ImmersiveEngineering_saveConnections_BlockPreMoveEvent.invoke(.dynamic)
at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:54)
at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:140)
at me.planetguy.remaininmotion.core.interop.EventPool.postEvent(EventPool.java:145)
at me.planetguy.remaininmotion.core.interop.EventPool.postBlockPreMoveEvent(EventPool.java:59)
at me.planetguy.remaininmotion.drive.TileEntityCarriageDrive.doPreMovementModInteraction(TileEntityCarriageDrive.java:465)
at me.planetguy.remaininmotion.drive.TileEntityCarriageDrive.InitiateMotion(TileEntityCarriageDrive.java:447)
at me.planetguy.remaininmotion.drive.TileEntityCarriageDrive.func_145845_h(TileEntityCarriageDrive.java:330)
at net.minecraft.world.World.func_72939_s(World.java:1939)
at net.minecraft.world.WorldServer.func_72939_s(WorldServer.java:489)
at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:636)
at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:547)
at net.minecraft.server.integrated.IntegratedServer.func_71217_p(IntegratedServer.java:111)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:427)
at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:685)
A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------
-- Head --
Stacktrace:
at me.planetguy.remaininmotion.core.interop.mod.ImmersiveEngineering.saveConnections(ImmersiveEngineering.java:27)
at cpw.mods.fml.common.eventhandler.ASMEventHandler_11_ImmersiveEngineering_saveConnections_BlockPreMoveEvent.invoke(.dynamic)
at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:54)
at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:140)
at me.planetguy.remaininmotion.core.interop.EventPool.postEvent(EventPool.java:145)
at me.planetguy.remaininmotion.core.interop.EventPool.postBlockPreMoveEvent(EventPool.java:59)
at me.planetguy.remaininmotion.drive.TileEntityCarriageDrive.doPreMovementModInteraction(TileEntityCarriageDrive.java:465)
at me.planetguy.remaininmotion.drive.TileEntityCarriageDrive.InitiateMotion(TileEntityCarriageDrive.java:447)
at me.planetguy.remaininmotion.drive.TileEntityCarriageDrive.func_145845_h(TileEntityCarriageDrive.java:330)
-- Block entity being ticked --
Details:
Name: JAKJ_RedstoneInMotion_CarriageEngineEntity // me.planetguy.remaininmotion.drive.TileEntityCarriageEngine
Block type: ID #201 (tile.JAKJ_RedstoneInMotion_CarriageDrive // me.planetguy.remaininmotion.drive.BlockCarriageDrive)
Block data value: 0 / 0x0 / 0b0000
Block location: World: (528,7,-675), Chunk: (at 0,0,13 in 33,-43; contains blocks 528,0,-688 to 543,255,-673), Region: (1,-2; contains chunks 32,-64 to 63,-33, blocks 512,0,-1024 to 1023,255,-513)
Actual block type: ID #201 (tile.JAKJ_RedstoneInMotion_CarriageDrive // me.planetguy.remaininmotion.drive.BlockCarriageDrive)
Actual block data value: 0 / 0x0 / 0b0000
Stacktrace:
at net.minecraft.world.World.func_72939_s(World.java:1939)
at net.minecraft.world.WorldServer.func_72939_s(WorldServer.java:489)
-- Affected level --
Details:
Level name: Test
All players: 1 total; [EntityPlayerMP['Escman1999'/48, l='Test', x=529.66, y=6.49, z=-671.72]]
Chunk stats: ServerChunkCache: 353 Drop: 0
Level seed: -3247745318522496265
Level generator: ID 01 - flat, ver 0. Features enabled: true
Level generator options:
Level spawn location: World: (517,4,-658), Chunk: (at 5,0,14 in 32,-42; contains blocks 512,0,-672 to 527,255,-657), Region: (1,-2; contains chunks 32,-64 to 63,-33, blocks 512,0,-1024 to 1023,255,-513)
Level time: 6553 game time, 6553 day time
Level dimension: 0
Level storage version: 0x04ABD - Anvil
Level weather: Rain time: 151383 (now: false), thunder time: 26516 (now: false)
Level game mode: Game mode: survival (ID 0). Hardcore: false. Cheats: true
Stacktrace:
at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:636)
at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:547)
at net.minecraft.server.integrated.IntegratedServer.func_71217_p(IntegratedServer.java:111)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:427)
at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:685)
-- System Details --
Details:
Minecraft Version: 1.7.10
Operating System: Windows 10 (amd64) version 10.0
Java Version: 1.8.0_66, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 501135632 bytes (477 MB) / 727187456 bytes (693 MB) up to 954728448 bytes (910 MB)
JVM Flags: 3 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xms512m -Xmx1024m
AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1566 7 mods loaded, 7 mods active
States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
UCHIJAAAA mcp{9.05} [Minecraft Coder Pack] (minecraft.jar)
UCHIJAAAA FML{7.10.99.99} [Forge Mod Loader] (forge-1.7.10-10.13.4.1566-1.7.10-universal.jar)
UCHIJAAAA Forge{10.13.4.1566} [Minecraft Forge] (forge-1.7.10-10.13.4.1566-1.7.10-universal.jar)
UCHIJAAAA ImmersiveEngineering{0.6.4} [Immersive Engineering] (ImmersiveEngineering-0.6.4.jar)
UCHIJAAAA immersiveintegration{0.6.5} [Immersive Integration] (immersiveintegration-0.6.5.jar)
UCHIJAAAA planetguyLib{1.9} [planetguyLib] (PlanetguyLib-1.9.1.jar)
UCHIJAAAA JAKJ_RedstoneInMotion{2.8.8} [Remain In Motion] (RemainInMotion-2.8.8.jar)
GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
Profiler Position: N/A (disabled)
Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
Player Count: 1 / 8; [EntityPlayerMP['Escman1999'/48, l='Test', x=529.66, y=6.49, z=-671.72]]
Type: Integrated Server (map_client.txt)
Is Modded: Definitely; Client brand changed to 'fml,forge'
Does using this build fix it? It's recompiled against Immersive Engineering 0.6.4, but otherwise unchanged.
Hey, PlanetGuy, I know you were working on a thread safe world util and what not. (How) is that coming along?
I'm pretty sure I've accomplished getting blocks. My solution was exterminating any side effects from the call chain, but for obvious reasons, that model won't work for setting blocks. We'll probably end up rewriting the better part of World and/or Chunk to make async block sets possible.
What I had in mind for async world access was that we could offer a new updateLocal() callback. It would be allowed to freely change blocks within 16 blocks. The world code would look like this:
for i in 0..8
List of tasks started
foreach loaded chunk chunk:
if chunk.x % 3 * 3 + chunk.z % 3 == i:
add task running chunk.runLocalTicks() to the list of tasks started
await completion of all tasks started
A tick handler would run this in parallel on each world. Chunk.runLocalTicks() would call updateLocal() in serial on each block with a scheduled async tick.
i'm just wondering here, but how much of a pain would it be to update this mod to 1.8/1.9? would it have to be rewritten from scratch?
We plan to continue on 1.7 until (unless?) the bulk of the modding community makes the switch. Frames are mostly useful alongside a wide collection of other mods' components (block breakers, deployers, direction-independent item transportation, and compact redstone control, to name a few) and that ecosystem just doesn't exist on 1.8.
Memory carriages, probably. They let you define large structures that don't get stuck if they touch the ground with one frame block, and are basically template carriages but without having to rebuild your structure or craft a carriage for every block.
0
Does the chunk loader setup make sure that there's never a time when both loaders run at the same time? Could you please post a screenshot?
0
If a carriage contains the computer, the controller has to wait until the computer is in a safe state (that means not still running move()) to pick it up. If move() were to wait until the move finishes (and the move outcome becomes available) it would cause the game to freeze.
Use p.status() to query the carriage's status.
0
What does "print(drive.status())" say? It'll tell you if there's something in the way of motion.
0
Override Item.hasCustomEntity(ItemStack) and Item.createEntity(World, Entity, ItemStack) to return a custom entity? The code is in Forge 1558 at least, probably since before that too.
0
I'm not sure why BlockRecordSet is a TreeSet, the original code didn't exactly come with a comprehensive design explanation. Maybe it was to avoid having the danger of a substandard hashCode implementation? Anyhow, that shouldn't be too hard to do, we can probably use a slightly modified MurmurHash or something.
0
Sorry, I haven't felt much motivation to work on MC stuff lately.
We might be able to get some more performance by skipping the placeholder stage for large moves. I think it would be worthwhile to skip the animation to halve the block changes, and double performance (in the best case) when it counts the most and the animation would be ruined by massive lag anyway.
0
The latest changes from last night are up on CurseForge as a beta. Use it with caution, because I didn't extensively test it.
0
Alright, got a build together with da3dsoul's latest changes. Grab it here.
0
I'll try to build something, but I'm traveling and even the Minecraft Forum website is melting my netbook into silicon slag, so I don't think I'll be able to run Minecraft or an IDE.
0
Does using this build fix it? It's recompiled against Immersive Engineering 0.6.4, but otherwise unchanged.
Done.
0
Looks like the Immersive Engineering support is broken, let me fix that...
0
I'm pretty sure I've accomplished getting blocks. My solution was exterminating any side effects from the call chain, but for obvious reasons, that model won't work for setting blocks. We'll probably end up rewriting the better part of World and/or Chunk to make async block sets possible.
What I had in mind for async world access was that we could offer a new updateLocal() callback. It would be allowed to freely change blocks within 16 blocks. The world code would look like this:
for i in 0..8
List of tasks started
foreach loaded chunk chunk:
if chunk.x % 3 * 3 + chunk.z % 3 == i:
add task running chunk.runLocalTicks() to the list of tasks started
await completion of all tasks started
A tick handler would run this in parallel on each world. Chunk.runLocalTicks() would call updateLocal() in serial on each block with a scheduled async tick.
We plan to continue on 1.7 until (unless?) the bulk of the modding community makes the switch. Frames are mostly useful alongside a wide collection of other mods' components (block breakers, deployers, direction-independent item transportation, and compact redstone control, to name a few) and that ecosystem just doesn't exist on 1.8.
0
5000 blocks by default, but it's configurable.
0
Yes.
0
Memory carriages, probably. They let you define large structures that don't get stuck if they touch the ground with one frame block, and are basically template carriages but without having to rebuild your structure or craft a carriage for every block.