User:SoloSniper

From Pandorabox
Jump to navigation Jump to search

Note: Feel free to copy/use anything from here that you want :)

You can access my area from Spawn > Shops > XVIII > Cheap Technic

Public Workshop

Includes Grinding, Smelting, Extracting, Alloying, Compressing and Charging.

Workshop.png

Public Tree Farm

Includes free oil, Pine logs, Pine leaves, Pine saplings.

Screenshot from 2024-02-12 11-04-00.png

Technic Shop

Cheap HV solar, silicon, hydros, HV quarries, switching stations & more.

Screenshot from 2024-02-12 11-04-19.png

R1 Printer, first draft

Screenshot from 2024-02-12 11-02-37.png
Screenshot from 2024-02-12 11-03-05.png

This was my first attempt at making a "Radius 1" printer. Or in other words; an automated machine for building Radius 1 Jumpdrive ships with all the necessary blocks in the correct place, then jumping it to another area so that the machine can continue "printing" R1's.

How it worked

For my first Printer, I utilized the Deployer node for placing all the blocks, and simply powered them in order using Mesecons. For the auto-transportation, I made it so two of the HV Cables that get printed, are Digiline HV Cable instead. This way I could use a Mesecon Node Detector to Detect if the last block has been placed, then send a signal to the Digi-Cable, which are connected to the JD, to say "Set radius to this, and jump to here.".

To setup the auto-transportation, all I did was threw some code in a Lua Controller which said, "If port B is on, then do this". (This assumes that port B is the one that the Node Detector is attached to). Then simply connected it with Digiline to the area which the Digi-Cable will spawn in.

   if event.type == "on" and event.pin.name == "B" then -- Change to respective port
       digiline_send("jumpdrive", { command = "set", x = INSERT_X, y = INSERT_Y, z = INSERT_Z, r = 1, formupdate = true }) -- Change INSERT_XYZ to desired destination
       digiline_send("jumpdrive", { command = "jump" })
   end

Problems & Solutions

This was of course not as simple as it sounds. One of the problems I ran into was that it did not have time to charge before jumping, this was fixed by a row of delayers (Janky, but worked). Another problem was the JD itself. As you know the JD has to be in the middle of the R1, this means that either; I would have to create some system of using one Deployer to place another, and then use a pipe to feed a JD into it, so that a Mesecon could power it. Not to mention the unconventional Mesecons I would have to setup for all the delays between steps.

Even this would have issues though, like your R1 having a random Deployer on it, or the special placing for putting the Deployer in the right rotation. There are ways around all of this with different ways of automation and tedium, but luckily we have a simpler solution which I somehow thought of.

The way I got around this, was with what in Minecraft, is known as a "Double Piston Extender". It is a simple setup of two pistons, together, and pointing in same direction. First the one is the back in powered, then the one in the front, causing one piston to be pushed forward, and the one it pushes, extending as to push the block in front out as well. Additionally, if you use a Sticky Piston as the first one, it will retract back to the original position. Utilizing the double piston extender, all we have to do is place a Deployer on one of the sides, facing in toward the piston that is in front, then by powering in chronological order, the Deployer, the first piston, and the second piston, after which retracting them both, you have a floating JD in the prefect spot!


R1 Printer, finished version

Screenshot from 2024-02-12 11-12-19.png
Screenshot from 2024-02-12 11-12-26.png

This was my second attempt at making a more efficient version of the R1 Printer.

How it worked

For this version, I made use of the Digibuilder node to place all the R1's blocks, and utilized the same method of auto-transportation that I did with the first draft.

Setting up the Digibuilder is simple, you put the blocks you want placed inside of the Digibuilder, then use a Lua Controller to write the code that tells the Digibuilder where to place the blocks. Here's the code I built for my R1 Printer. The Digibuilder places the blocks relative to itself.


   -- Code written by SoloSniper
   -- Code sources: BuckarooBanzai, MCLV, AceRichman,  SX
   -- list of setnode commands
   local a = "technic:hv_cable"
   local data = {
       { name = "a", pos = { x = 0, y = 6, z = -1 } },
       { name = "travelnet:travelnet", pos = { x = 0, y = 6, z = -1 } },
       { name = "technic:hv_digi_cable", up = true, pos = { x = 0, y = 4, z = 0 } },
       { name = a, up = true, pos = { x = -1, y = 4, z = 0 } },
       { name = "technic:hv_digi_cable", up = true, pos = { x = 1, y = 4, z = 0 } },
       { name = a, up = true, pos = { x = 1, y = 4, z = 1 } },
       { name = a, up = true, pos = { x = 0, y = 4, z = 1 } },
       { name = a, up = true, pos = { x = -1, y = 4, z = 1 } },
       { name = "technic:hv_solar_array", pos = { x = -1, y = 6, z = 0 } },
       { name = "technic:hv_solar_array", pos = { x = 1, y = 6, z = 0 } },
       { name = "technic:hv_battery_box0", pos = { x = 1, y = 6, z = 1 } },
       { name = "technic:switching_station", pos = { x = 0, y = 6, z = 1 } },
       { name = "technic:hv_battery_box0",pos = { x = -1, y = 6, z = 1 } },
       { name = "protector:protect2", down = true, pos = { x = 1, y = 8, z = -1 } },
       { name = "geocache:block", pos = { x = 1, y = 5, z = -1 } },
       { name = "jumpdrive:engine", pos = { x = 0, y = 6, z = 0 } },
       { name = "beacon:red", west = true, pos = { x = 0, y = 5, z = -1 } },
       { name = "more_chests:wifi", pos = { x = -1, y = 6, z = -1 } },
       { name = "technic:gold_protected_chest", pos = { x = 1, y = 6, z = -1 } }
   
   
   }
   -- Will only start if port.b is on.
   -- initial start
   if event.type == "program" then
       mem.pos = 1
     if pin.b then interrupt(1) end
   end
   
   -- timer interrupt
   if event.type == "interrupt" then
       local entry = data[mem.pos]
       if not entry then
           -- done
           return
       end
   
       entry.command = "setnode"
       digiline_send("digibuilder", entry)
   end
   
   -- callback from digibuilder node
   if event.type == "digiline" and event.channel == "digibuilder" then
       if event.error then
           -- error state
           error(event.message)
       end
   
       -- next command
       mem.pos = mem.pos + 1
     if pin.b then interrupt(1) end
     end
   
   if event.type == "on" and event.pin.name == "B" then -- Change to whichever port you want to use for a toggle
       mem.pos = 1
       interrupt(1)
   end
   

Problems & Solutions

The main issue was with the Travelnet. For some reason when the Travelnet was placed by the Digibuilder, it also places an invisible, unpointable, unbreakable node adjacent to the top of the Travelnet, depending on what rotation is specified in setnode command. The only way around this I found, was to make the Travelnet in the correct rotation relative to which side of the JD it's being placed on, as to generate the invisible block outside of the JD's radius. So that when I jump the R1, it gets left behind, to be replaced by the next generated invisible block.

Another issue is Mapblock borders, make sure to build the whole thing in one Mapblock or you will be deeply sorrowed. (There are too many issues to name regarding Mapblock borders).


Faster Autocrafting

Screenshot from 2024-02-12 11-03-31.png

This is a way to cause the Autocrafter to craft as many as it is capable of at once. The original design was made by TK423, later I took his code and set up a simple way to automate the input/output.


The code in the top LuaC

   pin.a = true
   if pin.a then
       port.d = not pin.d
       interrupt(0.5)
   end
       
   -- This simply sends a signal to the injector every so often 
   -- (You can change it on line 4)
   -- Also no on/off functionality :(
   
   Remove this line to start
   


The code in the bottom LuaC

   if event.type == "interrupt" then
    port.b = not pin.b
      for x=1, 99, 1 do
       digiline_send("auto", "single")
      end
   end
   interrupt(3+heat)
   
   -- This forces the Autocrafter to craft as much as it can at once
   -- The last line determines how often to send another craft signal 
   -- Currently no on/off functionality
   
   remove this line to start