use of net.minecraft.world.level.entity.PersistentEntitySectionManager in project RoseStacker by Rosewood-Development.
the class NMSHandlerImpl method createEntityFromNBT.
@Override
public LivingEntity createEntityFromNBT(StackedEntityDataEntry<?> serialized, Location location, boolean addToWorld, EntityType entityType) {
try {
CompoundTag nbt = (CompoundTag) serialized.get();
ListTag positionTagList = nbt.getList("Pos", Tag.TAG_DOUBLE);
if (positionTagList == null)
positionTagList = new ListTag();
this.setTag(positionTagList, 0, DoubleTag.valueOf(location.getX()));
this.setTag(positionTagList, 1, DoubleTag.valueOf(location.getY()));
this.setTag(positionTagList, 2, DoubleTag.valueOf(location.getZ()));
nbt.put("Pos", positionTagList);
ListTag rotationTagList = nbt.getList("Rotation", Tag.TAG_FLOAT);
if (rotationTagList == null)
rotationTagList = new ListTag();
this.setTag(rotationTagList, 0, FloatTag.valueOf(location.getYaw()));
this.setTag(rotationTagList, 1, FloatTag.valueOf(location.getPitch()));
nbt.put("Rotation", rotationTagList);
// Reset the UUID to resolve possible duplicates
nbt.putUUID("UUID", UUID.randomUUID());
// Causes issues if this value is parsed async
nbt.remove("AngryAt");
Optional<net.minecraft.world.entity.EntityType<?>> optionalEntity = net.minecraft.world.entity.EntityType.byString(entityType.getKey().getKey());
if (optionalEntity.isPresent()) {
ServerLevel world = ((CraftWorld) location.getWorld()).getHandle();
Entity entity = this.createCreature(optionalEntity.get(), world, nbt, null, null, new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()), MobSpawnType.COMMAND);
if (entity == null)
throw new NullPointerException("Unable to create entity from NBT");
// Load NBT
entity.load(nbt);
if (addToWorld) {
PersistentEntitySectionManager<Entity> entityManager = (PersistentEntitySectionManager<Entity>) field_ServerLevel_entityManager.get(world);
entityManager.addNewEntity(entity);
entity.invulnerableTime = 0;
}
return (LivingEntity) entity.getBukkitEntity();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
use of net.minecraft.world.level.entity.PersistentEntitySectionManager in project RoseStacker by Rosewood-Development.
the class NMSHandlerImpl method createEntityFromNBT.
@Override
public LivingEntity createEntityFromNBT(StackedEntityDataEntry<?> serialized, Location location, boolean addToWorld, EntityType entityType) {
try {
CompoundTag nbt = (CompoundTag) serialized.get();
ListTag positionTagList = nbt.getList("Pos", Tag.TAG_DOUBLE);
if (positionTagList == null)
positionTagList = new ListTag();
this.setTag(positionTagList, 0, DoubleTag.valueOf(location.getX()));
this.setTag(positionTagList, 1, DoubleTag.valueOf(location.getY()));
this.setTag(positionTagList, 2, DoubleTag.valueOf(location.getZ()));
nbt.put("Pos", positionTagList);
ListTag rotationTagList = nbt.getList("Rotation", Tag.TAG_FLOAT);
if (rotationTagList == null)
rotationTagList = new ListTag();
this.setTag(rotationTagList, 0, FloatTag.valueOf(location.getYaw()));
this.setTag(rotationTagList, 1, FloatTag.valueOf(location.getPitch()));
nbt.put("Rotation", rotationTagList);
// Reset the UUID to resolve possible duplicates
nbt.putUUID("UUID", UUID.randomUUID());
// Causes issues if this value is parsed async
nbt.remove("AngryAt");
Optional<net.minecraft.world.entity.EntityType<?>> optionalEntity = net.minecraft.world.entity.EntityType.byString(entityType.getKey().getKey());
if (optionalEntity.isPresent()) {
ServerLevel world = ((CraftWorld) location.getWorld()).getHandle();
Entity entity = this.createCreature(optionalEntity.get(), world, nbt, null, null, new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()), MobSpawnType.COMMAND);
if (entity == null)
throw new NullPointerException("Unable to create entity from NBT");
// Load NBT
entity.load(nbt);
if (addToWorld) {
PersistentEntitySectionManager<Entity> entityManager = (PersistentEntitySectionManager<Entity>) field_ServerLevel_entityManager.get(world);
entityManager.addNewEntity(entity);
entity.invulnerableTime = 0;
}
return (LivingEntity) entity.getBukkitEntity();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
use of net.minecraft.world.level.entity.PersistentEntitySectionManager in project Insights by InsightsPlugin.
the class ChunkContainer method get.
@Override
public DistributionStorage get() {
ChunkVector min = cuboid.getMin();
ChunkVector max = cuboid.getMax();
int minX = min.getX();
int maxX = max.getX();
int minZ = min.getZ();
int maxZ = max.getZ();
int blockMinY = Math.max(min.getY(), 0);
int blockMaxY = Math.abs(Math.min(min.getY(), 0)) + max.getY();
ServerLevel serverLevel = ((CraftWorld) world).getHandle();
if (options.materials()) {
LevelChunkSection[] chunkSections;
try {
chunkSections = getChunkSections();
} catch (IOException ex) {
throw new ChunkIOException(ex);
}
int minSectionY = blockMinY >> 4;
int maxSectionY = blockMaxY >> 4;
for (int sectionY = minSectionY; sectionY <= maxSectionY; sectionY++) {
int minY = sectionY == minSectionY ? blockMinY & 15 : 0;
int maxY = sectionY == maxSectionY ? blockMaxY & 15 : 15;
LevelChunkSection section = chunkSections[sectionY];
if (section == null) {
// Section is empty, count everything as air
long count = (maxX - minX + 1L) * (maxY - minY + 1L) * (maxZ - minZ + 1L);
materialMap.merge(Material.AIR, count, Long::sum);
} else if (minX == 0 && maxX == 15 && minY == 0 && maxY == 15 && minZ == 0 && maxZ == 15) {
// Section can be counted as a whole
section.getStates().count((state, count) -> {
try {
materialMap.merge(CraftMagicNumbers.getMaterial(state.getBlock()), (long) count, Long::sum);
} catch (Throwable th) {
th.printStackTrace();
}
});
} else {
// Section must be scanned block by block
for (int x = minX; x <= maxX; x++) {
for (int y = minY; y <= maxY; y++) {
for (int z = minZ; z <= maxZ; z++) {
materialMap.merge(CraftMagicNumbers.getMaterial(section.getBlockState(x, y, z).getBlock()), 1L, Long::sum);
}
}
}
}
}
}
if (options.entities()) {
PersistentEntitySectionManager<Entity> entityManager = serverLevel.entityManager;
long chunkKey = getChunkKey();
final Stream<Entity> entityStream;
if (entityManager.areEntitiesLoaded(chunkKey)) {
EntitySectionStorage<Entity> sectionStorage;
try {
sectionStorage = RPersistentEntitySectionManager.getSectionStorage(entityManager);
} catch (Throwable th) {
throw new ChunkReflectionException(th);
}
entityStream = sectionStorage.getExistingSectionsInChunk(chunkKey).flatMap(EntitySection::getEntities);
} else {
EntityPersistentStorage<Entity> permanentStorage;
try {
permanentStorage = RPersistentEntitySectionManager.getPermanentStorage(entityManager);
} catch (Throwable th) {
throw new ChunkReflectionException(th);
}
entityStream = permanentStorage.loadEntities(new ChunkPos(chunkX, chunkZ)).join().getEntities();
}
entityStream.filter(entity -> {
int x = entity.getBlockX() & 15;
int y = entity.getBlockY();
int z = entity.getBlockZ() & 15;
return minX <= x && x <= maxX && blockMinY <= y && y <= blockMaxY && minZ <= z && z <= maxZ;
}).forEach(entity -> entityMap.merge(entity.getBukkitEntity().getType(), 1L, Long::sum));
}
return DistributionStorage.of(materialMap, entityMap);
}
use of net.minecraft.world.level.entity.PersistentEntitySectionManager in project RoseStacker by Rosewood-Development.
the class NMSHandlerImpl method createEntityFromNBT.
@Override
public LivingEntity createEntityFromNBT(StackedEntityDataEntry<?> serialized, Location location, boolean addToWorld, EntityType entityType) {
try {
CompoundTag nbt = (CompoundTag) serialized.get();
ListTag positionTagList = nbt.getList("Pos", Tag.TAG_DOUBLE);
if (positionTagList == null)
positionTagList = new ListTag();
this.setTag(positionTagList, 0, DoubleTag.valueOf(location.getX()));
this.setTag(positionTagList, 1, DoubleTag.valueOf(location.getY()));
this.setTag(positionTagList, 2, DoubleTag.valueOf(location.getZ()));
nbt.put("Pos", positionTagList);
ListTag rotationTagList = nbt.getList("Rotation", Tag.TAG_FLOAT);
if (rotationTagList == null)
rotationTagList = new ListTag();
this.setTag(rotationTagList, 0, FloatTag.valueOf(location.getYaw()));
this.setTag(rotationTagList, 1, FloatTag.valueOf(location.getPitch()));
nbt.put("Rotation", rotationTagList);
// Reset the UUID to resolve possible duplicates
nbt.putUUID("UUID", UUID.randomUUID());
// Causes issues if this value is parsed async
nbt.remove("AngryAt");
Optional<net.minecraft.world.entity.EntityType<?>> optionalEntity = net.minecraft.world.entity.EntityType.byString(entityType.getKey().getKey());
if (optionalEntity.isPresent()) {
ServerLevel world = ((CraftWorld) location.getWorld()).getHandle();
Entity entity = this.createCreature(optionalEntity.get(), world, nbt, null, null, new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()), MobSpawnType.COMMAND);
if (entity == null)
throw new NullPointerException("Unable to create entity from NBT");
// Load NBT
entity.load(nbt);
if (addToWorld) {
PersistentEntitySectionManager<Entity> entityManager = (PersistentEntitySectionManager<Entity>) field_ServerLevel_entityManager.get(world);
entityManager.addNewEntity(entity);
entity.invulnerableTime = 0;
}
return (LivingEntity) entity.getBukkitEntity();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
Aggregations