52 lines
2 KiB
Java
52 lines
2 KiB
Java
package net.minecraft.world;
|
|
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.core.NonNullList;
|
|
import net.minecraft.world.entity.Entity;
|
|
import net.minecraft.world.entity.EntityType;
|
|
import net.minecraft.world.entity.item.ItemEntity;
|
|
import net.minecraft.world.item.ItemStack;
|
|
import net.minecraft.world.level.Level;
|
|
import net.minecraft.world.level.block.state.BlockState;
|
|
|
|
public class Containers {
|
|
public static void dropContents(Level level, BlockPos pos, Container inventory) {
|
|
dropContents(level, pos.getX(), pos.getY(), pos.getZ(), inventory);
|
|
}
|
|
|
|
public static void dropContents(Level level, Entity entityAt, Container inventory) {
|
|
dropContents(level, entityAt.getX(), entityAt.getY(), entityAt.getZ(), inventory);
|
|
}
|
|
|
|
private static void dropContents(Level level, double x, double y, double z, Container inventory) {
|
|
for (int i = 0; i < inventory.getContainerSize(); i++) {
|
|
dropItemStack(level, x, y, z, inventory.getItem(i));
|
|
}
|
|
}
|
|
|
|
public static void dropContents(Level level, BlockPos pos, NonNullList<ItemStack> stackList) {
|
|
stackList.forEach(itemStack -> dropItemStack(level, pos.getX(), pos.getY(), pos.getZ(), itemStack));
|
|
}
|
|
|
|
public static void dropItemStack(Level level, double x, double y, double z, ItemStack stack) {
|
|
double d = EntityType.ITEM.getWidth();
|
|
double e = 1.0 - d;
|
|
double f = d / 2.0;
|
|
double g = Math.floor(x) + level.random.nextDouble() * e + f;
|
|
double h = Math.floor(y) + level.random.nextDouble() * e;
|
|
double i = Math.floor(z) + level.random.nextDouble() * e + f;
|
|
|
|
while (!stack.isEmpty()) {
|
|
ItemEntity itemEntity = new ItemEntity(level, g, h, i, stack.split(level.random.nextInt(21) + 10));
|
|
float j = 0.05F;
|
|
itemEntity.setDeltaMovement(
|
|
level.random.triangle(0.0, 0.11485000171139836), level.random.triangle(0.2, 0.11485000171139836), level.random.triangle(0.0, 0.11485000171139836)
|
|
);
|
|
level.addFreshEntity(itemEntity);
|
|
}
|
|
}
|
|
|
|
public static void updateNeighboursAfterDestroy(BlockState state, Level level, BlockPos pos) {
|
|
level.updateNeighbourForOutputSignal(pos, state.getBlock());
|
|
}
|
|
}
|