mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-10-31 13:42:59 +00:00 
			
		
		
		
	Always expose nbt from turtle.getItemDetail
- Document the thread safety of DetailRegistry a little better. - Turtles now duplicate their inventory to the "previous inventory" (now called inventorySnapshot) immediately, rather than when the block is ticked. This is slightly more resource intensive, but I don't think it's so bad we need to worry. - As this snapshot is now always up-to-date, we can read it from the computer thread. Given the item is immutable, it's safe to read NBT from it. _Technically_ this is not safe under the Java memory model, but in practice I don't think we'll observe the wrong value. Closes #1306
This commit is contained in:
		| @@ -32,6 +32,8 @@ public interface DetailRegistry<T> { | ||||
|     /** | ||||
|      * Compute basic details about an object. This is cheaper than computing all details operation, and so is suitable | ||||
|      * for when you need to compute the details for a large number of values. | ||||
|      * <p> | ||||
|      * This method <em>MAY</em> be thread safe: consult the instance's documentation for details. | ||||
|      * | ||||
|      * @param object The object to get details for. | ||||
|      * @return The basic details. | ||||
| @@ -40,6 +42,8 @@ public interface DetailRegistry<T> { | ||||
| 
 | ||||
|     /** | ||||
|      * Compute all details about an object, using {@link #getBasicDetails(Object)} and any registered providers. | ||||
|      * <p> | ||||
|      * This method is <em>NOT</em> thread safe. It should only be called from the computer thread. | ||||
|      * | ||||
|      * @param object The object to get details for. | ||||
|      * @return The computed details. | ||||
|   | ||||
| @@ -15,12 +15,17 @@ import net.minecraft.world.level.block.Block; | ||||
| public class VanillaDetailRegistries { | ||||
|     /** | ||||
|      * Provides details for {@link ItemStack}s. | ||||
|      * <p> | ||||
|      * This instance's {@link DetailRegistry#getBasicDetails(Object)} is thread safe (assuming the stack is immutable) | ||||
|      * and may be called from the computer thread. | ||||
|      */ | ||||
|     public static final DetailRegistry<ItemStack> ITEM_STACK = ComputerCraftAPIService.get().getItemStackDetailRegistry(); | ||||
| 
 | ||||
|     /** | ||||
|      * Provides details for {@link BlockReference}, a reference to a {@link Block} in the world. | ||||
|      * <p> | ||||
|      * This instance's {@link DetailRegistry#getBasicDetails(Object)} is thread safe and may be called from the computer | ||||
|      * thread. | ||||
|      */ | ||||
|     public static final DetailRegistry<BlockReference> BLOCK_IN_WORLD = ComputerCraftAPIService.get().getBlockInWorldDetailRegistry(); | ||||
| 
 | ||||
| } | ||||
|   | ||||
| @@ -15,6 +15,7 @@ import net.minecraft.nbt.CompoundTag; | ||||
| import net.minecraft.world.Container; | ||||
| import net.minecraft.world.level.Level; | ||||
| import net.minecraft.world.phys.Vec3; | ||||
| import org.jetbrains.annotations.ApiStatus; | ||||
| 
 | ||||
| import javax.annotation.Nullable; | ||||
| 
 | ||||
| @@ -24,6 +25,7 @@ import javax.annotation.Nullable; | ||||
|  * This should not be implemented by your classes. Do not interact with turtles except via this interface and | ||||
|  * {@link ITurtleUpgrade}. | ||||
|  */ | ||||
| @ApiStatus.NonExtendable | ||||
| public interface ITurtleAccess { | ||||
|     /** | ||||
|      * Returns the world in which the turtle resides. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jonathan Coates
					Jonathan Coates