mightypirates / tis-3d Goto Github PK
View Code? Open in Web Editor NEWTIS-100 inspired low-tech computing in Minecraft.
Home Page: https://www.curseforge.com/minecraft/mc-mods/tis-3d
License: Other
TIS-100 inspired low-tech computing in Minecraft.
Home Page: https://www.curseforge.com/minecraft/mc-mods/tis-3d
License: Other
Reads values from all sides, sets the internal timer to the specified value. Once the timer has reached zero, a value will be made readable on all sides. So to wait for the timer one would just try to read from it. Interrupts obviously being possible by using an execution module with MOV ANY ?
.
Using milliseconds would waste a lot of precision, as the timer would be bound to ticks... so it'll probably just use ticks with some made up in-character explanation like hardware limitations.
It would be quite nice if there were dev builds of this mod on the ci.cil.li
Jenkins.
This is a problem because, for example, when locking a module, forwarders leading to that module will still read one more value.
If you apply a redstone signal to the controller and break the casing that connects to the controller it looks like the tis is still turned on, but it doesn't execute commands.
The modules also doesn't update if you put the casing back, only if you remove the redstone signal from the controller after replace the missig casing.
In this picture I removed the casing above the Keypad Module
I get this crash with the first AE2 1.10.2 version, it seems that you both use the same id for the controller block. http://pastebin.com/kRQj6e3s
Need an ingame manual in book form documenting the functionality of the mod, as well as the opcodes and such.
Since they're entities and entities aren't updated in the outermost ring of loaded chunks, need to make sure they don't clump up there. Currently that's theoretically possible if fired from a chunkloaded 3x3 area, for example.
Something like an (unpersisted) list of live packets in the IR module should do the trick.
Show numbers currently stored in stack in overlay of stack module.
Value and accessors are already implemented, just need to actually set it when appropriate.
On 1.8.8, right-clicking an Execution Module with an empty Code Bible results in the immediate termination of the game.
Stacktrace:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(Unknown Source) ~[?:1.8.0_66]
at java.util.ArrayList.get(Unknown Source) ~[?:1.8.0_66]
at li.cil.tis3d.common.item.ItemBookCode$Data.getProgram(ItemBookCode.java:145) ~[ItemBookCode$Data.class:?]
at li.cil.tis3d.common.module.ModuleExecution$SourceCodeProviderBookCode.codeFor(ModuleExecution.java:458) ~[ModuleExecution$SourceCodeProviderBookCode.class:?]
at li.cil.tis3d.common.module.ModuleExecution.onActivate(ModuleExecution.java:180) ~[ModuleExecution.class:?]
at li.cil.tis3d.common.block.BlockCasing.func_180639_a(BlockCasing.java:158) ~[BlockCasing.class:?]
at net.minecraft.client.multiplayer.PlayerControllerMP.func_178890_a(PlayerControllerMP.java:377) ~[bda.class:?]
at net.minecraft.client.Minecraft.func_147121_ag(Minecraft.java:1491) ~[ave.class:?]
at net.minecraft.client.Minecraft.func_71407_l(Minecraft.java:2036) ~[ave.class:?]
at net.minecraft.client.Minecraft.func_71411_J(Minecraft.java:1024) ~[ave.class:?]
at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:349) [ave.class:?]
at net.minecraft.client.main.Main.main(SourceFile:124) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_66]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_66]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_66]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_66]
at org.multimc.onesix.OneSixLauncher.launchWithMainClass(OneSixLauncher.java:310) [NewLaunch.jar:?]
at org.multimc.onesix.OneSixLauncher.launch(OneSixLauncher.java:395) [NewLaunch.jar:?]
at org.multimc.EntryPoint.listen(EntryPoint.java:170) [NewLaunch.jar:?]
at org.multimc.EntryPoint.main(EntryPoint.java:54) [NewLaunch.jar:?]
Forge 1638
TIS-3D 0.2.0.25
Keypad module returns 0 on a read even if no buttons are pressed.
... and I have the crash report to prove it:
http://pastebin.com/Db3qHkCf
The following code, given an appropriately placed display module, will crash like that.
MOV 255 UP
MOV 2 UP
MOV 2 UP
MOV 8 UP
MOV 8 UP
I think the problem is
%
operator used here actually being the remainder, not the modulus. This will produce negative results for negative inputs.I'm using v0.5.0.37 for MC 1.7.10
Not only while they're stored in registers, for more homogeneous behavior for module implementations.
A Book and quill can only handle 13 lines per page and the TIS only takes the first page.
It's not possible to program 20 lines
That is allow code like MOV 0xF ACC
.
The reference manual doesn't seem to work on 1.10
Image
That is, if there's a fully opaque cube in front of an execution module, don't send state changes, but do send one when that block breaks to get in sync again. This could avoid sending a lot of unnecessary but frequent packets.
The bundled redstone module does not appear to be compatible with EnderIO's insulated redstone conduit. I tried this on two different setups, neither of which worked: Minecraft 1.7.10 with EnderIO 2.3.0.427 and TIS-3D 0.9.0.66, and Minecraft 1.10.2 with EnderIO 3.0.1.74 and TIS-3D 0.9.0.1.
NOP
JRO 0
to
NOP
JRO 0
ASD
at least looks like it continues to execute into the ASD line? ^.- And then enters blocked state (visually on the client anyway). Reprogramming with the same again then properly sets the error state.
While it's not really a bug, it should be an implementation detail and right now it's just confusing:
1 C
2
Given 1
is a casing with a downwards facing module, C
is a controller and 2
is a casing with a right facing module, right now the two modules can't communicate, because usually that communication would be handled by the casing in the corner (where the controller sits). This will need special handling to have them communicate directly instead. Doing that would also reduce the delay introduced by such a setup, though, which I guess is a good thing anyway.
Built using a noteblock, emits noteblock sounds based on input value (no square wave gen - at least for now).
Something like 0xFF00
masks pitch, 0x00FF
masks note type or so.
Now I was half-way into an essay justifying an "interface module", but the more I tried to nail it down the more it felt like unnecessarily fuzzying things up. So here's an alternative idea: to make integration easier, don't require people to have their own full item implementation and so on.
Instead, allow registering a module by specifying a texture (the overlay being used) and a constructor callback (of the module class). Then internally create and register a new item, and create a provider for it using the specified constructor. Probably return the created item to allow further initialization of it (e.g. set name, change creative tab, ...).
Obviously, this should be called in the preInit phase (since that's when items should be registered).
Sounds reasonable? Am I forgetting something?
Allow executions to face in the four directions when on the top or bottom of a casing, orientate based on player orientation when placing them. Will make using ports a lot more re-usable and intuitive.
Please let me know if there is any more information I can give you to help solve this problem.
Those methods would take the item stack used for installation / the itemstack you get back when uninstalling a module as a parameter. This would allow initializing from the stack's NBT data as well as writing own data back to the ItemStack for persistence.
Common
Special case
Forwarders
For all faces / orientations.
If you're doing work with bundled redstone modules, it's easy to separate adjacent bundled cable segments (either via color or simply using microblocks to divide them), but the modules constantly pass their state when adjacent.
This makes it impossible to use two bundled redstone modules next to each other, which hardly seems fitting.
Alternately, if things like the redstone module or bundled redstone module explicitly didn't propagate their values to adjacent similar modules, that would do the job as well. I'm not actually sure when someone might want that behavior, but I imagine someone at some point will build something reliant on that behavior, because that's how these kinds of systems roll. :D
I.e. mention the identifier in the tooltip. E.g. T21 for execution, T30 for stack. Maybe T40 for redstone, T41 for IR? (i.e. make 4x transfer/data i/o). Would random fall into 2x or 3x? Hmm.
Actually, might be better to have a system where arbitrary 4x+ numbers are assigned to registered providers. Would avoid conflicting naming if there should be any addons. I.e. allow addons to query the identifier for their module, if they're interested. Hmhmhm.
Trying to use the Bundled Redstone Module with a Redlogic bundled cable crashes the game.
To replicate: Place controller and casing block. On the casing, place a Bundled Redstone Module. Next to bundled module, place a Redlogic bundled cable with at least one signal nonzero. Activate the controller, and the game will immediately crash.
This problem does not seem to occur with freestanding bundled cables, but I cannot extract values from them either so that is probably just because TIS-3D does not recognize them as bundled cables.
So apparently I was a bit over-zealous in cleaning up references to I18n on the server and now the message doesn't get localized anymore. Oops.
My idea was to make the blue bar on the side of the keypad some kind of enter key, which maybe could be enabled/disabled by writing a 1 or a 0 to the keypad or some simple crafting recipe (keypad + button?). Maybe it would output -1 when it is pressed.
To allow inputting numbers that can then be read by other modules.
Probably something similar to the display modules in TIS-100.
Hey!Your mod is amazing!
This is TIS-3D-Translation-Chinese.
TIS-3D Translation Chinese.zip
Drawing entire rectangles individually with a single call? Come on, where's your spirit of adventure?
Why not simply use something like the original TIS-100 display protocol, starting at an X and Y coordinate and drawing a horizontal sequence of colors until you hit a stop?
Yes, it would be clunky and difficult to use, but I thought that was sort of the point - to create an extremely flexible computing system more powerful than regular redstone, which nonetheless required solving TIS-100-like puzzles to use, because they naturally arose through the peculiar architecture. There really aren't enough mods that are puzzles to use in and of themselves.
Before I forget it yet again... page x of y indication at the bottom of the code book.
ISSUE: When I programmed the blocks and flick the lever for execution the game crashes!
My Stacktrace:
Time: 03.01.16 13:32
Description: Ticking block entity
java.lang.NoSuchMethodError: net.minecraft.block.Block.doesSideBlockRendering(Lnet/minecraft/world/IBlockAccess;Lnet/minecraft/util/BlockPos;Lnet/minecraft/util/EnumFacing;)Z
at li.cil.tis3d.api.prefab.module.AbstractModule.isVisible(AbstractModule.java:162)
at li.cil.tis3d.common.module.ModuleExecution.sendPartialState(ModuleExecution.java:343)
at li.cil.tis3d.common.module.ModuleExecution.step(ModuleExecution.java:122)
at li.cil.tis3d.common.machine.CasingImpl.stepModules(CasingImpl.java:116)
at li.cil.tis3d.common.tile.TileEntityCasing.stepModules(TileEntityCasing.java:163)
at li.cil.tis3d.common.tile.TileEntityController$$Lambda$83/205223229.accept(Unknown Source)
at java.util.ArrayList.forEach(ArrayList.java:1249)
at li.cil.tis3d.common.tile.TileEntityController.step(TileEntityController.java:468)
at li.cil.tis3d.common.tile.TileEntityController.func_73660_a(TileEntityController.java:306)
at net.minecraft.world.World.func_72939_s(World.java:1716)
at net.minecraft.world.WorldServer.func_72939_s(WorldServer.java:544)
at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:701)
at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:605)
at net.minecraft.server.integrated.IntegratedServer.func_71217_p(IntegratedServer.java:152)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:481)
at java.lang.Thread.run(Thread.java:745)
-- Head --
Stacktrace:
at li.cil.tis3d.api.prefab.module.AbstractModule.isVisible(AbstractModule.java:162)
at li.cil.tis3d.common.module.ModuleExecution.sendPartialState(ModuleExecution.java:343)
at li.cil.tis3d.common.module.ModuleExecution.step(ModuleExecution.java:122)
at li.cil.tis3d.common.machine.CasingImpl.stepModules(CasingImpl.java:116)
at li.cil.tis3d.common.tile.TileEntityCasing.stepModules(TileEntityCasing.java:163)
at li.cil.tis3d.common.tile.TileEntityController$$Lambda$83/205223229.accept(Unknown Source)
at java.util.ArrayList.forEach(ArrayList.java:1249)
at li.cil.tis3d.common.tile.TileEntityController.step(TileEntityController.java:468)
at li.cil.tis3d.common.tile.TileEntityController.func_73660_a(TileEntityController.java:306)
-- Block entity being ticked --
Details:
Name: controller // li.cil.tis3d.common.tile.TileEntityController
Block type: ID #236 (tile.tis3d.controller // li.cil.tis3d.common.block.BlockController)
Block data value: 0 / 0x0 / 0b0000
Block location: World: (243,65,273), Chunk: (at 3,4,1 in 15,17; contains blocks 240,0,272 to 255,255,287), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
Actual block type: ID #236 (tile.tis3d.controller // li.cil.tis3d.common.block.BlockController)
Actual block data value: 0 / 0x0 / 0b0000
Stacktrace:
at net.minecraft.world.World.func_72939_s(World.java:1716)
at net.minecraft.world.WorldServer.func_72939_s(WorldServer.java:544)
-- Affected level --
Details:
Level name: TIS
All players: 1 total; [EntityPlayerMP['PrinzJuliano'/174, l='TIS', x=240,13, y=65,00, z=273,70]]
Chunk stats: ServerChunkCache: 1167 Drop: 0
Level seed: 2995479536448582658
Level generator: ID 00 - default, ver 1. Features enabled: true
Level generator options:
Level spawn location: 228,00,64,00,252,00 - World: (228,64,252), Chunk: (at 4,4,12 in 14,15; contains blocks 224,0,240 to 239,255,255), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
Level time: 3556 game time, 3556 day time
Level dimension: 0
Level storage version: 0x04ABD - Anvil
Level weather: Rain time: 19285 (now: false), thunder time: 64095 (now: false)
Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: true
Stacktrace:
at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:701)
at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:605)
at net.minecraft.server.integrated.IntegratedServer.func_71217_p(IntegratedServer.java:152)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:481)
at java.lang.Thread.run(Thread.java:745)
-- System Details --
Details:
Minecraft Version: 1.8.8
Operating System: Windows 7 (amd64) version 6.1
Java Version: 1.8.0_25, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 253841512 bytes (242 MB) / 686305280 bytes (654 MB) up to 1060372480 bytes (1011 MB)
JVM Flags: 6 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xmx1G -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -Xmn128M
IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 95
FML: MCP 9.18 Powered by Forge 11.15.0.1591 5 mods loaded, 5 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.18} Minecraft Coder Pack
UCHIJAAAA FML{8.0.99.99} Forge Mod Loader
UCHIJAAAA Forge{11.15.0.1591} Minecraft Forge
UCHIJAAAA JEI{2.12.0.49} Just Enough Items
UCHIJAAAA tis3d{0.8.1.76} TIS-3D
Loaded coremods (and transformers):
GL info: ERROR RuntimeException: No OpenGL context found in the current thread.
Profiler Position: N/A (disabled)
Player Count: 1 / 8; [EntityPlayerMP['PrinzJuliano'/174, l='TIS', x=240,13, y=65,00, z=273,70]]
Type: Integrated Server (map_client.txt)
Is Modded: Definitely; Client brand changed to 'fml,forge'
Even when there are some present from when programming the module. Should split the read program after any already present #BWTM
s and only then check if inserting additional ones is necessary.
Could be useful in a lot of use-cases to have a plain buffer that is FIFO instead of FILO. It'd be a nice complement to the stack module.
To allow sending values wirelessly and allow different "computers" to communicate. Implementation idea: send entities for sent values, this would more or less magically make sending data through portals work, and give collision detection for free. Very limited range (a couple of chunks).
To make things a little more... practical in the context of Minecraft, consider adding bitwise opcodes like XOR
, which could be a sane middle ground between what's in now (pure TIS-100) and adding comparatively high level stuff like MUL
or DIV
.
Can you please add a admin command that gives the player a master key that can unlock all casings.
Add a way to the API to fire infrared packets (so people don't have to implement their own entity if they want to send IR packets to TIS-3D).
Both SpACore and TIS-3D run fine alone, but not at the same time. Appears to be an ASM error. I'm also posting to SpACore as well.
Make the font renderer used on the execution and stack modules available in the API.
Something that allows writing and managing programs more comfortably than having to have a written book for each program. Possibly combined with the manual? I imagine something with syntax checking, highlighting the erroneous location (similar to how it's highlighted on the execution modules now), and a way to sort and categorize programs, have a selected on to program modules with, and a way to copy code from a module into a new program entry.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.