Skip to content

Commit

Permalink
代码格式化
Browse files Browse the repository at this point in the history
  • Loading branch information
ZhuRuoLing committed Apr 17, 2024
1 parent acd36fd commit 72f7ece
Showing 1 changed file with 121 additions and 71 deletions.
192 changes: 121 additions & 71 deletions common/src/main/java/dev/dubhe/anvilcraft/event/AnvilEventListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public void onLand(@NotNull AnvilFallOnLandEvent event) {
BlockPos belowPos = pos.below();
BlockState state = level.getBlockState(belowPos);
if (state.is(Blocks.REDSTONE_BLOCK)) redstoneEmp(level, belowPos, event.getFallDistance());
if (state.is(Blocks.SPAWNER)) hitSpawner(level, belowPos, state, event.getFallDistance());
if (state.is(Blocks.SPAWNER)) hitSpawner(level, belowPos, event.getFallDistance());
belowPos = belowPos.below();
state = level.getBlockState(belowPos);
if (state.is(Blocks.STONECUTTER)) brokeBlock(level, belowPos.above(), event);
Expand All @@ -74,95 +74,145 @@ public void onLand(@NotNull AnvilFallOnLandEvent event) {
optional.ifPresent(anvilRecipe -> anvilProcess(anvilRecipe, container, event));
}

private void hitSpawner(Level level, BlockPos pos, BlockState state, float fallDistance) {
private void hitSpawner(Level level, BlockPos pos, float fallDistance) {
if (level instanceof ServerLevel serverLevel) {
RandomSource randomSource = serverLevel.getRandom();
float f = randomSource.nextFloat();
System.out.println("f = " + f);
System.out.println("(1 / fallDistance) = " + (1 / fallDistance));
if (fallDistance < 1){
if (fallDistance < 1) {
fallDistance = 1.1f;
}
if (f <= (1 / fallDistance)){
if (f <= (1 / fallDistance)) {
return;
}
if (level.getBlockEntity(pos) instanceof SpawnerBlockEntity blockEntity) {

BaseSpawner spawner = blockEntity.getSpawner();
SpawnData spawnData = ((BaseSpawnerAccessor) spawner).invoker$getOrCreateNextSpawnData(level, randomSource, pos);
for (int i = 0; i < ((BaseSpawnerAccessor) spawner).getSpawnCount(); ++i) {
CompoundTag compoundTag = spawnData.getEntityToSpawn();
Optional<EntityType<?>> optional = EntityType.by(compoundTag);
if (optional.isEmpty()) {
return;
}
BaseSpawnerAccessor accessor = (BaseSpawnerAccessor) spawner;
SpawnData spawnData = accessor.invoker$getOrCreateNextSpawnData(level, randomSource, pos);
spawnEntities(spawnData, serverLevel, pos, randomSource, accessor);
}
}
}

ListTag listTag = compoundTag.getList("Pos", 6);
int size = listTag.size();
double x, y, z;
if (size >= 1) {
x = listTag.getDouble(0);
} else {
x = (double) pos.getX() + (randomSource.nextDouble() - randomSource.nextDouble()) * ((BaseSpawnerAccessor) spawner).getSpawnRange() + 0.5;
}
if (size >= 2) {
y = listTag.getDouble(1);
} else {
y = pos.getY() + randomSource.nextInt(3) - 1;
}
if (size >= 3) {
z = listTag.getDouble(2);
} else {
z = (double) pos.getZ() + (randomSource.nextDouble() - randomSource.nextDouble()) * ((BaseSpawnerAccessor) spawner).getSpawnRange() + 0.5;
}
if (serverLevel.noCollision(optional.get().getAABB(x, y, z))) {
BlockPos blockPos = BlockPos.containing(x, y, z);
if (spawnData.getCustomSpawnRules().isPresent()) {
if (!optional.get().getCategory().isFriendly() && serverLevel.getDifficulty() == Difficulty.PEACEFUL) {
continue;
}
private void spawnEntities(
SpawnData spawnData,
ServerLevel serverLevel,
BlockPos pos,
RandomSource randomSource,
BaseSpawnerAccessor accessor
) {
for (int i = 0; i < accessor.getSpawnCount(); ++i) {
CompoundTag compoundTag = spawnData.getEntityToSpawn();
Optional<EntityType<?>> optional = EntityType.by(compoundTag);
if (optional.isEmpty()) {
return;
}

SpawnData.CustomSpawnRules customSpawnRules = spawnData.getCustomSpawnRules().get();
if (!customSpawnRules.blockLightLimit().isValueInRange(serverLevel.getBrightness(LightLayer.BLOCK, blockPos)) || !customSpawnRules.skyLightLimit().isValueInRange(serverLevel.getBrightness(LightLayer.SKY, blockPos))) {
continue;
}
} else if (!SpawnPlacements.checkSpawnRules(optional.get(), serverLevel, MobSpawnType.SPAWNER, blockPos, serverLevel.getRandom())) {
continue;
}
ListTag listTag = compoundTag.getList("Pos", 6);
int size = listTag.size();
double x = 0;
double y = 0;
double z = 0;
if (size >= 1) {
x = listTag.getDouble(0);
} else {
x = (double) pos.getX()
+ (randomSource.nextDouble() - randomSource.nextDouble())
* accessor.getSpawnRange() + 0.5;
}
if (size >= 2) {
y = listTag.getDouble(1);
} else {
y = pos.getY() + randomSource.nextInt(3) - 1;
}
if (size >= 3) {
z = listTag.getDouble(2);
} else {
z = (double) pos.getZ()
+ (randomSource.nextDouble() - randomSource.nextDouble())
* accessor.getSpawnRange() + 0.5;
}
if (serverLevel.noCollision(optional.get().getAABB(x, y, z))) {
BlockPos blockPos = BlockPos.containing(x, y, z);
if (spawnData.getCustomSpawnRules().isPresent()) {
if (!optional.get().getCategory().isFriendly()
&& serverLevel.getDifficulty() == Difficulty.PEACEFUL
) {
continue;
}

Entity entity = EntityType.loadEntityRecursive(compoundTag, serverLevel, it -> {
it.moveTo(x, y, z, it.getYRot(), it.getXRot());
return it;
});
if (entity == null) {
return;
}
SpawnData.CustomSpawnRules customSpawnRules = spawnData.getCustomSpawnRules().get();
if (!customSpawnRules.blockLightLimit()
.isValueInRange(serverLevel.getBrightness(LightLayer.BLOCK, blockPos))
|| !customSpawnRules.skyLightLimit()
.isValueInRange(serverLevel.getBrightness(LightLayer.SKY, blockPos))) {
continue;
}
} else if (!SpawnPlacements.checkSpawnRules(
optional.get(),
serverLevel,
MobSpawnType.SPAWNER,
blockPos,
serverLevel.getRandom()
)) {
continue;
}

int k = serverLevel.getEntitiesOfClass(entity.getClass(), (new AABB(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)).inflate(((BaseSpawnerAccessor) spawner).getSpawnRange())).size();
if (k >= ((BaseSpawnerAccessor) spawner).getMaxNearbyEntities()) {
return;
}
double finalX = x;
double finalY = y;
double finalZ = z;
Entity entity = EntityType.loadEntityRecursive(compoundTag, serverLevel, it -> {
it.moveTo(finalX, finalY, finalZ, it.getYRot(), it.getXRot());
return it;
});
if (entity == null) {
return;
}
AABB boundingBox = new AABB(
pos.getX(),
pos.getY(),
pos.getZ(),
pos.getX() + 1,
pos.getY() + 1,
pos.getZ() + 1
);
int k = serverLevel.getEntitiesOfClass(
entity.getClass(),
boundingBox.inflate(accessor.getSpawnRange())
).size();
if (k >= accessor.getMaxNearbyEntities()) {
return;
}

entity.moveTo(entity.getX(), entity.getY(), entity.getZ(), randomSource.nextFloat() * 360.0F, 0.0F);
if (entity instanceof Mob mob) {
if (spawnData.getCustomSpawnRules().isEmpty() && !mob.checkSpawnRules(serverLevel, MobSpawnType.SPAWNER) || !mob.checkSpawnObstruction(serverLevel)) {
continue;
}
entity.moveTo(entity.getX(), entity.getY(), entity.getZ(), randomSource.nextFloat() * 360.0F, 0.0F);
if (entity instanceof Mob mob) {
if (spawnData.getCustomSpawnRules().isEmpty()
&& !mob.checkSpawnRules(serverLevel, MobSpawnType.SPAWNER)
|| !mob.checkSpawnObstruction(serverLevel)) {
continue;
}

if (spawnData.getEntityToSpawn().size() == 1 && spawnData.getEntityToSpawn().contains("id", 8)) {
((Mob) entity).finalizeSpawn(serverLevel, serverLevel.getCurrentDifficultyAt(entity.blockPosition()), MobSpawnType.SPAWNER, null, null);
}
}
if (spawnData.getEntityToSpawn().size() == 1 && spawnData.getEntityToSpawn().contains("id", 8)) {
((Mob) entity).finalizeSpawn(
serverLevel,
serverLevel.getCurrentDifficultyAt(entity.blockPosition()),
MobSpawnType.SPAWNER,
null,
null
);
}
}

if (!serverLevel.tryAddFreshEntityWithPassengers(entity)) {
return;
}
if (!serverLevel.tryAddFreshEntityWithPassengers(entity)) {
return;
}

serverLevel.levelEvent(2004, pos, 0);
serverLevel.gameEvent(entity, GameEvent.ENTITY_PLACE, blockPos);
if (entity instanceof Mob) {
((Mob) entity).spawnAnim();
}
}
serverLevel.levelEvent(2004, pos, 0);
serverLevel.gameEvent(entity, GameEvent.ENTITY_PLACE, blockPos);
if (entity instanceof Mob) {
((Mob) entity).spawnAnim();
}
}
}
Expand Down

0 comments on commit 72f7ece

Please sign in to comment.