├── README.md ├── src ├── main │ ├── resources │ │ ├── assets │ │ │ └── laserio │ │ │ │ ├── particles │ │ │ │ ├── fluidflowparticle.json │ │ │ │ ├── itemflowparticle.json │ │ │ │ └── chemicalflowparticle.json │ │ │ │ ├── blockstates │ │ │ │ ├── laser_node.json │ │ │ │ ├── laser_connector.json │ │ │ │ └── laser_connector_advanced.json │ │ │ │ ├── textures │ │ │ │ ├── item │ │ │ │ │ ├── dire.png │ │ │ │ │ ├── card_cloner.png │ │ │ │ │ ├── card_energy.png │ │ │ │ │ ├── card_fluid.png │ │ │ │ │ ├── card_holder.png │ │ │ │ │ ├── card_item.png │ │ │ │ │ ├── filter_mod.png │ │ │ │ │ ├── filter_nbt.png │ │ │ │ │ ├── filter_tag.png │ │ │ │ │ ├── logic_chip.png │ │ │ │ │ ├── card_chemical.png │ │ │ │ │ ├── card_redstone.png │ │ │ │ │ ├── filter_basic.png │ │ │ │ │ ├── filter_count.png │ │ │ │ │ ├── laser_wrench.png │ │ │ │ │ ├── cardlayers │ │ │ │ │ │ ├── stock.png │ │ │ │ │ │ ├── channel.png │ │ │ │ │ │ ├── extract.png │ │ │ │ │ │ ├── insert.png │ │ │ │ │ │ └── sensor.png │ │ │ │ │ ├── logic_chip_raw.png │ │ │ │ │ ├── overclocker_card.png │ │ │ │ │ └── overclocker_node.png │ │ │ │ ├── misc │ │ │ │ │ ├── laser.png │ │ │ │ │ ├── laser2.png │ │ │ │ │ └── laser_glow.png │ │ │ │ ├── gui │ │ │ │ │ ├── filtertag.png │ │ │ │ │ ├── itemcard.png │ │ │ │ │ ├── basicfilter.png │ │ │ │ │ ├── buttons │ │ │ │ │ │ ├── add.png │ │ │ │ │ │ ├── and.png │ │ │ │ │ │ ├── or.png │ │ │ │ │ │ ├── clear.png │ │ │ │ │ │ ├── pageup.png │ │ │ │ │ │ ├── remove.png │ │ │ │ │ │ ├── sneaky.png │ │ │ │ │ │ ├── exacttrue.png │ │ │ │ │ │ ├── pagedown.png │ │ │ │ │ │ ├── settings.png │ │ │ │ │ │ ├── sneaky-up.png │ │ │ │ │ │ ├── blankbutton.png │ │ │ │ │ │ ├── exactfalse.png │ │ │ │ │ │ ├── modesensor.png │ │ │ │ │ │ ├── modestocker.png │ │ │ │ │ │ ├── redstonelow.png │ │ │ │ │ │ ├── sneaky-down.png │ │ │ │ │ │ ├── sneaky-east.png │ │ │ │ │ │ ├── sneaky-west.png │ │ │ │ │ │ ├── allowlistfalse.png │ │ │ │ │ │ ├── allowlisttrue.png │ │ │ │ │ │ ├── matchnbtfalse.png │ │ │ │ │ │ ├── matchnbttrue.png │ │ │ │ │ │ ├── modeextractor.png │ │ │ │ │ │ ├── modeinserter.png │ │ │ │ │ │ ├── modeprovider.png │ │ │ │ │ │ ├── redstonehigh.png │ │ │ │ │ │ ├── redstoneignore.png │ │ │ │ │ │ ├── redstoneinput.png │ │ │ │ │ │ ├── redstoneoutput.png │ │ │ │ │ │ ├── regulatefalse.png │ │ │ │ │ │ ├── regulatetrue.png │ │ │ │ │ │ ├── roundrobintrue.png │ │ │ │ │ │ ├── sneaky-north.png │ │ │ │ │ │ ├── sneaky-south.png │ │ │ │ │ │ ├── allowlisttrueold.png │ │ │ │ │ │ ├── roundrobinfalse.png │ │ │ │ │ │ ├── allowlistfalse_old.png │ │ │ │ │ │ └── roundrobinenforced.png │ │ │ │ │ ├── cardholder.png │ │ │ │ │ ├── energycard.png │ │ │ │ │ ├── filtercount.png │ │ │ │ │ ├── laser_node.png │ │ │ │ │ ├── redstonecard.png │ │ │ │ │ ├── cardholder_node.png │ │ │ │ │ └── laser_node_settings.png │ │ │ │ ├── block │ │ │ │ │ ├── laser_node.old │ │ │ │ │ ├── laser_node.png │ │ │ │ │ ├── laser_connector.old │ │ │ │ │ ├── laser_connector.png │ │ │ │ │ ├── laser_node_orig.png │ │ │ │ │ ├── laser_connector.oldred │ │ │ │ │ ├── laser_connector_advanced.png │ │ │ │ │ ├── laser_connector_advanced.oldred │ │ │ │ │ └── laser_node.png.mcmeta │ │ │ │ └── book │ │ │ │ │ └── entries │ │ │ │ │ ├── basics1.png │ │ │ │ │ ├── filter_tag.png │ │ │ │ │ ├── nbt_filter.png │ │ │ │ │ ├── settings1.png │ │ │ │ │ ├── basics-stock.png │ │ │ │ │ ├── filter_basic.png │ │ │ │ │ ├── laser_node1.png │ │ │ │ │ ├── laser_node2.png │ │ │ │ │ ├── laser_node3.png │ │ │ │ │ ├── laser_wrench.png │ │ │ │ │ ├── basics-extract.png │ │ │ │ │ ├── laser_node_gui1.png │ │ │ │ │ ├── laser_connector1.png │ │ │ │ │ ├── overclocker_node1.png │ │ │ │ │ ├── overclocker_node2.png │ │ │ │ │ ├── laser_connector_advanced1.png │ │ │ │ │ └── laser_connector_advanced2.png │ │ │ │ ├── patchouli_books │ │ │ │ └── laseriobook │ │ │ │ │ ├── zh_cn │ │ │ │ │ ├── categories │ │ │ │ │ │ ├── blocks.json │ │ │ │ │ │ ├── items.json │ │ │ │ │ │ ├── cards.json │ │ │ │ │ │ ├── filters.json │ │ │ │ │ │ └── mechanics.json │ │ │ │ │ └── entries │ │ │ │ │ │ ├── filter_mod.json │ │ │ │ │ │ ├── redstonechannel.json │ │ │ │ │ │ ├── filter_basic.json │ │ │ │ │ │ ├── sneaky.json │ │ │ │ │ │ ├── overclocker_card.json │ │ │ │ │ │ ├── regulate.json │ │ │ │ │ │ ├── channel.json │ │ │ │ │ │ ├── redstonemode.json │ │ │ │ │ │ ├── logic_chip.json │ │ │ │ │ │ ├── exact.json │ │ │ │ │ │ ├── card_item.json │ │ │ │ │ │ ├── card_fluid.json │ │ │ │ │ │ ├── priority.json │ │ │ │ │ │ ├── limit.json │ │ │ │ │ │ ├── laser_connector.json │ │ │ │ │ │ ├── laser_wrench.json │ │ │ │ │ │ ├── tickspeed.json │ │ │ │ │ │ ├── filter_count.json │ │ │ │ │ │ ├── roundrobin.json │ │ │ │ │ │ ├── extractamount.json │ │ │ │ │ │ ├── card_holder.json │ │ │ │ │ │ ├── filter_basics.json │ │ │ │ │ │ ├── filter_tag.json │ │ │ │ │ │ ├── card_redstone.json │ │ │ │ │ │ ├── oveclocker_node.json │ │ │ │ │ │ ├── modes.json │ │ │ │ │ │ └── card_energy.json │ │ │ │ │ ├── en_us │ │ │ │ │ ├── categories │ │ │ │ │ │ ├── blocks.json │ │ │ │ │ │ ├── items.json │ │ │ │ │ │ ├── cards.json │ │ │ │ │ │ ├── filters.json │ │ │ │ │ │ └── mechanics.json │ │ │ │ │ └── entries │ │ │ │ │ │ ├── filter_mod.json │ │ │ │ │ │ ├── redstonechannel.json │ │ │ │ │ │ ├── filter_basic.json │ │ │ │ │ │ ├── logic_chip.json │ │ │ │ │ │ ├── overclocker_card.json │ │ │ │ │ │ ├── sneaky.json │ │ │ │ │ │ ├── card_fluid.json │ │ │ │ │ │ ├── card_item.json │ │ │ │ │ │ ├── regulate.json │ │ │ │ │ │ ├── card_chemical.json │ │ │ │ │ │ ├── redstonemode.json │ │ │ │ │ │ ├── laser_connector.json │ │ │ │ │ │ ├── laser_wrench.json │ │ │ │ │ │ ├── exact.json │ │ │ │ │ │ ├── channel.json │ │ │ │ │ │ ├── card_cloner.json │ │ │ │ │ │ ├── limit.json │ │ │ │ │ │ └── priority.json │ │ │ │ │ └── pt_br │ │ │ │ │ ├── categories │ │ │ │ │ ├── blocks.json │ │ │ │ │ ├── items.json │ │ │ │ │ ├── filters.json │ │ │ │ │ ├── cards.json │ │ │ │ │ └── mechanics.json │ │ │ │ │ └── entries │ │ │ │ │ ├── filter_mod.json │ │ │ │ │ ├── redstonechannel.json │ │ │ │ │ ├── filter_basic.json │ │ │ │ │ ├── logic_chip.json │ │ │ │ │ ├── overclocker_card.json │ │ │ │ │ ├── sneaky.json │ │ │ │ │ ├── card_item.json │ │ │ │ │ ├── card_fluid.json │ │ │ │ │ ├── regulate.json │ │ │ │ │ ├── redstonemode.json │ │ │ │ │ ├── laser_connector.json │ │ │ │ │ ├── laser_wrench.json │ │ │ │ │ ├── channel.json │ │ │ │ │ ├── exact.json │ │ │ │ │ └── limit.json │ │ │ │ └── models │ │ │ │ └── item │ │ │ │ ├── card_item_stock.json │ │ │ │ ├── card_energy_stock.json │ │ │ │ ├── card_fluid_sensor.json │ │ │ │ ├── card_fluid_stock.json │ │ │ │ ├── card_item_extract.json │ │ │ │ ├── card_item_sensor.json │ │ │ │ ├── card_chemical_sensor.json │ │ │ │ ├── card_chemical_stock.json │ │ │ │ ├── card_energy_extract.json │ │ │ │ ├── card_energy_sensor.json │ │ │ │ ├── card_fluid_extract.json │ │ │ │ ├── card_chemical_extract.json │ │ │ │ ├── card_redstone_extract.json │ │ │ │ ├── card_redstone.json │ │ │ │ ├── card_item.json │ │ │ │ ├── card_fluid.json │ │ │ │ ├── card_energy.json │ │ │ │ └── card_chemical.json │ │ ├── pack.mcmeta │ │ └── data │ │ │ └── laserio │ │ │ ├── patchouli_books │ │ │ └── laseriobook │ │ │ │ └── book.json │ │ │ └── recipe │ │ │ └── my_book_recipe_shapeless.json │ └── java │ │ └── com │ │ └── direwolf20 │ │ └── laserio │ │ ├── common │ │ ├── items │ │ │ ├── filters │ │ │ │ └── FilterMod.java │ │ │ ├── LogicChip.java │ │ │ ├── LogicChipRaw.java │ │ │ └── upgrades │ │ │ │ ├── OverclockerCard.java │ │ │ │ └── OverclockerNode.java │ │ ├── blockentities │ │ │ └── LaserConnectorBE.java │ │ ├── containers │ │ │ ├── customslot │ │ │ │ ├── LaserNodeSlot.java │ │ │ │ └── CardOverclockSlot.java │ │ │ └── customhandler │ │ │ │ └── FilterBasicHandler.java │ │ ├── network │ │ │ ├── data │ │ │ │ ├── OpenFilterPayload.java │ │ │ │ ├── ToggleParticlesPayload.java │ │ │ │ ├── UpdateFilterPayload.java │ │ │ │ ├── CopyPasteCardPayload.java │ │ │ │ ├── OpenNodePayload.java │ │ │ │ ├── NodeParticlesPayload.java │ │ │ │ ├── UpdateFilterTagPayload.java │ │ │ │ ├── OpenCardPayload.java │ │ │ │ ├── ChangeColorPayload.java │ │ │ │ ├── NodeParticlesFluidPayload.java │ │ │ │ ├── UpdateRedstoneCardPayload.java │ │ │ │ ├── NodeParticlesChemicalPayload.java │ │ │ │ └── GhostSlotPayload.java │ │ │ └── handler │ │ │ │ ├── PacketChangeColor.java │ │ │ │ └── PacketToggleParticles.java │ │ └── blocks │ │ │ ├── baseblocks │ │ │ └── BaseLaserBlock.java │ │ │ └── LaserConnectorAdv.java │ │ ├── util │ │ ├── Vec2i.java │ │ ├── NonnullBiConsumer.java │ │ ├── SensorCardCache.java │ │ ├── StockerCardCache.java │ │ ├── ParticleRenderData.java │ │ ├── ParticleRenderDataFluid.java │ │ ├── InserterCardCache.java │ │ ├── MagicHelpers.java │ │ ├── CardHolderItemStackHandler.java │ │ └── NodeSideCache.java │ │ ├── integration │ │ └── mekanism │ │ │ ├── MekanismIntegration.java │ │ │ └── client │ │ │ └── chemicalparticle │ │ │ ├── ParticleRenderDataChemical.java │ │ │ ├── MekanismModParticles.java │ │ │ └── ChemicalFlowParticleType.java │ │ ├── datagen │ │ ├── LaserIOBlockStates.java │ │ ├── LaserIOLootTable.java │ │ └── LaserIOBlockTags.java │ │ └── client │ │ ├── particles │ │ ├── itemparticle │ │ │ └── ItemFlowParticleType.java │ │ ├── fluidparticle │ │ │ └── FluidFlowParticleType.java │ │ └── ModParticles.java │ │ ├── blockentityrenders │ │ ├── LaserConnectorBERender.java │ │ └── baseberender │ │ │ └── BaseLaserBERender.java │ │ ├── events │ │ └── RenderGUIOverlay.java │ │ └── renderer │ │ └── DelayedRenderer.java └── generated │ └── resources │ ├── assets │ └── laserio │ │ └── models │ │ └── item │ │ ├── laser_node.json │ │ ├── laser_connector.json │ │ ├── laser_connector_advanced.json │ │ ├── card_cloner.json │ │ ├── card_holder.json │ │ ├── filter_basic.json │ │ ├── filter_count.json │ │ ├── filter_mod.json │ │ ├── filter_nbt.json │ │ ├── filter_tag.json │ │ ├── laser_wrench.json │ │ ├── logic_chip.json │ │ ├── logic_chip_raw.json │ │ ├── overclocker_card.json │ │ └── overclocker_node.json │ ├── data │ ├── c │ │ └── tags │ │ │ └── item │ │ │ ├── wrenches.json │ │ │ └── tools │ │ │ └── wrench.json │ ├── minecraft │ │ └── tags │ │ │ └── block │ │ │ └── mineable │ │ │ └── pickaxe.json │ └── laserio │ │ ├── tags │ │ └── item │ │ │ └── filters.json │ │ ├── recipe │ │ ├── card_fluid_nbtclear.json │ │ ├── card_item_nbtclear.json │ │ ├── logic_chip.json │ │ ├── card_energy_nbtclear.json │ │ ├── card_redstone_nbtclear.json │ │ ├── filter_mod_nbtclear.json │ │ ├── filter_nbt_nbtclear.json │ │ ├── filter_tag_nbtclear.json │ │ ├── filter_basic_nbtclear.json │ │ ├── filter_count_nbtclear.json │ │ ├── filter_mod.json │ │ ├── filter_tag.json │ │ ├── filter_nbt.json │ │ ├── filter_count.json │ │ ├── laser_wrench.json │ │ ├── card_chemical_nbtclear.json │ │ ├── card_holder.json │ │ ├── card_cloner.json │ │ ├── laser_node.json │ │ ├── filter_basic.json │ │ ├── overclocker_card.json │ │ ├── overclocker_node.json │ │ ├── card_redstone.json │ │ ├── laser_connector.json │ │ ├── logic_chip_raw.json │ │ ├── card_item.json │ │ ├── card_fluid.json │ │ ├── card_energy.json │ │ ├── laser_connector_advanced.json │ │ └── card_chemical.json │ │ ├── loot_table │ │ └── blocks │ │ │ ├── laser_node.json │ │ │ ├── laser_connector.json │ │ │ └── laser_connector_advanced.json │ │ └── advancement │ │ └── recipes │ │ └── misc │ │ ├── card_fluid.json │ │ ├── card_item.json │ │ ├── logic_chip.json │ │ ├── card_cloner.json │ │ ├── card_energy.json │ │ ├── card_holder.json │ │ ├── filter_basic.json │ │ ├── filter_mod.json │ │ ├── filter_nbt.json │ │ ├── filter_tag.json │ │ ├── laser_wrench.json │ │ ├── card_redstone.json │ │ ├── logic_chip_raw.json │ │ ├── filter_count.json │ │ ├── laser_connector.json │ │ ├── laser_node.json │ │ ├── card_item_nbtclear.json │ │ ├── filter_nbt_nbtclear.json │ │ ├── overclocker_card.json │ │ ├── overclocker_node.json │ │ ├── card_fluid_nbtclear.json │ │ ├── filter_mod_nbtclear.json │ │ ├── filter_tag_nbtclear.json │ │ ├── card_energy_nbtclear.json │ │ ├── filter_basic_nbtclear.json │ │ ├── filter_count_nbtclear.json │ │ ├── card_redstone_nbtclear.json │ │ ├── laser_connector_advanced.json │ │ ├── card_chemical.json │ │ └── card_chemical_nbtclear.json │ └── .cache │ ├── a48b1c9816c34b0df16ee17eb3e5147527f9277d │ ├── 708c58c74005454a81c29936fbb33cb30602eb59 │ ├── 4cf32af2ec4a8dd31b9375f1443e6ccfbff638ab │ ├── 2c28ab5af8cf4216d700c0a22ed2d3599a2dc96d │ └── 59eb3dbb5f86130e09b3c62d89b9525ee01cf52d ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitattributes ├── settings.gradle ├── changelog.txt ├── .gitignore ├── .github ├── ISSUE_TEMPLATE │ └── feature-request.yml └── workflows │ └── build.yml └── LICENSE.txt /README.md: -------------------------------------------------------------------------------- 1 | # LaserIO 2 | Can't have DireWire without Wires! 3 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/particles/fluidflowparticle.json: -------------------------------------------------------------------------------- 1 | { 2 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/particles/itemflowparticle.json: -------------------------------------------------------------------------------- 1 | { 2 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/particles/chemicalflowparticle.json: -------------------------------------------------------------------------------- 1 | { 2 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/laserio/models/item/laser_node.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "laserio:block/laser_node" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/data/c/tags/item/wrenches.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "laserio:laser_wrench" 4 | ] 5 | } -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /src/generated/resources/data/c/tags/item/tools/wrench.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "laserio:laser_wrench" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/laserio/models/item/laser_connector.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "laserio:block/laser_connector" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/.cache/a48b1c9816c34b0df16ee17eb3e5147527f9277d: -------------------------------------------------------------------------------- 1 | // 1.21.1 2024-08-18T17:29:13.477299 Block States: laserio 2 | -------------------------------------------------------------------------------- /src/generated/resources/assets/laserio/models/item/laser_connector_advanced.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "laserio:block/laser_connector_advanced" 3 | } -------------------------------------------------------------------------------- /src/main/resources/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "description": "examplemod resources", 4 | "pack_format": 9 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/blockstates/laser_node.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "laserio:block/laser_node" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/dire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/dire.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/misc/laser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/misc/laser.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/misc/laser2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/misc/laser2.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/filtertag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/filtertag.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/itemcard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/itemcard.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/block/laser_node.old: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/block/laser_node.old -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/block/laser_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/block/laser_node.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/basicfilter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/basicfilter.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/add.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/and.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/and.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/or.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/or.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/cardholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/cardholder.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/energycard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/energycard.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/filtercount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/filtercount.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/laser_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/laser_node.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/redstonecard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/redstonecard.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/card_cloner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/card_cloner.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/card_energy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/card_energy.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/card_fluid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/card_fluid.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/card_holder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/card_holder.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/card_item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/card_item.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/filter_mod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/filter_mod.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/filter_nbt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/filter_nbt.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/filter_tag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/filter_tag.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/logic_chip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/logic_chip.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/misc/laser_glow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/misc/laser_glow.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/categories/blocks.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "方块", 3 | "description": "本模组的方块!", 4 | "icon": "laserio:laser_node" 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/categories/items.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "物品", 3 | "description": "本模组的一些物品!", 4 | "icon": "laserio:laser_wrench" 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/clear.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/pageup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/pageup.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/remove.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/sneaky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/sneaky.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/card_chemical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/card_chemical.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/card_redstone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/card_redstone.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/filter_basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/filter_basic.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/filter_count.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/filter_count.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/laser_wrench.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/laser_wrench.png -------------------------------------------------------------------------------- /src/generated/resources/assets/laserio/models/item/card_cloner.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "laserio:item/card_cloner" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/laserio/models/item/card_holder.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "laserio:item/card_holder" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/laserio/models/item/filter_basic.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "laserio:item/filter_basic" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/laserio/models/item/filter_count.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "laserio:item/filter_count" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/laserio/models/item/filter_mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "laserio:item/filter_mod" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/laserio/models/item/filter_nbt.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "laserio:item/filter_nbt" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/laserio/models/item/filter_tag.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "laserio:item/filter_tag" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/laserio/models/item/laser_wrench.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "laserio:item/laser_wrench" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/laserio/models/item/logic_chip.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "laserio:item/logic_chip" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/models/item/card_item_stock.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "laserio:item/card_item", 3 | "textures": { 4 | "layer1": "laserio:item/cardlayers/stock" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/block/laser_connector.old: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/block/laser_connector.old -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/block/laser_connector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/block/laser_connector.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/block/laser_node_orig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/block/laser_node_orig.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/book/entries/basics1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/book/entries/basics1.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/exacttrue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/exacttrue.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/pagedown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/pagedown.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/settings.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/sneaky-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/sneaky-up.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/cardholder_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/cardholder_node.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/cardlayers/stock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/cardlayers/stock.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/logic_chip_raw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/logic_chip_raw.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/overclocker_card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/overclocker_card.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/overclocker_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/overclocker_node.png -------------------------------------------------------------------------------- /src/generated/resources/assets/laserio/models/item/logic_chip_raw.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "laserio:item/logic_chip_raw" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/models/item/card_energy_stock.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "laserio:item/card_energy", 3 | "textures": { 4 | "layer1": "laserio:item/cardlayers/stock" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/models/item/card_fluid_sensor.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "laserio:item/card_fluid", 3 | "textures": { 4 | "layer1": "laserio:item/cardlayers/sensor" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/models/item/card_fluid_stock.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "laserio:item/card_fluid", 3 | "textures": { 4 | "layer1": "laserio:item/cardlayers/stock" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/models/item/card_item_extract.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "laserio:item/card_item", 3 | "textures": { 4 | "layer1": "laserio:item/cardlayers/extract" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/models/item/card_item_sensor.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "laserio:item/card_item", 3 | "textures": { 4 | "layer1": "laserio:item/cardlayers/sensor" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/book/entries/filter_tag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/book/entries/filter_tag.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/book/entries/nbt_filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/book/entries/nbt_filter.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/book/entries/settings1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/book/entries/settings1.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/blankbutton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/blankbutton.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/exactfalse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/exactfalse.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/modesensor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/modesensor.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/modestocker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/modestocker.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/redstonelow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/redstonelow.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/sneaky-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/sneaky-down.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/sneaky-east.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/sneaky-east.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/sneaky-west.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/sneaky-west.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/laser_node_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/laser_node_settings.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/cardlayers/channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/cardlayers/channel.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/cardlayers/extract.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/cardlayers/extract.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/cardlayers/insert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/cardlayers/insert.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/item/cardlayers/sensor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/item/cardlayers/sensor.png -------------------------------------------------------------------------------- /src/generated/resources/assets/laserio/models/item/overclocker_card.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "laserio:item/overclocker_card" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/laserio/models/item/overclocker_node.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "laserio:item/overclocker_node" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/models/item/card_chemical_sensor.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "laserio:item/card_chemical", 3 | "textures": { 4 | "layer1": "laserio:item/cardlayers/sensor" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/models/item/card_chemical_stock.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "laserio:item/card_chemical", 3 | "textures": { 4 | "layer1": "laserio:item/cardlayers/stock" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/models/item/card_energy_extract.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "laserio:item/card_energy", 3 | "textures": { 4 | "layer1": "laserio:item/cardlayers/extract" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/models/item/card_energy_sensor.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "laserio:item/card_energy", 3 | "textures": { 4 | "layer1": "laserio:item/cardlayers/sensor" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/models/item/card_fluid_extract.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "laserio:item/card_fluid", 3 | "textures": { 4 | "layer1": "laserio:item/cardlayers/extract" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/categories/blocks.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Blocks", 3 | "description": "These are the blocks!", 4 | "icon": "laserio:laser_node" 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/categories/blocks.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Blocos", 3 | "description": "Esses são os blocos!", 4 | "icon": "laserio:laser_node" 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/block/laser_connector.oldred: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/block/laser_connector.oldred -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/book/entries/basics-stock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/book/entries/basics-stock.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/book/entries/filter_basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/book/entries/filter_basic.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/book/entries/laser_node1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/book/entries/laser_node1.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/book/entries/laser_node2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/book/entries/laser_node2.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/book/entries/laser_node3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/book/entries/laser_node3.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/book/entries/laser_wrench.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/book/entries/laser_wrench.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/allowlistfalse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/allowlistfalse.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/allowlisttrue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/allowlisttrue.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/matchnbtfalse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/matchnbtfalse.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/matchnbttrue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/matchnbttrue.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/modeextractor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/modeextractor.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/modeinserter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/modeinserter.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/modeprovider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/modeprovider.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/redstonehigh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/redstonehigh.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/redstoneignore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/redstoneignore.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/redstoneinput.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/redstoneinput.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/redstoneoutput.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/redstoneoutput.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/regulatefalse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/regulatefalse.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/regulatetrue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/regulatetrue.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/roundrobintrue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/roundrobintrue.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/sneaky-north.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/sneaky-north.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/sneaky-south.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/sneaky-south.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/models/item/card_chemical_extract.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "laserio:item/card_chemical", 3 | "textures": { 4 | "layer1": "laserio:item/cardlayers/extract" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/models/item/card_redstone_extract.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "laserio:item/card_redstone", 3 | "textures": { 4 | "layer1": "laserio:item/cardlayers/extract" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/book/entries/basics-extract.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/book/entries/basics-extract.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/book/entries/laser_node_gui1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/book/entries/laser_node_gui1.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/allowlisttrueold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/allowlisttrueold.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/roundrobinfalse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/roundrobinfalse.png -------------------------------------------------------------------------------- /src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "laserio:laser_node", 4 | "laserio:laser_connector", 5 | "laserio:laser_connector_advanced" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/block/laser_connector_advanced.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/block/laser_connector_advanced.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/book/entries/laser_connector1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/book/entries/laser_connector1.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/book/entries/overclocker_node1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/book/entries/overclocker_node1.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/book/entries/overclocker_node2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/book/entries/overclocker_node2.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/allowlistfalse_old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/allowlistfalse_old.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/gui/buttons/roundrobinenforced.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/gui/buttons/roundrobinenforced.png -------------------------------------------------------------------------------- /src/generated/resources/.cache/708c58c74005454a81c29936fbb33cb30602eb59: -------------------------------------------------------------------------------- 1 | // 1.21.1 2024-08-18T17:29:13.472295 LaserIO Tags 2 | 7f05d88fd7507637835354bcacc306dd87166efe data/minecraft/tags/block/mineable/pickaxe.json 3 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/categories/items.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Items", 3 | "description": "A few items that are used in the mod!", 4 | "icon": "laserio:laser_wrench" 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/categories/items.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Itens", 3 | "description": "Alguns itens que são usados no mod!", 4 | "icon": "laserio:laser_wrench" 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/block/laser_connector_advanced.oldred: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/block/laser_connector_advanced.oldred -------------------------------------------------------------------------------- /src/generated/resources/.cache/4cf32af2ec4a8dd31b9375f1443e6ccfbff638ab: -------------------------------------------------------------------------------- 1 | // 1.21.1 2024-08-18T17:29:13.4747969 Languages: en_us for mod: laserio 2 | 85b7b822654083ab1c8be08c584bb15e38a364a0 assets/laserio/lang/en_us.json 3 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/categories/cards.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "卡", 3 | "description": "节点依靠这些卡与附近的方块交互,没有它们的话节点就没有作用!", 4 | "sortnum": 1, 5 | "icon": "laserio:card_item" 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/categories/filters.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "过滤器", 3 | "description": "使用过滤器,你可以控制什么东西能或者不能被卡转移。", 4 | "sortnum": 3, 5 | "icon": "laserio:filter_basic" 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/book/entries/laser_connector_advanced1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/book/entries/laser_connector_advanced1.png -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/book/entries/laser_connector_advanced2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Direwolf20-MC/LaserIO/HEAD/src/main/resources/assets/laserio/textures/book/entries/laser_connector_advanced2.png -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/tags/item/filters.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "laserio:filter_basic", 4 | "laserio:filter_count", 5 | "laserio:filter_tag", 6 | "laserio:filter_mod", 7 | "laserio:filter_nbt" 8 | ] 9 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/categories/mechanics.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "卡的机制", 3 | "description": "下面的内容将详细描述卡的基本运作机制,如果某个机制专属于某种卡,会在每个条目的第一页标明。", 4 | "sortnum": 2, 5 | "icon": "laserio:logic_chip" 6 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/items/filters/FilterMod.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.items.filters; 2 | 3 | public class FilterMod extends FilterBasic { 4 | public FilterMod() { 5 | super(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/categories/cards.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Cards", 3 | "description": "Cards are how Nodes interact with adjacent blocks. Without them Nodes are worthless!", 4 | "sortnum": 1, 5 | "icon": "laserio:card_item" 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/categories/filters.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Filtros", 3 | "description": "Os filtros permitem que você controle o que pode ou não ser movido pelos Cartões.", 4 | "sortnum": 3, 5 | "icon": "laserio:filter_basic" 6 | } -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Disable autocrlf on generated files, they always generate with LF 2 | # Add any extra files or paths here to make git stop saying they 3 | # are changed when only line endings change. 4 | src/generated/**/.cache/cache text eol=lf 5 | src/generated/**/*.json text eol=lf 6 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/categories/filters.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Filters", 3 | "description": "Filters allow you to control what is, or is not, allowed to be moved around by cards.", 4 | "sortnum": 3, 5 | "icon": "laserio:filter_basic" 6 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/util/Vec2i.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.util; 2 | 3 | public class Vec2i { 4 | public final int x; 5 | public final int y; 6 | 7 | public Vec2i(int x, int y) { 8 | this.x = x; 9 | this.y = y; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/main/resources/data/laserio/patchouli_books/laseriobook/book.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "LaserIO 101", 3 | "landing_text": "Can't have DireWire without Wires!", 4 | "version": 1, 5 | "creative_tab": "laserio:laserio", 6 | "getCreatorModId": "laserio", 7 | "use_resource_pack": "true" 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/textures/block/laser_node.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "interpolate": true, 4 | "frames": [ 5 | { 6 | "index": 0, 7 | "time": 25 8 | }, 9 | { 10 | "index": 1, 11 | "time": 25 12 | } 13 | ] 14 | } 15 | } -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | mavenLocal() 4 | gradlePluginPortal() 5 | maven { url = 'https://maven.neoforged.net/releases' } 6 | } 7 | } 8 | 9 | plugins { 10 | id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0' 11 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/items/LogicChip.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.items; 2 | 3 | import net.minecraft.world.item.Item; 4 | 5 | public class LogicChip extends Item { 6 | 7 | public LogicChip() { 8 | super(new Item.Properties()); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/categories/cards.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Cartões", 3 | "description": "Os Cartões oferecem maneiras para que os Nós consigam interagir com os blocos adjacentes. Sem eles os Nós são inúteis!", 4 | "sortnum": 1, 5 | "icon": "laserio:card_item" 6 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/items/LogicChipRaw.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.items; 2 | 3 | import net.minecraft.world.item.Item; 4 | 5 | public class LogicChipRaw extends Item { 6 | 7 | public LogicChipRaw() { 8 | super(new Item.Properties()); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/items/upgrades/OverclockerCard.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.items.upgrades; 2 | 3 | import net.minecraft.world.item.Item; 4 | 5 | public class OverclockerCard extends Item { 6 | public OverclockerCard() { 7 | super(new Item.Properties()); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/items/upgrades/OverclockerNode.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.items.upgrades; 2 | 3 | import net.minecraft.world.item.Item; 4 | 5 | public class OverclockerNode extends Item { 6 | public OverclockerNode() { 7 | super(new Item.Properties()); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/card_fluid_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "laserio:cardclear", 3 | "category": "misc", 4 | "group": "laserio", 5 | "ingredients": [ 6 | { 7 | "item": "laserio:card_fluid" 8 | } 9 | ], 10 | "result": { 11 | "count": 1, 12 | "id": "laserio:card_fluid" 13 | } 14 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/card_item_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "laserio:cardclear", 3 | "category": "misc", 4 | "group": "laserio", 5 | "ingredients": [ 6 | { 7 | "item": "laserio:card_item" 8 | } 9 | ], 10 | "result": { 11 | "count": 1, 12 | "id": "laserio:card_item" 13 | } 14 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/logic_chip.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:smelting", 3 | "category": "misc", 4 | "cookingtime": 100, 5 | "experience": 1.0, 6 | "ingredient": { 7 | "item": "laserio:logic_chip_raw" 8 | }, 9 | "result": { 10 | "count": 1, 11 | "id": "laserio:logic_chip" 12 | } 13 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/card_energy_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "laserio:cardclear", 3 | "category": "misc", 4 | "group": "laserio", 5 | "ingredients": [ 6 | { 7 | "item": "laserio:card_energy" 8 | } 9 | ], 10 | "result": { 11 | "count": 1, 12 | "id": "laserio:card_energy" 13 | } 14 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/card_redstone_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "laserio:cardclear", 3 | "category": "misc", 4 | "group": "laserio", 5 | "ingredients": [ 6 | { 7 | "item": "laserio:card_redstone" 8 | } 9 | ], 10 | "result": { 11 | "count": 1, 12 | "id": "laserio:card_redstone" 13 | } 14 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/filter_mod_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "category": "misc", 4 | "group": "laserio", 5 | "ingredients": [ 6 | { 7 | "item": "laserio:filter_mod" 8 | } 9 | ], 10 | "result": { 11 | "count": 1, 12 | "id": "laserio:filter_mod" 13 | } 14 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/filter_nbt_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "category": "misc", 4 | "group": "laserio", 5 | "ingredients": [ 6 | { 7 | "item": "laserio:filter_nbt" 8 | } 9 | ], 10 | "result": { 11 | "count": 1, 12 | "id": "laserio:filter_nbt" 13 | } 14 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/filter_tag_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "category": "misc", 4 | "group": "laserio", 5 | "ingredients": [ 6 | { 7 | "item": "laserio:filter_tag" 8 | } 9 | ], 10 | "result": { 11 | "count": 1, 12 | "id": "laserio:filter_tag" 13 | } 14 | } -------------------------------------------------------------------------------- /changelog.txt: -------------------------------------------------------------------------------- 1 | v0.1.3 2 | -Added Tag Filter 3 | -Allows player to filter by tags on items 4 | -Switch UI's on Node 5 | -Can access any side from within the node UI 6 | -Shift RightClick an item card in a node to jump straight to the filter 7 | -Saves you a click 8 | -Misc bug fixes 9 | -ToolType on blocks 10 | -------------------------------------------------------------------------------- /src/generated/resources/.cache/2c28ab5af8cf4216d700c0a22ed2d3599a2dc96d: -------------------------------------------------------------------------------- 1 | // 1.21.1 2024-08-18T17:29:13.4737966 LaserIO Item Tags 2 | 82b9a7dae6ddacedd44e7762b68ca8e0594f1c01 data/c/tags/item/tools/wrench.json 3 | 82b9a7dae6ddacedd44e7762b68ca8e0594f1c01 data/c/tags/item/wrenches.json 4 | fe233e1d1b6d29c99e4e7f9ec5de223dd17076de data/laserio/tags/item/filters.json 5 | -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/filter_basic_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "category": "misc", 4 | "group": "laserio", 5 | "ingredients": [ 6 | { 7 | "item": "laserio:filter_basic" 8 | } 9 | ], 10 | "result": { 11 | "count": 1, 12 | "id": "laserio:filter_basic" 13 | } 14 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/filter_count_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "category": "misc", 4 | "group": "laserio", 5 | "ingredients": [ 6 | { 7 | "item": "laserio:filter_count" 8 | } 9 | ], 10 | "result": { 11 | "count": 1, 12 | "id": "laserio:filter_count" 13 | } 14 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/categories/mechanics.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Card Mechanics", 3 | "description": "The following sections identify the basic mechanics of cards. If a mechanic is unique to a card type, it will be identified in the first page of the entry.", 4 | "sortnum": 2, 5 | "icon": "laserio:logic_chip" 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/categories/mechanics.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Mecânicas dos Cartões", 3 | "description": "As seções a seguir identificam a mecânica básica dos cartões. Se uma mecânica for exclusiva de um tipo de cartão, ela será identificada na primeira página da entrada.", 4 | "sortnum": 2, 5 | "icon": "laserio:logic_chip" 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/filter_mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "模组过滤器", 3 | "sortnum": 3, 4 | "category": "laserio:filters", 5 | "icon": "laserio:filter_mod", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "模组过滤器根据物品/方块的来源进行过滤。例如,如果你放进一个激光扳手,所有 LaserIO 的物品和方块都会被匹配到。" 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # eclipse 2 | bin 3 | *.launch 4 | .settings 5 | .metadata 6 | .classpath 7 | .project 8 | 9 | # idea 10 | out 11 | *.ipr 12 | *.iws 13 | *.iml 14 | .idea 15 | 16 | # gradle 17 | build 18 | .gradle 19 | 20 | # other 21 | eclipse 22 | run 23 | runs 24 | run-data 25 | 26 | # Files from Forge MDK 27 | forge*changelog.txt 28 | 29 | .vscode 30 | /extra-mods/ 31 | /extra-api/ 32 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/util/NonnullBiConsumer.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.util; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * Equivalent to {@link BiConsumer}, except with nonnull contract. 7 | * 8 | * @see BiConsumer 9 | */ 10 | @FunctionalInterface 11 | public interface NonnullBiConsumer { 12 | void accept(@Nonnull T t, @Nonnull U u); 13 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/filter_mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "category": "misc", 4 | "group": "laserio", 5 | "ingredients": [ 6 | { 7 | "item": "laserio:filter_basic" 8 | }, 9 | { 10 | "item": "minecraft:book" 11 | } 12 | ], 13 | "result": { 14 | "count": 1, 15 | "id": "laserio:filter_mod" 16 | } 17 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/filter_tag.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "category": "misc", 4 | "group": "laserio", 5 | "ingredients": [ 6 | { 7 | "item": "laserio:filter_basic" 8 | }, 9 | { 10 | "item": "minecraft:paper" 11 | } 12 | ], 13 | "result": { 14 | "count": 1, 15 | "id": "laserio:filter_tag" 16 | } 17 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/filter_nbt.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "category": "misc", 4 | "group": "laserio", 5 | "ingredients": [ 6 | { 7 | "item": "laserio:filter_basic" 8 | }, 9 | { 10 | "item": "minecraft:white_wool" 11 | } 12 | ], 13 | "result": { 14 | "count": 1, 15 | "id": "laserio:filter_nbt" 16 | } 17 | } -------------------------------------------------------------------------------- /src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d: -------------------------------------------------------------------------------- 1 | // 1.21.1 2024-08-18T17:29:13.475297 Loot Tables 2 | c5726937d6920d471a92b3b78bc18928c3075f2a data/laserio/loot_table/blocks/laser_connector.json 3 | f12657c7a130011834944b79a82f612b9a7c2969 data/laserio/loot_table/blocks/laser_connector_advanced.json 4 | 36898cfead2a1119ea9c15f8c84710a5eee0762d data/laserio/loot_table/blocks/laser_node.json 5 | -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/filter_count.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "category": "misc", 4 | "group": "laserio", 5 | "ingredients": [ 6 | { 7 | "item": "laserio:filter_basic" 8 | }, 9 | { 10 | "item": "minecraft:observer" 11 | } 12 | ], 13 | "result": { 14 | "count": 1, 15 | "id": "laserio:filter_count" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/integration/mekanism/MekanismIntegration.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.integration.mekanism; 2 | 3 | import net.neoforged.fml.ModList; 4 | 5 | public class MekanismIntegration { 6 | private static final String ID = "mekanism"; 7 | 8 | public MekanismIntegration() { 9 | } 10 | 11 | public static boolean isLoaded() { 12 | return ModList.get().isLoaded(ID); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/redstonechannel.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "红石频道", 3 | "sortnum": 11, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/redstoneignore.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "各种卡拥有一个与主频道独立的红石频道。$(br2)处于该频道上的红石信号会影响卡。在$(l:laserio:redstonemode)红石模式$(/l)和$(l:laserio:card_redstone)红石卡$(/l)查看详细信息。" 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/laser_wrench.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "category": "misc", 4 | "group": "laserio", 5 | "key": { 6 | "b": { 7 | "item": "laserio:logic_chip" 8 | }, 9 | "i": { 10 | "tag": "c:ingots/iron" 11 | } 12 | }, 13 | "pattern": [ 14 | "i i", 15 | " b ", 16 | " i " 17 | ], 18 | "result": { 19 | "count": 1, 20 | "id": "laserio:laser_wrench" 21 | } 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/models/item/card_redstone.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "laserio:item/card_redstone", 5 | "layer1": "laserio:item/cardlayers/insert", 6 | "layer2": "laserio:item/cardlayers/channel" 7 | }, 8 | "overrides": [ 9 | { 10 | "predicate": { 11 | "laserio:mode": 1 12 | }, 13 | "model": "laserio:item/card_redstone_extract" 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/card_chemical_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "neoforge:conditions": [ 3 | { 4 | "type": "neoforge:mod_loaded", 5 | "modid": "mekanism" 6 | } 7 | ], 8 | "type": "laserio:cardclear", 9 | "category": "misc", 10 | "group": "laserio", 11 | "ingredients": [ 12 | { 13 | "item": "laserio:card_chemical" 14 | } 15 | ], 16 | "result": { 17 | "count": 1, 18 | "id": "laserio:card_chemical" 19 | } 20 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/entries/filter_mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Mod Filter", 3 | "sortnum": 3, 4 | "category": "laserio:filters", 5 | "icon": "laserio:filter_mod", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "The mod filter will sort based on what mod an item/block comes from. For example, if you place a Laser Wrench in the filter, all LaserIO items and blocks will match that filter." 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/util/SensorCardCache.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.util; 2 | 3 | import com.direwolf20.laserio.common.blockentities.LaserNodeBE; 4 | import net.minecraft.core.Direction; 5 | import net.minecraft.world.item.ItemStack; 6 | 7 | public class SensorCardCache extends ExtractorCardCache { 8 | 9 | public SensorCardCache(Direction direction, ItemStack cardItem, int cardSlot, LaserNodeBE be) { 10 | super(direction, cardItem, cardSlot, be); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/entries/filter_mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Filtro de Mods", 3 | "sortnum": 3, 4 | "category": "laserio:filters", 5 | "icon": "laserio:filter_mod", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "O Filtro de Mod irá classificar com base em qual mod um item/bloco vem. Por exemplo, se você colocar uma Chave a Laser no filtro, todos os itens e blocos do LaserIO corresponderão a esse filtro." 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/filter_basic.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "基础过滤器", 3 | "sortnum": 1, 4 | "category": "laserio:filters", 5 | "icon": "laserio:filter_basic", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "过滤器用于限制容器中的何种物品能够通过。$(br2)过滤器里的栏位都是“幽灵栏位”,它们不真的存储物品,只是显示物品图标而已。" 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "如果安装了 JEI,你可以直接从 JEI 拖拽物品。只需在 JEI 左键点击某个物品放进过滤器栏位即可。" 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/card_holder.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "category": "misc", 4 | "group": "laserio", 5 | "key": { 6 | "b": { 7 | "item": "laserio:logic_chip" 8 | }, 9 | "c": { 10 | "tag": "c:chests" 11 | }, 12 | "i": { 13 | "tag": "c:ingots/iron" 14 | } 15 | }, 16 | "pattern": [ 17 | "i i", 18 | "cbc", 19 | "i i" 20 | ], 21 | "result": { 22 | "count": 1, 23 | "id": "laserio:card_holder" 24 | } 25 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/sneaky.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "潜行", 3 | "sortnum": 2, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/sneaky-up.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "“潜行”设定决定卡将作用在哪个方向的相邻容器。$(br2)例如,熔炉在顶面接受物品。如果节点在熔炉下面,将输入卡的“潜行”设置为“上”。" 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "这张卡会试图从熔炉的顶面输入物品。$(br2)另外一张设定为“潜行”“下”的卡会从下方输入燃料。" 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/card_cloner.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "category": "misc", 4 | "group": "laserio", 5 | "key": { 6 | "b": { 7 | "item": "laserio:logic_chip" 8 | }, 9 | "c": { 10 | "item": "minecraft:paper" 11 | }, 12 | "i": { 13 | "tag": "c:ingots/iron" 14 | } 15 | }, 16 | "pattern": [ 17 | "i i", 18 | "cbc", 19 | "i i" 20 | ], 21 | "result": { 22 | "count": 1, 23 | "id": "laserio:card_cloner" 24 | } 25 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/laser_node.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "category": "misc", 4 | "group": "laserio", 5 | "key": { 6 | "b": { 7 | "item": "laserio:laser_connector" 8 | }, 9 | "g": { 10 | "tag": "c:glass_panes" 11 | }, 12 | "i": { 13 | "tag": "c:ingots/iron" 14 | } 15 | }, 16 | "pattern": [ 17 | "igi", 18 | "gbg", 19 | "igi" 20 | ], 21 | "result": { 22 | "count": 1, 23 | "id": "laserio:laser_node" 24 | } 25 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/loot_table/blocks/laser_node.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "bonus_rolls": 0.0, 6 | "conditions": [ 7 | { 8 | "condition": "minecraft:survives_explosion" 9 | } 10 | ], 11 | "entries": [ 12 | { 13 | "type": "minecraft:item", 14 | "name": "laserio:laser_node" 15 | } 16 | ], 17 | "rolls": 1.0 18 | } 19 | ], 20 | "random_sequence": "laserio:blocks/laser_node" 21 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/filter_basic.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "category": "misc", 4 | "group": "laserio", 5 | "key": { 6 | "g": { 7 | "tag": "c:glass_panes" 8 | }, 9 | "i": { 10 | "item": "minecraft:iron_bars" 11 | }, 12 | "q": { 13 | "item": "laserio:logic_chip" 14 | } 15 | }, 16 | "pattern": [ 17 | "igi", 18 | "gqg", 19 | "igi" 20 | ], 21 | "result": { 22 | "count": 4, 23 | "id": "laserio:filter_basic" 24 | } 25 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/overclocker_card.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "category": "misc", 4 | "group": "laserio", 5 | "key": { 6 | "g": { 7 | "tag": "c:ingots/gold" 8 | }, 9 | "p": { 10 | "item": "laserio:logic_chip" 11 | }, 12 | "r": { 13 | "tag": "c:dusts/redstone" 14 | } 15 | }, 16 | "pattern": [ 17 | " g ", 18 | "rpr", 19 | "ggg" 20 | ], 21 | "result": { 22 | "count": 1, 23 | "id": "laserio:overclocker_card" 24 | } 25 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/overclocker_node.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "category": "misc", 4 | "group": "laserio", 5 | "key": { 6 | "g": { 7 | "tag": "c:gems/diamond" 8 | }, 9 | "p": { 10 | "item": "laserio:logic_chip" 11 | }, 12 | "r": { 13 | "tag": "c:dusts/redstone" 14 | } 15 | }, 16 | "pattern": [ 17 | " g ", 18 | "rpr", 19 | "ggg" 20 | ], 21 | "result": { 22 | "count": 1, 23 | "id": "laserio:overclocker_node" 24 | } 25 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/loot_table/blocks/laser_connector.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "bonus_rolls": 0.0, 6 | "conditions": [ 7 | { 8 | "condition": "minecraft:survives_explosion" 9 | } 10 | ], 11 | "entries": [ 12 | { 13 | "type": "minecraft:item", 14 | "name": "laserio:laser_connector" 15 | } 16 | ], 17 | "rolls": 1.0 18 | } 19 | ], 20 | "random_sequence": "laserio:blocks/laser_connector" 21 | } -------------------------------------------------------------------------------- /src/main/resources/data/laserio/recipe/my_book_recipe_shapeless.json: -------------------------------------------------------------------------------- 1 | { 2 | "neoforge:conditions": [ 3 | { 4 | "type": "neoforge:mod_loaded", 5 | "modid": "patchouli" 6 | } 7 | ], 8 | "type": "minecraft:crafting_shapeless", 9 | "ingredients": [ 10 | { 11 | "item": "laserio:logic_chip" 12 | }, 13 | { 14 | "item": "minecraft:book" 15 | } 16 | ], 17 | "result": { 18 | "id": "patchouli:guide_book", 19 | "components": { 20 | "patchouli:book": "laserio:laseriobook" 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/overclocker_card.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "卡超频元件", 3 | "icon": "laserio:overclocker_card", 4 | "sortnum": 2, 5 | "category": "laserio:items", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "卡超频元件允许一张卡更快运作。$(br2)例如,物品卡每 20 刻(1 秒)只能抽取 8 个物品。安装 4 个超频元件后每刻就能抽取 64 个物品!$(br2)查看关于卡的条目获取每种卡超频后的详细数据。" 10 | }, 11 | { 12 | "type": "patchouli:crafting", 13 | "title": "卡超频元件", 14 | "recipe": "laserio:overclocker_card" 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/regulate.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "固定数量", 3 | "sortnum": 9, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/regulatetrue.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "固定数量只在存储模式可用。$(br2)固定数量将保证计数过滤器保持容器中的资源数量,不多不少。" 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "固定数量禁用后,超出的物品不会被移除。如果一个带有计数过滤器的存储模式卡请求了 32 个圆石,而玩家或另一个卡往容器中加入更多圆石,超出的圆石不会被移除。$(br2)启用后,如果有输入卡能够接受,超出的圆石会被移除。" 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/loot_table/blocks/laser_connector_advanced.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "bonus_rolls": 0.0, 6 | "conditions": [ 7 | { 8 | "condition": "minecraft:survives_explosion" 9 | } 10 | ], 11 | "entries": [ 12 | { 13 | "type": "minecraft:item", 14 | "name": "laserio:laser_connector_advanced" 15 | } 16 | ], 17 | "rolls": 1.0 18 | } 19 | ], 20 | "random_sequence": "laserio:blocks/laser_connector_advanced" 21 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/blockentities/LaserConnectorBE.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.blockentities; 2 | 3 | import com.direwolf20.laserio.common.blockentities.basebe.BaseLaserBE; 4 | import com.direwolf20.laserio.setup.Registration; 5 | import net.minecraft.core.BlockPos; 6 | import net.minecraft.world.level.block.state.BlockState; 7 | 8 | public class LaserConnectorBE extends BaseLaserBE { 9 | public LaserConnectorBE(BlockPos pos, BlockState state) { 10 | super(Registration.LaserConnector_BE.get(), pos, state); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/card_redstone.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "category": "misc", 4 | "group": "laserio", 5 | "key": { 6 | "g": { 7 | "tag": "c:nuggets/gold" 8 | }, 9 | "p": { 10 | "item": "laserio:logic_chip" 11 | }, 12 | "q": { 13 | "tag": "c:gems/quartz" 14 | }, 15 | "r": { 16 | "tag": "c:dusts/redstone" 17 | } 18 | }, 19 | "pattern": [ 20 | "rrr", 21 | "qpq", 22 | "ggg" 23 | ], 24 | "result": { 25 | "count": 1, 26 | "id": "laserio:card_redstone" 27 | } 28 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/laser_connector.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "category": "misc", 4 | "group": "laserio", 5 | "key": { 6 | "b": { 7 | "item": "laserio:logic_chip" 8 | }, 9 | "g": { 10 | "tag": "c:glass_blocks" 11 | }, 12 | "i": { 13 | "tag": "c:ingots/iron" 14 | }, 15 | "r": { 16 | "tag": "c:dusts/redstone" 17 | } 18 | }, 19 | "pattern": [ 20 | " g ", 21 | "rbr", 22 | "iii" 23 | ], 24 | "result": { 25 | "count": 1, 26 | "id": "laserio:laser_connector" 27 | } 28 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/logic_chip_raw.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "category": "misc", 4 | "group": "laserio", 5 | "key": { 6 | "c": { 7 | "item": "minecraft:clay_ball" 8 | }, 9 | "g": { 10 | "tag": "c:nuggets/gold" 11 | }, 12 | "q": { 13 | "item": "minecraft:quartz_block" 14 | }, 15 | "r": { 16 | "tag": "c:dusts/redstone" 17 | } 18 | }, 19 | "pattern": [ 20 | "rgr", 21 | "cqc", 22 | "rgr" 23 | ], 24 | "result": { 25 | "count": 4, 26 | "id": "laserio:logic_chip_raw" 27 | } 28 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/entries/redstonechannel.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Redstone Channel", 3 | "sortnum": 11, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/redstoneignore.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Cards have a 'redstone channel' separate from the main channel.$(br2)This is the channel of Redstone Signal that will affect the card. See more details in the $(l:laserio:redstonemode)Redstone Mode$(/l) and $(l:laserio:card_redstone)Redstone Card$(/l) sections." 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/channel.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "频道", 3 | "sortnum": 4, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/blankbutton.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "卡只能与处在同一频道上的其他卡交互。这允许玩家在一个网络中设置多套物流逻辑。$(br2)例如,处在橙色频道上的抽取卡只会试图往橙色频道上的输入卡输入,其他卡将被忽略。" 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "另一个例子,一个抽取卡的频道设为橙色,过滤设为圆石;另一个抽取卡的频道设为黑色,过滤设为煤炭,将它们放在同一个节点中。$(br2)熔炉上面放置一个橙色频道的输入卡,下面放置黑色频道的输入卡。这样就保证只有圆石会进入上面的格子,而煤炭进入下面的格子。" 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/redstonemode.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "红石模式", 3 | "sortnum": 11, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/redstonehigh.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "红石模式决定$(l:laserio:redstonechannel)红石频道$(/l)上的红石信号对卡的效果。$(br2)默认设为$(bold)忽略$(),意味着卡将一直工作,不受红石信号影响。" 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "$(br2)如果设定为低,卡只会在对应的红石频道$(bold)没有$()信号的时候工作(红石频道按钮在红石模式按钮右边)。$(br2)在高红石信号模式下,卡只会在对应红石频道$(bold)有$()信号的时候工作。" 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/entries/redstonechannel.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Canal de Redstone", 3 | "sortnum": 11, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/redstoneignore.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Os Cartões possuem um 'canal de redstone' separado do canal principal.$(br2)Este é um canal para que um Sinal de Redstone possa afetar um cartão. Veja mais detalhes na seção do $(l:laserio:redstonemode)Modo Redstone$(/l) e no $(l:laserio:card_redstone)Cartão de Redstone$(/l)." 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/logic_chip.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "逻辑芯片", 3 | "icon": "laserio:logic_chip", 4 | "sortnum": 0, 5 | "category": "laserio:items", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "逻辑芯片是本模组的主要合成材料。$(br2)这是唯一用原版材料合成的物品,后续的所有物品都直接或间接地需要逻辑芯片。" 10 | }, 11 | { 12 | "type": "patchouli:crafting", 13 | "title": "未处理的逻辑芯片", 14 | "recipe": "laserio:logic_chip_raw" 15 | }, 16 | { 17 | "type": "patchouli:smelting", 18 | "title": "逻辑芯片", 19 | "recipe": "laserio:logic_chip" 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/exact.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "精确模式", 3 | "sortnum": 6, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/exacttrue.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "精确模式只在抽取和存储模式下可用。$(br2)精确模式保证一次抽取的数量符合“抽取数量”一栏填入的数字。例如,如果抽取数量设置为 8,但附近的箱子里面只有 5 个物品,将不会抽取物品,直到有 8 个物品为止。" 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "对于存储模式,精确模式的工作方式会有些许变化。精确模式下,仅当网络中满足存储请求所需的数量或满足抽取数量(以较小者为准)时,才允许物品传输。$(br2)例如,如果一个存储模式卡需要 13 个以上物品,且一次可抽取 32 个物品时,只会从网络某处抽取 13 个物品。" 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.yml: -------------------------------------------------------------------------------- 1 | name: Feature Request 2 | description: A request for a new feature to be added to the mod 3 | labels: ["Feature Request"] 4 | body: 5 | - type: textarea 6 | id: suggestdesc 7 | attributes: 8 | label: Describe the feature you'd like to have added 9 | description: | 10 | A detailed explanation of the suggestion 11 | validations: 12 | required: true 13 | - type: textarea 14 | id: additional 15 | attributes: 16 | label: Additional information 17 | description: Add any other context about the feature here 18 | validations: 19 | required: false 20 | -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/card_item.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "category": "misc", 4 | "group": "laserio", 5 | "key": { 6 | "g": { 7 | "tag": "c:nuggets/gold" 8 | }, 9 | "l": { 10 | "tag": "c:gems/lapis" 11 | }, 12 | "p": { 13 | "item": "laserio:logic_chip" 14 | }, 15 | "q": { 16 | "tag": "c:gems/quartz" 17 | }, 18 | "r": { 19 | "tag": "c:dusts/redstone" 20 | } 21 | }, 22 | "pattern": [ 23 | "rlr", 24 | "qpq", 25 | "ggg" 26 | ], 27 | "result": { 28 | "count": 1, 29 | "id": "laserio:card_item" 30 | } 31 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/card_fluid.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "category": "misc", 4 | "group": "laserio", 5 | "key": { 6 | "g": { 7 | "tag": "c:nuggets/gold" 8 | }, 9 | "l": { 10 | "item": "minecraft:bucket" 11 | }, 12 | "p": { 13 | "item": "laserio:logic_chip" 14 | }, 15 | "q": { 16 | "tag": "c:gems/quartz" 17 | }, 18 | "r": { 19 | "tag": "c:dusts/redstone" 20 | } 21 | }, 22 | "pattern": [ 23 | "rlr", 24 | "qpq", 25 | "ggg" 26 | ], 27 | "result": { 28 | "count": 1, 29 | "id": "laserio:card_fluid" 30 | } 31 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/card_energy.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "category": "misc", 4 | "group": "laserio", 5 | "key": { 6 | "g": { 7 | "tag": "c:nuggets/gold" 8 | }, 9 | "l": { 10 | "tag": "c:storage_blocks/redstone" 11 | }, 12 | "p": { 13 | "item": "laserio:logic_chip" 14 | }, 15 | "q": { 16 | "tag": "c:gems/quartz" 17 | }, 18 | "r": { 19 | "tag": "c:dusts/redstone" 20 | } 21 | }, 22 | "pattern": [ 23 | "rlr", 24 | "qpq", 25 | "ggg" 26 | ], 27 | "result": { 28 | "count": 1, 29 | "id": "laserio:card_energy" 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/util/StockerCardCache.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.util; 2 | 3 | import com.direwolf20.laserio.common.blockentities.LaserNodeBE; 4 | import com.direwolf20.laserio.common.items.cards.BaseCard; 5 | import net.minecraft.core.Direction; 6 | import net.minecraft.world.item.ItemStack; 7 | 8 | public class StockerCardCache extends ExtractorCardCache { 9 | public boolean regulate; 10 | 11 | public StockerCardCache(Direction direction, ItemStack cardItem, int cardSlot, LaserNodeBE be) { 12 | super(direction, cardItem, cardSlot, be); 13 | this.regulate = BaseCard.getRegulate(cardItem); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/card_item.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "物品卡", 3 | "sortnum": 1, 4 | "category": "laserio:cards", 5 | "icon": "laserio:card_item", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "物品卡用于在容器之间传输物品,比如箱子和熔炉。$(br2)超频后的数据详见后页。" 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "超频后的传输速度:$(br2)$(li)没有超频元件:8 个物品/20t$(li)1 个超频元件:16 个物品/15t$(li)2 个超频元件:32 个物品/10t$(li)3 个超频元件:48 个物品/5t$(li)4 个超频元件:64 个物品/1t" 14 | }, 15 | { 16 | "type": "patchouli:crafting", 17 | "title": "物品卡", 18 | "recipe": "laserio:card_item" 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/laser_connector_advanced.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "category": "misc", 4 | "group": "laserio", 5 | "key": { 6 | "b": { 7 | "item": "laserio:laser_connector" 8 | }, 9 | "d": { 10 | "tag": "c:gems/diamond" 11 | }, 12 | "e": { 13 | "tag": "c:ender_pearls" 14 | }, 15 | "i": { 16 | "tag": "c:ingots/gold" 17 | }, 18 | "r": { 19 | "tag": "c:dusts/redstone" 20 | } 21 | }, 22 | "pattern": [ 23 | "ede", 24 | "rbr", 25 | "iii" 26 | ], 27 | "result": { 28 | "count": 1, 29 | "id": "laserio:laser_connector_advanced" 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/card_fluid.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "流体卡", 3 | "sortnum": 2, 4 | "category": "laserio:cards", 5 | "icon": "laserio:card_fluid", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "流体卡用于在容器之间传输流体,比如储罐。$(br2)超频后的数据详见后页。" 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "超频后的传输速度:$(br2)$(li)没有超频元件:1,000mb/20t$(li)1 个超频元件:2,000mb/15t$(li)2 个超频元件:4,000mb/10t$(li)3 个超频元件:6,000mb/5t$(li)4 个超频元件:8,000mb/1t" 14 | }, 15 | { 16 | "type": "patchouli:crafting", 17 | "title": "流体卡", 18 | "recipe": "laserio:card_fluid" 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/entries/filter_basic.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Basic Filter", 3 | "sortnum": 1, 4 | "category": "laserio:filters", 5 | "icon": "laserio:filter_basic", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "The basic filter can be used to limit what items are allowed in an inventory.$(br2)These slots are 'ghost slots', which means they do not REALLY hold items, just an image of an item." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "If JEI is installed, you may drag items from JEI into these 'ghost slots'. Simply left click and drag out of JEI into the filter UI." 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/util/ParticleRenderData.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.util; 2 | 3 | import net.minecraft.core.BlockPos; 4 | 5 | public class ParticleRenderData { 6 | public int item; 7 | public byte itemCount; 8 | public BlockPos fromPos; 9 | public byte direction; 10 | public BlockPos toPos; 11 | public byte position; 12 | 13 | public ParticleRenderData(int item, byte itemCount, BlockPos fromPos, byte direction, BlockPos toPos, byte position) { 14 | this.item = item; 15 | this.itemCount = itemCount; 16 | this.fromPos = fromPos; 17 | this.direction = direction; 18 | this.toPos = toPos; 19 | this.position = position; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/models/item/card_item.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "laserio:item/card_item", 5 | "layer1": "laserio:item/cardlayers/insert", 6 | "layer2": "laserio:item/cardlayers/channel" 7 | }, 8 | "overrides": [ 9 | { 10 | "predicate": { 11 | "laserio:mode": 1 12 | }, 13 | "model": "laserio:item/card_item_extract" 14 | }, 15 | { 16 | "predicate": { 17 | "laserio:mode": 2 18 | }, 19 | "model": "laserio:item/card_item_stock" 20 | }, 21 | { 22 | "predicate": { 23 | "laserio:mode": 3 24 | }, 25 | "model": "laserio:item/card_item_sensor" 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/models/item/card_fluid.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "laserio:item/card_fluid", 5 | "layer1": "laserio:item/cardlayers/insert", 6 | "layer2": "laserio:item/cardlayers/channel" 7 | }, 8 | "overrides": [ 9 | { 10 | "predicate": { 11 | "laserio:mode": 1 12 | }, 13 | "model": "laserio:item/card_fluid_extract" 14 | }, 15 | { 16 | "predicate": { 17 | "laserio:mode": 2 18 | }, 19 | "model": "laserio:item/card_fluid_stock" 20 | }, 21 | { 22 | "predicate": { 23 | "laserio:mode": 3 24 | }, 25 | "model": "laserio:item/card_fluid_sensor" 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/models/item/card_energy.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "laserio:item/card_energy", 5 | "layer1": "laserio:item/cardlayers/insert", 6 | "layer2": "laserio:item/cardlayers/channel" 7 | }, 8 | "overrides": [ 9 | { 10 | "predicate": { 11 | "laserio:mode": 1 12 | }, 13 | "model": "laserio:item/card_energy_extract" 14 | }, 15 | { 16 | "predicate": { 17 | "laserio:mode": 2 18 | }, 19 | "model": "laserio:item/card_energy_stock" 20 | }, 21 | { 22 | "predicate": { 23 | "laserio:mode": 3 24 | }, 25 | "model": "laserio:item/card_energy_sensor" 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/util/ParticleRenderDataFluid.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.util; 2 | 3 | import net.minecraft.core.BlockPos; 4 | import net.neoforged.neoforge.fluids.FluidStack; 5 | 6 | public class ParticleRenderDataFluid { 7 | public FluidStack fluidStack; 8 | public BlockPos fromPos; 9 | public byte direction; 10 | public BlockPos toPos; 11 | public byte position; 12 | 13 | public ParticleRenderDataFluid(FluidStack fluidStack, BlockPos fromPos, byte direction, BlockPos toPos, byte position) { 14 | this.fluidStack = fluidStack; 15 | this.fromPos = fromPos; 16 | this.direction = direction; 17 | this.toPos = toPos; 18 | this.position = position; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/models/item/card_chemical.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "laserio:item/card_chemical", 5 | "layer1": "laserio:item/cardlayers/insert", 6 | "layer2": "laserio:item/cardlayers/channel" 7 | }, 8 | "overrides": [ 9 | { 10 | "predicate": { 11 | "laserio:mode": 1 12 | }, 13 | "model": "laserio:item/card_chemical_extract" 14 | }, 15 | { 16 | "predicate": { 17 | "laserio:mode": 2 18 | }, 19 | "model": "laserio:item/card_chemical_stock" 20 | }, 21 | { 22 | "predicate": { 23 | "laserio:mode": 3 24 | }, 25 | "model": "laserio:item/card_chemical_sensor" 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/card_fluid.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_logic_chip": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:logic_chip" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:card_fluid" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_logic_chip" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:card_fluid" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/card_item.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_logic_chip": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:logic_chip" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:card_item" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_logic_chip" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:card_item" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/logic_chip.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_raw_chip": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:logic_chip_raw" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:logic_chip" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_raw_chip" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:logic_chip" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/card_cloner.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_logic_chip": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:logic_chip" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:card_cloner" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_logic_chip" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:card_cloner" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/card_energy.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_logic_chip": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:logic_chip" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:card_energy" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_logic_chip" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:card_energy" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/card_holder.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_logic_chip": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:logic_chip" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:card_holder" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_logic_chip" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:card_holder" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/filter_basic.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_logic_chip": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:logic_chip" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:filter_basic" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_logic_chip" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:filter_basic" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/filter_mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_filter_basic": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:filter_basic" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:filter_mod" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_filter_basic" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:filter_mod" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/filter_nbt.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_filter_basic": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:filter_basic" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:filter_nbt" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_filter_basic" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:filter_nbt" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/filter_tag.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_filter_basic": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:filter_basic" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:filter_tag" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_filter_basic" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:filter_tag" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/laser_wrench.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_logic_chip": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:logic_chip" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:laser_wrench" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_logic_chip" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:laser_wrench" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/entries/logic_chip.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Logic Chips", 3 | "icon": "laserio:logic_chip", 4 | "sortnum": 0, 5 | "category": "laserio:items", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Logic Chips are the primary crafting ingredient in LaserIO. $(br2)They are the only item crafted with 'vanilla' materials, and all subsequent items use a chip in one way or another." 10 | }, 11 | { 12 | "type": "patchouli:crafting", 13 | "title": "Raw Logic Chip", 14 | "recipe": "laserio:logic_chip_raw" 15 | }, 16 | { 17 | "type": "patchouli:smelting", 18 | "title": "Logic Chip", 19 | "recipe": "laserio:logic_chip" 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/card_redstone.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_logic_chip": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:logic_chip" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:card_redstone" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_logic_chip" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:card_redstone" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/logic_chip_raw.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_quartz": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "minecraft:quartz_block" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:logic_chip_raw" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_quartz" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:logic_chip_raw" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/entries/filter_basic.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Filtro Básico", 3 | "sortnum": 1, 4 | "category": "laserio:filters", 5 | "icon": "laserio:filter_basic", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "O Filtro Básico pode ser usado para limitar quais itens são permitidos em um inventário.$(br2)Esses slots são 'slots fantasmas', o que significa que eles realmente NÃO contêm itens, apenas uma imagem de um item." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "Se o JEI estiver instalado, você poderá clicar e arrastar os itens do JEI para os 'slots fantasma'. Clique com o botão esquerdo, segure e arraste para a interface do filtro." 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/filter_count.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_filter_basic": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:filter_basic" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:filter_count" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_filter_basic" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:filter_count" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/laser_connector.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_logic_chip": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:logic_chip" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:laser_connector" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_logic_chip" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:laser_connector" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/laser_node.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_logic_connector": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:laser_connector" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:laser_node" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_logic_connector" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:laser_node" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/entries/overclocker_card.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Card Overclocker", 3 | "icon": "laserio:overclocker_card", 4 | "sortnum": 2, 5 | "category": "laserio:items", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Card Overclockers allow individual cards to operate more quickly.$(br2)For example, Item Cards can only extract at most 8 items every 20 ticks (1 second). With 4 overclockers installed they can reach 64 items per 1 tick!$(br2)See the Cards section for more details on how each card is affected by overclockers." 10 | }, 11 | { 12 | "type": "patchouli:crafting", 13 | "title": "Card Overclocker", 14 | "recipe": "laserio:overclocker_card" 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/card_item_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_card_item": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:card_item" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:card_item_nbtclear" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_card_item" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:card_item_nbtclear" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/filter_nbt_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_nbt_tag": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:filter_nbt" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:filter_nbt_nbtclear" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_nbt_tag" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:filter_nbt_nbtclear" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/overclocker_card.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_logic_chip": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:logic_chip" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:overclocker_card" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_logic_chip" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:overclocker_card" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/overclocker_node.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_logic_chip": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:logic_chip" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:overclocker_node" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_logic_chip" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:overclocker_node" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/recipe/card_chemical.json: -------------------------------------------------------------------------------- 1 | { 2 | "neoforge:conditions": [ 3 | { 4 | "type": "neoforge:mod_loaded", 5 | "modid": "mekanism" 6 | } 7 | ], 8 | "type": "minecraft:crafting_shaped", 9 | "category": "misc", 10 | "group": "laserio", 11 | "key": { 12 | "g": { 13 | "tag": "c:nuggets/gold" 14 | }, 15 | "l": { 16 | "tag": "c:circuits/basic" 17 | }, 18 | "p": { 19 | "item": "laserio:logic_chip" 20 | }, 21 | "q": { 22 | "tag": "c:gems/quartz" 23 | }, 24 | "r": { 25 | "tag": "c:dusts/redstone" 26 | } 27 | }, 28 | "pattern": [ 29 | "rlr", 30 | "qpq", 31 | "ggg" 32 | ], 33 | "result": { 34 | "count": 1, 35 | "id": "laserio:card_chemical" 36 | } 37 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/priority.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "优先级", 3 | "sortnum": 3, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/modeinserter.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "优先级只在输入模式可用。$(br2)优先级允许你控制输入卡的工作顺序。默认情况下,输入卡工作在“最近优先”模式,意味着抽取卡将试图最先输入到最近的容器。" 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "通过更改输入卡的优先级,你可以决定哪个容器最先接受输入。拥有最高优先级的输入卡会被最先输入,例如,10 的优先级比 0 高,而 0 又 比 -10 高。$(br2)如果多个容器处于同一个优先级,则采用“最近优先”原则。" 14 | }, 15 | { 16 | "type": "patchouli:text", 17 | "text": "左键点击使优先级加 1,右键减 1。按住 Shift 使改变量乘 10,按住 Ctrl 使改变量乘 64。$(br2)同时按住 Shift 和 Ctrl 使改变量乘 640。$(br2)例如,Shift 右键点击将使优先级减少 10。" 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/card_fluid_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_card_fluid": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:card_fluid" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:card_fluid_nbtclear" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_card_fluid" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:card_fluid_nbtclear" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/filter_mod_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_filter_mod": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:filter_mod" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:filter_mod_nbtclear" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_filter_mod" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:filter_mod_nbtclear" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/filter_tag_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_filter_tag": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:filter_tag" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:filter_tag_nbtclear" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_filter_tag" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:filter_tag_nbtclear" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/containers/customslot/LaserNodeSlot.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.containers.customslot; 2 | 3 | import com.direwolf20.laserio.common.items.cards.BaseCard; 4 | import net.minecraft.world.item.ItemStack; 5 | import net.neoforged.neoforge.items.IItemHandler; 6 | import net.neoforged.neoforge.items.SlotItemHandler; 7 | 8 | import javax.annotation.Nonnull; 9 | 10 | public class LaserNodeSlot extends SlotItemHandler { 11 | public LaserNodeSlot(IItemHandler itemHandler, int index, int xPosition, int yPosition) { 12 | super(itemHandler, index, xPosition, yPosition); 13 | } 14 | 15 | @Override 16 | public boolean mayPlace(@Nonnull ItemStack stack) { 17 | return (stack.getItem() instanceof BaseCard); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/card_energy_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_card_energy": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:card_energy" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:card_energy_nbtclear" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_card_energy" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:card_energy_nbtclear" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/filter_basic_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_filter_basic": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:filter_basic" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:filter_basic_nbtclear" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_filter_basic" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:filter_basic_nbtclear" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/filter_count_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_filter_count": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:filter_count" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:filter_count_nbtclear" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_filter_count" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:filter_count_nbtclear" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/entries/logic_chip.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Chips Lógicos", 3 | "icon": "laserio:logic_chip", 4 | "sortnum": 0, 5 | "category": "laserio:items", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Os Chips Lógicos são o principal ingrediente de criação no LaserIO. $(br2)Eles são os únicos itens criados com materiais 'vanilla', e todos os outros itens subsequentes utilizam o chip de uma forma ou de outra." 10 | }, 11 | { 12 | "type": "patchouli:crafting", 13 | "title": "Chip Lógico Bruto", 14 | "recipe": "laserio:logic_chip_raw" 15 | }, 16 | { 17 | "type": "patchouli:smelting", 18 | "title": "Chip Lógico", 19 | "recipe": "laserio:logic_chip" 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/limit.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "限制", 3 | "sortnum": 10, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:card_energy", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "能量限制只在能量卡中可用。该值决定相邻能量容器将被转移的能量百分比。$(br2)有两种计量机制:存储/输入模式使用输入百分比,抽取模式使用抽取百分比。" 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "$(l)输入/存储限制$()$(br2)默认为 100%。决定目标能量容器将被填充到多满。$(br2)例如,例如,如果一个方块最多能够存储 1,000,000 FE,而你设定的值是 50%,最后只会存储 500,000 FE。$(br2)默认值 (100%) 将把它完全装满。" 14 | }, 15 | { 16 | "type": "patchouli:text", 17 | "text": "$(l)抽取限制$()$(br2)默认为 0%。决定抽取后会留下多少能量。$(br2)例如,如果一个方块最多能够存储 1,000,000 FE,而你设定的值是 50%,会持续抽取能量直到剩下 500,000FE,之后不再抽取。$(br2)默认值 (0%) 将提取所有能量。" 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/card_redstone_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_card_redstone": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:card_redstone" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:card_redstone_nbtclear" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_card_redstone" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:card_redstone_nbtclear" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/laser_connector_advanced.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "criteria": { 4 | "has_logic_chip": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": "laserio:logic_chip" 9 | } 10 | ] 11 | }, 12 | "trigger": "minecraft:inventory_changed" 13 | }, 14 | "has_the_recipe": { 15 | "conditions": { 16 | "recipe": "laserio:laser_connector_advanced" 17 | }, 18 | "trigger": "minecraft:recipe_unlocked" 19 | } 20 | }, 21 | "requirements": [ 22 | [ 23 | "has_the_recipe", 24 | "has_logic_chip" 25 | ] 26 | ], 27 | "rewards": { 28 | "recipes": [ 29 | "laserio:laser_connector_advanced" 30 | ] 31 | } 32 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/datagen/LaserIOBlockStates.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.datagen; 2 | 3 | import com.direwolf20.laserio.common.LaserIO; 4 | import net.minecraft.data.PackOutput; 5 | import net.neoforged.neoforge.client.model.generators.BlockStateProvider; 6 | import net.neoforged.neoforge.common.data.ExistingFileHelper; 7 | 8 | 9 | public class LaserIOBlockStates extends BlockStateProvider { 10 | public LaserIOBlockStates(PackOutput output, ExistingFileHelper helper) { 11 | super(output, LaserIO.MODID, helper); 12 | } 13 | 14 | @Override 15 | protected void registerStatesAndModels() { 16 | //simpleBlock(Registration.LaserConnector.get()); 17 | //simpleBlock(Registration.LaserNode.get(), models().getExistingFile(modLoc("block/laser_node"))); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/entries/overclocker_card.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Overclocker de Cartão", 3 | "icon": "laserio:overclocker_card", 4 | "sortnum": 2, 5 | "category": "laserio:items", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Os Overclockers de Cartão permitem que os cartões operem individualmente mais rápido.$(br2)Por exemplo, os Cartões de Item extrarem 8 itens a cada 20 ticks (1 segundo). Com 4 overclockers instalados ele pode atingir até 64 itens a cada 1 tick!$(br2)Veja a seção de Cartões para mais detalhes de como os cartões são afetados pelos overclockers." 10 | }, 11 | { 12 | "type": "patchouli:crafting", 13 | "title": "Overclocker de Cartão", 14 | "recipe": "laserio:overclocker_card" 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/entries/sneaky.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Furtivo", 3 | "sortnum": 2, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/sneaky-up.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "A configuração Furtivo determina em qual lado do inventário adjacente o Cartão irá operar.$(br2)Por exemplo, uma fornalha aceita itens 'Por Cima' do bloco. Se o Nó estiver em um lado da fornalha, defina o Modo Furtivo do Cartão de Inserção para 'Por Cima'." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "Este Cartão agora tentará inserir itens no lado 'superior' da fornalha.$(br2)Outro cartão pode ser definido como 'Por Baixo' para inserir combustível no fundo da fornalha." 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/laser_connector.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "激光连接器", 3 | "icon": "laserio:laser_connector", 4 | "sortnum": 1, 5 | "category": "laserio:blocks", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "多个$(l:laserio:laser_node)激光节点$(/l)可以直接用$(l:laserio:laser_wrench)激光扳手$(/l)互相连接,但是最大范围只有 8 个方块。$(br2)激光连接器可作为节点之间的廉价中继,允许你构建一个容器网络。" 10 | }, 11 | { 12 | "type": "patchouli:image", 13 | "title": "Laser Node", 14 | "images": [ 15 | "laserio:textures/book/entries/laser_connector1.png" 16 | ], 17 | "border": true, 18 | "text": "两个节点之间的连接器" 19 | }, 20 | { 21 | "type": "patchouli:crafting", 22 | "title": "激光连接器", 23 | "recipe": "laserio:laser_connector" 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/laser_wrench.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "激光扳手", 3 | "icon": "laserio:laser_wrench", 4 | "sortnum": 1, 5 | "category": "laserio:items", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "激光扳手主要用于连接多个方块。通过 Shift 右键选择方块,再右键另一个方块来形成连接,这样就能连接$(br2)$(l:laserio:laser_node)节点$(/l)和$(l:laserio:laser_connector)连接器$(/l)。$(br2)最大连接范围是 8 个方块。" 10 | }, 11 | { 12 | "type": "patchouli:image", 13 | "title": "激光扳手", 14 | "images": [ 15 | "laserio:textures/book/entries/laser_wrench.png" 16 | ], 17 | "border": true, 18 | "text": "已选择的方块会被绿色标记。" 19 | }, 20 | { 21 | "type": "patchouli:crafting", 22 | "title": "激光扳手", 23 | "recipe": "laserio:laser_wrench" 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/tickspeed.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "传输速度", 3 | "sortnum": 8, 4 | "category": "laserio:mechanics", 5 | "icon": "minecraft:textures/item/clock_00.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "传输速度只在抽取和存储模式可用。$(br2)此设定决定卡的运作速度。默认值 20 意味着一张抽取卡每 20 刻才提取一次物品,也就是每秒一次。" 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "抽取模式和存储模式卡中,该值默认为 20,最大为 1200,除非安装了$(l:laserio:overclocker_card)卡超频元件$(/l)。下面是传输速度与超频元件数量的关系:$(br)1. 15$(br)2. 10$(br)3. 5$(br)4. 1$(br2)如果你想每一刻都提取物品,你需要 4 个超频元件。" 14 | }, 15 | { 16 | "type": "patchouli:text", 17 | "text": "左键点击使此值加 1,右键减 1。按住 Shift 使改变量乘 10,按住 Ctrl 使改变量乘 64。$(br2)同时按住 Shift 和 Ctrl 使改变量乘 640。$(br2)例如,Shift 右键点击将使优先级减少 10。" 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/entries/sneaky.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Sneaky", 3 | "sortnum": 2, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/sneaky-up.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "The Sneaky setting determines which side of the adjacent inventory the card attempts to operate on.$(br2)For example, a furnace accepts items from the 'Top Side' of the block. If the node is on a side of the furnace, set the sneaky mode of the insert card to 'Up'." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "This card will now attempt to insert items into the 'top' side of the furnace.$(br2)Another card can be set to 'Sneaky Down' to insert fuel into the bottom of the furnace." 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/filter_count.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "计数过滤器", 3 | "sortnum": 2, 4 | "category": "laserio:filters", 5 | "icon": "laserio:filter_count", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "计数过滤器指定物品的数量,根据卡的模式发挥不同作用。$(br2)允许的物品数量在 1 至 4096之间。左键点击增加数值,右键减少。按住 Shift 或 Ctrl 将分别把改变量乘 10 或 64。" 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "在存储模式下使用计数过滤器,它会试图将存储的资源量保持为设定的数值。例如,可以使用一个设置了 64 个圆石的计数过滤器来保持一个箱子里总是有 64 个圆石。$(br2)如果在输入模式下使用计数过滤器,它会限制可存入容器的物品数量。" 14 | }, 15 | { 16 | "type": "patchouli:text", 17 | "text": "如果在抽取模式下使用计数过滤器,它会保留设定数目的物品。例如,如果抽取卡的过滤器设定为 8 个圆石,最后的 8 个圆石将不会被抽取。$(br2)计数过滤器没有黑白名单,因为黑名单没有意义。所有计数过滤器都是白名单。在计数过滤器里也可以像在$(l:laserio:filter_basic)基础过滤器$(/l)一样使用 JEI。" 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/roundrobin.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "轮询调度", 3 | "sortnum": 5, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/roundrobintrue.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "轮询调度只在抽取模式可用。$(br2)轮询调度将使抽取卡在多个输入卡之间平均分配物品。$(br2)有三种模式:$(br)1. 关闭$(br)2. 启用$(br)3. 强制" 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "设定为$(l)关闭$()后,轮询调度被禁用,遵循$(l:laserio:priority)优先级$(/l)规则。在第一个容器完全装满之前不会往第二个容器发送对象。$(br2)设定为$(l)启用$()后,物品会被按照优先级发送,并平均分配。$(br2)如果网络中有三个箱子,第一批物品会送往第一个箱子,第二批送往第二个,依此类推。" 14 | }, 15 | { 16 | "type": "patchouli:text", 17 | "text": "设定为$(l)强制$()后,遵循和“启用”相同的规则。但是,如果第一个容器满了,将停止工作直到此容器又有空间为止。$(br2)注意:区块卸载会导致轮询机制变化,尤其是某些节点被卸载而另一些没有的时候。" 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/integration/mekanism/client/chemicalparticle/ParticleRenderDataChemical.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.integration.mekanism.client.chemicalparticle; 2 | 3 | import mekanism.api.chemical.ChemicalStack; 4 | import net.minecraft.core.BlockPos; 5 | 6 | public class ParticleRenderDataChemical { 7 | public ChemicalStack chemicalStack; 8 | public BlockPos fromPos; 9 | public byte direction; 10 | public BlockPos toPos; 11 | public byte position; 12 | 13 | public ParticleRenderDataChemical(ChemicalStack chemicalStack, BlockPos fromPos, byte direction, BlockPos toPos, byte position) { 14 | this.chemicalStack = chemicalStack; 15 | this.fromPos = fromPos; 16 | this.direction = direction; 17 | this.toPos = toPos; 18 | this.position = position; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/entries/card_fluid.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Fluid Cards", 3 | "sortnum": 2, 4 | "category": "laserio:cards", 5 | "icon": "laserio:card_fluid", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Fluid Cards are used to send Fluids between inventories, such as tanks.$(br2)Overclocker values are documented on the following page." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "MB/T values (max) for Overclockers:$(br2)$(li)0 Overclockers: 5,000mb/20t$(li)1 Overclocker: 10,000mb/15t$(li)2 Overclockers: 20,000mb/10t$(li)3 Overclockers: 30,000mb/5t$(li)4 Overclockers: 40,000mb/1t" 14 | }, 15 | { 16 | "type": "patchouli:crafting", 17 | "title": "Fluid Card", 18 | "recipe": "laserio:card_fluid" 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/integration/mekanism/client/chemicalparticle/MekanismModParticles.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.integration.mekanism.client.chemicalparticle; 2 | 3 | import com.direwolf20.laserio.common.LaserIO; 4 | import net.minecraft.core.particles.ParticleType; 5 | import net.minecraft.core.registries.Registries; 6 | import net.neoforged.neoforge.registries.DeferredHolder; 7 | import net.neoforged.neoforge.registries.DeferredRegister; 8 | 9 | public class MekanismModParticles { 10 | public static final DeferredRegister> PARTICLE_TYPES_MEKANISM = DeferredRegister.create(Registries.PARTICLE_TYPE, LaserIO.MODID); 11 | public static final DeferredHolder, ChemicalFlowParticleType> CHEMICALFLOWPARTICLE = PARTICLE_TYPES_MEKANISM.register("chemicalflowparticle", () -> new ChemicalFlowParticleType(false)); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/entries/card_item.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Item Cards", 3 | "sortnum": 1, 4 | "category": "laserio:cards", 5 | "icon": "laserio:card_item", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Item Cards are used to send items between inventories, such as chests and furnaces.$(br2)Overclocker values are documented on the following page." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "Item/T values (max) for Overclockers:$(br2)$(li)0 Overclockers: 8 Items/20t$(li)1 Overclocker: 16 Items/15t$(li)2 Overclockers: 32 Items/10t$(li)3 Overclockers: 48 Items/5t$(li)4 Overclockers: 64 Items/1t" 14 | }, 15 | { 16 | "type": "patchouli:crafting", 17 | "title": "Item Card", 18 | "recipe": "laserio:card_item" 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/extractamount.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "抽取数量", 3 | "sortnum": 7, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/modeextractor.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "抽取数量仅在抽取模式和存储模式可用。$(br2)这项设置决定一次操作提取的物品(或者流体/能量)的量。$(br2)例如,如果设置为每 20 刻抽取 8 个物品,抽取卡将一次抽取 8 个物品,每 20 刻进行一次操作。" 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "在抽取模式和存储模式下,抽取数量默认为 1,最大为 8,除非安装了$(l:laserio:overclocker_card)卡超频$(/l)。抽取数量上限随安装的超频元件数量变化:$(br)1. 16$(br)2. 32$(br)3. 48$(br)4. 64$(br2)如果你想一次抽取 64 个物品,你需要 4 个超频元件。" 14 | }, 15 | { 16 | "type": "patchouli:text", 17 | "text": "左键点击使此值加 1,右键减 1。按住 Shift 点击将更改量乘 10,按住 Ctrl 将更改量乘 64。$(br2)同时按住 Shift 和 Ctrl 将使更改量乘 640。$(br2)例如, Shift 右键将使该值减少 10。" 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/card_holder.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "卡存储器", 3 | "icon": "laserio:card_holder", 4 | "sortnum": 2, 5 | "category": "laserio:items", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "解决你的物品栏空间不足问题!至少能解决这个模组产生的...只需制作一个卡存储器,右键打开它的界面。卡存储器的一个格子可以存放 64 张卡,只要它们的 NBT 相同。(提示:将卡放进合成栏里面可以清除 NBT。)" 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "卡可以在存储器中编辑——只需右键它们(就像在激光节点中一样)。$(br2)注意:如果这个格子中卡的数量大于1,将禁用过滤器和超频来防止刷物品。#BlameSoaryn" 14 | }, 15 | { 16 | "type": "patchouli:text", 17 | "text": "Shift 右键卡存储器,它会将你物品栏中的卡自动存进它里面!你可以看出这个功能是否启用,因为这时它会像附魔物品那样发光。Shift 右键关闭此功能。如果你的物品栏中有卡存储器,打开节点后会显示它存储的卡。" 18 | }, 19 | { 20 | "type": "patchouli:crafting", 21 | "title": "卡存储器", 22 | "recipe": "laserio:card_holder" 23 | } 24 | ] 25 | } -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | pull_request: 7 | branches: [ main ] 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v2 14 | - uses: actions/cache@v3 15 | with: 16 | path: | 17 | ~/.gradle/caches 18 | ~/.gradle/wrapper 19 | key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} 20 | restore-keys: | 21 | ${{ runner.os }}-gradle- 22 | - name: Set up JDK 17 23 | uses: actions/setup-java@v2 24 | with: 25 | java-version: '17' 26 | distribution: 'temurin' 27 | cache: 'gradle' 28 | - name: Build with Gradle 29 | run: | 30 | chmod +x ./gradlew 31 | ./gradlew build --no-daemon -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/entries/card_item.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Cartão de Item", 3 | "sortnum": 1, 4 | "category": "laserio:cards", 5 | "icon": "laserio:card_item", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Os Cartões de Item são utilizados para enviar itens entre inventários, como baús e fornalhas.$(br2)Os valores de overclocker estão documentados na página seguinte." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "Valores (max) de Itens/T para os Overclockers:$(br2)$(li)0 Overclockers: 8 Itens/20t$(li)1 Overclocker: 16 Itens/15t$(li)2 Overclockers: 32 Itens/10t$(li)3 Overclockers: 48 Itens/5t$(li)4 Overclockers: 64 Itens/1t" 14 | }, 15 | { 16 | "type": "patchouli:crafting", 17 | "title": "Cartão de Item", 18 | "recipe": "laserio:card_item" 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/card_chemical.json: -------------------------------------------------------------------------------- 1 | { 2 | "neoforge:conditions": [ 3 | { 4 | "type": "neoforge:mod_loaded", 5 | "modid": "mekanism" 6 | } 7 | ], 8 | "parent": "minecraft:recipes/root", 9 | "criteria": { 10 | "has_logic_chip": { 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": "laserio:logic_chip" 15 | } 16 | ] 17 | }, 18 | "trigger": "minecraft:inventory_changed" 19 | }, 20 | "has_the_recipe": { 21 | "conditions": { 22 | "recipe": "laserio:card_chemical" 23 | }, 24 | "trigger": "minecraft:recipe_unlocked" 25 | } 26 | }, 27 | "requirements": [ 28 | [ 29 | "has_the_recipe", 30 | "has_logic_chip" 31 | ] 32 | ], 33 | "rewards": { 34 | "recipes": [ 35 | "laserio:card_chemical" 36 | ] 37 | } 38 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/containers/customhandler/FilterBasicHandler.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.containers.customhandler; 2 | 3 | import com.direwolf20.laserio.setup.LaserIODataComponents; 4 | import net.minecraft.world.item.ItemStack; 5 | import net.neoforged.neoforge.items.ComponentItemHandler; 6 | 7 | import javax.annotation.Nonnull; 8 | 9 | public class FilterBasicHandler extends ComponentItemHandler { 10 | public ItemStack stack; 11 | 12 | public FilterBasicHandler(int size, ItemStack itemStack) { 13 | super(itemStack, LaserIODataComponents.ITEMSTACK_HANDLER.get(), size); 14 | this.stack = itemStack; 15 | } 16 | 17 | @Override 18 | public boolean isItemValid(int slot, @Nonnull ItemStack stack) { 19 | return true; 20 | } 21 | 22 | @Override 23 | public int getSlotLimit(int slot) { 24 | return 1; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/entries/regulate.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Regulate", 3 | "sortnum": 9, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/regulatetrue.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Regulate is only available on Stocker Mode.$(br2)Regulate ensures the counting filter will keep the specified amount of resources in the inventory, no more no less." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "When Regulate mode is disabled, excess items will not be removed. If a stocker is requesting 32 cobblestone with a Counting Filter, and a player or another card adds more cobblestone, the excess cobblestone will not be removed.$(br2)With Regulate mode enabled, the excess cobble would be removed, if there is an inserter that can accept it." 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/blockstates/laser_connector.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=down": { 4 | "model": "laserio:block/laser_connector" 5 | }, 6 | "facing=east": { 7 | "model": "laserio:block/laser_connector", 8 | "x": -90, 9 | "y": 90, 10 | "z": 0 11 | }, 12 | "facing=north": { 13 | "model": "laserio:block/laser_connector", 14 | "x": -90, 15 | "y": 0, 16 | "z": 0 17 | }, 18 | "facing=south": { 19 | "model": "laserio:block/laser_connector", 20 | "x": -90, 21 | "y": 180, 22 | "z": 0 23 | }, 24 | "facing=west": { 25 | "model": "laserio:block/laser_connector", 26 | "x": -90, 27 | "y": 270, 28 | "z": 0 29 | }, 30 | "facing=up": { 31 | "model": "laserio:block/laser_connector", 32 | "x": -180, 33 | "y": 180, 34 | "z": 180 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/entries/card_fluid.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Cartão de Fluido", 3 | "sortnum": 2, 4 | "category": "laserio:cards", 5 | "icon": "laserio:card_fluid", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Cartões de Fluido são utilizados para enviar Fluido entre inventários, como os tanques.$(br2)Os valores de Overclocker estão documentados na página seguinte." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "Os valores (max) de Mili Baldes/Tick (MB/T) para os Overclockers:$(br2)$(li)0 Overclockers: 1.000mb/20t$(li)1 Overclocker: 2.000mb/15t$(li)2 Overclockers: 4.000mb/10t$(li)3 Overclockers: 6.000mb/5t$(li)4 Overclockers: 8.000mb/1t" 14 | }, 15 | { 16 | "type": "patchouli:crafting", 17 | "title": "Cartão de Fluido", 18 | "recipe": "laserio:card_fluid" 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /src/generated/resources/data/laserio/advancement/recipes/misc/card_chemical_nbtclear.json: -------------------------------------------------------------------------------- 1 | { 2 | "neoforge:conditions": [ 3 | { 4 | "type": "neoforge:mod_loaded", 5 | "modid": "mekanism" 6 | } 7 | ], 8 | "parent": "minecraft:recipes/root", 9 | "criteria": { 10 | "has_card_chemical": { 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": "laserio:card_chemical" 15 | } 16 | ] 17 | }, 18 | "trigger": "minecraft:inventory_changed" 19 | }, 20 | "has_the_recipe": { 21 | "conditions": { 22 | "recipe": "laserio:card_chemical_nbtclear" 23 | }, 24 | "trigger": "minecraft:recipe_unlocked" 25 | } 26 | }, 27 | "requirements": [ 28 | [ 29 | "has_the_recipe", 30 | "has_card_chemical" 31 | ] 32 | ], 33 | "rewards": { 34 | "recipes": [ 35 | "laserio:card_chemical_nbtclear" 36 | ] 37 | } 38 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/entries/card_chemical.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Chemical Cards", 3 | "sortnum": 5, 4 | "category": "laserio:cards", 5 | "icon": "laserio:card_chemical", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Chemical Cards are used to send Chemicals between inventories, such as Mekanism Tanks. These cards are only available if Mekanism is installed.$(br2)Overclocker values are documented on the following page." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "MB/T values (max) for Overclockers:$(br2)$(li)0 Overclockers: 15,000mb/20t$(li)1 Overclocker: 60,000mb/15t$(li)2 Overclockers: 120,000mb/10t$(li)3 Overclockers: 180,000mb/5t$(li)4 Overclockers: 240,000mb/1t" 14 | }, 15 | { 16 | "type": "patchouli:crafting", 17 | "title": "Chemical Card", 18 | "recipe": "laserio:card_chemical" 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/entries/redstonemode.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Redstone Mode", 3 | "sortnum": 11, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/redstonehigh.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Redstone mode determines how a redstone signal on the $(l:laserio:redstonechannel)Redstone Channel$(/l) will affect a card.$(br2)By default, this is set to $(bold)ingored$() which means the card will always operate, and redstone will not affect it." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "$(br2)If set to low, the cards will only function when there is NOT a redstone signal on the redstone channel (the channel button is to the right of the redstone toggle).$(br2)On redstone high mode, the cards will only operate when there IS a redstone signal on the redstone channel." 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/blockstates/laser_connector_advanced.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=down": { 4 | "model": "laserio:block/laser_connector_advanced" 5 | }, 6 | "facing=east": { 7 | "model": "laserio:block/laser_connector_advanced", 8 | "x": -90, 9 | "y": 90, 10 | "z": 0 11 | }, 12 | "facing=north": { 13 | "model": "laserio:block/laser_connector_advanced", 14 | "x": -90, 15 | "y": 0, 16 | "z": 0 17 | }, 18 | "facing=south": { 19 | "model": "laserio:block/laser_connector_advanced", 20 | "x": -90, 21 | "y": 180, 22 | "z": 0 23 | }, 24 | "facing=west": { 25 | "model": "laserio:block/laser_connector_advanced", 26 | "x": -90, 27 | "y": 270, 28 | "z": 0 29 | }, 30 | "facing=up": { 31 | "model": "laserio:block/laser_connector_advanced", 32 | "x": -180, 33 | "y": 180, 34 | "z": 180 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/client/particles/itemparticle/ItemFlowParticleType.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.client.particles.itemparticle; 2 | 3 | 4 | import com.mojang.serialization.MapCodec; 5 | import net.minecraft.core.particles.ParticleType; 6 | import net.minecraft.network.RegistryFriendlyByteBuf; 7 | import net.minecraft.network.codec.StreamCodec; 8 | 9 | public class ItemFlowParticleType extends ParticleType { 10 | public ItemFlowParticleType(boolean pOverrideLimiter) { 11 | super(pOverrideLimiter); 12 | } 13 | 14 | public ItemFlowParticleType getType() { 15 | return this; 16 | } 17 | 18 | @Override 19 | public MapCodec codec() { 20 | return ItemFlowParticleData.MAP_CODEC; 21 | } 22 | 23 | @Override 24 | public StreamCodec streamCodec() { 25 | return ItemFlowParticleData.STREAM_CODEC; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/client/particles/fluidparticle/FluidFlowParticleType.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.client.particles.fluidparticle; 2 | 3 | import com.mojang.serialization.MapCodec; 4 | import net.minecraft.core.particles.ParticleType; 5 | import net.minecraft.network.RegistryFriendlyByteBuf; 6 | import net.minecraft.network.codec.StreamCodec; 7 | 8 | public class FluidFlowParticleType extends ParticleType { 9 | public FluidFlowParticleType(boolean pOverrideLimiter) { 10 | super(pOverrideLimiter); 11 | } 12 | 13 | public FluidFlowParticleType getType() { 14 | return this; 15 | } 16 | 17 | @Override 18 | public MapCodec codec() { 19 | return FluidFlowParticleData.MAP_CODEC; 20 | } 21 | 22 | @Override 23 | public StreamCodec streamCodec() { 24 | return FluidFlowParticleData.STREAM_CODEC; 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/entries/regulate.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Regular", 3 | "sortnum": 9, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/regulatetrue.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "O modo Regular está somente disponível no Modo de Estoque.$(br2)O modo Regular garante que o Filtro de Contagem manterá a quantidade especificada de cada recurso no inventário, nem mais e nem menos." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "Quando o modo Regular estivar desativado, os itens em excesso não serão removidos. Se um Estocador estiver requisitando 32 pedras com um Filtro de Contagem, e um jogador ou outro cartão inserir mais pedras, o excesso não será removido.$(br2)Com o modo Regular ativado, o excesso de pedras será sim removido, somente se existir uma maneira de inserir em outro inventário que aceite pedras." 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/entries/redstonemode.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Modo Redstone", 3 | "sortnum": 11, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/redstonehigh.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "O Modo Redstone determina como um sinal de redstone no $(l:laserio:redstonechannel)Canal de Redstone$(/l) afetará um cartão.$(br2)Por padrão, está definido para $(bold)ingnorar$() significando que o cartão sempre funcionará, e um sinal de redstone não o afetará em nada." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "$(br2)Se definido para baixo, os cartões somente funcionarão quando NÃO existir um sinal de redstone no Canal de Redstone (o botão do Canal é o da direita do botão dos modos de redstone).$(br2)No modo de redstone alto, os cartões funcionarão quando EXISTIR um sinal de redstone no Canal de Redstone configurado." 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/filter_basics.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "基本机制", 3 | "icon": "laserio:logic_chip", 4 | "sortnum": 0, 5 | "category": "laserio:filters", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "右键过滤器打开界面。你也可以打开安装在卡内部的过滤器。$(br2)过滤器允许你决定什么物品可被输入、抽取或存储。$(br2)1. 白名单与黑名单$(br)2. 比较 NBT$(br)3. 过滤器栏位" 10 | }, 11 | { 12 | "type": "patchouli:image", 13 | "title": "过滤器界面", 14 | "images": [ 15 | "laserio:textures/book/entries/filter_basic.png" 16 | ], 17 | "border": true, 18 | "text": "基础过滤器的界面" 19 | }, 20 | { 21 | "type": "patchouli:text", 22 | "text": "白名单与黑名单$(br2)白名单模式下,过滤器将允许设定的物品通过。意味着输入卡能够接受圆石,抽取卡能提取圆石。$(br2)在黑名单模式下反之。" 23 | }, 24 | { 25 | "type": "patchouli:text", 26 | "text": "比较 NBT$(br2)启用比较 NBT 后,过滤器将检查物品的 NBT。例如,一把剑以 NBT 存储它的耐久,启用比较 NBT 后,一把未使用的钻石剑将不同于一把损坏的,也不同于附魔的。$(br2)关闭后,所有钻石剑都会被匹配,不论它们的状态如何。" 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/integration/mekanism/client/chemicalparticle/ChemicalFlowParticleType.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.integration.mekanism.client.chemicalparticle; 2 | 3 | import com.mojang.serialization.MapCodec; 4 | import net.minecraft.core.particles.ParticleType; 5 | import net.minecraft.network.RegistryFriendlyByteBuf; 6 | import net.minecraft.network.codec.StreamCodec; 7 | 8 | public class ChemicalFlowParticleType extends ParticleType { 9 | public ChemicalFlowParticleType(boolean pOverrideLimiter) { 10 | super(pOverrideLimiter); 11 | } 12 | 13 | public ChemicalFlowParticleType getType() { 14 | return this; 15 | } 16 | 17 | @Override 18 | public MapCodec codec() { 19 | return ChemicalFlowParticleData.MAP_CODEC; 20 | } 21 | 22 | @Override 23 | public StreamCodec streamCodec() { 24 | return ChemicalFlowParticleData.STREAM_CODEC; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/client/blockentityrenders/LaserConnectorBERender.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.client.blockentityrenders; 2 | 3 | import com.direwolf20.laserio.client.blockentityrenders.baseberender.BaseLaserBERender; 4 | import com.direwolf20.laserio.common.blockentities.LaserConnectorBE; 5 | import com.mojang.blaze3d.vertex.PoseStack; 6 | import net.minecraft.client.renderer.MultiBufferSource; 7 | import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; 8 | 9 | public class LaserConnectorBERender extends BaseLaserBERender { 10 | public LaserConnectorBERender(BlockEntityRendererProvider.Context context) { 11 | super(context); 12 | } 13 | 14 | @Override 15 | public void render(LaserConnectorBE blockentity, float partialTicks, PoseStack matrixStackIn, MultiBufferSource bufferIn, int combinedLightsIn, int combinedOverlayIn) { 16 | super.render(blockentity, partialTicks, matrixStackIn, bufferIn, combinedLightsIn, combinedOverlayIn); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/util/InserterCardCache.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.util; 2 | 3 | import com.direwolf20.laserio.common.blockentities.LaserNodeBE; 4 | import com.direwolf20.laserio.common.items.cards.BaseCard; 5 | import net.minecraft.core.BlockPos; 6 | import net.minecraft.core.Direction; 7 | import net.minecraft.core.GlobalPos; 8 | import net.minecraft.world.item.ItemStack; 9 | 10 | public class InserterCardCache extends BaseCardCache { 11 | public final GlobalPos relativePos; 12 | public final short priority; 13 | 14 | public InserterCardCache(GlobalPos relativePos, Direction direction, ItemStack cardItem, LaserNodeBE be, int cardSlot) { 15 | super(direction, cardItem, cardSlot, be); 16 | this.relativePos = relativePos; 17 | this.priority = BaseCard.getPriority(cardItem); 18 | } 19 | 20 | public short getPriority() { 21 | return priority; 22 | } 23 | 24 | public double getDistance() { 25 | return relativePos.pos().distSqr(BlockPos.ZERO); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/filter_tag.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "标签过滤器", 3 | "sortnum": 2, 4 | "category": "laserio:filters", 5 | "icon": "laserio:filter_tag", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "标签过滤器允许根据资源的标签进行过滤。$(br2)标签是 Minecraft 用于分类相似物品的方法。例如,我们能在右边看到铁锭拥有 “forge:ingots” 标签,金锭、铜锭、锡锭之类的也一样。$(br2)标签过滤器可以只用一个词条来过滤所有的锭!" 10 | }, 11 | { 12 | "type": "patchouli:image", 13 | "title": "标签界面", 14 | "images": [ 15 | "laserio:textures/book/entries/filter_tag.png" 16 | ], 17 | "border": true, 18 | "text": "标签界面" 19 | }, 20 | { 21 | "type": "patchouli:text", 22 | "text": "首先,在右上角的栏位放置一个物品。该物品的一系列标签将以$(#0000ff)蓝色$()字显示。点击你想添加的标签,按下“+”按钮。按住 Shift 点击“+”按钮将所有标签加入列表。$(br2)要移除标签,选择并点击“-”按钮。$(br2)你也可以通过 Shift 点击来自动添加/移除标签。" 23 | }, 24 | { 25 | "type": "patchouli:text", 26 | "text": "“X”按钮将清空列表。$(br2)此列表采用“或”逻辑,意味着一个物品只需符合列表中任意一个标签就会被匹配到。$(br2)标签过滤器不支持 NBT 检测,因为没有意义。" 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/entries/laser_connector.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Laser Connector", 3 | "icon": "laserio:laser_connector", 4 | "sortnum": 1, 5 | "category": "laserio:blocks", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Multiple $(l:laserio:laser_node)Laser Nodes$(/l) can be connected directly to each other using the $(l:laserio:laser_wrench)Laser Wrench$(/l), however the maximum range is 8 blocks. $(br2)Laser Connectors can act as a cheaper intermediary point between nodes, allowing you to build a network of interconnected inventories." 10 | }, 11 | { 12 | "type": "patchouli:image", 13 | "title": "Laser Node", 14 | "images": [ 15 | "laserio:textures/book/entries/laser_connector1.png" 16 | ], 17 | "border": true, 18 | "text": "Connector between 2 nodes" 19 | }, 20 | { 21 | "type": "patchouli:crafting", 22 | "title": "Laser Connector", 23 | "recipe": "laserio:laser_connector" 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/network/data/OpenFilterPayload.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.network.data; 2 | 3 | import com.direwolf20.laserio.common.LaserIO; 4 | import net.minecraft.network.FriendlyByteBuf; 5 | import net.minecraft.network.codec.ByteBufCodecs; 6 | import net.minecraft.network.codec.StreamCodec; 7 | import net.minecraft.network.protocol.common.custom.CustomPacketPayload; 8 | import net.minecraft.resources.ResourceLocation; 9 | 10 | public record OpenFilterPayload( 11 | int slotNumber 12 | ) implements CustomPacketPayload { 13 | public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(LaserIO.MODID, "open_filter")); 14 | 15 | @Override 16 | public Type type() { 17 | return TYPE; 18 | } 19 | 20 | public static final StreamCodec STREAM_CODEC = StreamCodec.composite( 21 | ByteBufCodecs.INT, OpenFilterPayload::slotNumber, 22 | OpenFilterPayload::new 23 | ); 24 | } 25 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/entries/laser_wrench.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Laser Wrench", 3 | "icon": "laserio:laser_wrench", 4 | "sortnum": 1, 5 | "category": "laserio:items", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "The Laser Wrench is primarily used to connect multiple Blocks together.$(br2)$(l:laserio:laser_node)Nodes$(/l) and $(l:laserio:laser_connector)Connectors$(/l) can be connected by Shift-RightClicking to select a block, and then right clicking another block to form a connecion.$(br2)The max connection range is 8 blocks." 10 | }, 11 | { 12 | "type": "patchouli:image", 13 | "title": "Laser Wrench", 14 | "images": [ 15 | "laserio:textures/book/entries/laser_wrench.png" 16 | ], 17 | "border": true, 18 | "text": "The currently selected block is highlighted green." 19 | }, 20 | { 21 | "type": "patchouli:crafting", 22 | "title": "Laser Wrench", 23 | "recipe": "laserio:laser_wrench" 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/entries/exact.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Exact", 3 | "sortnum": 6, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/exacttrue.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Exact is only available on Extractor and Stocker Modes.$(br2)Exact mode ensures that the exact amount of items set in the 'Extract Amount' field are extracted. For example, if the Extract Amount is set to 8, and there are only 5 items in an adjacent chest, the extractor will not remove them until 8 are available." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "Exact mode works slightly differently for Stock Mode cards. Exact will only allow items to move if the amount needed to meet the stocking request OR the Extract Amount are available in the network, whichever is smaller.$(br2)For example, if a stocker needs 13 more items, and can extract 32 at a time, it will only extract if 13 items are available somewhere in the network." 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/entries/channel.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Channel", 3 | "sortnum": 4, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/blankbutton.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Cards can only interact with other cards that are on the same channel. This allows a player to have multiple sets of routing logic on the same network.$(br2)For example, Extractor cards on the 'Orange' channel will only attempt to insert into 'Orange' colored Insert Cards, and will ignore all other cards." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "For example, set an Extract Card to the 'Orange Channel' with a filter for cobblestone, and another extract card to the 'Black Channel' with a filter for coal. Then place them in the same node. $(br2)An Orange channel inserter can sit above a furnace, with a black channel inserter below. This will ensure that only cobblestone goes into the top of the furnace, while coal goes below." 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/entries/laser_connector.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Conector a Laser", 3 | "icon": "laserio:laser_connector", 4 | "sortnum": 1, 5 | "category": "laserio:blocks", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Multiplos $(l:laserio:laser_node)Nós a Laser$(/l) podem ser conectados diretamente uns aos outros usando a $(l:laserio:laser_wrench)Chave a Laser$(/l), no entanto, o alcance máximo é de 8 blocos. $(br2)Os Conectores a Laser podem atuar como um ponto intermediário mais barato entre os Nós, permitindo que você construa uma rede de inventários interconectados." 10 | }, 11 | { 12 | "type": "patchouli:image", 13 | "title": "Nó a Laser", 14 | "images": [ 15 | "laserio:textures/book/entries/laser_connector1.png" 16 | ], 17 | "border": true, 18 | "text": "Conector entre 2 nós" 19 | }, 20 | { 21 | "type": "patchouli:crafting", 22 | "title": "Conector a Laser", 23 | "recipe": "laserio:laser_connector" 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/client/events/RenderGUIOverlay.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.client.events; 2 | 3 | import com.direwolf20.laserio.common.blockentities.LaserConnectorAdvBE; 4 | import net.minecraft.client.gui.Font; 5 | import net.minecraft.client.gui.GuiGraphics; 6 | import net.minecraft.client.resources.language.I18n; 7 | import net.minecraft.core.GlobalPos; 8 | 9 | import java.awt.*; 10 | 11 | public class RenderGUIOverlay { 12 | public static void renderLocation(Font font, GuiGraphics guiGraphics, LaserConnectorAdvBE laserConnectorAdvBE) { 13 | GlobalPos dimBlockPos = laserConnectorAdvBE.getPartnerGlobalPos(); 14 | if (dimBlockPos == null) return; 15 | String dimString = I18n.get(dimBlockPos.dimension().location().getPath()) + ": [" + dimBlockPos.pos().getX() + "," + dimBlockPos.pos().getY() + "," + dimBlockPos.pos().getZ() + "]"; 16 | guiGraphics.drawString(font, dimString, guiGraphics.guiWidth() / 2 - dimString.length() * 2, guiGraphics.guiHeight() / 20 + guiGraphics.guiHeight() / 2, Color.WHITE.getRGB(), false); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/network/data/ToggleParticlesPayload.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.network.data; 2 | 3 | import com.direwolf20.laserio.common.LaserIO; 4 | import net.minecraft.network.FriendlyByteBuf; 5 | import net.minecraft.network.codec.ByteBufCodecs; 6 | import net.minecraft.network.codec.StreamCodec; 7 | import net.minecraft.network.protocol.common.custom.CustomPacketPayload; 8 | import net.minecraft.resources.ResourceLocation; 9 | 10 | public record ToggleParticlesPayload( 11 | boolean renderParticles 12 | ) implements CustomPacketPayload { 13 | public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(LaserIO.MODID, "toggle_particles")); 14 | 15 | @Override 16 | public Type type() { 17 | return TYPE; 18 | } 19 | 20 | public static final StreamCodec STREAM_CODEC = StreamCodec.composite( 21 | ByteBufCodecs.BOOL, ToggleParticlesPayload::renderParticles, 22 | ToggleParticlesPayload::new 23 | ); 24 | } 25 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/entries/laser_wrench.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Chave a Laser", 3 | "icon": "laserio:laser_wrench", 4 | "sortnum": 1, 5 | "category": "laserio:items", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "A Chave a Laser é usada principalmente para conectar vários blocos juntos.$(br2)$(l:laserio:laser_node)Nós$(/l) e $(l:laserio:laser_connector)Conectores$(/l) podem ser conectados através do Shift e clique direito do mouse para selecionar um bloco, e clicando novamente com o botão direito em outro bloco para formar uma conexão.$(br2)A distância máxima de conexão é de 8 blocos." 10 | }, 11 | { 12 | "type": "patchouli:image", 13 | "title": "Chave a Laser", 14 | "images": [ 15 | "laserio:textures/book/entries/laser_wrench.png" 16 | ], 17 | "border": true, 18 | "text": "O bloco selecionado ficará destacado em verde." 19 | }, 20 | { 21 | "type": "patchouli:crafting", 22 | "title": "Chave a Laser", 23 | "recipe": "laserio:laser_wrench" 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/card_redstone.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "红石卡", 3 | "sortnum": 4, 4 | "category": "laserio:cards", 5 | "icon": "laserio:card_redstone", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "红石卡用于在 LaserIO 网络之间传输红石信号。$(br2)红石卡拥有一个特定的“红石频道”,独立于其他卡所使用的频道。" 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "红石卡有 2 种模式:$(br2)$(bold)输入$()$(br)输入模式下,将从红石粉、拉杆或者按钮这样的东西接受红石信号,并通过设定的频道在网络中传输。$(br2)$(bold)输出$()$(br)输出模式下,将输出红石信号给红石粉,红石灯或者中继器之类的东西。" 14 | }, 15 | { 16 | "type": "patchouli:text", 17 | "text": "输出模式下可以切换弱或者强信号。弱信号模式下,只有直接相邻的方块(例如红石粉)会收到信号,类似于红石粉的工作方式。$(br2)强信号模式下,红石信号能够穿过相邻的方块到达另一边,类似于拉杆输出的信号。" 18 | }, 19 | { 20 | "type": "patchouli:text", 21 | "text": "所有的卡都可以切换红石模式,默认为忽略红石信号,意味着此卡将一直工作。$(br2)如果设定为低,卡只会在对应的红石频道$(bold)没有$()信号的时候工作(红石频道按钮在红石模式按钮右边)。$(br2)在高红石信号模式下,卡只会在对应红石频道$(bold)有$()信号的时候工作。" 22 | }, 23 | { 24 | "type": "patchouli:crafting", 25 | "title": "红石卡", 26 | "recipe": "laserio:card_redstone" 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/client/particles/ModParticles.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.client.particles; 2 | 3 | import com.direwolf20.laserio.client.particles.fluidparticle.FluidFlowParticleType; 4 | import com.direwolf20.laserio.client.particles.itemparticle.ItemFlowParticleType; 5 | import com.direwolf20.laserio.common.LaserIO; 6 | import net.minecraft.core.particles.ParticleType; 7 | import net.minecraft.core.registries.Registries; 8 | import net.neoforged.neoforge.registries.DeferredHolder; 9 | import net.neoforged.neoforge.registries.DeferredRegister; 10 | 11 | 12 | public class ModParticles { 13 | public static final DeferredRegister> PARTICLE_TYPES = DeferredRegister.create(Registries.PARTICLE_TYPE, LaserIO.MODID); 14 | public static final DeferredHolder, ItemFlowParticleType> ITEMFLOWPARTICLE = PARTICLE_TYPES.register("itemflowparticle", () -> new ItemFlowParticleType(false)); 15 | public static final DeferredHolder, FluidFlowParticleType> FLUIDFLOWPARTICLE = PARTICLE_TYPES.register("fluidflowparticle", () -> new FluidFlowParticleType(false)); 16 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/containers/customslot/CardOverclockSlot.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.containers.customslot; 2 | 3 | import com.direwolf20.laserio.common.items.upgrades.OverclockerCard; 4 | import net.minecraft.world.item.ItemStack; 5 | import net.neoforged.neoforge.items.IItemHandler; 6 | import net.neoforged.neoforge.items.ItemHandlerCopySlot; 7 | 8 | import javax.annotation.Nonnull; 9 | 10 | public class CardOverclockSlot extends ItemHandlerCopySlot { 11 | protected boolean enabled = true; 12 | 13 | public CardOverclockSlot(IItemHandler itemHandler, int index, int xPosition, int yPosition) { 14 | super(itemHandler, index, xPosition, yPosition); 15 | } 16 | 17 | @Override 18 | public boolean mayPlace(@Nonnull ItemStack stack) { 19 | if (stack.isEmpty()) return true; 20 | return (stack.getItem() instanceof OverclockerCard); 21 | } 22 | 23 | @Override 24 | public boolean isActive() { 25 | return enabled; 26 | } 27 | 28 | public CardOverclockSlot setEnabled(boolean enabled) { 29 | this.enabled = enabled; 30 | return this; 31 | } 32 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/network/data/UpdateFilterPayload.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.network.data; 2 | 3 | import com.direwolf20.laserio.common.LaserIO; 4 | import io.netty.buffer.ByteBuf; 5 | import net.minecraft.network.codec.ByteBufCodecs; 6 | import net.minecraft.network.codec.StreamCodec; 7 | import net.minecraft.network.protocol.common.custom.CustomPacketPayload; 8 | import net.minecraft.resources.ResourceLocation; 9 | 10 | public record UpdateFilterPayload( 11 | boolean allowList, 12 | boolean compareNBT 13 | ) implements CustomPacketPayload { 14 | public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(LaserIO.MODID, "update_filter")); 15 | 16 | @Override 17 | public Type type() { 18 | return TYPE; 19 | } 20 | 21 | public static final StreamCodec STREAM_CODEC = StreamCodec.composite( 22 | ByteBufCodecs.BOOL, UpdateFilterPayload::allowList, 23 | ByteBufCodecs.BOOL, UpdateFilterPayload::compareNBT, 24 | UpdateFilterPayload::new 25 | ); 26 | } 27 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/entries/channel.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Canal", 3 | "sortnum": 4, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/blankbutton.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Os cartões somente interagem com outros cartões que estiverem no mesmo canal. Isso permite ao jogador possuir multiplas rotas lógicas na mesma rede.$(br2)Por exemplo, os Cartões de Extração no canal 'Laranja' somente tentarão inserir nos Cartões de Inserção que estiverem no canal 'Laranja', e ignorará todos os outros cartões." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "Por exemplo, configure um Cartão de Extração no canal 'Laranja' com um filtro para pedras, e outro Cartão de Extração no canal 'Preto' com um filtro para carvão. Então coloque-os no mesmo Nó a Laser. $(br2)Um canal de inserção Laranja pode ficar em cima de uma fornalha, com um cartão de inserção em baixo no canal Preto. Isso garantirá que somente pedras serão inseridas no topo da fornalha, enquanto o carvão será inserido por baixo." 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | # The MIT License (MIT) 2 | 3 | Copyright (c) 2022 Direwolf20-MC 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/network/data/CopyPasteCardPayload.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.network.data; 2 | 3 | import com.direwolf20.laserio.common.LaserIO; 4 | import net.minecraft.network.FriendlyByteBuf; 5 | import net.minecraft.network.codec.ByteBufCodecs; 6 | import net.minecraft.network.codec.StreamCodec; 7 | import net.minecraft.network.protocol.common.custom.CustomPacketPayload; 8 | import net.minecraft.resources.ResourceLocation; 9 | 10 | public record CopyPasteCardPayload( 11 | int slot, 12 | boolean copy 13 | ) implements CustomPacketPayload { 14 | public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(LaserIO.MODID, "copy_paste_card")); 15 | 16 | @Override 17 | public Type type() { 18 | return TYPE; 19 | } 20 | 21 | public static final StreamCodec STREAM_CODEC = StreamCodec.composite( 22 | ByteBufCodecs.INT, CopyPasteCardPayload::slot, 23 | ByteBufCodecs.BOOL, CopyPasteCardPayload::copy, 24 | CopyPasteCardPayload::new 25 | ); 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/network/data/OpenNodePayload.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.network.data; 2 | 3 | import com.direwolf20.laserio.common.LaserIO; 4 | import net.minecraft.core.BlockPos; 5 | import net.minecraft.network.FriendlyByteBuf; 6 | import net.minecraft.network.codec.ByteBufCodecs; 7 | import net.minecraft.network.codec.StreamCodec; 8 | import net.minecraft.network.protocol.common.custom.CustomPacketPayload; 9 | import net.minecraft.resources.ResourceLocation; 10 | 11 | public record OpenNodePayload( 12 | BlockPos sourcePos, 13 | byte side 14 | ) implements CustomPacketPayload { 15 | public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(LaserIO.MODID, "open_node")); 16 | 17 | @Override 18 | public Type type() { 19 | return TYPE; 20 | } 21 | 22 | public static final StreamCodec STREAM_CODEC = StreamCodec.composite( 23 | BlockPos.STREAM_CODEC, OpenNodePayload::sourcePos, 24 | ByteBufCodecs.BYTE, OpenNodePayload::side, 25 | OpenNodePayload::new 26 | ); 27 | } 28 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/entries/exact.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Exato", 3 | "sortnum": 6, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/exacttrue.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "O modo Exato está somente disponível nos Modos de Extração e de Estoque.$(br2)O modo Exato garante que uma quantidade exata de itens configurada no campo 'Valor da Transferência' será extraída. Por exemplo, se o Valor da Transferência estiver definido para 8, e existirem somente 5 itens no baú adjacente, o extrator não removerá enquanto não houverem 8 itens disponíveis." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "O modo Exato funciona um pouco diferente do Modo de Estoque. O modo Exato só permitirá a movimentação de itens se a quantidade necessária para atender à solicitação de estoque OU o Valor da Transferência estiver disponível na rede, o que for menor.$(br2)Por exemplo, se um estocador precisar de mais 13 itens, e pode extrair 32 por vez, somente extrairá se houverem 13 itens disponíveis em algum lugar da rede." 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/util/MagicHelpers.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.util; 2 | 3 | import java.math.BigDecimal; 4 | import java.math.RoundingMode; 5 | 6 | public class MagicHelpers { 7 | public static String withSuffix(int count) { 8 | if (count < 1000) return "" + count; 9 | int exp = (int) (Math.log(count) / Math.log(1000)); 10 | return String.format("%.1f%c", 11 | count / Math.pow(1000, exp), 12 | "kMGTPE".charAt(exp - 1)); 13 | } 14 | 15 | private static final BigDecimal TWENTY = new BigDecimal(20); 16 | 17 | public static String ticksInSeconds(int ticks) { 18 | BigDecimal value = new BigDecimal(ticks); 19 | value = value.divide(TWENTY, 1, RoundingMode.HALF_UP); 20 | return value.toString(); 21 | } 22 | 23 | public static String tidyValue(float value) { 24 | if (value < 1000) 25 | return String.valueOf(value); 26 | 27 | int exp = (int) (Math.log(value) / Math.log(1000)); 28 | return String.format("%.1f%c", 29 | value / Math.pow(1000, exp), 30 | "kMGTPE_____".charAt(exp - 1)); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/entries/card_cloner.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Card Cloner", 3 | "icon": "laserio:card_cloner", 4 | "sortnum": 2, 5 | "category": "laserio:items", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "The Card Cloner can be used to 'copy and paste' card settings from one card to another! From within a $(l:laserio:laser_node)Laser Node$(/l) screen, pickup the Card Cloner (on your cursor) and left click on a card to copy its settings. $(br2)Right click on a card to paste the stored settings." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "When pasting, $(l:laserio:overclocker_card)Overclockers$(/l) and $(l:laserio:filters)Filters$(/l) will be automatically taken (or placed back) inside the currently available $(l:laserio:card_holder)Card Holder$(/l). These items will not be pulled out of the player's inventory.$(br2)If any of the necessary items are missing, the paste will fail. It will NOT partially paste the settings." 14 | }, 15 | { 16 | "type": "patchouli:crafting", 17 | "title": "Card Cloner", 18 | "recipe": "laserio:card_cloner" 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/network/data/NodeParticlesPayload.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.network.data; 2 | 3 | import com.direwolf20.laserio.common.LaserIO; 4 | import com.direwolf20.laserio.util.ParticleData; 5 | import net.minecraft.network.RegistryFriendlyByteBuf; 6 | import net.minecraft.network.codec.ByteBufCodecs; 7 | import net.minecraft.network.codec.StreamCodec; 8 | import net.minecraft.network.protocol.common.custom.CustomPacketPayload; 9 | import net.minecraft.resources.ResourceLocation; 10 | 11 | import java.util.List; 12 | 13 | public record NodeParticlesPayload( 14 | List particleList 15 | ) implements CustomPacketPayload { 16 | public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(LaserIO.MODID, "node_particles_item")); 17 | 18 | @Override 19 | public Type type() { 20 | return TYPE; 21 | } 22 | 23 | public static final StreamCodec STREAM_CODEC = StreamCodec.composite( 24 | ParticleData.STREAM_CODEC.apply(ByteBufCodecs.list()), NodeParticlesPayload::particleList, 25 | NodeParticlesPayload::new 26 | ); 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/datagen/LaserIOLootTable.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.datagen; 2 | 3 | import com.direwolf20.laserio.common.LaserIO; 4 | import com.direwolf20.laserio.setup.Registration; 5 | import net.minecraft.core.HolderLookup; 6 | import net.minecraft.core.registries.BuiltInRegistries; 7 | import net.minecraft.data.loot.packs.VanillaBlockLoot; 8 | import net.minecraft.world.level.block.Block; 9 | 10 | import java.util.Map; 11 | import java.util.stream.Collectors; 12 | 13 | public class LaserIOLootTable extends VanillaBlockLoot { 14 | 15 | public LaserIOLootTable(HolderLookup.Provider p_344962_) { 16 | super(p_344962_); 17 | } 18 | 19 | @Override 20 | protected void generate() { 21 | dropSelf(Registration.LaserNode.get()); 22 | dropSelf(Registration.LaserConnector.get()); 23 | dropSelf(Registration.LaserConnectorAdv.get()); 24 | } 25 | 26 | @Override 27 | protected Iterable getKnownBlocks() { 28 | return BuiltInRegistries.BLOCK.entrySet().stream() 29 | .filter(e -> e.getKey().location().getNamespace().equals(LaserIO.MODID)) 30 | .map(Map.Entry::getValue) 31 | .collect(Collectors.toList()); 32 | } 33 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/network/data/UpdateFilterTagPayload.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.network.data; 2 | 3 | import com.direwolf20.laserio.common.LaserIO; 4 | import net.minecraft.network.FriendlyByteBuf; 5 | import net.minecraft.network.codec.ByteBufCodecs; 6 | import net.minecraft.network.codec.StreamCodec; 7 | import net.minecraft.network.protocol.common.custom.CustomPacketPayload; 8 | import net.minecraft.resources.ResourceLocation; 9 | 10 | import java.util.List; 11 | 12 | public record UpdateFilterTagPayload( 13 | boolean allowList, 14 | List tags 15 | ) implements CustomPacketPayload { 16 | public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(LaserIO.MODID, "update_filter_tag")); 17 | 18 | @Override 19 | public Type type() { 20 | return TYPE; 21 | } 22 | 23 | public static final StreamCodec STREAM_CODEC = StreamCodec.composite( 24 | ByteBufCodecs.BOOL, UpdateFilterTagPayload::allowList, 25 | ByteBufCodecs.STRING_UTF8.apply(ByteBufCodecs.list()), UpdateFilterTagPayload::tags, 26 | UpdateFilterTagPayload::new 27 | ); 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/network/handler/PacketChangeColor.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.network.handler; 2 | 3 | import com.direwolf20.laserio.common.blockentities.LaserNodeBE; 4 | import com.direwolf20.laserio.common.network.data.ChangeColorPayload; 5 | import net.minecraft.world.entity.player.Player; 6 | import net.minecraft.world.level.block.entity.BlockEntity; 7 | import net.neoforged.neoforge.network.handling.IPayloadContext; 8 | 9 | import java.awt.*; 10 | 11 | public class PacketChangeColor { 12 | public static final PacketChangeColor INSTANCE = new PacketChangeColor(); 13 | 14 | public static PacketChangeColor get() { 15 | return INSTANCE; 16 | } 17 | 18 | public void handle(final ChangeColorPayload payload, final IPayloadContext context) { 19 | context.enqueueWork(() -> { 20 | Player sender = context.player(); 21 | 22 | 23 | BlockEntity blockEntity = sender.level().getBlockEntity(payload.sourcePos()); 24 | if (blockEntity instanceof LaserNodeBE laserNodeBE) { 25 | laserNodeBE.setColor(new Color(payload.color(), true), payload.wrenchAlpha()); 26 | laserNodeBE.discoverAllNodes(); 27 | } 28 | }); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/network/handler/PacketToggleParticles.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.network.handler; 2 | 3 | import com.direwolf20.laserio.common.containers.LaserNodeContainer; 4 | import com.direwolf20.laserio.common.network.data.ToggleParticlesPayload; 5 | import net.minecraft.world.entity.player.Player; 6 | import net.minecraft.world.inventory.AbstractContainerMenu; 7 | import net.neoforged.neoforge.network.handling.IPayloadContext; 8 | 9 | public class PacketToggleParticles { 10 | public static final PacketToggleParticles INSTANCE = new PacketToggleParticles(); 11 | 12 | public static PacketToggleParticles get() { 13 | return INSTANCE; 14 | } 15 | 16 | public void handle(final ToggleParticlesPayload payload, final IPayloadContext context) { 17 | context.enqueueWork(() -> { 18 | Player sender = context.player(); 19 | 20 | AbstractContainerMenu container = sender.containerMenu; 21 | if (container == null) 22 | return; 23 | 24 | if (container instanceof LaserNodeContainer laserNodeContainer) { 25 | laserNodeContainer.tile.setShowParticles(payload.renderParticles()); 26 | } 27 | }); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/network/data/OpenCardPayload.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.network.data; 2 | 3 | import com.direwolf20.laserio.common.LaserIO; 4 | import net.minecraft.core.BlockPos; 5 | import net.minecraft.network.FriendlyByteBuf; 6 | import net.minecraft.network.codec.ByteBufCodecs; 7 | import net.minecraft.network.codec.StreamCodec; 8 | import net.minecraft.network.protocol.common.custom.CustomPacketPayload; 9 | import net.minecraft.resources.ResourceLocation; 10 | 11 | public record OpenCardPayload( 12 | int slotNumber, 13 | BlockPos sourcePos, 14 | boolean hasShiftDown 15 | ) implements CustomPacketPayload { 16 | public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(LaserIO.MODID, "open_card")); 17 | 18 | @Override 19 | public Type type() { 20 | return TYPE; 21 | } 22 | 23 | public static final StreamCodec STREAM_CODEC = StreamCodec.composite( 24 | ByteBufCodecs.INT, OpenCardPayload::slotNumber, 25 | BlockPos.STREAM_CODEC, OpenCardPayload::sourcePos, 26 | ByteBufCodecs.BOOL, OpenCardPayload::hasShiftDown, 27 | OpenCardPayload::new 28 | ); 29 | } 30 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/oveclocker_node.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "节点超频元件", 3 | "icon": "laserio:overclocker_node", 4 | "sortnum": 3, 5 | "category": "laserio:items", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "节点超频元件是一种更复杂的组件。$(br2)每个$(l:laserio:laser_node)节点$(/l)每个面每刻只能操作一张卡。$(br2)如果一个节点的一个面有三张抽取卡,在一个游戏刻中只有第一张卡生效,只有第一张卡无法做出任何动作的时候,第二张卡才会生效。" 10 | }, 11 | { 12 | "type": "patchouli:image", 13 | "title": "没有节点超频元件", 14 | "images": [ 15 | "laserio:textures/book/entries/overclocker_node1.png" 16 | ], 17 | "border": true, 18 | "text": "没有节点超频元件被安装" 19 | }, 20 | { 21 | "type": "patchouli:text", 22 | "text": "一个面上安装的每个节点超频元件允许这个面每刻多运行一张卡。最多能安装 8 个超频元件,允许所有 9 张卡同时运作。$(br2)输入模式的卡$(l)$(#ff0000)不$()需要超频,$(l)只有$()抽取模式和存储模式需要。" 23 | }, 24 | { 25 | "type": "patchouli:image", 26 | "title": "2 个节点超频元件", 27 | "images": [ 28 | "laserio:textures/book/entries/overclocker_node2.png" 29 | ], 30 | "border": true, 31 | "text": "安装了 2 个节点超频元件" 32 | }, 33 | { 34 | "type": "patchouli:crafting", 35 | "title": "节点超频元件", 36 | "recipe": "laserio:overclocker_node" 37 | } 38 | ] 39 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/network/data/ChangeColorPayload.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.network.data; 2 | 3 | import com.direwolf20.laserio.common.LaserIO; 4 | import net.minecraft.core.BlockPos; 5 | import net.minecraft.network.FriendlyByteBuf; 6 | import net.minecraft.network.codec.ByteBufCodecs; 7 | import net.minecraft.network.codec.StreamCodec; 8 | import net.minecraft.network.protocol.common.custom.CustomPacketPayload; 9 | import net.minecraft.resources.ResourceLocation; 10 | 11 | public record ChangeColorPayload( 12 | BlockPos sourcePos, 13 | int color, 14 | int wrenchAlpha 15 | ) implements CustomPacketPayload { 16 | public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(LaserIO.MODID, "change_color")); 17 | 18 | @Override 19 | public Type type() { 20 | return TYPE; 21 | } 22 | 23 | public static final StreamCodec STREAM_CODEC = StreamCodec.composite( 24 | BlockPos.STREAM_CODEC, ChangeColorPayload::sourcePos, 25 | ByteBufCodecs.INT, ChangeColorPayload::color, 26 | ByteBufCodecs.INT, ChangeColorPayload::wrenchAlpha, 27 | ChangeColorPayload::new 28 | ); 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/network/data/NodeParticlesFluidPayload.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.network.data; 2 | 3 | import com.direwolf20.laserio.common.LaserIO; 4 | import com.direwolf20.laserio.util.ParticleDataFluid; 5 | import net.minecraft.network.RegistryFriendlyByteBuf; 6 | import net.minecraft.network.codec.ByteBufCodecs; 7 | import net.minecraft.network.codec.StreamCodec; 8 | import net.minecraft.network.protocol.common.custom.CustomPacketPayload; 9 | import net.minecraft.resources.ResourceLocation; 10 | 11 | import java.util.List; 12 | 13 | public record NodeParticlesFluidPayload( 14 | List particleList 15 | ) implements CustomPacketPayload { 16 | public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(LaserIO.MODID, "node_particles_fluid")); 17 | 18 | @Override 19 | public Type type() { 20 | return TYPE; 21 | } 22 | 23 | public static final StreamCodec STREAM_CODEC = StreamCodec.composite( 24 | ParticleDataFluid.STREAM_CODEC.apply(ByteBufCodecs.list()), NodeParticlesFluidPayload::particleList, 25 | NodeParticlesFluidPayload::new 26 | ); 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/util/CardHolderItemStackHandler.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.util; 2 | 3 | import com.direwolf20.laserio.common.items.cards.BaseCard; 4 | import com.direwolf20.laserio.common.items.filters.BaseFilter; 5 | import com.direwolf20.laserio.common.items.upgrades.OverclockerCard; 6 | import com.direwolf20.laserio.common.items.upgrades.OverclockerNode; 7 | import com.direwolf20.laserio.setup.LaserIODataComponents; 8 | import net.minecraft.world.item.ItemStack; 9 | import net.neoforged.neoforge.items.ComponentItemHandler; 10 | import org.jetbrains.annotations.NotNull; 11 | 12 | public class CardHolderItemStackHandler extends ComponentItemHandler { 13 | public CardHolderItemStackHandler(int size, ItemStack itemStack) { 14 | super(itemStack, LaserIODataComponents.ITEMSTACK_HANDLER.get(), size); 15 | } 16 | 17 | @Override 18 | public boolean isItemValid(int slot, @NotNull ItemStack stack) { 19 | if (stack.isEmpty()) return true; 20 | return (stack.getItem() instanceof BaseCard || stack.getItem() instanceof BaseFilter || stack.getItem() instanceof OverclockerCard || stack.getItem() instanceof OverclockerNode); 21 | } 22 | 23 | @Override 24 | public int getSlotLimit(int slot) { 25 | return 64; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/blocks/baseblocks/BaseLaserBlock.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.blocks.baseblocks; 2 | 3 | import com.direwolf20.laserio.common.blockentities.basebe.BaseLaserBE; 4 | import net.minecraft.core.BlockPos; 5 | import net.minecraft.world.level.Level; 6 | import net.minecraft.world.level.block.Block; 7 | import net.minecraft.world.level.block.SoundType; 8 | import net.minecraft.world.level.block.entity.BlockEntity; 9 | import net.minecraft.world.level.block.state.BlockState; 10 | 11 | public class BaseLaserBlock extends Block { 12 | public BaseLaserBlock() { 13 | super(Properties.of() 14 | .sound(SoundType.METAL) 15 | .strength(2.0f) 16 | .noOcclusion() 17 | .forceSolidOn() 18 | ); 19 | } 20 | 21 | @Override 22 | public void onRemove(BlockState state, Level worldIn, BlockPos pos, BlockState newState, boolean isMoving) { 23 | if (newState.getBlock() != this) { 24 | BlockEntity be = worldIn.getBlockEntity(pos); 25 | if (be != null && be instanceof BaseLaserBE) { 26 | ((BaseLaserBE) be).disconnectAllNodes(); 27 | } 28 | } 29 | super.onRemove(state, worldIn, pos, newState, isMoving); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/network/data/UpdateRedstoneCardPayload.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.network.data; 2 | 3 | import com.direwolf20.laserio.common.LaserIO; 4 | import net.minecraft.network.FriendlyByteBuf; 5 | import net.minecraft.network.codec.ByteBufCodecs; 6 | import net.minecraft.network.codec.StreamCodec; 7 | import net.minecraft.network.protocol.common.custom.CustomPacketPayload; 8 | import net.minecraft.resources.ResourceLocation; 9 | 10 | public record UpdateRedstoneCardPayload( 11 | byte mode, 12 | byte channel, 13 | boolean strong 14 | ) implements CustomPacketPayload { 15 | public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(LaserIO.MODID, "update_redstone_card")); 16 | 17 | @Override 18 | public Type type() { 19 | return TYPE; 20 | } 21 | 22 | public static final StreamCodec STREAM_CODEC = StreamCodec.composite( 23 | ByteBufCodecs.BYTE, UpdateRedstoneCardPayload::mode, 24 | ByteBufCodecs.BYTE, UpdateRedstoneCardPayload::channel, 25 | ByteBufCodecs.BOOL, UpdateRedstoneCardPayload::strong, 26 | UpdateRedstoneCardPayload::new 27 | ); 28 | } 29 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/entries/limit.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Limit", 3 | "sortnum": 10, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:card_energy", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Limit % only exists on Energy Cards. Limit % specifies the percentage of FE to operate with on the adjacent energy accepting block.$(br2)There are two different metrics, Insert % for Stock/Insert mode, and Extract % for extract mode." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "$(l)Insert/Stock Limit$()$(br2)By default, the limit% is set to 100%. Specifies how much to fill up the specified energy block.$(br2)For example: If the block can hold 1,000,000 FE, and you specify 50%, it will only fill up to 500,000FE.$(br2)The default (100%) will fill it up completely." 14 | }, 15 | { 16 | "type": "patchouli:text", 17 | "text": "$(l)Extract Limit$()$(br2)By default, the limit% is set to 0%. Specifies how much to leave behind in the specified energy block.$(br2)For example: If the block can hold 1,000,000 FE, and you specify 50%, it will extract until the block has 500,000fe remaining, and will not extract any more.$(br2)The default (0%) will extract all energy." 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/datagen/LaserIOBlockTags.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.datagen; 2 | 3 | import com.direwolf20.laserio.common.LaserIO; 4 | import com.direwolf20.laserio.setup.Registration; 5 | import net.minecraft.core.HolderLookup; 6 | import net.minecraft.data.PackOutput; 7 | import net.minecraft.tags.BlockTags; 8 | import net.neoforged.neoforge.common.data.BlockTagsProvider; 9 | import net.neoforged.neoforge.common.data.ExistingFileHelper; 10 | import org.jetbrains.annotations.Nullable; 11 | 12 | import java.util.concurrent.CompletableFuture; 13 | 14 | public class LaserIOBlockTags extends BlockTagsProvider { 15 | 16 | public LaserIOBlockTags(PackOutput output, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) { 17 | super(output, lookupProvider, LaserIO.MODID, existingFileHelper); 18 | } 19 | 20 | @Override 21 | protected void addTags(HolderLookup.Provider provider) { 22 | tag(BlockTags.MINEABLE_WITH_PICKAXE) 23 | .add(Registration.LaserNode.get()) 24 | .add(Registration.LaserConnector.get()) 25 | .add(Registration.LaserConnectorAdv.get()); 26 | } 27 | 28 | @Override 29 | public String getName() { 30 | return "LaserIO Tags"; 31 | } 32 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/modes.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "模式", 3 | "sortnum": 1, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/modestocker.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "模式决定卡的行为。下面的内容描述目前可用的模式。$(br2)每种卡(物品/流体/能量)都支持以下 3 种模式,以物品卡为例。$(br2)红石卡支持的是一套不同的模式。" 10 | }, 11 | { 12 | "type": "patchouli:spotlight", 13 | "item": "laserio:card_item{channel:0b,exact:0b,inv:{Items:[],Size:2},itemextractamt:1b,itemextractspeed:20,mode:0b,priority:0s,regulate:0b,roundRobin:0,sneaky:-1b}", 14 | "text": "输入模式卡是抽取模式卡的有效目标。$(br2)存储模式卡会试图从输入模式卡拉取。" 15 | }, 16 | { 17 | "type": "patchouli:spotlight", 18 | "item": "laserio:card_item{channel:0b,exact:0b,inv:{Items:[],Size:2},itemextractamt:1b,itemextractspeed:20,mode:1b,priority:0s,regulate:0b,roundRobin:0,sneaky:-1b}", 19 | "text": "抽取模式卡试图从相邻的方块提取对象。以物品为例,物品会从箱子被抽取并发送到一个输入卡。" 20 | }, 21 | { 22 | "type": "patchouli:spotlight", 23 | "item": "laserio:card_item{channel:0b,exact:0b,inv:{Items:[],Size:2},itemextractamt:1b,itemextractspeed:20,mode:2b,priority:0s,regulate:0b,roundRobin:0,sneaky:-1b}", 24 | "text": "存储模式卡试图寻找它们过滤器中设定的物品,并从网络中其他输入模式节点拉取物品。$(br2)存储模式卡需要过滤器才能起效。" 25 | } 26 | ] 27 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/client/renderer/DelayedRenderer.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.client.renderer; 2 | 3 | import com.direwolf20.laserio.common.blockentities.LaserNodeBE; 4 | import com.direwolf20.laserio.common.blockentities.basebe.BaseLaserBE; 5 | import com.mojang.blaze3d.vertex.PoseStack; 6 | 7 | import java.util.HashSet; 8 | import java.util.LinkedList; 9 | import java.util.Queue; 10 | import java.util.Set; 11 | 12 | public class DelayedRenderer { 13 | private static final Queue beRenders = new LinkedList<>(); 14 | private static final Set beConnectingRenders = new HashSet<>(); 15 | 16 | public static void render(PoseStack matrixStackIn) { 17 | if (beRenders.size() > 0) { 18 | RenderUtils.drawLasersLast2(beRenders, matrixStackIn); 19 | } 20 | } 21 | 22 | public static void renderConnections(PoseStack matrixStackIn) { 23 | if (beConnectingRenders.isEmpty()) return; 24 | RenderUtils.drawConnectingLasersLast4(beConnectingRenders, matrixStackIn); 25 | beConnectingRenders.clear(); 26 | } 27 | 28 | public static void add(BaseLaserBE be) { 29 | beRenders.add(be); 30 | } 31 | 32 | public static void addConnecting(LaserNodeBE be) { 33 | beConnectingRenders.add(be); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/client/blockentityrenders/baseberender/BaseLaserBERender.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.client.blockentityrenders.baseberender; 2 | 3 | import com.direwolf20.laserio.client.renderer.DelayedRenderer; 4 | import com.direwolf20.laserio.common.blockentities.basebe.BaseLaserBE; 5 | import com.mojang.blaze3d.vertex.PoseStack; 6 | import net.minecraft.client.renderer.MultiBufferSource; 7 | import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; 8 | import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; 9 | import net.minecraft.world.phys.AABB; 10 | 11 | public class BaseLaserBERender implements BlockEntityRenderer { 12 | public BaseLaserBERender(BlockEntityRendererProvider.Context p_173636_) { 13 | 14 | } 15 | 16 | @Override 17 | public void render(T blockentity, float partialTicks, PoseStack matrixStackIn, MultiBufferSource bufferIn, int combinedLightsIn, int combinedOverlayIn) { 18 | if (blockentity.getRenderedConnections().size() > 0) DelayedRenderer.add(blockentity); 19 | } 20 | 21 | @Override 22 | public AABB getRenderBoundingBox(T blockEntity) { 23 | return AABB.encapsulatingFullBlocks(blockEntity.getBlockPos().above(10).north(10).east(10), blockEntity.getBlockPos().below(10).south(10).west(10)); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/blocks/LaserConnectorAdv.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.blocks; 2 | 3 | import com.direwolf20.laserio.common.blockentities.LaserConnectorAdvBE; 4 | import net.minecraft.core.BlockPos; 5 | import net.minecraft.world.level.Level; 6 | import net.minecraft.world.level.block.EntityBlock; 7 | import net.minecraft.world.level.block.entity.BlockEntity; 8 | import net.minecraft.world.level.block.state.BlockState; 9 | 10 | import javax.annotation.Nullable; 11 | 12 | public class LaserConnectorAdv extends LaserConnector implements EntityBlock { 13 | public LaserConnectorAdv() { 14 | super(); 15 | } 16 | 17 | @Nullable 18 | @Override 19 | public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { 20 | return new LaserConnectorAdvBE(pos, state); 21 | } 22 | 23 | @Override 24 | public void onRemove(BlockState state, Level worldIn, BlockPos pos, BlockState newState, boolean isMoving) { 25 | if (newState.getBlock() != this) { 26 | BlockEntity be = worldIn.getBlockEntity(pos); 27 | if (be != null && be instanceof LaserConnectorAdvBE laserConnectorAdvBE) { 28 | laserConnectorAdvBE.disconnectAllNodes(); 29 | } 30 | } 31 | super.onRemove(state, worldIn, pos, newState, isMoving); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/network/data/NodeParticlesChemicalPayload.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.network.data; 2 | 3 | import com.direwolf20.laserio.common.LaserIO; 4 | import com.direwolf20.laserio.integration.mekanism.client.chemicalparticle.ParticleDataChemical; 5 | import net.minecraft.network.RegistryFriendlyByteBuf; 6 | import net.minecraft.network.codec.ByteBufCodecs; 7 | import net.minecraft.network.codec.StreamCodec; 8 | import net.minecraft.network.protocol.common.custom.CustomPacketPayload; 9 | import net.minecraft.resources.ResourceLocation; 10 | 11 | import java.util.List; 12 | 13 | public record NodeParticlesChemicalPayload( 14 | List particleList 15 | ) implements CustomPacketPayload { 16 | public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(LaserIO.MODID, "node_particles_chemical")); 17 | 18 | @Override 19 | public Type type() { 20 | return TYPE; 21 | } 22 | 23 | public static final StreamCodec STREAM_CODEC = StreamCodec.composite( 24 | ParticleDataChemical.STREAM_CODEC.apply(ByteBufCodecs.list()), NodeParticlesChemicalPayload::particleList, 25 | NodeParticlesChemicalPayload::new 26 | ); 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/common/network/data/GhostSlotPayload.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.common.network.data; 2 | 3 | import com.direwolf20.laserio.common.LaserIO; 4 | import net.minecraft.network.RegistryFriendlyByteBuf; 5 | import net.minecraft.network.codec.ByteBufCodecs; 6 | import net.minecraft.network.codec.StreamCodec; 7 | import net.minecraft.network.protocol.common.custom.CustomPacketPayload; 8 | import net.minecraft.resources.ResourceLocation; 9 | import net.minecraft.world.item.ItemStack; 10 | 11 | public record GhostSlotPayload( 12 | int slotNumber, 13 | ItemStack stack, 14 | int count, 15 | int mbAmt 16 | ) implements CustomPacketPayload { 17 | public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(LaserIO.MODID, "ghost_slot")); 18 | 19 | @Override 20 | public Type type() { 21 | return TYPE; 22 | } 23 | 24 | public static final StreamCodec STREAM_CODEC = StreamCodec.composite( 25 | ByteBufCodecs.INT, GhostSlotPayload::slotNumber, 26 | ItemStack.OPTIONAL_STREAM_CODEC, GhostSlotPayload::stack, 27 | ByteBufCodecs.INT, GhostSlotPayload::count, 28 | ByteBufCodecs.INT, GhostSlotPayload::mbAmt, 29 | GhostSlotPayload::new 30 | ); 31 | } 32 | -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/pt_br/entries/limit.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Limite", 3 | "sortnum": 10, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:card_energy", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "A % de Limite só existe em Cartões de Energia. A % do Limite especifica a porcentagem de Energia Forge(FE) para operar no bloco adjacente que aceite energia.$(br2)Existem duas métricas diferentes, % de Inserção para o modo de Inserção/Estoque, e a % de Extração para o modo de Extração." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "$(l)Limite de Inserção/Estoque$()$(br2)Por padrão, a % do limite está definida em 100%. Especifica quanto o bloco de energia será preenchido.$(br2)Por exemplo: Se o bloco pode armazenar 1.000.000 FE, e você especificar 50%, o bloco será preenchido até 500.000 FE.$(br2)O padrão (100%) preencherá o bloco por completo." 14 | }, 15 | { 16 | "type": "patchouli:text", 17 | "text": "$(l)Limite de Extração$()$(br2)Por padrão, a % do limite está definida em 0%. Especifica quanto de energia restará no bloco de energia.$(br2)Por exemplo: se o bloco pode armazenar 1.000.000 FE, e você especificar 50%, a energia será extraída até restarem apenas 500.000 FE, e nada mais será extraído.$(br2)O padão (0%) extrairá toda a energia." 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/en_us/entries/priority.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Priority", 3 | "sortnum": 3, 4 | "category": "laserio:mechanics", 5 | "icon": "laserio:textures/gui/buttons/modeinserter.png", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "Priority is only available on Inserter Mode.$(br2)Priority allows you to control the order upon which inserter cards are operated. By default, Inserter cards operate on a 'nearest first' mode, which means that extractors attempt to insert into the nearest inventory first." 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "By changing an Inserter Card's priority setting, you can adjust which inventory should be inserted into first. The highest priority inserter will be the first on the list, for example: Priority 10 is higher than 0, which is higher than -10. $(br2)If multiple inventories have the same priority they will be 'Nearest First'." 14 | }, 15 | { 16 | "type": "patchouli:text", 17 | "text": "Left click on this value to increase it by 1. Right click to decrease it. Holding shift will multiply the change amount by 10, while holding control will multiply the change amount by 64.$(br2)These can be combined, meaning holding shift+ctrl will multiply by 640.$(br2)For example, shift right click will decrement by 10." 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/assets/laserio/patchouli_books/laseriobook/zh_cn/entries/card_energy.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "能量卡", 3 | "sortnum": 3, 4 | "category": "laserio:cards", 5 | "icon": "laserio:card_energy", 6 | "pages": [ 7 | { 8 | "type": "patchouli:text", 9 | "text": "能量卡用于在容器之间传输能量,例如机器和电池。$(br2)能量卡的机制和其他的卡有些许不同,将在后面几页详述。" 10 | }, 11 | { 12 | "type": "patchouli:text", 13 | "text": "和物品/流体卡需要超频来以低于20刻/次操作的速度工作不同,能量卡默认每刻进行一次传输。$(br2)超频后的最大 FE 传输速率:$(br)$(li)没有超频元件:1000FE/t$(li)1 个超频元件:4,000FE/t$(li)2 个超频元件:16,000FE/t$(li)3 个超频元件:32,000FE/t$(li)4 个超频元件:100,000FE/t" 14 | }, 15 | { 16 | "type": "patchouli:text", 17 | "text": "能量卡也有一个“能量上限”的设置,以百分比显示。默认情况下,在输入/存储模式为 100%,在抽取模式为 0%。在输入/存储模式下,这个数字决定接受能量的容器会被填充到多满, $(br2)例如,如果一个方块最多能够存储 1,000,000 FE,而你设定的值是 50%,最后只会存储 500,000 FE。" 18 | }, 19 | { 20 | "type": "patchouli:text", 21 | "text": "在抽取模式下,这个值决定会留下多少能量。$(br2)例如,如果你从一个容量为 1,000,000FE 的电池抽取能量,而设定的值是 25%,那么当剩余能量低于 250,000 FE 时便不会再抽取。" 22 | }, 23 | { 24 | "type": "patchouli:text", 25 | "text": "技术性提示: Forge 能量系统支持的能量储量上限为 INT 类型的最大值,约为 21.4 亿。如果你在使用 Draconic Evolution 或者 Mekanism,它们的能量储存设备可以存储比这更大的量,这是通过魔改 Forge 能量系统做到的。因此,这个能量百分比对于容量大于 21.4 亿的容器不起作用,抱歉!:)" 26 | }, 27 | { 28 | "type": "patchouli:crafting", 29 | "title": "能量卡", 30 | "recipe": "laserio:card_energy" 31 | } 32 | ] 33 | } -------------------------------------------------------------------------------- /src/main/java/com/direwolf20/laserio/util/NodeSideCache.java: -------------------------------------------------------------------------------- 1 | package com.direwolf20.laserio.util; 2 | 3 | import com.direwolf20.laserio.common.blockentities.LaserNodeBE; 4 | import com.direwolf20.laserio.common.containers.customhandler.LaserNodeItemHandler; 5 | import it.unimi.dsi.fastutil.bytes.Byte2ByteMap; 6 | import it.unimi.dsi.fastutil.bytes.Byte2ByteOpenHashMap; 7 | 8 | import java.util.List; 9 | import java.util.concurrent.CopyOnWriteArrayList; 10 | 11 | public class NodeSideCache { 12 | public LaserNodeItemHandler itemHandler; 13 | public int overClocker; 14 | public final List extractorCardCaches = new CopyOnWriteArrayList<>(); 15 | public LaserNodeBE.LaserEnergyStorage laserEnergyStorage; 16 | public LaserNodeBE.LaserEnergyStorage energyStorage; 17 | public Byte2ByteMap myRedstoneFromSensors = new Byte2ByteOpenHashMap(); //Channel,Strength 18 | 19 | public NodeSideCache() { 20 | 21 | } 22 | 23 | public NodeSideCache(LaserNodeItemHandler itemHandler, int overClocker, LaserNodeBE.LaserEnergyStorage energyStorage) { 24 | this.itemHandler = itemHandler; 25 | this.overClocker = overClocker; 26 | this.energyStorage = energyStorage; 27 | this.laserEnergyStorage = energyStorage; 28 | } 29 | 30 | public void invalidateEnergy() { 31 | laserEnergyStorage = energyStorage; 32 | } 33 | 34 | 35 | } 36 | --------------------------------------------------------------------------------