Mirror von
https://github.com/IntellectualSites/FastAsyncWorldEdit.git
synchronisiert 2024-11-20 01:40:06 +01:00
fix: correctly check for properties in thaw/snow (#2976)
Dieser Commit ist enthalten in:
Ursprung
b198a75011
Commit
d52e5b0970
@ -2788,7 +2788,7 @@ public class EditSession extends PassthroughExtent implements AutoCloseable {
|
||||
if (setBlock(mutable, air)) {
|
||||
if (y > getMinY()) {
|
||||
BlockState block = getBlock(mutable2);
|
||||
if (block.getStates().containsKey(snowy)) {
|
||||
if (block.getBlockType().hasProperty(snowy)) {
|
||||
if (setBlock(mutable2, block.with(snowy, false))) {
|
||||
affected++;
|
||||
}
|
||||
|
@ -26,11 +26,12 @@ import com.sk89q.worldedit.math.BlockVector3;
|
||||
import com.sk89q.worldedit.registry.state.BooleanProperty;
|
||||
import com.sk89q.worldedit.registry.state.EnumProperty;
|
||||
import com.sk89q.worldedit.registry.state.Property;
|
||||
import com.sk89q.worldedit.world.block.BlockCategories;
|
||||
import com.sk89q.worldedit.world.block.BlockState;
|
||||
import com.sk89q.worldedit.world.block.BlockType;
|
||||
import com.sk89q.worldedit.world.block.BlockTypes;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
public class SnowSimulator implements LayerFunction {
|
||||
|
||||
@ -120,22 +121,19 @@ public class SnowSimulator implements LayerFunction {
|
||||
abovePosition) > 10) {
|
||||
return false;
|
||||
} else if (!block.getBlockType().getMaterial().isFullCube()) {
|
||||
Map<Property<?>, Object> states = block.getStates();
|
||||
if (states.containsKey(slab) && block.getState(slab).equalsIgnoreCase("bottom")) {
|
||||
BlockType type = block.getBlockType();
|
||||
if (type.hasProperty(slab) && block.getState(slab).equalsIgnoreCase("bottom")) {
|
||||
return false;
|
||||
} else if (states.containsKey(trapdoorOpen) && states.containsKey(trapdoor) && (block.getState(trapdoorOpen)
|
||||
|| block.getState(trapdoor).equalsIgnoreCase("bottom"))) {
|
||||
} else if ((type.hasProperty(trapdoorOpen) && block.getState(trapdoorOpen)) ||
|
||||
(type.hasProperty(trapdoor) && block.getState(trapdoor).equalsIgnoreCase("bottom"))) {
|
||||
return false;
|
||||
} else if (states.containsKey(stair) && block.getState(stair).equalsIgnoreCase("bottom")) {
|
||||
} else if (type.hasProperty(stair) && block.getState(stair).equalsIgnoreCase("bottom")) {
|
||||
return false;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
//FAWE end
|
||||
} else if (!block.getBlockType().id().toLowerCase(Locale.ROOT).contains("ice") && block
|
||||
.getBlockType()
|
||||
.getMaterial()
|
||||
.isTranslucent()) {
|
||||
} else if (!BlockCategories.SNOW_LAYER_CAN_SURVIVE_ON.contains(block.getBlockType())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -144,14 +142,14 @@ public class SnowSimulator implements LayerFunction {
|
||||
// We've hit the highest layer (If it doesn't contain current + 2 it means it's 1 away from full)
|
||||
if (!snowLayersProperty.getValues().contains(currentHeight + 2)) {
|
||||
if (this.extent.setBlock(abovePosition, snowBlock)) {
|
||||
if (block.getStates().containsKey(snowy)) {
|
||||
if (block.getBlockType().hasProperty(snowy)) {
|
||||
this.extent.setBlock(position, block.with(snowy, true));
|
||||
}
|
||||
this.affected++;
|
||||
}
|
||||
} else {
|
||||
if (this.extent.setBlock(abovePosition, above.with(snowLayersProperty, currentHeight + 1))) {
|
||||
if (block.getStates().containsKey(snowy)) {
|
||||
if (block.getBlockType().hasProperty(snowy)) {
|
||||
this.extent.setBlock(position, block.with(snowy, true));
|
||||
}
|
||||
this.affected++;
|
||||
@ -160,7 +158,7 @@ public class SnowSimulator implements LayerFunction {
|
||||
return false;
|
||||
}
|
||||
if (this.extent.setBlock(abovePosition, snow)) {
|
||||
if (block.getStates().containsKey(snowy)) {
|
||||
if (block.getBlockType().hasProperty(snowy)) {
|
||||
this.extent.setBlock(position, block.with(snowy, true));
|
||||
}
|
||||
this.affected++;
|
||||
|
@ -140,10 +140,10 @@ public abstract class AbstractProperty<T> implements Property<T> {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (!(obj instanceof Property)) {
|
||||
if (!(obj instanceof Property property)) {
|
||||
return false;
|
||||
}
|
||||
return getName().equals(((Property<?>) obj).getName());
|
||||
return getName().equals(property.getName()) && property.getValues().equals(getValues());
|
||||
}
|
||||
//FAWE end
|
||||
}
|
||||
|
@ -366,7 +366,7 @@ public class BlockState implements BlockStateHolder<BlockState>, Pattern {
|
||||
BlockState newState = this;
|
||||
for (Property<?> prop : ot.getProperties()) {
|
||||
PropertyKey key = prop.getKey();
|
||||
if (blockType.hasPropertyOfType(key, prop.getClass())) {
|
||||
if (blockType.hasProperty(prop)) {
|
||||
newState = newState.with(key, other.getState(key));
|
||||
}
|
||||
}
|
||||
|
@ -248,18 +248,14 @@ public class BlockType implements Keyed, Pattern {
|
||||
}
|
||||
|
||||
/**
|
||||
* {@return whether this block type has a property with given key of the given type}
|
||||
* {@return whether this block type has a given property}
|
||||
*
|
||||
* @param key the key identifying the property
|
||||
* @param propertyType the expected type of the property
|
||||
* @param property the expected property
|
||||
* @since TODO
|
||||
*/
|
||||
public boolean hasPropertyOfType(PropertyKey key, Class<?> propertyType) {
|
||||
int ordinal = key.getId();
|
||||
Property<?> property;
|
||||
return this.settings.propertiesMapArr.length > ordinal
|
||||
&& (property = this.settings.propertiesMapArr[ordinal]) != null
|
||||
&& property.getClass() == propertyType;
|
||||
public boolean hasProperty(Property<?> property) {
|
||||
int ordinal = property.getKey().getId();
|
||||
return this.settings.propertiesMapArr.length > ordinal && property.equals(this.settings.propertiesMapArr[ordinal]);
|
||||
}
|
||||
|
||||
public <V> Property<V> getProperty(PropertyKey key) {
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren