mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-10-17 15:07:38 +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