4

More specifically, say there's a pile of items on the ground, for instance after someone dies, and I want to create an exact copy of each of those items (NBT tags and all), but in a different (specific) location. How would I go about doing that?

Taking the naive approach, the math gets pretty horrifying pretty quickly. For instance, adding a command block for every combination of every enchantment on every item that can hold those enchantments quickly becomes unmanageable. For instance, there are 6 enchantments that can be applied to every type of armour, there are 5 armour grades, 4 armor pieces at each grade, and at least 3 enchantment levels (with default enchanting) for these enchantments. That alone would take 720 command blocks (considering I need 2 command blocks to do the clone), to say nothing of the various combinations of enchantments that can be had within those 6, plus other enchantments available to individual armour pieces, and durability (oh god, the durability) of the items. Obviously, writing thousands (millions?) of command blocks with testfor @e[type=Item] {NBT:"some long and nested NBT tag} and summon Item x y z {NBT:"the same long and nested NBT tag} isn't feasible (and won't even produce the correct result). No, I need another way.

I've been through the commands page on the Minecraft wiki, and nothing jumped out at me. The closest command I could see is the clone command, but that only works on blocks and tile entities (i.e. chests, furnaces, and the like). Also, I know I can edit the NBT data directly, but the point is to be able to do this while the game is running.

  • 1
    This is one of the few things that are impossible in Minecraft, sorry. – QbsidianH20 Mar 5 '15 at 0:46
  • Many people have said the same thing before about other things, and they were wrong. While it wouldn't surprise me that it can't be done, I'm not going to declare that it's impossible. – MBraedley Mar 5 '15 at 2:08
  • Well it could be kinda done actually for items but for all entities generally, I have no hope for finding method of doing this without using tons of command blocks unless Mojang adds some kind of entity cloning blocks. Also you can partially match nbt tag with scoreboard command and entitydata later accordingly. – QbsidianH20 Mar 5 '15 at 6:07
  • Possible duplicate of Can I /clone relative to entities, not the command block? – Riftcaster Jul 24 '16 at 12:33
  • Definitely not a duplicate. On the surface, they look the same, but they're talking about two very different things. – Frank Jul 24 '16 at 12:55
6

my thought is to use a structure block, to clone the entity

so how I'd do it, is spawn an armor stand (as a marker) in the location of the entity to be cloned, move the entity to a predefined location, clone it with the structure blocks, then move the entity back to the marker, and the new one where you want it, and remove the marker

I'll just show how to set up the structure blocks, I'll assume you know what your doing with the teleportation of the entities

so the cloning device should look like this:cloner first picture

cloner second picture (the command block in the second picture removes the stone block, when a redstone block is placed there)

so the structure block on the left is the saving block, you place the entities to be cloned on top of it enter image description here you must have "Include Entities" set to on, or it won't clone entities

the block on the right loads the entities (if you use redstone to save, it will only save to RAM, not your disk, which is good) enter image description here (the structure name doesn't have to be "cloner", but it just has to be the same in both blocks)

when you have the cloning device set up, you just have to teleport an entity on top of the structure block on the left, place a redstone block in place of the stone one, then one redstone tick later, you'll have two identical entities

necro edit: I though I'd clarify why there has to be a redstone tick between them, its because structure blocks are "slow" (compared to command blocks) and require time to save the structure data. A single redstone tick is simply easy to do, but it can be any amount of time, as long as it gives the structure blocks time to do their thing.

  • Hey Venya! :) This is an older question, so the user may-not be around to ask for a follow up. In a case like this, it would be better to give a full detail answer since it's just as likely that someone else is going to find this question and then your answer! (ie. imagine your post is talking to the whole audience instead of just the OP!) – NBN-Alex Oct 11 '16 at 23:40
  • good point, I'll update it then – Venya Oct 12 '16 at 11:28
  • Much better! Really great answer as well! – NBN-Alex Oct 12 '16 at 18:19
  • 1
    So, I guess I need to play around with structure blocks. – MBraedley Oct 12 '16 at 23:08
  • they can be very powerful, if used right. – Venya Oct 12 '16 at 23:38
2

One option would be to use armor stands or wither skulls to be placeholders and teleport the items back and forth.

Or you could place hoppers and chests with /setblock, copy the chest with clone and then take the items out with hoppers and droppers. I can't remember if you can break a chest so it drops items with /setblock. If you need to, use /entitydata to add/remove tags to stop items from despawning.

Hope that helps.

  • I didn't really make it explicit, but the idea was to avoid hoppers. They take time to fill chests, and I want to be able to do this in a few game ticks instead of a few seconds. – MBraedley Mar 4 '15 at 22:18
  • @MBraedley You can set the TransferCooldown tag of hopper to 0 to make item transportation 8 times faster than default but using stacked hopper minecart is faster I think. – QbsidianH20 Mar 5 '15 at 6:01
2

The only way to do this reliably currently is to teleport all the items to a hopper and put them into a chest. This can be speed up using the /blockdata command to negate the cooldown of the hopper, but will still take some time for a large number of items (320 ticks or 16 seconds for a full hopper). The chest can then be cloned to the required location, and using /setblock x y z air 0 destroy with the doTileDrops gamerule set to false, the contents but not the chest will be dropped.

0

I'm surprised no one suggested this, but if /teleporting rather than cloning is an option, you can target the items directly:

/scoreboard objectives add itemCount dummy (only execute once)

  1. /scoreboard players tag @r[type=Item] add item0 {OnGround:1b} (in a repeating or clocked command block with next commands chained)
  2. /scoreboard players set @e[tag=item0] itemCount 0
  3. /execute @e[tag=item0] ~ ~ ~ execute @e[r=3,type=Item,tag=!item0] ~ ~ ~ scoreboard players add @e[tag=item0,r=3] itemCount 1
  4. /execute @e[tag=item0,score_itemCount_min=5] teleport @e[type=Item,r=3] <x> <y> <z>

Here's what this is doing:

  1. pick a random item on the ground to check.
  2. set its score in the 'itemCount' objective to zero.
  3. have any items on the ground within 3 blocks of it add 1 to its score.
  4. if its score is over 4, teleport it and any other item within 3 blocks to the location x,y,z.

This will teleport any group of 5 or more distinct item stacks to that location. If you want to make sure not to teleport items that, say, popped out of a broken chest, you can also use the same method to check for a certain number of XPOrbs in addition to Items. I can't think of anything other than a player that might drop more than 3 or 4 xporbs and more than 5 items.

  • I don't think you understand the problem. You're not making a copy of the items, just moving them. – MBraedley Nov 15 '16 at 2:58
  • Yeah, that's why I mentioned teleporting vs cloning at the beginning. Unfortunately there just doesn't seem to be an entity cloning command at the moment, sorry. I can't think of anything else that doesn't involve hoppers. – TenNineAce Nov 15 '16 at 3:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.