Spaces:
Build error
Build error
File size: 3,415 Bytes
d46f4a3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
package net.minecraft.commands.arguments.blocks;
import java.util.Set;
import java.util.function.Predicate;
import javax.annotation.Nullable;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtUtils;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.pattern.BlockInWorld;
import net.minecraft.world.level.block.state.properties.Property;
public class BlockInput implements Predicate<BlockInWorld> {
private final BlockState state;
private final Set<Property<?>> properties;
@Nullable
private final CompoundTag tag;
public BlockInput(BlockState p_114666_, Set<Property<?>> p_114667_, @Nullable CompoundTag p_114668_) {
this.state = p_114666_;
this.properties = p_114667_;
this.tag = p_114668_;
}
public BlockState getState() {
return this.state;
}
public Set<Property<?>> getDefinedProperties() {
return this.properties;
}
public boolean test(BlockInWorld p_114675_) {
BlockState blockstate = p_114675_.getState();
if (!blockstate.is(this.state.getBlock())) {
return false;
} else {
for (Property<?> property : this.properties) {
if (blockstate.getValue(property) != this.state.getValue(property)) {
return false;
}
}
if (this.tag == null) {
return true;
} else {
BlockEntity blockentity = p_114675_.getEntity();
return blockentity != null && NbtUtils.compareNbt(this.tag, blockentity.saveWithFullMetadata(p_114675_.getLevel().registryAccess()), true);
}
}
}
public boolean test(ServerLevel p_173524_, BlockPos p_173525_) {
return this.test(new BlockInWorld(p_173524_, p_173525_, false));
}
public boolean place(ServerLevel p_114671_, BlockPos p_114672_, int p_114673_) {
BlockState blockstate = Block.updateFromNeighbourShapes(this.state, p_114671_, p_114672_);
if (blockstate.isAir()) {
blockstate = this.state;
}
blockstate = this.overwriteWithDefinedProperties(blockstate);
if (!p_114671_.setBlock(p_114672_, blockstate, p_114673_)) {
return false;
} else {
if (this.tag != null) {
BlockEntity blockentity = p_114671_.getBlockEntity(p_114672_);
if (blockentity != null) {
blockentity.loadWithComponents(this.tag, p_114671_.registryAccess());
}
}
return true;
}
}
private BlockState overwriteWithDefinedProperties(BlockState p_376464_) {
if (p_376464_ == this.state) {
return p_376464_;
} else {
for (Property<?> property : this.properties) {
p_376464_ = copyProperty(p_376464_, this.state, property);
}
return p_376464_;
}
}
private static <T extends Comparable<T>> BlockState copyProperty(BlockState p_377223_, BlockState p_377871_, Property<T> p_378516_) {
return p_377223_.setValue(p_378516_, p_377871_.getValue(p_378516_));
}
} |